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,47 +1,47 @@
{
"blocks": false,
"brackets": "never",
"colons": "never",
"colors": "always",
"commaSpace": "always",
"commentSpace": "always",
"cssLiteral": "never",
"customProperties": [],
"depthLimit": false,
"duplicates": true,
"efficient": "always",
"exclude": [],
"extendPref": "@extends",
"globalDupe": true,
"groupOutputByFile": true,
"indentPref": false,
"leadingZero": "always",
"maxErrors": false,
"maxWarnings": false,
"mixed": true,
"mixins": [],
"namingConvention": false,
"namingConventionStrict": false,
"none": "always",
"noImportant": false,
"parenSpace": "never",
"placeholders": "always",
"prefixVarsWithDollar": "always",
"quotePref": false,
"reporterOptions": {
"columns": ["lineData", "severity", "description", "rule"],
"columnSplitter": " ",
"showHeaders": false,
"truncate": true
},
"semicolons": "never",
"sortOrder": ["grouped", "alphabetical"],
"stackedProperties": "never",
"trailingWhitespace": "never",
"universal": false,
"valid": true,
"zeroUnits": "never",
"blocks": false,
"brackets": "never",
"colons": "never",
"colors": "always",
"commaSpace": "always",
"commentSpace": "always",
"cssLiteral": "never",
"customProperties": [],
"depthLimit": false,
"duplicates": true,
"efficient": "always",
"exclude": [],
"extendPref": "@extends",
"globalDupe": true,
"groupOutputByFile": true,
"indentPref": false,
"leadingZero": "always",
"maxErrors": false,
"maxWarnings": false,
"mixed": true,
"mixins": [],
"namingConvention": false,
"namingConventionStrict": false,
"none": "always",
"noImportant": false,
"parenSpace": "never",
"placeholders": "always",
"prefixVarsWithDollar": "always",
"quotePref": false,
"reporterOptions": {
"columns": ["lineData", "severity", "description", "rule"],
"columnSplitter": " ",
"showHeaders": false,
"truncate": true
},
"semicolons": "never",
"sortOrder": ["grouped", "alphabetical"],
"stackedProperties": "never",
"trailingWhitespace": "never",
"universal": false,
"valid": true,
"zeroUnits": "never",
"zIndexNormalize": false,
"stylusSupremacy.selectorSeparator": ",\n",
"stylusSupremacy.insertNewLineAroundBlocks": "root"
"stylusSupremacy.selectorSeparator": ",\n",
"stylusSupremacy.insertNewLineAroundBlocks": "root"
}

View File

@ -1,9 +1,11 @@
<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>
<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>
</div>
## Contributing
@ -18,8 +20,8 @@ Pull requests are welcome. For major changes, please open an issue first to disc
## License
Copyright (C) 2018 The Tachiyomi Open Source Project
Copyright (C) 2018 The Tachiyomi Open Source Project
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.

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

@ -1,27 +1,23 @@
<template>
<Layout :class="$frontmatter.title">
<main class="page">
<slot name="top" />
<slot name="top" />
<Content class="theme-default-content" />
<PageEdit />
<Content class="theme-default-content" />
<PageEdit />
<PageNav v-bind="{ sidebarItems }" />
<slot name="bottom" />
<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

