Compare commits
1 commit
master
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
|
002a8fe0fa |
1
.gitignore
vendored
|
@ -1,6 +1,5 @@
|
|||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
count.db
|
||||
/.history
|
||||
|
||||
# dependencies
|
||||
|
|
11
Dockerfile
|
@ -1,11 +0,0 @@
|
|||
FROM node:14
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN yarn install
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
CMD ["yarn", "start"]
|
29
Readme.md
|
@ -1,13 +1,12 @@
|
|||
# Moe-Counter
|
||||
# Moe-counter
|
||||
|
||||
![Moe-Counter](https://count.ayaya.beauty/get/@Moe-counter-git.zzls)
|
||||
多种风格可选的萌萌计数器
|
||||
|
||||
![Moe-counter](https://count.getloli.com/get/@Moe-counter.github)
|
||||
|
||||
<details>
|
||||
<summary>More theme</summary>
|
||||
|
||||
##### asoul
|
||||
![asoul](https://count.getloli.com/get/@demo?theme=asoul)
|
||||
|
||||
##### moebooru
|
||||
![moebooru](https://count.getloli.com/get/@demo?theme=moebooru)
|
||||
|
||||
|
@ -24,33 +23,32 @@
|
|||
|
||||
### Install
|
||||
|
||||
#### Run on Replit
|
||||
#### Run on Repl.it
|
||||
|
||||
- Open the url [https://replit.com/@journeyad/Moe-Counter](https://replit.com/@journeyad/Moe-Counter)
|
||||
- Open the url [https://repl.it/@journeyad/Moe-counter](https://repl.it/@journeyad/Moe-counter)
|
||||
- Just hit the **Fork** button
|
||||
- And hit the **Run** button
|
||||
|
||||
#### Deploying on your own server
|
||||
|
||||
```shell
|
||||
$ git clone https://github.com/journey-ad/Moe-Counter.git
|
||||
$ cd Moe-Counter
|
||||
$ git clone https://github.com/journey-ad/Moe-counter.git
|
||||
$ cd Moe-counter
|
||||
$ yarn install
|
||||
|
||||
$ yarn start
|
||||
```
|
||||
|
||||
### Configuration
|
||||
### Confignation
|
||||
|
||||
`config.yml`
|
||||
|
||||
```yaml
|
||||
app:
|
||||
# site: https://count.getloli.com # your website
|
||||
port: 3000
|
||||
|
||||
db:
|
||||
type: sqlite # sqlite or mongodb
|
||||
type: mongodb # sqlite or mongodb
|
||||
```
|
||||
|
||||
If you use mongodb, you need to specify the environment variable `DB_URL`
|
||||
|
@ -60,7 +58,7 @@ If you use mongodb, you need to specify the environment variable `DB_URL`
|
|||
export DB_URL=mongodb+srv://account:passwd@***.***.***.mongodb.net/db_count
|
||||
```
|
||||
|
||||
replit can use Secrets, [documentation](https://docs.replit.com/programming-ide/storing-sensitive-information-environment-variables)
|
||||
repl.it can use `.env` file, [documentation](https://docs.repl.it/repls/secret-keys)
|
||||
|
||||
```
|
||||
DB_URL="mongodb+srv://account:passwd@***.***.***.mongodb.net/db_count"
|
||||
|
@ -68,8 +66,7 @@ DB_URL="mongodb+srv://account:passwd@***.***.***.mongodb.net/db_count"
|
|||
|
||||
## Credits
|
||||
|
||||
* [replit](https://replit.com/)
|
||||
* [A-SOUL_Official](https://space.bilibili.com/703007996)
|
||||
* [repl.it](https://repl.it/)
|
||||
* [moebooru](https://github.com/moebooru/moebooru)
|
||||
* rule34.xxx NSFW
|
||||
* gelbooru.com NSFW
|
||||
|
@ -77,4 +74,4 @@ DB_URL="mongodb+srv://account:passwd@***.***.***.mongodb.net/db_count"
|
|||
|
||||
## License
|
||||
|
||||
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fjourney-ad%2FMoe-Counter.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fjourney-ad%2FMoe-Counter?ref=badge_large)
|
||||
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fjourney-ad%2FMoe-counter.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fjourney-ad%2FMoe-counter?ref=badge_large)
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
body {
|
||||
background-color: #111111;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
a:link {
|
||||
color: rgb(223, 131, 223);
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: rgb(223, 131, 223);
|
||||
}
|
||||
|
||||
|
||||
code, input, select, button {
|
||||
background: #2c2c2c;
|
||||
color: #FFF;
|
||||
}
|
2
assets/light.min.css
vendored
|
@ -1,2 +0,0 @@
|
|||
@charset "UTF-8";body{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;line-height:1.4;max-width:800px;margin:20px auto;padding:0 10px;color:#363636;background:#fff;text-rendering:optimizeLegibility}button,input,textarea{transition:background-color .1s linear,border-color .1s linear,color .1s linear,box-shadow .1s linear,transform .1s ease}h1{font-size:2.2em;margin-top:0}h1,h2,h3,h4,h5,h6{margin-bottom:12px}h1,h2,h3,h4,h5,h6,strong{color:#000}b,h1,h2,h3,h4,h5,h6,strong,th{font-weight:600}blockquote{border-left:4px solid rgba(0,150,191,.67);margin:1.5em 0;padding:.5em 1em;font-style:italic}blockquote>footer{margin-top:10px;font-style:normal}address,blockquote cite{font-style:normal}a[href^=mailto]:before{content:"📧 "}a[href^=tel]:before{content:"📞 "}a[href^=sms]:before{content:"💬 "}button,input[type=button],input[type=checkbox],input[type=submit]{cursor:pointer}input:not([type=checkbox]):not([type=radio]),select{display:block}button,input,select,textarea{color:#000;background-color:#efefef;font-family:inherit;font-size:inherit;margin-right:6px;margin-bottom:6px;padding:10px;border:none;border-radius:6px;outline:none}button,input:not([type=checkbox]):not([type=radio]),select,textarea{-webkit-appearance:none}textarea{margin-right:0;width:100%;box-sizing:border-box;resize:vertical}button,input[type=button],input[type=submit]{padding-right:30px;padding-left:30px}button:hover,input[type=button]:hover,input[type=submit]:hover{background:#ddd}button:focus,input:focus,select:focus,textarea:focus{box-shadow:0 0 0 2px rgba(0,150,191,.67)}button:active,input[type=button]:active,input[type=checkbox]:active,input[type=radio]:active,input[type=submit]:active{transform:translateY(2px)}button:disabled,input:disabled,select:disabled,textarea:disabled{cursor:not-allowed;opacity:.5}::-webkit-input-placeholder{color:#949494}:-ms-input-placeholder{color:#949494}::-ms-input-placeholder{color:#949494}::placeholder{color:#949494}a{text-decoration:none;color:#0076d1}a:hover{text-decoration:underline}code,kbd{background:#efefef;color:#000;padding:5px;border-radius:6px}pre>code{padding:10px;display:block;overflow-x:auto}img{max-width:100%}hr{border:none;border-top:1px solid #dbdbdb}table{border-collapse:collapse;margin-bottom:10px;width:100%}td,th{padding:6px;text-align:left}th{border-bottom:1px solid #dbdbdb}tbody tr:nth-child(2n){background-color:#efefef}::-webkit-scrollbar{height:10px;width:10px}::-webkit-scrollbar-track{background:#efefef;border-radius:6px}::-webkit-scrollbar-thumb{background:#d5d5d5;border-radius:6px}::-webkit-scrollbar-thumb:hover{background:#c4c4c4}
|
||||
/*# sourceMappingURL=light.min.css.map */
|
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.1 KiB |
|
@ -1,6 +1,5 @@
|
|||
app:
|
||||
# site: https://count.getloli.com # your website
|
||||
port: 3000
|
||||
|
||||
db:
|
||||
type: sqlite # sqlite or mongodb
|
||||
type: mongodb # sqlite or mongodb
|
|
@ -32,24 +32,8 @@ function setNum(name, num) {
|
|||
.exec()
|
||||
}
|
||||
|
||||
function setNumMulti(counters) {
|
||||
const bulkOps = counters.map(obj => {
|
||||
const { name, num } = obj
|
||||
return {
|
||||
updateOne: {
|
||||
filter: { name },
|
||||
update: { name, num },
|
||||
upsert: true
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return Count.bulkWrite(bulkOps, { ordered : false })
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getNum,
|
||||
getAll,
|
||||
setNum,
|
||||
setNumMulti
|
||||
setNum
|
||||
}
|
||||
|
|
51
db/sqlite.js
|
@ -1,11 +1,11 @@
|
|||
'use strict'
|
||||
|
||||
const path = require('path')
|
||||
const Database = require('better-sqlite3')
|
||||
const sqlite3 = require('sqlite3')
|
||||
|
||||
const db = new Database(path.resolve(__dirname, '../count.db'))
|
||||
const db = new sqlite3.Database(path.resolve(__dirname, '../count.db'))
|
||||
|
||||
db.exec(`CREATE TABLE IF NOT EXISTS tb_count (
|
||||
db.run(`CREATE TABLE IF NOT EXISTS tb_count (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||
NOT NULL
|
||||
UNIQUE,
|
||||
|
@ -17,53 +17,44 @@ db.exec(`CREATE TABLE IF NOT EXISTS tb_count (
|
|||
|
||||
function getNum(name) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const stmt = db.prepare('SELECT `name`, `num` from tb_count WHERE `name` = ?')
|
||||
const row = stmt.get(name)
|
||||
db.get('SELECT `name`, `num` from tb_count WHERE `name` = ?', name, (err, row) => {
|
||||
if (err) reject(err)
|
||||
|
||||
resolve(row || { name, num: 0 })
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function getAll(name) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const stmt = db.prepare('SELECT * from tb_count')
|
||||
const rows = stmt.all()
|
||||
resolve(rows)
|
||||
db.get('SELECT * from tb_count', (err, row) => {
|
||||
if (err) reject(err)
|
||||
|
||||
resolve(row)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function setNum(name, num) {
|
||||
return new Promise((resolve, reject) => {
|
||||
db.exec(`INSERT INTO tb_count(\`name\`, \`num\`)
|
||||
db.run(`INSERT INTO tb_count(\`name\`, \`num\`)
|
||||
VALUES($name, $num)
|
||||
ON CONFLICT(name) DO
|
||||
UPDATE SET \`num\` = $num;`
|
||||
,
|
||||
{ $name: name, $num: num }
|
||||
)
|
||||
, {
|
||||
$name: name,
|
||||
$num: num
|
||||
}
|
||||
, (err, row) => {
|
||||
if (err) reject(err)
|
||||
|
||||
resolve()
|
||||
resolve(row)
|
||||
})
|
||||
}
|
||||
|
||||
function setNumMulti(counters) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const stmt = db.prepare(`INSERT INTO tb_count(\`name\`, \`num\`)
|
||||
VALUES($name, $num)
|
||||
ON CONFLICT(name) DO
|
||||
UPDATE SET \`num\` = $num;`)
|
||||
|
||||
const setMany = db.transaction((counters) => {
|
||||
for (const counter of counters) stmt.run(counter)
|
||||
})
|
||||
|
||||
setMany(counters)
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getNum,
|
||||
getAll,
|
||||
setNum,
|
||||
setNumMulti
|
||||
setNum
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
version: '3'
|
||||
services:
|
||||
moe-counter:
|
||||
build: .
|
||||
ports:
|
||||
- "3000:3000"
|
46
index.js
|
@ -17,8 +17,7 @@ app.use(compression())
|
|||
app.set('view engine', 'pug')
|
||||
|
||||
app.get('/', (req, res) => {
|
||||
const site = config.app.site || `${req.protocol}://${req.get('host')}`
|
||||
res.render('index', { site })
|
||||
res.render('index')
|
||||
});
|
||||
|
||||
// get the image
|
||||
|
@ -46,7 +45,7 @@ app.get('/get/@:name', async (req, res) => {
|
|||
const renderSvg = themify.getCountImage({ count: data.num, theme, length })
|
||||
res.send(renderSvg)
|
||||
|
||||
console.log(data, `theme: ${theme}`, `ref: ${req.get('Referrer') || null}`, `ua: ${req.get('User-Agent') || null}`)
|
||||
console.log(data, `theme: ${theme}`)
|
||||
})
|
||||
|
||||
// JSON record
|
||||
|
@ -71,51 +70,16 @@ const listener = app.listen(config.app.port || 3000, () => {
|
|||
console.log('Your app is listening on port ' + listener.address().port)
|
||||
})
|
||||
|
||||
let __cache_counter = {}, shouldPush = false
|
||||
|
||||
setInterval(() => {
|
||||
shouldPush = true
|
||||
}, 1000 * 60);
|
||||
|
||||
async function pushDB() {
|
||||
if (!shouldPush) return
|
||||
|
||||
try {
|
||||
shouldPush = false
|
||||
if (Object.keys(__cache_counter).length === 0) return
|
||||
|
||||
console.log("pushDB", __cache_counter)
|
||||
|
||||
const counters = Object.keys(__cache_counter).map(key => {
|
||||
return {
|
||||
name: key,
|
||||
num: __cache_counter[key]
|
||||
}
|
||||
})
|
||||
|
||||
await db.setNumMulti(counters)
|
||||
__cache_counter = {}
|
||||
} catch (error) {
|
||||
console.log("pushDB is error: ", error)
|
||||
}
|
||||
}
|
||||
|
||||
async function getCountByName(name) {
|
||||
const defaultCount = { name, num: 0 }
|
||||
|
||||
if (name === 'demo') return { name, num: '0123456789' }
|
||||
|
||||
try {
|
||||
if (!(name in __cache_counter)) {
|
||||
const counter = await db.getNum(name) || defaultCount
|
||||
__cache_counter[name] = counter.num + 1
|
||||
} else {
|
||||
__cache_counter[name]++
|
||||
}
|
||||
|
||||
pushDB()
|
||||
|
||||
return { name, num: __cache_counter[name] }
|
||||
const num = counter.num + 1
|
||||
db.setNum(counter.name, num)
|
||||
return counter
|
||||
|
||||
} catch (error) {
|
||||
console.log("get count by name is error: ", error)
|
||||
|
|
6
package-lock.json
generated
|
@ -896,9 +896,9 @@
|
|||
}
|
||||
},
|
||||
"lodash": {
|
||||
"version": "4.17.19",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
|
||||
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
},
|
||||
"lodash.assign": {
|
||||
"version": "4.2.0",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "moe-counter",
|
||||
"name": "kawaii-counter",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
|
@ -11,13 +11,13 @@
|
|||
"author": "journey-ad",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"better-sqlite3": "^8.1.0",
|
||||
"compression": "^1.7.4",
|
||||
"config-yml": "^0.10.3",
|
||||
"express": "^4.17.1",
|
||||
"image-size": "^0.8.3",
|
||||
"mime-types": "^2.1.27",
|
||||
"mongoose": "^5.9.28",
|
||||
"pug": "^3.0.0"
|
||||
"pug": "^3.0.0",
|
||||
"sqlite3": "^5.0.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ function getCountImage({ count, theme='moebooru', length=7 }) {
|
|||
}, '')
|
||||
|
||||
return `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="${x}" height="${y}" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="image-rendering: pixelated;">
|
||||
<svg width="${x}" height="${y}" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Moe Count</title>
|
||||
<g>
|
||||
${parts}
|
||||
|
|
|
@ -3,73 +3,79 @@ html
|
|||
title='Moe Counter!'
|
||||
meta(name='viewport', content='width=device-width, initial-scale=1')
|
||||
link(rel='icon', type='image/png', href='favicon.png')
|
||||
link(rel='stylesheet', href='./light.min.css')
|
||||
link(rel='stylesheet', href='./custom.css')
|
||||
|
||||
// GOODBYE GOOGLE SHIT
|
||||
link(rel='stylesheet', href='https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/light.min.css')
|
||||
link(rel='stylesheet', href='style.css')
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
script(async, src='https://www.googletagmanager.com/gtag/js?id=G-2RLWN5JXRL')
|
||||
script.
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-2RLWN5JXRL');
|
||||
|
||||
function _evt_push(type, category, label){
|
||||
gtag('event', type, {
|
||||
'event_category' : category,
|
||||
'event_label' : label
|
||||
});
|
||||
}
|
||||
|
||||
body
|
||||
h3 How to use:
|
||||
|
||||
h5 SVG address
|
||||
code #{site}/get/@:name
|
||||
code https://count.getloli.com/get/@:name
|
||||
|
||||
h5 Img tag
|
||||
code <img src="#{site}/get/@:name" alt=":name" />
|
||||
code <img src="https://count.getloli.com/get/@:name" alt=":name" />
|
||||
|
||||
h5 Markdown
|
||||
code ![:name](#{site}/get/@:name)
|
||||
code ![:name](https://count.getloli.com/get/@:name)
|
||||
|
||||
h3 eg:
|
||||
<img src="#{site}/get/@index" alt="Moe Count!" />
|
||||
<img src="https://count.getloli.com/get/@index" alt="Moe Count!" />
|
||||
|
||||
i(style='color: #FFFFFF') Data can access by anyone, please
|
||||
i Data can access by anyone, please
|
||||
| <span style="color: #ff4500;"> DO NOT</span>
|
||||
| enter personal information
|
||||
|
||||
details
|
||||
summary(style='display: inline-block;', onclick='_evt_push("click", "normal", "more_theme")')
|
||||
h3(style='display: inline-block; cursor: pointer;') More themes
|
||||
p(style='margin: 0;') Just use the query parameters <code>theme</code>, like this: <code>#{site}/get/@:name?theme=moebooru</code>
|
||||
h5 asoul
|
||||
img(src='#{site}/get/@demo?theme=asoul', alt='A-SOUL')
|
||||
h3(style='display: inline-block; cursor: pointer;') More theme
|
||||
p(style='margin: 0;') Just use the query parameters <code>theme</code>, like this: <code>https://count.getloli.com/get/@:name?theme=moebooru</code>
|
||||
h5 moebooru
|
||||
img(src='#{site}/get/@demo?theme=moebooru', alt='Moebooru')
|
||||
img(src='https://count.getloli.com/get/@demo?theme=moebooru', alt='Moebooru')
|
||||
h5 moebooru-h
|
||||
img(src='#{site}/get/@demo?theme=moebooru-h', alt='Moebooru-Hentai')
|
||||
img(src='https://count.getloli.com/get/@demo?theme=moebooru-h', alt='Moebooru-Hentai')
|
||||
h5 rule34
|
||||
img(src='#{site}/get/@demo?theme=rule34', alt='Rule34')
|
||||
img(src='https://count.getloli.com/get/@demo?theme=rule34', alt='Rule34')
|
||||
h5 gelbooru
|
||||
img(src='#{site}/get/@demo?theme=gelbooru', alt='Gelbooru')
|
||||
img(src='https://count.getloli.com/get/@demo?theme=gelbooru', alt='Gelbooru')
|
||||
h5 gelbooru-h
|
||||
img(src='#{site}/get/@demo?theme=gelbooru-h', alt='Gelbooru-Hentai')
|
||||
img(src='https://count.getloli.com/get/@demo?theme=gelbooru-h', alt='Gelbooru-Hentai')
|
||||
|
||||
// h3 Credits
|
||||
// ul
|
||||
// li
|
||||
// a(href='https://repl.it/', target='_blank', rel='nofollow') repl.it
|
||||
// li
|
||||
// a(href='https://space.bilibili.com/703007996', target='_blank', title='A-SOUL_Official') A-SOUL
|
||||
// li
|
||||
// a(href='https://github.com/moebooru/moebooru', target='_blank', rel='nofollow') moebooru
|
||||
// li
|
||||
// a(href='javascript:alert("!!! NSFW LINK !!!\\nPlease enter the url manually")') rule34.xxx
|
||||
// | NSFW
|
||||
// li
|
||||
// a(href='javascript:alert("!!! NSFW LINK !!!\\nPlease enter the url manually")') gelbooru.com
|
||||
// | NSFW
|
||||
// li
|
||||
// a(href='https://icons8.com/icons/set/star', target='_blank', rel='nofollow') Icons8
|
||||
h3 Credits
|
||||
ul
|
||||
li
|
||||
a(href='https://repl.it/', target='_blank', rel='nofollow') repl.it
|
||||
li
|
||||
a(href='https://github.com/moebooru/moebooru', target='_blank', rel='nofollow') moebooru
|
||||
li
|
||||
a(href='javascript:alert("!!! NSFW LINK !!!\\nPlease enter the url manually")') rule34.xxx
|
||||
| NSFW
|
||||
li
|
||||
a(href='javascript:alert("!!! NSFW LINK !!!\\nPlease enter the url manually")') gelbooru.com
|
||||
| NSFW
|
||||
li
|
||||
a(href='https://icons8.com/icons/set/star', target='_blank', rel='nofollow') Icons8
|
||||
|
||||
h3 Tool
|
||||
.tool
|
||||
code #{site}/get/@
|
||||
code https://count.getloli.com/get/@
|
||||
input#name(type='text', placeholder=':name', style='display: inline-block; width: 80px; height: 1.4em; line-height: 1.4em; margin: 0 4px; vertical-align: middle;')
|
||||
code ?theme=
|
||||
select#theme(style='display: inline-block; height: 1.6em; line-height: 1.6em; font-size: 14px; margin: 0 4px; padding: 0 4px; vertical-align: middle;')
|
||||
option(value='asoul') asoul
|
||||
option(value='moebooru') moebooru
|
||||
option(value='moebooru-h') moebooru-h
|
||||
option(value='rule34') rule34
|
||||
|
@ -92,10 +98,10 @@ html
|
|||
return
|
||||
}
|
||||
|
||||
img.src = '#{site}/get/@' + text + '?theme=' + theme
|
||||
img.src = 'https://count.getloli.com/get/@' + text + '?theme=' + theme
|
||||
})
|
||||
|
||||
iframe(src="https://chat.getloli.com/room/@Moe-counter?title=%E8%90%8C%E8%90%8C%E8%AE%A1%E6%95%B0%E5%99%A8%E7%9A%84%E7%95%99%E8%A8%80%E6%9D%BF", scrolling="no", frameborder="0", height="70%", width="26%", style="position: fixed;top: 2%;right: 5%;")
|
||||
|
||||
p.copy
|
||||
a(href='https://github.com/journey-ad/Moe-Counter', target='_blank', onclick='_evt_push("click", "normal", "go_github")') source code
|
||||
p.copy
|
||||
a(href='https://git.zzls.xyz/Fijxu/Moe-Counter', target='_blank', onclick='_evt_push("click", "normal", "go_github")') Modified source code
|
||||
a(href='https://github.com/journey-ad/Moe-counter', target='_blank', onclick='_evt_push("click", "normal", "go_github")') source code
|