Project Linting (#209)

* More setup for ESLint

* Initial linting

* Fix: "Unexpected use of 'location': no-restricted-globals"

* Fix: "Prop 'sidebarItems' should define at least its type"

* Fix: "import/no-unresolved"

* Fix: "import/no-extraneous-dependencies"

* Fix: "Unexpected require() 'global-require'"

* Fix: "vue/require-prop-types"

* Line disable: "radix"

* Line disable: "no-param-reassign"

* Line disable: "no-shadow"

This should usually be an actual problem but I don't think so in this case as the next prompt is basically just a one-action warning.

* Add markdown linting support

* Replace single quotes with double

* Fix indentation for all files

* Fix second level quotation marks

* Change accordingly

I'd still rather keep 4-tab for MD when applicable though, the alternative is a non-standard 3-space indent, which makes three different indentations to keep track of.
This commit is contained in:
Soitora 2020-05-21 04:47:01 +02:00 committed by GitHub
parent 8c2459d492
commit b520d4e448
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 5704 additions and 3998 deletions

1
.eslintignore Normal file
View File

@ -0,0 +1 @@
!.vuepress

View File

@ -5,18 +5,28 @@
},
"extends": [
"plugin:vue/essential",
"vuepress",
"prettier"
"airbnb-base",
"prettier",
"vuepress"
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
},
"plugins": [
"vue",
"prettier"
"prettier",
"markdown"
],
"rules": {
"prettier/prettier": ["error"]
"prettier/prettier": "error",
"import/no-unresolved": [
2,
{ "ignore": ["^@"] }
]
}
}

View File

@ -31,6 +31,6 @@ jobs:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
publish_branch: gh-pages
publish_dir: ./public
user_name: 'github-actions[bot]'
user_email: 'github-actions[bot]@users.noreply.github.com'
user_name: "github-actions[bot]"
user_email: "github-actions[bot]@users.noreply.github.com"
commit_message: ${{ github.event.head_commit.message }}

View File

@ -1,9 +1,11 @@
<h1 align="center"><img src="./src/.vuepress/public/assets/media/tachiyomi.png">Tachiyomi Website</h1>
<p align="center">
<div>
<h1 align="center"><img src="./src/.vuepress/public/assets/media/tachiyomi.png">Tachiyomi Website</h1>
<p align="center">
<a href="https://discord.gg/tachiyomi">
<img src="https://img.shields.io/discord/349436576037732353.svg?label=Discord&labelColor=7289da&color=2c2f33&style=flat" alt="Discord">
</a>
</p>
</p>
</div>
## Contributing

257
package-lock.json generated
View File