@ -158,209 +158,209 @@ export default {
<style lang="stylus">
.help-page
.page
padding-left 0 !important
padding-bottom 2rem
display block
.theme-custom-content
max-width 75rem
margin 0 auto
padding 2rem 2.5rem
*
box-sizing border-box
h1
text-align center
.header-anchor
display none
h3
.header-anchor
display none
.content__center
text-align center
margin-bottom 2rem
.algolia-search-wrapper
width 100%
text-align center
margin-bottom 5rem
.algolia-autocomplete
width 50%
input
background #ffffff url('/assets/img/search.83621669.svg') 0.6rem 0.9rem no-repeat
background-size 1rem
box-shadow 0 0 30px rgba(177, 174, 174, 0.322)
border 1px solid #cfd4db
font-size 1.2rem
height 3rem
width 100%
.card
background-color white
border-bottom 1px solid transparent
border-radius 6px
box-shadow 0 0 30px #b1aeae52
color $accentColor
height 100%
overflow hidden
padding 0.5rem
text-align center
user-select none
width auto
header
margin-top 1.25rem
white-space nowrap
.material-icons,
.material-design-icon
display contents
font-size 2.5em
color $accentColorSecondary
.material-design-icon > .material-design-icon__svg
position relative
span
display block
.icon.outbound
display inline-block
visibility hidden
vertical-align baseline
right 10px
h3
display inline-block
margin-left 1.8rem
margin-bottom 0
h3
margin 10px
p
color #566573
font-weight 400
font-size 0.95rem
&:hover
border-bottom 2px solid $accentColor
border-bottom-left-radius 0
border-bottom-right-radius 0
position relative
.material-design-icon
color $accentColor
&.discord-icon
color $discordAccentColor
&.reddit-icon
color $redditAccentColor
&.github-icon
color $githubAccentColor
.icon.outbound
visibility visible
&__Discord:hover
border-bottom 2px solid $discordAccentColor
h3
color $discordAccentColor
&__Reddit:hover
border-bottom 2px solid $redditAccentColor
h3
color $redditAccentColor
&__GitHub:hover
border-bottom 2px solid $githubAccentColor
h3
color $githubAccentColor
.column
border 1px solid #cfd4db
border-radius 6px
&:hover
border-bottom none
a:focus
box-shadow none
outline none
.card
box-shadow 0 0 30px #b1aeae52, 0 0 0 1px #fff, 0 0 0 3px rgba(50, 100, 150, 0.4)
outline none
.row
display grid
grid-template-columns repeat(4, 1fr)
grid-auto-rows 1fr
grid-gap 1rem
&:after
content ''
display table
clear both
.page
padding-left 0 !important
padding-bottom 2rem
display block
.theme-custom-content
max-width 75rem
margin 0 auto
padding 2rem 2.5rem
*
box-sizing border-box
h1
text-align center
.header-anchor
display none
h3
.header-anchor
display none
.content__center
text-align center
margin-bottom 2rem
.algolia-search-wrapper
width 100%
text-align center
margin-bottom 5rem
.algolia-autocomplete
width 50%
input
background #ffffff url('/assets/img/search.83621669.svg') 0.6rem 0.9rem no-repeat
background-size 1rem
box-shadow 0 0 30px rgba(177, 174, 174, 0.322)
border 1px solid #cfd4db
font-size 1.2rem
height 3rem
width 100%
.card
background-color white
border-bottom 1px solid transparent
border-radius 6px
box-shadow 0 0 30px #b1aeae52
color $accentColor
height 100%
overflow hidden
padding 0.5rem
text-align center
user-select none
width auto
header
margin-top 1.25rem
white-space nowrap
.material-icons,
.material-design-icon
display contents
font-size 2.5em
color $accentColorSecondary
.material-design-icon > .material-design-icon__svg
position relative
span
display block
.icon.outbound
display inline-block
visibility hidden
vertical-align baseline
right 10px
h3
display inline-block
margin-left 1.8rem
margin-bottom 0
h3
margin 10px
p
color #566573
font-weight 400
font-size 0.95rem
&:hover
border-bottom 2px solid $accentColor
border-bottom-left-radius 0
border-bottom-right-radius 0
position relative
.material-design-icon
color $accentColor
&.discord-icon
color $discordAccentColor
&.reddit-icon
color $redditAccentColor
&.github-icon
color $githubAccentColor
.icon.outbound
visibility visible
&__Discord:hover
border-bottom 2px solid $discordAccentColor
h3
color $discordAccentColor
&__Reddit:hover
border-bottom 2px solid $redditAccentColor
h3
color $redditAccentColor
&__GitHub:hover
border-bottom 2px solid $githubAccentColor
h3
color $githubAccentColor
.column
border 1px solid #cfd4db
border-radius 6px
&:hover
border-bottom none
a:focus
box-shadow none
outline none
.card
box-shadow 0 0 30px #b1aeae52, 0 0 0 1px #fff, 0 0 0 3px rgba(50, 100, 150, 0.4)
outline none
.row
display grid
grid-template-columns repeat(4, 1fr)
grid-auto-rows 1fr
grid-gap 1rem
&:after
content ""
display table
clear both
@media screen and (max-width $MQMobile)
.help-page
.page
.theme-custom-content
padding 2rem 0.75rem
padding-bottom 0
h1
margin-bottom 0.5rem
.content__center
margin-top 0
padding-top 0
.algolia-search-wrapper
width 100%
margin-bottom 1rem
.algolia-autocomplete
width 100%
padding 0.4rem 0.65rem
input
width 100%
left 0
.column
margin 0.4rem 0.6rem
.card
height auto
width auto
header
margin-top 1rem
.material-icons,
.material-design-icon
font-size 1.6em
&.discord-icon
color $discordAccentColor
&.reddit-icon
color $redditAccentColor
&.github-icon
color $githubAccentColor
span
display inline-block
.icon.outbound
visibility visible
right 0
top -4px
h3
margin-left 0
margin-bottom 0
h3
font-size 1.5rem
display inline-block
margin 0
p
font-size 1rem
&:hover
border-bottom 2px solid #cfd4db
border-bottom-left-radius 6px
border-bottom-right-radius 6px
position inherit
top unset
.material-design-icon
color $accentColorSecondary
&__Discord
h3
color $discordAccentColor
&__Reddit
h3
color $redditAccentColor
&__GitHub
h3
color $githubAccentColor
.row
grid-template-columns repeat(1, 1fr)
.navbar
padding-left 1rem
.logo
margin-right 0
.can-hide
display block
.sidebar-button
display none
.site-name.can-hide
display none
.nav-links.can-hide
.nav-item,
.repo-link
padding-left 0.8em
.help-page
.page
.theme-custom-content
padding 2rem 0.75rem
padding-bottom 0
h1
margin-bottom 0.5rem
.content__center
margin-top 0
padding-top 0
.algolia-search-wrapper
width 100%
margin-bottom 1rem
.algolia-autocomplete
width 100%
padding 0.4rem 0.65rem
input
width 100%
left 0
.column
margin 0.4rem 0.6rem
.card
height auto
width auto
header
margin-top 1rem
.material-icons,
.material-design-icon
font-size 1.6em
&.discord-icon
color $discordAccentColor
&.reddit-icon
color $redditAccentColor
&.github-icon
color $githubAccentColor
span
display inline-block
.icon.outbound
visibility visible
right 0
top -4px
h3
margin-left 0
margin-bottom 0
h3
font-size 1.5rem
display inline-block
margin 0
p
font-size 1rem
&:hover
border-bottom 2px solid #cfd4db
border-bottom-left-radius 6px
border-bottom-right-radius 6px
position inherit
top unset
.material-design-icon
color $accentColorSecondary
&__Discord
h3
color $discordAccentColor
&__Reddit
h3
color $redditAccentColor
&__GitHub
h3
color $githubAccentColor
.row
grid-template-columns repeat(1, 1fr)
.navbar
padding-left 1rem
.logo
margin-right 0
.can-hide
display block
.sidebar-button
display none
.site-name.can-hide
display none
.nav-links.can-hide
.nav-item,
.repo-link
padding-left 0.8em
</style>

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

@ -1,23 +1,23 @@
{
"name": "Tachiyomi",
"short_name": "Tachiyomi",
"description": "Free and open source manga reader for Android.",
"lang": "en-US",
"theme_color": "#2e84bf",
"background_color": "#ffffff",
"start_url": "/",
"display": "standalone",
"orientation": "portrait-primary",
"icons": [
{
"src": "/icons/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/icons/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
"name": "Tachiyomi",
"short_name": "Tachiyomi",
"description": "Free and open source manga reader for Android.",
"lang": "en-US",
"theme_color": "#2e84bf",
"background_color": "#ffffff",
"start_url": "/",
"display": "standalone",
"orientation": "portrait-primary",
"icons": [
{
"src": "/icons/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/icons/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}

File diff suppressed because it is too large Load Diff

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

@ -1,182 +1,195 @@
<template>
<form
id="search-form"
class="algolia-search-wrapper search-box"
role="search"
>
<input
id="algolia-search-input"
class="search-query"
:placeholder="placeholder"
>
</form>
<form
id="search-form"
class="algolia-search-wrapper search-box"
role="search"
>
<input
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 () {
return {
placeholder: undefined
}
},
data() {
return {
placeholder: undefined,
};
},
watch: {
$lang (newValue) {
this.update(this.options, newValue)
},
watch: {
$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) {
Promise.all([
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',
// #697 Make docsearch work well at i18n mode.
algoliaOptions: Object.assign({
'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}`)
}
}
))
})
},
methods: {
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"
),
]).then(([docsearch]) => {
// 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: {
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}`);
},
});
});
},
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">
.algolia-search-wrapper
& > span
vertical-align middle
&.search-box
input
border-radius 6px
.algolia-autocomplete
line-height normal
.ds-dropdown-menu
background-color #fff
border 1px solid #dde0e5
border-radius 4px
font-size 16px
margin 6px 0 0
padding 12px
text-align left
&:before
border-color #dde0e5
[class*=ds-dataset-]
border none
padding 0
.ds-suggestions
margin-top 0
.ds-suggestion
border-bottom none
.algolia-docsearch-suggestion--text
font-size 0.7em
.algolia-docsearch-suggestion--highlight
color $accentColor
font-weight 600
background rgba(143,187,237,0.05)
padding 0
.algolia-docsearch-suggestion
border-color $borderColor
padding 0
.algolia-docsearch-suggestion--category-header
border 0px
border-bottom 1px solid #EAECEF
padding 5px 10px
margin-top 0
background transparent
color $textColor
font-weight 400
.algolia-docsearch-suggestion--highlight
background rgba(255, 255, 255, 0.6)
.algolia-docsearch-suggestion--wrapper
padding 0
padding-top 0.5rem
.algolia-docsearch-suggestion--title
font-weight 500
margin-bottom 0
color $textColor
.algolia-docsearch-suggestion--subcategory-column
vertical-align top
padding 5px 7px 5px 5px
border-color $borderColor
background #fff
&:after
display none
.algolia-docsearch-suggestion--subcategory-column-text
color lighten($accentColorSecondary, 40%)
font-weight 400
.algolia-docsearch-footer
border-color $borderColor
.ds-cursor .algolia-docsearch-suggestion--content
background-color #e7edf3 !important
color $textColor
& > span
vertical-align middle
&.search-box
input
border-radius 6px
.algolia-autocomplete
line-height normal
.ds-dropdown-menu
background-color #fff
border 1px solid #dde0e5
border-radius 4px
font-size 16px
margin 6px 0 0
padding 12px
text-align left
&:before
border-color #dde0e5
[class*=ds-dataset-]
border none
padding 0
.ds-suggestions
margin-top 0
.ds-suggestion
border-bottom none
.algolia-docsearch-suggestion--text
font-size 0.7em
.algolia-docsearch-suggestion--highlight
color $accentColor
font-weight 600
background rgba(143,187,237,0.05)
padding 0
.algolia-docsearch-suggestion
border-color $borderColor
padding 0
.algolia-docsearch-suggestion--category-header
border 0px
border-bottom 1px solid #EAECEF
padding 5px 10px
margin-top 0
background transparent
color $textColor
font-weight 400
.algolia-docsearch-suggestion--highlight
background rgba(255, 255, 255, 0.6)
.algolia-docsearch-suggestion--wrapper
padding 0
padding-top 0.5rem
.algolia-docsearch-suggestion--title
font-weight 500
margin-bottom 0
color $textColor
.algolia-docsearch-suggestion--subcategory-column
vertical-align top
padding 5px 7px 5px 5px
border-color $borderColor
background #fff
&:after
display none
.algolia-docsearch-suggestion--subcategory-column-text
color lighten($accentColorSecondary, 40%)
font-weight 400
.algolia-docsearch-footer
border-color $borderColor
.ds-cursor .algolia-docsearch-suggestion--content
background-color #e7edf3 !important
color $textColor
@media (min-width: $MQMobile)
.algolia-search-wrapper
.algolia-autocomplete
.algolia-docsearch-suggestion
.algolia-docsearch-suggestion--subcategory-column
float none
width 150px
min-width 150px
display table-cell
.algolia-docsearch-suggestion--content
float none
display table-cell
width 100%
vertical-align top
.ds-dropdown-menu
min-width 515px !important
.algolia-search-wrapper
.algolia-autocomplete
.algolia-docsearch-suggestion
.algolia-docsearch-suggestion--subcategory-column
float none
width 150px
min-width 150px
display table-cell
.algolia-docsearch-suggestion--content
float none
display table-cell
width 100%
vertical-align top
.ds-dropdown-menu
min-width 515px !important
@media (max-width: $MQMobile)
.algolia-search-wrapper
.ds-dropdown-menu
min-width calc(100vw - 4rem) !important
max-width calc(100vw - 4rem) !important
.algolia-docsearch-suggestion--wrapper
padding 5px 7px 5px 5px !important
.algolia-docsearch-suggestion--subcategory-column
padding 0 !important
background white !important
.algolia-docsearch-suggestion--subcategory-column-text:after
content " > "
font-size 10px
line-height 14.4px
display inline-block
width 5px
margin -3px 3px 0
vertical-align middle
.algolia-search-wrapper
.ds-dropdown-menu
min-width calc(100vw - 4rem) !important
max-width calc(100vw - 4rem) !important
.algolia-docsearch-suggestion--wrapper
padding 5px 7px 5px 5px !important
.algolia-docsearch-suggestion--subcategory-column
padding 0 !important
background white !important
.algolia-docsearch-suggestion--subcategory-column-text:after
content " > "
font-size 10px
line-height 14.4px
display inline-block
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

@ -1,95 +1,114 @@
<template>
<header class="navbar">
<SidebarButton @toggle-sidebar="$emit('toggle-sidebar')" />
<header class="navbar">
<SidebarButton @toggle-sidebar="$emit('toggle-sidebar')" />
<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>
</RouterLink>
<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
>
</RouterLink>
<div
class="links"
:style="linksWrapMaxWidth ? {
'max-width': linksWrapMaxWidth + 'px'
} : {}"
>
<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" />
<NavLinks class="can-hide" />
</div>
</header>
<div
class="links"
:style="
linksWrapMaxWidth
? {
'max-width': linksWrapMaxWidth + 'px',
}
: {}
"
>
<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
"
/>
<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
},
components: {
SidebarButton,
NavLinks,
SearchBox,
AlgoliaSearchBox,
},
data () {
return {
linksWrapMaxWidth: null
}
},
data() {
return {
linksWrapMaxWidth: null,
};
},
computed: {
algolia () {
return this.$themeLocaleConfig.algolia || this.$site.themeConfig.algolia || {}
},
computed: {
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'))
const handleLinksWrapWidth = () => {
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)
}
}
handleLinksWrapWidth()
window.addEventListener('resize', handleLinksWrapWidth, false)
}
}
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;
} else {
this.linksWrapMaxWidth =
this.$el.offsetWidth -
NAVBAR_VERTICAL_PADDING -
((this.$refs.siteName && this.$refs.siteName.offsetWidth) ||
0);
}
};
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
// null means not to return pseudo styles
return win.getComputedStyle(el, null)[property]
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];
}
</script>
@ -98,44 +117,44 @@ $navbar-vertical-padding = 0.7rem
$navbar-horizontal-padding = 1.5rem
.navbar
padding $navbar-vertical-padding $navbar-horizontal-padding
line-height $navbarHeight - 1.4rem
a, span, img
display inline-block
.logo
height $navbarHeight - 1.4rem
min-width $navbarHeight - 1.4rem
margin-right 0.8rem
vertical-align top
.site-name
font-size 1.3rem
font-weight 600
color $textColor
position relative
.links
padding-left 1.5rem
box-sizing border-box
background-color white
white-space nowrap
font-size 0.9rem
position absolute
right $navbar-horizontal-padding
top $navbar-vertical-padding
display flex
.search-box
flex: 0 0 auto
vertical-align top
padding $navbar-vertical-padding $navbar-horizontal-padding
line-height $navbarHeight - 1.4rem
a, span, img
display inline-block
.logo
height $navbarHeight - 1.4rem
min-width $navbarHeight - 1.4rem
margin-right 0.8rem
vertical-align top
.site-name
font-size 1.3rem
font-weight 600
color $textColor
position relative
.links
padding-left 1.5rem
box-sizing border-box
background-color white
white-space nowrap
font-size 0.9rem
position absolute
right $navbar-horizontal-padding
top $navbar-vertical-padding
display flex
.search-box
flex: 0 0 auto
vertical-align top
@media (max-width: $MQMobile)
.navbar
padding-left 4rem
.can-hide
display none
.links
padding-left 1.5rem
.site-name
width calc(100vw - 9.4rem)
overflow hidden
white-space nowrap
text-overflow ellipsis
.navbar
padding-left 4rem
.can-hide
display none
.links
padding-left 1.5rem
.site-name
width calc(100vw - 9.4rem)
overflow hidden
white-space nowrap
text-overflow ellipsis
</style>

View File

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

View File

@ -6,14 +6,14 @@ buttonDownload: Download
buttonGuides: User guide
buttonGuidesLink: /help/guides/getting-started
features:
- title: Tracking
details: Automatically keep track of your manga with MyAnimeList, AniList, Kitsu, Shikimori, and Bangumi.
image: Library
- title: Extensions
details: Online reading from sources such as MangaDex, MangaKakalot and hundreds more.
image: Browse
- title: Customization
details: A configurable reader with multiple viewers, reading directions and other settings.
image: Manga
- title: Tracking
details: Automatically keep track of your manga with MyAnimeList, AniList, Kitsu, Shikimori, and Bangumi.
image: Library
- title: Extensions
details: Online reading from sources such as MangaDex, MangaKakalot and hundreds more.
image: Browse
- title: Customization
details: A configurable reader with multiple viewers, reading directions and other settings.
image: Manga
footer: Apache Licensed | Copyright © 2015-present Javier Tomás
---

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

@ -36,40 +36,40 @@ All examples are illustrations and may not reflect what actually happens.
<Carousel name="carousel-scale-type">
<CarouselItem>
<figure class="centered">
<h4>Fit screen</h4>
<p>Will fit either to width or height depending on image resolution</p>
<h4>Fit screen</h4>
<p>Will fit either to width or height depending on image resolution</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/fitscreen.png')">
</figure>
</CarouselItem>
<CarouselItem>
<figure class="centered">
<h4>Stretch</h4>
<h4>Stretch</h4>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/stretch.png')">
</figure>
</CarouselItem>
<CarouselItem>
<figure class="centered">
<h4>Fit width</h4>
<h4>Fit width</h4>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/fitwidth.png')">
</figure>
</CarouselItem>
<CarouselItem>
<figure class="centered">
<h4>Fit height</h4>
<h4>Fit height</h4>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/fitheight.png')">
</figure>
</CarouselItem>
<CarouselItem>
<figure class="centered">
<h4>Original size</h4>
<p>Will be either zoom in or out depending on image resolution</p>
<h4>Original size</h4>
<p>Will be either zoom in or out depending on image resolution</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/originalsize.png')">
</figure>
</CarouselItem>
<CarouselItem>
<figure class="centered">
<h4>Smart fit</h4>
<p>Fits to the longest side of the image</p>
<h4>Smart fit</h4>
<p>Fits to the longest side of the image</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/smartfit.png')">
</figure>
</CarouselItem>
@ -90,23 +90,23 @@ All examples are illustrations
<Carousel name="carousel-zoom-start-position">
<CarouselItem>
<figure class="centered">
<h4>Left</h4>
<p>Will start at the left side of the page.</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/zoomstartpositionleft.png')">
<h4>Left</h4>
<p>Will start at the left side of the page.</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/zoomstartpositionleft.png')">
</figure>
</CarouselItem>
<CarouselItem>
<figure class="centered">
<h4>Right</h4>
<p>Will start at the right side of the page.</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/zoomstartpositionright.png')">
<h4>Right</h4>
<p>Will start at the right side of the page.</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/zoomstartpositionright.png')">
</figure>
</CarouselItem>
<CarouselItem>
<figure class="centered">
<h4>Center</h4>
<p>Will start at the center of the page.</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/zoomstartpositioncenter.png')">
<h4>Center</h4>
<p>Will start at the center of the page.</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/zoomstartpositioncenter.png')">
</figure>
</CarouselItem>
</Carousel>
@ -126,16 +126,16 @@ This allows you to control what color the background should be in reader. Backgr
<Carousel name="carousel-background-color">
<CarouselItem>
<figure class="centered">
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/backgroundcolorblack.png')">
<h4>Black</h4>
<p>Surrounds page with black. With an AMOLED screen you can save battery by using this.</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/backgroundcolorblack.png')">
<h4>Black</h4>
<p>Surrounds page with black. With an AMOLED screen you can save battery by using this.</p>
</figure>
</CarouselItem>
<CarouselItem>
<figure class="centered">
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/backgroundcolorwhite.png')">
<h4>White</h4>
<p>Surrounds page with white. Makes pages seemless with the screen.</p>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/backgroundcolorwhite.png')">
<h4>White</h4>
<p>Surrounds page with white. Makes pages seemless with the screen.</p>
</figure>
</CarouselItem>
</Carousel>
@ -172,14 +172,14 @@ Tries to remove excess white borders
<Carousel name="carousel-crop-borders">
<CarouselItem>
<figure class="centered">
<h4>With Crop borders on</h4>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/withcropborder.png')">
<h4>With Crop borders on</h4>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/withcropborder.png')">
</figure>
</CarouselItem>
<CarouselItem>
<figure class="centered">
<h4>With Crop borders off</h4>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/withoutcropborder.png')">
<h4>With Crop borders off</h4>
<img height="400" intrinsicsize="208x500" width="260" :src="$withBase('/assets/media/withoutcropborder.png')">
</figure>
</CarouselItem>
</Carousel>

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.
:::

View File

@ -54,9 +54,9 @@ In this case it is a problem with the site.
You can open WebView in two of the following ways:
* If you already have a manga in **Library**
* Open the manga in **Library**, then click on the <Navigation item="webview"/> on the **INFO** tab.
* Open the manga in **Library**, then click on the <Navigation item="webview"/> on the **INFO** tab.
* If you don't have manga in **Library**
* Go to <Navigation item="browse"/> and click on **BROWSE** beside the source. Then open a manga and click on <Navigation item="webview"/>.
* Go to <Navigation item="browse"/> and click on **BROWSE** beside the source. Then open a manga and click on <Navigation item="webview"/>.
Once in WebView, you will see a webpage and a bar on top with an arrow at the left side, pointing to the left edge of your screen.
If there is no CAPTCHA on the webpage, initiate one by tapping a manga title, if possible. Once a CAPTCHA is shown, solve it. After that, use the aforementioned back arrow on the bar at the top of your screen to go back to your manga. Please do not use the back button on your phone as it does not work as expected.