@ -2189,6 +2189,12 @@
"object.assign": "^4.1.0"
}
},
"bail": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
"integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@ -2873,6 +2879,24 @@
"supports-color": "^5.3.0"
}
},
"character-entities": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
"integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
"dev": true
},
"character-entities-legacy": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
"integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
"dev": true
},
"character-reference-invalid": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
"integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
"dev": true
},
"chardet": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
@ -3099,6 +3123,12 @@
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
"dev": true
},
"collapse-white-space": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
"integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
"dev": true
},
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@ -4716,6 +4746,17 @@
}
}
},
"eslint-plugin-markdown": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-1.0.2.tgz",
"integrity": "sha512-BfvXKsO0K+zvdarNc801jsE/NTLmig4oKhZ1U3aSUgTf2dB/US5+CrfGxMsCK2Ki1vS1R3HPok+uYpufFndhzw==",
"dev": true,
"requires": {
"object-assign": "^4.0.1",
"remark-parse": "^5.0.0",
"unified": "^6.1.2"
}
},
"eslint-plugin-node": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz",
@ -6490,6 +6531,22 @@
}
}
},
"is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
"integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
"dev": true
},
"is-alphanumerical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
"integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
"dev": true,
"requires": {
"is-alphabetical": "^1.0.0",
"is-decimal": "^1.0.0"
}
},
"is-arguments": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
@ -6580,6 +6637,12 @@
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
"dev": true
},
"is-decimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
"integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
"dev": true
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@ -6638,6 +6701,12 @@
"is-extglob": "^2.1.1"
}
},
"is-hexadecimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
"integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
"dev": true
},
"is-installed-globally": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
@ -6784,12 +6853,24 @@
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
},
"is-whitespace-character": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
"integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
"dev": true
},
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true
},
"is-word-character": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
"integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
"dev": true
},
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
@ -7111,8 +7192,7 @@
"lodash.orderby": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz",
"integrity": "sha1-5pfwTOXXhSL1TZM4syuBozk+TrM=",
"dev": true
"integrity": "sha1-5pfwTOXXhSL1TZM4syuBozk+TrM="
},
"lodash.padstart": {
"version": "4.6.1",
@ -7146,8 +7226,7 @@
"lodash.throttle": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
"integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=",
"dev": true
"integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
},
"lodash.uniq": {
"version": "4.5.0",
@ -7247,6 +7326,12 @@
"object-visit": "^1.0.0"
}
},
"markdown-escapes": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
"integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
"dev": true
},
"markdown-it": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
@ -8375,6 +8460,20 @@
"safe-buffer": "^5.1.1"
}
},
"parse-entities": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz",
"integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==",
"dev": true,
"requires": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
"character-reference-invalid": "^1.0.0",
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
}
},
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
@ -9627,6 +9726,29 @@
"integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
"dev": true
},
"remark-parse": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz",
"integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==",
"dev": true,
"requires": {
"collapse-white-space": "^1.0.2",
"is-alphabetical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-whitespace-character": "^1.0.0",
"is-word-character": "^1.0.0",
"markdown-escapes": "^1.0.0",
"parse-entities": "^1.1.0",
"repeat-string": "^1.5.4",
"state-toggle": "^1.0.0",
"trim": "0.0.1",
"trim-trailing-lines": "^1.0.0",
"unherit": "^1.0.4",
"unist-util-remove-position": "^1.0.0",
"vfile-location": "^2.0.0",
"xtend": "^4.0.1"
}
},
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
@ -9712,6 +9834,12 @@
"is-finite": "^1.0.0"
}
},
"replace-ext": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
"integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
"dev": true
},
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@ -10665,6 +10793,12 @@
"integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
"dev": true
},
"state-toggle": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
"integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
"dev": true
},
"static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
@ -11268,12 +11402,30 @@
"punycode": "^2.1.0"
}
},
"trim": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
"integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
"dev": true
},
"trim-newlines": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
"integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
"dev": true
},
"trim-trailing-lines": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz",
"integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==",
"dev": true
},
"trough": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
"integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
"dev": true
},
"true-case-path": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
@ -11380,6 +11532,16 @@
}
}
},
"unherit": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
"integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
"dev": true,
"requires": {
"inherits": "^2.0.0",
"xtend": "^4.0.0"
}
},
"unicode-canonical-property-names-ecmascript": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
@ -11408,6 +11570,20 @@
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true
},
"unified": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz",
"integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==",
"dev": true,
"requires": {
"bail": "^1.0.0",
"extend": "^3.0.0",
"is-plain-obj": "^1.1.0",
"trough": "^1.0.0",
"vfile": "^2.0.0",
"x-is-string": "^0.1.0"
}
},
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@ -11459,6 +11635,45 @@
"crypto-random-string": "^2.0.0"
}
},
"unist-util-is": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
"integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
"dev": true
},
"unist-util-remove-position": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz",
"integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==",
"dev": true,
"requires": {
"unist-util-visit": "^1.1.0"
}
},
"unist-util-stringify-position": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
"integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
"dev": true
},
"unist-util-visit": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
"integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
"dev": true,
"requires": {
"unist-util-visit-parents": "^2.0.0"
}
},
"unist-util-visit-parents": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
"integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
"dev": true,
"requires": {
"unist-util-is": "^3.0.0"
}
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@ -11776,6 +11991,33 @@
"extsprintf": "^1.2.0"
}
},
"vfile": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz",
"integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==",
"dev": true,
"requires": {
"is-buffer": "^1.1.4",
"replace-ext": "1.0.0",
"unist-util-stringify-position": "^1.0.0",
"vfile-message": "^1.0.0"
}
},
"vfile-location": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz",
"integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==",
"dev": true
},
"vfile-message": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz",
"integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==",
"dev": true,
"requires": {
"unist-util-stringify-position": "^1.1.1"
}
},
"vm-browserify": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
@ -11792,7 +12034,6 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/vue-agile/-/vue-agile-1.1.3.tgz",
"integrity": "sha512-RnvKK6ZoXNAk2Q6h/ux+bhqYs4uflFew3xcsNfysQa+GVLKHfizAaeKHJndqGjSXA+qg+kJuYd4RDY/ry8RY4w==",
"dev": true,
"requires": {
"lodash.orderby": "^4.6.0",
"lodash.throttle": "^4.1.1"
@ -12624,6 +12865,12 @@
"async-limiter": "~1.0.0"
}
},
"x-is-string": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
"integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
"dev": true
},
"xdg-basedir": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",

View File

@ -16,13 +16,16 @@
"@vuepress/plugin-google-analytics": "^1.5.0",
"eslint": "^6.8.0",
"eslint-config-airbnb": "^18.1.0",
"eslint-config-airbnb-base": "^14.1.0",
"eslint-config-prettier": "^6.11.0",
"eslint-config-vuepress": "^2.2.0",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-markdown": "^1.0.2",
"eslint-plugin-prettier": "^3.1.3",
"eslint-plugin-vue": "^6.2.2",
"node-sass": "^4.14.1",
"prettier": "^2.0.5",
"sass-loader": "^8.0.2",
"vue-agile": "^1.1.3",
"vuepress": "^1.5.0",
"vuepress-plugin-clean-urls": "^1.1.1",
"vuepress-plugin-container": "^2.1.3"
@ -33,6 +36,7 @@
"lodash.groupby": "^4.6.0",
"lodash.sortby": "^4.7.0",
"material-design-icons": "^3.0.1",
"vue-agile": "^1.1.3",
"vue-material-design-icons": "^4.6.0",
"vue-sweetalert2": "^3.0.5",
"vuepress-plugin-sitemap": "^2.3.1"

View File

@ -16,18 +16,18 @@ export default {
props: {
name: {
type: String,
default: "carousel"
default: "carousel",
},
config: {
type: Object,
default: function() {
default() {
return {
navButtons: true,
centerMode: true
centerMode: true,
};
}
}
}
},
},
},
};
</script>

View File

@ -10,9 +10,9 @@ export default {
props: {
name: {
type: String,
default: "carousel-cell"
}
}
default: "carousel-cell",
},
},
};
</script>

View File

@ -15,35 +15,34 @@ import axios from "axios";
const RELEASE_URL =
"https://api.github.com/repos/inorichi/tachiyomi/releases/latest";
const PREVIEW_URL =
"https://tachiyomi.kanade.eu/latest";
const PREVIEW_URL = "https://tachiyomi.kanade.eu/latest";
export default {
props: {
downloadStableTag: {
type: String,
required: true
required: true,
},
downloadPreviewTag: {
type: String,
required: true
required: true,
},
downloadStableLabel: {
type: String,
default: "Stable"
default: "Stable",
},
downloadPreviewLabel: {
type: String,
default: "Preview"
default: "Preview",
},
downloadStableUrl: {
type: String,
default: undefined
default: undefined,
},
downloadPreviewUrl: {
type: String,
default: undefined
}
default: undefined,
},
},
data() {
@ -56,7 +55,7 @@ export default {
async mounted() {
const { data } = await axios.get(RELEASE_URL);
// Maybe eventually some release has more than the apk in assets.
const apkAsset = data.assets.find(a => a.name.includes(".apk"));
const apkAsset = data.assets.find((a) => a.name.includes(".apk"));
// Set the values.
this.$data.tagName = data.tag_name;
this.$data.browserDownloadUrl = apkAsset.browser_download_url;
@ -66,7 +65,7 @@ export default {
downloadStable() {
this.$swal({
title: "Downloading",
text: this.downloadStableLabel + " version is being downloaded.",
text: `${this.downloadStableLabel} version is being downloaded.`,
icon: "success",
focusConfirm: false,
focusCancel: false,
@ -74,24 +73,32 @@ export default {
timerProgressBar: true,
customClass: {
confirmButton: "download-confirm-button",
container: "download-container"
container: "download-container",
},
showClass: {
popup: "animated pulse faster"
popup: "animated pulse faster",
},
hideClass: {
popup: "animated zoomOut faster"
}
popup: "animated zoomOut faster",
},
});
window.location.assign(
this.$props.downloadStableUrl || this.$data.browserDownloadUrl || RELEASE_URL
this.$props.downloadStableUrl ||
this.$data.browserDownloadUrl ||
RELEASE_URL
);
window.ga(
"send",
"event",
"Action",
"Download",
this.downloadStableTag
);
window.ga("send", "event", "Action", "Download", this.downloadStableTag);
},
downloadPreview() {
this.$swal({
title: "Downloading",
text: this.downloadPreviewLabel + " version is being downloaded.",
text: `${this.downloadPreviewLabel} version is being downloaded.`,
icon: "success",
focusConfirm: false,
focusCancel: false,
@ -99,21 +106,27 @@ export default {
timerProgressBar: true,
customClass: {
confirmButton: "download-confirm-button",
container: "download-container"
container: "download-container",
},
showClass: {
popup: "animated pulse faster"
popup: "animated pulse faster",
},
hideClass: {
popup: "animated zoomOut faster"
}
popup: "animated zoomOut faster",
},
});
window.location.assign(
this.$props.downloadPreviewUrl || PREVIEW_URL
);
window.ga("send", "event", "Action", "Download", this.downloadPreviewTag);
}
}
window.ga(
"send",
"event",
"Action",
"Download",
this.downloadPreviewTag
);
},
},
};
</script>

View File

@ -54,24 +54,26 @@ const EXTENSION_JSON =
export default {
data() {
return {
extensions: []
extensions: [],
};
},
async beforeMount() {
const { data } = await axios.get(EXTENSION_JSON);
const values = Object.values(groupBy(data, "lang"));
this.$data.extensions = sortBy(values, [g => this.langName(g[0].lang)]);
this.$data.extensions = sortBy(values, [
(g) => this.langName(g[0].lang),
]);
},
updated() {
if (location.hash) {
location.replace(location.hash);
if (window.ocation.hash) {
window.location.replace(window.location.hash);
}
},
methods: {
langName: code =>
langName: (code) =>
code === "all"
? "All"
: `${ISO6391.getName(code)} (${ISO6391.getNativeName(code)})`,
@ -79,9 +81,9 @@ export default {
const pkgName = pkg.substring(0, pkg.lastIndexOf("."));
return `https://raw.githubusercontent.com/inorichi/tachiyomi-extensions/repo/icon/${pkgName}.png`;
},
apkUrl: apk =>
`https://raw.githubusercontent.com/inorichi/tachiyomi-extensions/repo/apk/${apk}`
}
apkUrl: (apk) =>
`https://raw.githubusercontent.com/inorichi/tachiyomi-extensions/repo/apk/${apk}`,
},
};
</script>

View File

@ -1,9 +1,17 @@
<template>
<div class="downloadContainer">
<button class="downloadForkButton" :style="downloadForkStyle" @click="downloadFork">
<button
class="downloadForkButton"
:style="downloadForkStyle"
@click="downloadFork"
>
{{ downloadForkLabel }}
</button>
<button class="githubForkButton" :style="githubForkStyle" :onclick="githubForkLink">
<button
class="githubForkButton"
:style="githubForkStyle"
:onclick="githubForkLink"
>
{{ githubForkLabel }}
</button>
</div>
@ -16,44 +24,44 @@ export default {
props: {
forkName: {
type: String,
required: true
required: true,
},
downloadForkLabel: {
type: String,
default: "Download"
default: "Download",
},
downloadForkLink: {
type: String,
required: true
required: true,
},
downloadForkStyle: {
type: String,
default: ""
default: "",
},
githubForkLabel: {
type: String,
default: "GitHub"
default: "GitHub",
},
githubForkLink: {
type: String,
required: true
required: true,
},
githubForkStyle: {
type: String,
default: ""
}
default: "",
},
},
data() {
return {
tagName: "",
browserDownloadUrl: ""
browserDownloadUrl: "",
};
},
async mounted() {
const { data } = await axios.get(this.$props.downloadForkLink);
// Maybe eventually some release has more than the apk in assets.
const apkAsset = data.assets.find(a => a.name.includes(".apk"));
const apkAsset = data.assets.find((a) => a.name.includes(".apk"));
// Set the values.
this.$data.tagName = data.tag_name;
this.$data.browserDownloadUrl = apkAsset.browser_download_url;
@ -63,7 +71,7 @@ export default {
downloadFork() {
this.$swal({
title: "Downloading",
text: this.$props.forkName + " is being downloaded.",
text: `${this.$props.forkName} is being downloaded.`,
icon: "success",
focusConfirm: false,
focusCancel: false,
@ -71,21 +79,27 @@ export default {
timerProgressBar: true,
customClass: {
confirmButton: "download-confirm-button",
container: "download-container"
container: "download-container",
},
showClass: {
popup: "animated pulse faster"
popup: "animated pulse faster",
},
hideClass: {
popup: "animated zoomOut faster"
}
popup: "animated zoomOut faster",
},
});
window.location.assign(
this.$data.browserDownloadUrl || this.$props.downloadForkLink
);
window.ga("send", "event", "Action", "Download", this.$props.forkName);
}
}
window.ga(
"send",
"event",
"Action",
"Download",
this.$props.forkName
);
},
},
};
</script>

View File

@ -6,22 +6,18 @@
<Content class="theme-default-content" />
<PageEdit />
<PageNav v-bind="{ sidebarItems }" />
<slot name="bottom" />
</main>
</Layout>
</template>
<script>
import Layout from '@theme/layouts/Layout.vue'
import PageEdit from '@theme/components/PageEdit.vue'
import PageNav from '@theme/components/PageNav.vue'
import Layout from "@theme/layouts/Layout.vue";
import PageEdit from "@theme/components/PageEdit.vue";
export default {
components: { PageEdit, PageNav, Layout },
props: ['sidebarItems']
}
components: { PageEdit, Layout },
};
</script>
<style lang="stylus">

View File

@ -275,7 +275,7 @@ export default {
grid-auto-rows 1fr
grid-gap 1rem
&:after
content ''
content ""
display table
clear both

View File

@ -14,17 +14,17 @@ export default {
props: {
iconOnly: {
type: Boolean,
default: false
default: false,
},
name: {
type: String,
default: ""
default: "",
},
iconName: {
type: String,
required: true
}
}
required: true,
},
},
};
</script>
@ -37,7 +37,7 @@ export default {
display inline
.material-icons
font-family 'Material Icons'
font-family "Material Icons"
font-size 1.35em
font-style normal
position relative
@ -50,7 +50,6 @@ export default {
white-space nowrap
word-wrap normal
direction ltr
font-feature-settings 'liga'
font-feature-settings "liga"
-webkit-font-smoothing antialiased
</style>

View File

@ -1,13 +1,27 @@
<template>
<span v-if="nav.link" class="app-navigation" :class="nav.class" title="App navigation">
<span
v-if="nav.link"
class="app-navigation"
:class="nav.class"
title="App navigation"
>
<a class="app-link" :href="nav.link + entry">
<MaterialIcon v-if="nav.icon" class="app-icon" :iconName="nav.icon" />
<MaterialIcon
v-if="nav.icon"
class="app-icon"
:icon-name="nav.icon"
/>
<span class="app-label">{{ nav.text }}</span>
<slot />
</a>
</span>
<span v-else class="app-navigation" :class="nav.class" title="App navigation">
<MaterialIcon v-if="nav.icon" class="app-icon" :iconName="nav.icon" />
<span
v-else
class="app-navigation"
:class="nav.class"
title="App navigation"
>
<MaterialIcon v-if="nav.icon" class="app-icon" :icon-name="nav.icon" />
<span class="app-label">{{ nav.text }}</span>
<slot />
</span>

View File

@ -1,6 +1,6 @@
<template>
<span v-if="fileName" class="fileNameContainer" title="File name">
<MaterialIcon class="fileNameIcon" iconName="get_app" />
<MaterialIcon class="fileNameIcon" icon-name="get_app" />
<span class="fileName">tachiyomi-{{ this.$data.tagName }}.apk</span>
<slot />
</span>
@ -18,8 +18,8 @@ const RELEASE_URL =
export default {
props: {
fileName: {
type: Boolean
}
type: Boolean,
},
},
data() {

View File

@ -1,52 +1,53 @@
module.exports = {
dest: './public',
temp: './node_modules/.temp/theme',
const pluginsConfig = require("./config/plugins");
const navBarConfig = require("./config/navBar");
const sideBarConfig = require("./config/sideBar");
title: 'Tachiyomi',
description: 'Free and open source manga reader for Android',
module.exports = {
dest: "./public",
temp: "./node_modules/.temp/theme",
title: "Tachiyomi",
description: "Free and open source manga reader for Android",
// prettier-ignore
head: [
// Embed headers
['link', { rel: 'icon', href: '/favicon.ico' }],
['link', { rel: 'manifest', href: '/manifest.json' }],
['meta', { name: 'theme-color', content: '#2e84bf' }],
['meta', { prefix: 'og: http://ogp.me/ns#', property: 'og:image', content: 'https://tachiyomi.org/icons/logo.png' }],
["link", { rel: "icon", href: "/favicon.ico" }],
["link", { rel: "manifest", href: "/manifest.json" }],
["meta", { name: "theme-color", content: "#2e84bf" }],
["meta", { prefix: "og: http://ogp.me/ns#", property: "og:image", content: "https://tachiyomi.org/icons/logo.png" }],
// Custom headers
['link', { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin:''}],
['link', { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Open+Sans'}],
["link", { rel: "preconnect", href: "https://fonts.gstatic.com", crossorigin:""}],
["link", { rel: "stylesheet", href: "https://fonts.googleapis.com/css?family=Open+Sans"}],
],
themeConfig: {
logo: '/icons/logo.svg',
repo: 'inorichi/tachiyomi',
docsRepo: 'tachiyomiorg/website',
docsDir: 'src',
logo: "/icons/logo.svg",
repo: "inorichi/tachiyomi",
docsRepo: "tachiyomiorg/website",
docsDir: "src",
smoothScroll: true,
algolia: {
apiKey: 'fc1c45b5a3835e1882cbbf0751dfe705',
indexName: 'tachiyomi'
apiKey: "fc1c45b5a3835e1882cbbf0751dfe705",
indexName: "tachiyomi",
},
searchPlaceholder: 'Search...',
searchPlaceholder: "Search...",
editLinks: true,
editLinkText: 'Help us improve this page',
lastUpdated: 'Last Updated',
nav: require('./config/nav'),
editLinkText: "Help us improve this page",
lastUpdated: "Last Updated",
nav: navBarConfig,
sidebar: {
'/help/guides/': require('./config/sidebar/guides'),
'/help/faq/': require('./config/sidebar/faq'),
'/help/contribution': require('./config/sidebar/contribution'),
'/extensions': require('./config/sidebar/extensions'),
'/forks': require('./config/sidebar/forks')
}
"/help/guides/": sideBarConfig.guides,
"/help/faq/": sideBarConfig.faq,
"/help/contribution": sideBarConfig.contribution,
"/extensions": sideBarConfig.extensions,
"/forks": sideBarConfig.forks,
},
plugins: require('./config/plugins'),
},
plugins: pluginsConfig,
extraWatchFiles: [
'.vuepress/config/nav.js',
'.vuepress/config/plugins.js',
'.vuepress/config/sidebar/guides.js',
'.vuepress/config/sidebar/faq.js',
'.vuepress/config/sidebar/contribution.js',
'.vuepress/config/sidebar/extensions.js'
]
}
".vuepress/config/plugins.js",
".vuepress/config/navBar.js",
".vuepress/config/sideBar.js",
],
};

View File

@ -3,50 +3,50 @@ module.exports = [
[
"clean-urls",
{
normalSuffix: "/"
}
normalSuffix: "/",
},
],
[
"@vuepress/google-analytics",
{
ga: "UA-148212082-1"
}
ga: "UA-148212082-1",
},
],
[
"vuepress-plugin-container",
{
type: "expander",
before: info =>
before: (info) =>
`<details class="expander"><summary class="expansion">${info}</summary>`,
after: "</details>"
}
after: "</details>",
},
],
[
"vuepress-plugin-container",
{
type: "guide",
before: info => `<div class="guide"><p class="title">${info}</p>`,
after: "</div>"
}
before: (info) => `<div class="guide"><p class="title">${info}</p>`,
after: "</div>",
},
],
[
"vuepress-plugin-container",
{
type: "aside",
defaultTitle: ""
}
defaultTitle: "",
},
],
[
"vuepress-plugin-container",
{
type: "aside-guide",
defaultTitle: ""
}
defaultTitle: "",
},
],
[
"vuepress-plugin-sitemap",
{
hostname: "https://tachiyomi.org"
}
]
hostname: "https://tachiyomi.org",
},
],
];

View File

@ -0,0 +1,148 @@
module.exports = {
guides: [
"/",
{
title: "Guides",
collapsable: false,
sidebarDepth: 2,
children: [
{
title: "General",
collapsable: false,
sidebarDepth: 2,
children: [
"/help/guides/getting-started",
"/help/guides/source-problems",
"/help/guides/source-migration",
"/help/guides/creating-backups",
"/help/guides/reading-local-manga",
"/help/guides/categories",
],
},
{
title: "Settings",
collapsable: false,
sidebarDepth: 2,
children: [
"/help/guides/settings/general",
"/help/guides/settings/reader",
"/help/guides/settings/downloads",
"/help/guides/settings/tracking",
"/help/guides/settings/backup",
"/help/guides/settings/advanced",
],
},
],
},
{
title: "Frequently Asked Questions",
path: "/help/faq/",
},
{
title: "Forks",
path: "/forks/",
},
{
title: "Contribution",
path: "/help/contribution",
},
{
title: "Available extensions",
path: "/extensions/",
},
],
faq: [
"/",
{
title: "Frequently Asked Questions",
path: "/help/faq/",
},
{
title: "Guides",
path: "/help/guides/getting-started",
},
{
title: "Forks",
path: "/forks/",
},
{
title: "Contribution",
path: "/help/contribution",
},
{
title: "Available extensions",
path: "/extensions/",
},
],
contribution: [
"/",
{
title: "Contribution",
collapsable: false,
sidebarDepth: 1,
children: ["/help/contribution"],
},
{
title: "Frequently Asked Questions",
path: "/help/faq/",
},
{
title: "Guides",
path: "/help/guides/getting-started",
},
{
title: "Forks",
path: "/forks/",
},
{
title: "Available extensions",
path: "/extensions/",
},
],
extensions: [
"/",
{
title: "Available extensions",
path: "/extensions/",
},
{
title: "Frequently Asked Questions",
path: "/help/faq/",
},
{
title: "Guides",
path: "/help/guides/getting-started",
},
{
title: "Forks",
path: "/forks/",
},
{
title: "Contribution",
path: "/help/contribution",
},
],
forks: [
"/",
{
title: "Forks",
path: "/forks/",
},
{
title: "Frequently Asked Questions",
path: "/help/faq/",
},
{
title: "Guides",
path: "/help/guides/getting-started",
},
{
title: "Contribution",
path: "/help/contribution",
},
{
title: "Available extensions",
path: "/extensions/",
},
],
};

View File

@ -1,27 +0,0 @@
module.exports = [
'/',
{
title: 'Contribution',
collapsable: false,
sidebarDepth: 1,
children: [
'/help/contribution'
]
},
{
title: 'Frequently Asked Questions',
path: '/help/faq/',
},
{
title: 'Guides',
path: '/help/guides/getting-started',
},
{
title: 'Forks',
path: '/forks/'
},
{
title: 'Available extensions',
path: '/extensions/'
}
];

View File

@ -1,23 +0,0 @@
module.exports = [
'/',
{
title: 'Available extensions',
path: '/extensions/'
},
{
title: 'Frequently Asked Questions',
path: '/help/faq/',
},
{
title: 'Guides',
path: '/help/guides/getting-started',
},
{
title: 'Forks',
path: '/forks/'
},
{
title: 'Contribution',
path: '/help/contribution'
}
];

View File

@ -1,23 +0,0 @@
module.exports = [
'/',
{
title: 'Frequently Asked Questions',
path: '/help/faq/'
},
{
title: 'Guides',
path: '/help/guides/getting-started',
},
{
title: 'Forks',
path: '/forks/'
},
{
title: 'Contribution',
path: '/help/contribution'
},
{
title: 'Available extensions',
path: '/extensions/'
}
];

View File

@ -1,23 +0,0 @@
module.exports = [
'/',
{
title: 'Forks',
path: '/forks/'
},
{
title: 'Frequently Asked Questions',
path: '/help/faq/',
},
{
title: 'Guides',
path: '/help/guides/getting-started',
},
{
title: 'Contribution',
path: '/help/contribution'
},
{
title: 'Available extensions',
path: '/extensions/'
}
];

View File

@ -1,52 +0,0 @@
module.exports = [
'/',
{
title: 'Guides',
collapsable: false,
sidebarDepth: 2,
children: [
{
title: 'General',
collapsable: false,
sidebarDepth: 2,
children: [
'/help/guides/getting-started',
'/help/guides/source-problems',
'/help/guides/source-migration',
'/help/guides/creating-backups',
'/help/guides/reading-local-manga',
'/help/guides/categories'
]
},
{
title: 'Settings',
collapsable: false,
sidebarDepth: 2,
children: [
'/help/guides/settings/general',
'/help/guides/settings/reader',
'/help/guides/settings/downloads',
'/help/guides/settings/tracking',
'/help/guides/settings/backup',
'/help/guides/settings/advanced'
]
}
]
},
{
title: 'Frequently Asked Questions',
path: '/help/faq/',
},
{
title: 'Forks',
path: '/forks/'
},
{
title: 'Contribution',
path: '/help/contribution'
},
{
title: 'Available extensions',
path: '/extensions/'
}
];

View File

@ -1,18 +1,18 @@
import './styles/fonts.styl'
import './styles/animate.css'
import 'sweetalert2/dist/sweetalert2.min.css';
import 'vue-material-design-icons/styles.css';
import "./styles/fonts.styl";
import "./styles/animate.css";
import "./styles/sweetalert2.css";
import "vue-material-design-icons/styles.css";
import { VueAgile } from 'vue-agile';
import VueSweetalert2 from 'vue-sweetalert2';
import { VueAgile } from "vue-agile";
import VueSweetalert2 from "vue-sweetalert2";
export default ({
Vue, // the version of Vue being used in the VuePress app
options, // the options for the root Vue instance
router, // the router instance for the app
siteData // site metadata
siteData, // site metadata
}) => {
// eslint-disable-next-line vue/match-component-file-name
Vue.component('Agile', VueAgile);
Vue.component("Agile", VueAgile);
Vue.use(VueSweetalert2);
};

View File

@ -106,7 +106,7 @@
animation-iteration-count: 1 !important;
}
.animate__animated[class*='Out'] {
.animate__animated[class*="Out"] {
opacity: 0;
}
}

View File

@ -1,6 +1,6 @@
@font-face
font-family 'Material Icons'
font-family "Material Icons"
font-style normal
font-weight 400
src url('~material-design-icons/iconfont/MaterialIcons-Regular.eot')
src local('Material Icons'), local('MaterialIcons-Regular'), url('~material-design-icons/iconfont/MaterialIcons-Regular.woff2') format('woff2'), url('~material-design-icons/iconfont/MaterialIcons-Regular.woff') format('woff'), url('~material-design-icons/iconfont/MaterialIcons-Regular.ttf') format('truetype'), url('~material-design-icons/iconfont/MaterialIcons-Regular.svg#MaterialIcons-Regular') format('svg')
src url("~material-design-icons/iconfont/MaterialIcons-Regular.eot")
src local("Material Icons"), local("MaterialIcons-Regular"), url("~material-design-icons/iconfont/MaterialIcons-Regular.woff2") format("woff2"), url("~material-design-icons/iconfont/MaterialIcons-Regular.woff") format("woff"), url("~material-design-icons/iconfont/MaterialIcons-Regular.ttf") format("truetype"), url("~material-design-icons/iconfont/MaterialIcons-Regular.svg#MaterialIcons-Regular") format("svg")

View File

@ -72,7 +72,7 @@ font-feature-settings()
font-weight normal
&::before
&::after
content ''
content ""
left 0
position absolute
&::before

View File

@ -23,8 +23,8 @@ $MQNarrow = 959px
$MQMobile = 767px
$MQMobileNarrow = 419px
// Fonts
$buttonFontFamily = 'Open Sans', Roboto, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif
$codeFontFamily = source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace
$buttonFontFamily = "Open Sans", Roboto, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif
$codeFontFamily = source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace
// Forks
$nekoAccentColor = #3DDA83
$j2kAccentColor = $accentColor

File diff suppressed because it is too large Load Diff

View File

@ -8,70 +8,84 @@
id="algolia-search-input"
class="search-query"
:placeholder="placeholder"
>
/>
</form>
</template>
<script>
export default {
name: 'AlgoliaSearchBox',
name: "AlgoliaSearchBox",
props: ['options'],
props: {
options: {
type: Object,
default: () => {},
},
},
data () {
data() {
return {
placeholder: undefined
}
placeholder: undefined,
};
},
watch: {
$lang (newValue) {
this.update(this.options, newValue)
$lang(newValue) {
this.update(this.options, newValue);
},
options (newValue) {
this.update(newValue, this.$lang)
}
options(newValue) {
this.update(newValue, this.$lang);
},
},
mounted () {
this.initialize(this.options, this.$lang)
this.placeholder = this.$site.themeConfig.searchPlaceholder || ''
mounted() {
this.initialize(this.options, this.$lang);
this.placeholder = this.$site.themeConfig.searchPlaceholder || "";
},
methods: {
initialize (userOptions, lang) {
initialize(userOptions, lang) {
Promise.all([
import(/* webpackChunkName: "docsearch" */ 'docsearch.js/dist/cdn/docsearch.min.js'),
import(/* webpackChunkName: "docsearch" */ 'docsearch.js/dist/cdn/docsearch.min.css')
import(
/* webpackChunkName: "docsearch" */ "docsearch.js/dist/cdn/docsearch.min.js"
),
import(
/* webpackChunkName: "docsearch" */ "docsearch.js/dist/cdn/docsearch.min.css"
),
]).then(([docsearch]) => {
docsearch = docsearch.default
const { algoliaOptions = {}} = userOptions
docsearch(Object.assign(
{},
userOptions,
{
inputSelector: '#algolia-search-input',
// eslint-disable-next-line no-param-reassign
docsearch = docsearch.default;
const { algoliaOptions = {} } = userOptions;
docsearch({
...userOptions,
inputSelector: "#algolia-search-input",
// #697 Make docsearch work well at i18n mode.
algoliaOptions: Object.assign({
'facetFilters': [`lang:${lang}`].concat(algoliaOptions.facetFilters || [])
}, algoliaOptions),
algoliaOptions: {
facetFilters: [`lang:${lang}`].concat(
algoliaOptions.facetFilters || []
),
...algoliaOptions,
},
handleSelected: (input, event, suggestion) => {
const { pathname, hash } = new URL(suggestion.url)
const routepath = pathname.replace(this.$site.base, '/')
this.$router.push(`${routepath}${hash}`)
}
}
))
})
const { pathname, hash } = new URL(suggestion.url);
const routepath = pathname.replace(
this.$site.base,
"/"
);
this.$router.push(`${routepath}${hash}`);
},
});
});
},
update (options, lang) {
this.$el.innerHTML = '<input id="algolia-search-input" class="search-query">'
this.initialize(options, lang)
}
}
}
update(options, lang) {
this.$el.innerHTML =
'<input id="algolia-search-input" class="search-query">';
this.initialize(options, lang);
},
},
};
</script>
<style lang="stylus">
@ -178,5 +192,4 @@ export default {
width 5px
margin -3px 3px 0
vertical-align middle
</style>

View File

@ -230,6 +230,7 @@ export default {
popup:
"animate__animated animate__faster animate__zoomOut",
},
// eslint-disable-next-line no-shadow
}).then((result) => {
if (result.value) {
this.$swal({

View File

@ -2,94 +2,113 @@
<header class="navbar">
<SidebarButton @toggle-sidebar="$emit('toggle-sidebar')" />
<RouterLink
:to="$localePath"
class="home-link"
>
<RouterLink :to="$localePath" class="home-link">
<img
v-if="$site.themeConfig.logo"
class="logo"
:src="$withBase($site.themeConfig.logo)"
:alt="$siteTitle"
>
/>
<span
v-if="$siteTitle"
ref="siteName"
class="site-name"
:class="{ 'can-hide': $site.themeConfig.logo }"
>{{ $siteTitle }}</span>
>{{ $siteTitle }}</span
>
</RouterLink>
<div
class="links"
:style="linksWrapMaxWidth ? {
'max-width': linksWrapMaxWidth + 'px'
} : {}"
:style="
linksWrapMaxWidth
? {
'max-width': linksWrapMaxWidth + 'px',
}
: {}
"
>
<div v-if="$page.frontmatter.hideSearch"/>
<AlgoliaSearchBox
v-else-if="isAlgoliaSearch"
:options="algolia"
<div v-if="$page.frontmatter.hideSearch" />
<AlgoliaSearchBox v-else-if="isAlgoliaSearch" :options="algolia" />
<SearchBox
v-else-if="
$site.themeConfig.search !== false &&
$page.frontmatter.search !== false
"
/>
<SearchBox v-else-if="$site.themeConfig.search !== false && $page.frontmatter.search !== false" />
<NavLinks class="can-hide" />
</div>
</header>
</template>
<script>
import AlgoliaSearchBox from './AlgoliaSearchBox.vue'
import SearchBox from '@SearchBox'
import SidebarButton from '@theme/components/SidebarButton.vue'
import NavLinks from '@theme/components/NavLinks.vue'
import SearchBox from "@SearchBox";
import SidebarButton from "@theme/components/SidebarButton.vue";
import NavLinks from "@theme/components/NavLinks.vue";
import AlgoliaSearchBox from "./AlgoliaSearchBox.vue";
export default {
name: 'Navbar',
name: "Navbar",
components: {
SidebarButton,
NavLinks,
SearchBox,
AlgoliaSearchBox
AlgoliaSearchBox,
},
data () {
data() {
return {
linksWrapMaxWidth: null
}
linksWrapMaxWidth: null,
};
},
computed: {
algolia () {
return this.$themeLocaleConfig.algolia || this.$site.themeConfig.algolia || {}
algolia() {
return (
this.$themeLocaleConfig.algolia ||
this.$site.themeConfig.algolia ||
{}
);
},
isAlgoliaSearch () {
return this.algolia && this.algolia.apiKey && this.algolia.indexName
}
isAlgoliaSearch() {
return (
this.algolia && this.algolia.apiKey && this.algolia.indexName
);
},
},
mounted () {
const MOBILE_DESKTOP_BREAKPOINT = 719 // refer to config.styl
const NAVBAR_VERTICAL_PADDING = parseInt(css(this.$el, 'paddingLeft')) + parseInt(css(this.$el, 'paddingRight'))
mounted() {
const MOBILE_DESKTOP_BREAKPOINT = 719; // refer to config.styl
const NAVBAR_VERTICAL_PADDING =
// eslint-disable-next-line radix
parseInt(css(this.$el, "paddingLeft")) +
// eslint-disable-next-line radix
parseInt(css(this.$el, "paddingRight"));
const handleLinksWrapWidth = () => {
if (document.documentElement.clientWidth < MOBILE_DESKTOP_BREAKPOINT) {
this.linksWrapMaxWidth = null
if (
document.documentElement.clientWidth < MOBILE_DESKTOP_BREAKPOINT
) {
this.linksWrapMaxWidth = null;
} else {
this.linksWrapMaxWidth = this.$el.offsetWidth - NAVBAR_VERTICAL_PADDING
- (this.$refs.siteName && this.$refs.siteName.offsetWidth || 0)
this.linksWrapMaxWidth =
this.$el.offsetWidth -
NAVBAR_VERTICAL_PADDING -
((this.$refs.siteName && this.$refs.siteName.offsetWidth) ||
0);
}
}
handleLinksWrapWidth()
window.addEventListener('resize', handleLinksWrapWidth, false)
}
}
};
handleLinksWrapWidth();
window.addEventListener("resize", handleLinksWrapWidth, false);
},
};
function css (el, property) {
// NOTE: Known bug, will return 'auto' if style value is 'auto'
const win = el.ownerDocument.defaultView
function css(el, property) {
// NOTE: Known bug, will return "auto" if style value is "auto"
const win = el.ownerDocument.defaultView;
// null means not to return pseudo styles
return win.getComputedStyle(el, null)[property]
return win.getComputedStyle(el, null)[property];
}
</script>

View File

@ -1,3 +1,3 @@
module.exports = {
extend: "@vuepress/theme-default"
extend: "@vuepress/theme-default",
};

View File

@ -47,6 +47,6 @@ Visit our translation project [here](https://hosted.weblate.org/projects/tachiyo
## Donation
If you can't contribute code or translations but you still wish to help, then you can choose to contribute directly to the projects founder, [Inorichi](https://github.com/inorichi/) by using the button below, or going [directly to Ko-Fi](https://ko-fi.com/inorichi).
***
<a href='https://ko-fi.com/inorichi' target='_blank' rel='noopener'>
<img height='36' style='border:0px;height:36px;' src='https://cdn.ko-fi.com/cdn/kofi1.png?v=2' border='0' alt='Buy Me a Coffee at ko-fi.com' />
<a href="https://ko-fi.com/inorichi" target="_blank" rel="noopener">
<img height="36" style="border:0px;height:36px;" src="https://cdn.ko-fi.com/cdn/kofi1.png?v=2" border="0" alt="Buy Me a Coffee at ko-fi.com" />
</a>

View File

@ -12,8 +12,7 @@ Migration is the process of moving manga from one source to another while keepin
1. Go to <Navigation item="more"/> and tap <Navigation item="source_migration"/>.
1. Select the **Source** you're migrating from.
1. Find and select the title that you want to migrate.
**Tachiyomi** will do a global search of all the sources you have installed and enabled. If you don't find the manga you want, try searching for other titles it might go under.
> **Tachiyomi** will do a global search of all the sources you have installed and enabled. If you don't find the manga you want, try searching for other titles it might go under.
1. Once you find the manga you want to migrate, select it and then choose which data you want to transfer over, and you're done.
:::