Remove Vuepress site

This commit is contained in:
arkon 2023-09-10 17:57:15 -04:00
parent d1982a751f
commit dd82cdcbb7
133 changed files with 0 additions and 47358 deletions

View File

@ -1,13 +0,0 @@
root = true
[*]
end_of_line = lf
indent_style = tab
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.yml]
indent_style = space
indent_size = 2

View File

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

View File

@ -1,32 +0,0 @@
module.exports = {
env: {
browser: true,
es6: true,
},
extends: ["vuepress", "prettier"],
plugins: ["vue", "prettier", "markdown"],
parserOptions: {
ecmaVersion: 2018,
parser: "babel-eslint",
sourceType: "module",
},
rules: {
"prettier/prettier": [
"error",
{
endOfLine: "auto",
},
],
"import/no-unresolved": [
2,
{
ignore: ["^@"],
},
],
curly: ["error", "all"],
"vue/multi-word-component-names": "off"
},
};

View File

@ -1,13 +0,0 @@
contact_links:
- name: ⚠️ Application issue
url: https://github.com/tachiyomiorg/tachiyomi/issues/new/choose
about: Issues and requests about the app itself should be opened in the tachiyomi repository instead
- name: ⚠️ Extension/source issue
url: https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose
about: Issues and requests for extensions and sources should be opened in the tachiyomi-extensions repository instead
- name: 📦 Tachiyomi extensions
url: https://tachiyomi.org/extensions
about: List of all available extensions with download links
- name: 🖥️ Tachiyomi website
url: https://tachiyomi.org/help/
about: Guides, troubleshooting, and answers to common questions

View File

@ -1,59 +0,0 @@
name: 🐞 Issue report
description: Report an issue with tachiyomi.org
labels: [Bug]
body:
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Read this carefully, we will close and ignore your issue if you skimmed through this.
options:
- label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue.
required: true
- label: I have written a short but informative title.
required: true
- label: I will fill out all of the requested information in this form.
required: true
- type: textarea
id: reproduce-steps
attributes:
label: Steps to reproduce
description: Provide an example of the issue.
placeholder: |
Example:
1. First step
2. Second step
3. Issue here
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
description: Explain what you should expect to happen.
placeholder: |
Example:
"This should happen..."
validations:
required: true
- type: textarea
id: actual-behavior
attributes:
label: Actual behavior
description: Explain what actually happens.
placeholder: |
Example:
"This happened instead..."
validations:
required: true
- type: textarea
id: other-details
attributes:
label: Other details
placeholder: |
Additional details and attachments.

View File

@ -1,35 +0,0 @@
name: ⭐ Feature request
description: Suggest a feature to improve tachiyomi.org
labels: [Feature request]
body:
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Read this carefully, we will close and ignore your issue if you skimmed through this.
options:
- label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue.
required: true
- label: I have written a short but informative title.
required: true
- label: I will fill out all of the requested information in this form.
required: true
- type: textarea
id: feature-description
attributes:
label: Describe your suggested feature
description: How can the website be improved?
placeholder: |
Example:
"It should work like this..."
validations:
required: true
- type: textarea
id: other-details
attributes:
label: Other details
placeholder: |
Additional details and attachments.

View File

@ -1,111 +0,0 @@
{
"PresetList": [
{
"AlignAVStart": false,
"AudioCopyMask": [
"copy:aac",
"copy:ac3",
"copy:dtshd",
"copy:dts",
"copy:mp3",
"copy:truehd",
"copy:flac",
"copy:eac3"
],
"AudioEncoderFallback": "ac3",
"AudioLanguageList": [],
"AudioList": [
{
"AudioBitrate": 128,
"AudioCompressionLevel": 0.0,
"AudioEncoder": "av_aac",
"AudioMixdown": "stereo",
"AudioNormalizeMixLevel": false,
"AudioSamplerate": "auto",
"AudioTrackQualityEnable": false,
"AudioTrackQuality": -1.0,
"AudioTrackGainSlider": 0.0,
"AudioTrackDRCSlider": 0.0
}
],
"AudioSecondaryEncoderMode": true,
"AudioTrackSelectionBehavior": "first",
"ChapterMarkers": false,
"ChildrenArray": [],
"Default": false,
"FileFormat": "av_webm",
"Folder": false,
"FolderOpen": false,
"Mp4HttpOptimize": false,
"Mp4iPodCompatible": false,
"PictureAutoCrop": true,
"PictureBottomCrop": 0,
"PictureLeftCrop": 0,
"PictureRightCrop": 0,
"PictureTopCrop": 0,
"PictureDARWidth": 512,
"PictureDeblockPreset": "off",
"PictureDeblockTune": "medium",
"PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8",
"PictureDeinterlaceFilter": "decomb",
"PictureCombDetectPreset": "default",
"PictureCombDetectCustom": "",
"PictureDeinterlacePreset": "default",
"PictureDeinterlaceCustom": "",
"PictureDenoiseCustom": "",
"PictureDenoiseFilter": "off",
"PictureDenoisePreset": "light",
"PictureDenoiseTune": "none",
"PictureSharpenCustom": "",
"PictureSharpenFilter": "off",
"PictureSharpenPreset": "medium",
"PictureSharpenTune": "none",
"PictureDetelecine": "off",
"PictureDetelecineCustom": "",
"PictureItuPAR": false,
"PictureKeepRatio": true,
"PictureLooseCrop": false,
"PictureModulus": 2,
"PicturePAR": "auto",
"PicturePARWidth": 3452,
"PicturePARHeight": 4369,
"PictureWidth": 0,
"PictureHeight": 0,
"PictureForceHeight": 0,
"PictureForceWidth": 0,
"PresetName": "Tachiyomi HandBrake Profile",
"Type": 1,
"UsesPictureFilters": true,
"UsesPictureSettings": 0,
"SubtitleAddCC": false,
"SubtitleAddForeignAudioSearch": true,
"SubtitleAddForeignAudioSubtitle": false,
"SubtitleBurnBehavior": "foreign",
"SubtitleBurnBDSub": false,
"SubtitleBurnDVDSub": false,
"SubtitleLanguageList": [],
"SubtitleTrackSelectionBehavior": "none",
"VideoAvgBitrate": 0,
"VideoColorMatrixCode": 0,
"VideoEncoder": "VP9",
"VideoFramerate": "24",
"VideoFramerateMode": "pfr",
"VideoGrayScale": false,
"VideoScaler": "swscale",
"VideoPreset": "medium",
"VideoTune": "",
"VideoLevel": "auto",
"VideoOptionExtra": "",
"VideoQualityType": 2,
"VideoQualitySlider": 21.0,
"VideoQSVDecode": false,
"VideoQSVAsyncDepth": 4,
"VideoTwoPass": true,
"VideoTurboTwoPass": false,
"x264UseAdvancedOptions": false
}
],
"VersionMajor": 42,
"VersionMicro": 0,
"VersionMinor": 0
}

10
.github/renovate.json vendored
View File

@ -1,10 +0,0 @@
{
"extends": [
"config:base"
],
"schedule": ["every sunday"],
"ignoreDeps": [
"vue monorepo",
"vue"
]
}

23
.gitignore vendored
View File

@ -1,23 +0,0 @@
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Node
node_modules/
npm-debug.log
# Compiled site
/public/
# Ignore Visual Studio Code files
*.code-workspace
.vscode/launch.json
# Ignore theme_eject folder
theme_eject/

View File

@ -1 +0,0 @@
18

2
.npmrc
View File

@ -1,2 +0,0 @@
# Workaround for Webpack 4 + Node 17+: https://github.com/webpack/webpack/issues/14532
node-options="--openssl-legacy-provider"

View File

@ -1,9 +0,0 @@
{
"tabWidth": 4,
"useTabs": true,
"printWidth": 120,
"trailingComma": "es5",
"bracketSpacing": true,
"htmlWhitespaceSensitivity": "ignore",
"endOfLine": "auto"
}

View File

@ -1,47 +0,0 @@
{
"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"
}

View File

@ -1 +0,0 @@
nodejs lts-hydrogen

View File

@ -1,126 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community moderators are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community moderators have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community moderators responsible for enforcement at
the [Tachiyomi Discord server](https://discord.gg/tachiyomi).
All complaints will be reviewed and investigated promptly and fairly.
All community moderators are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community moderators will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community moderators, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/),
version 2.1, available at
[v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html).
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
For answers to common questions about this code of conduct, see the FAQ at
[FAQ](https://www.contributor-covenant.org/faq). Translations are available
at [translations](https://www.contributor-covenant.org/translations).

View File

@ -1,113 +0,0 @@
# Tachiyomi Website Contributing Guide
Before submitting your contribution, please make sure to take a moment and read through the following guidelines:
- [Code of Conduct](./CODE_OF_CONDUCT.md)
- [Development Setup](#development-setup)
- [Project Structure](#project-structure)
- [Images and Videos guidelines](#images-and-videos-guidelines)
## Development Setup
You will need [Node.js](http://nodejs.org) **version 12+**, and [npm](https://docs.npmjs.com/try-the-latest-stable-version-of-npm) **version 7+**.
After cloning the repo, run:
``` bash
# Installs any dependencies needed.
$ npm install
```
To run the project now, run:
``` bash
# This command start a local server you can access and edit live.
$ npm run serve
```
### Commonly used NPM scripts
``` bash
# This command will generate a static site inside a public directory in your project.
$ npm run build
# This command will lint your files.
$ npm run lint
```
**Please make sure to have `npm run build` pass successfully before submitting a PR.** Although the same tests will be run against your PR on the CI server, it is better to have it working locally.
## Project Structure
- **`public`**: contains built files for distribution. Note this directory is only updated when a release happens or when you run the build command. Changes to this folder will not carry over with Git.
- **`src`**: contains the main code files.
- **`.vuepress`**: contains the main code files.
- **`components`**: this contains all the `.vue` components used on the website.
- **`config`**: contains complementary files for `config.js`.
- `navBar.js`: config for navigation bar.
- `plugins.js`: config for plugins.
- `sideBar.js`: config for sidebar.
- **`public`**: contains the static images/videos/scripts you'll want to use for the website.
- **`store`**: this contains the data store file used to connect features like downloads to main app and its forks.
- **`styles`**: all the projects style files are contained here.
- **`theme`**: this contains the extended Vuepress theme files.
- [`config.js`](https://vuepress.vuejs.org/guide/basic-config.html#config-file): main config file for Vuepress.
- `constants.js`: all reused variables/constants is stored here.
- [`enhanceApp.js`](https://vuepress.vuejs.org/guide/basic-config.html#app-level-enhancements): this file is the place to install Vue plugins, register components and directives, etc.
- **`download`**: contains the markdown file for the `/download/` page.
- **`extensions`**: contains the markdown file for the `/extensions/` page.
- **`forks`**: contains the markdown files for the `/forks/...` pages.
- **`help`**: contains the markdown files for all the `/help/...` pages.
- **`sandbox`**: contains the markdown files for the `/sandbox/...` pages.
- `README.md`: markdown file for the front-page.
- `package.json`: contains information about which plugins are installed in the project.
## Images and Videos guidelines
### Common
- Use the Android Emulator
- Use the white theme
- Preferably use local source or a self-hosted extension
- If you are going to show a manga
- Resize to have a width of 648px
### Images
- Use `.webp` format
### Videos
- Use `.webm` format
- Encode it with our [HandBrake profile](.github/assets/tachiyomi-handbrake-profile.json)
- Remove audio track
## Credits
Thank you to all the people who have already contributed!
<a href="https://github.com/tachiyomiorg/website/graphs/contributors">
<img src="https://contrib.rocks/image?repo=tachiyomiorg/website" />
</a>

373
LICENSE
View File

@ -1,373 +0,0 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
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/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View File

@ -1,55 +0,0 @@
<div>
<p align="center">
<img src="./src/.vuepress/public/icons/logo.png" height="100px">
</p>
<h1 align="center">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>
<br>
<a title="Netlify deployment" href="https://app.netlify.com/sites/tachiyomiorg/deploys">
<img src="https://api.netlify.com/api/v1/badges/95d9e2f8-42ae-4e40-8c99-82b870c51e1a/deploy-status">
</a>
</p>
</div>
## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
- [Code of Conduct](./CODE_OF_CONDUCT.md)
- [Contributing guide](./CONTRIBUTING.md)
- [Project style guide](https://tachiyomi.org/sandbox/style-guide/)
If you have any questions, then [join our Discord server](https://discord.gg/tachiyomi).
## Repositories
<div>
<p align="center">
<a href="https://github.com/tachiyomiorg/tachiyomi/">
<img src="https://github-readme-stats.vercel.app/api/pin/?username=tachiyomiorg&repo=tachiyomi&bg_color=0000&text_color=777&hide_border=true" alt="Android App">
</a>
<a href="https://github.com/tachiyomiorg/tachiyomi-extensions/">
<img src="https://github-readme-stats.vercel.app/api/pin/?username=tachiyomiorg&repo=tachiyomi-extensions&bg_color=0000&text_color=777&hide_border=true" alt="App Extensions">
</a>
</p>
</div>
## License
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/.
## Credits
Thank you to all the people who have already contributed!
<a href="https://github.com/tachiyomiorg/website/graphs/contributors">
<img src="https://contrib.rocks/image?repo=tachiyomiorg/website" />
</a>

35333
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,60 +0,0 @@
{
"name": "tachiyomi-website",
"version": "1.0.0",
"description": "Official website for the Tachiyomi app.",
"license": "MPL-2.0",
"private": true,
"repository": {
"type": "git",
"url": "git+https://github.com/tachiyomiorg/website.git"
},
"bugs": {
"url": "https://github.com/tachiyomiorg/website/issues"
},
"homepage": "https://github.com/tachiyomiorg/website#readme",
"scripts": {
"build": "npm run lint && vuepress build src",
"lint": "eslint --fix 'src/.vuepress/**/*.{js,vue}' --no-ignore",
"serve": "vuepress dev src"
},
"dependencies": {
"@mr-hope/vuepress-plugin-sitemap": "1.30.0",
"@vuepress/plugin-active-header-links": "1.9.9",
"@vuepress/plugin-back-to-top": "1.9.9",
"@vuepress/plugin-pwa": "1.9.9",
"axios": "0.26.1",
"core-js": "2.6.12",
"docsearch.js": "2.6.3",
"element-ui": "2.15.14",
"lodash.groupby": "4.6.0",
"marked": "4.2.12",
"material-design-icons-iconfont": "6.7.0",
"moment": "2.29.4",
"vue": "2.7.14",
"vue-agile": "2.0.0",
"vue-material-design-icons": "5.1.2",
"vue-moment": "4.1.0",
"vue-sweetalert2": "5.0.5",
"vuepress": "1.9.10",
"vuepress-plugin-clean-urls": "1.1.2",
"vuepress-plugin-container": "2.1.5",
"vuepress-plugin-dehydrate": "1.1.5",
"vuepress-plugin-element-ui": "1.1.0",
"vuepress-plugin-google-analytics-4": "0.1.1",
"vuepress-plugin-robots": "1.0.1",
"vuepress-plugin-zooming": "1.1.8",
"vuex": "3.6.2"
},
"devDependencies": {
"babel-eslint": "10.1.0",
"eslint": "7.32.0",
"eslint-config-vuepress": "3.10.0",
"eslint-plugin-markdown": "3.0.1",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-vue": "9.17.0",
"prettier": "2.8.8",
"sass": "1.66.1",
"sass-loader": "10.4.1",
"webpack": "4.46.0"
}
}

View File

@ -1,25 +0,0 @@
<script>
export default {
name: "CarouselItem",
props: {
name: {
type: String,
default: "carousel-cell",
},
},
};
</script>
<template>
<div :id="name" class="slide">
<slot />
</div>
</template>
<style>
.slide {
align-items: center;
display: flex;
justify-content: center;
}
</style>

View File

@ -1,108 +0,0 @@
<script>
export default {
name: "CarouselWrapper",
props: {
name: {
type: String,
default: "carousel",
},
config: {
type: Object,
default() {
return {
navButtons: true,
centerMode: true,
};
},
},
},
};
</script>
<template>
<VueAgile :id="name" :options="config">
<slot />
<template #prevButton>
<MaterialIcon icon="navigate_next" />
</template>
<template #nextButton>
<MaterialIcon icon="navigate_next" />
</template>
</VueAgile>
</template>
<style>
.agile {
background: #f0f4f8;
border-radius: 1em;
margin-bottom: 1rem;
}
.agile__nav-button {
background: hsla(0, 0%, 100%, 0.75);
border: none;
color: rgba(44, 62, 80);
cursor: pointer;
font-size: 24px;
height: 50px;
top: 50%;
transform: translateY(-50%);
position: absolute;
transition-duration: 0.3s;
width: 50px;
border-radius: 99em;
}
.agile__nav-button:hover {
background-color: rgba(0, 0, 0, 0.5);
opacity: 1;
}
.agile__nav-button--prev {
left: 10px;
}
.agile__nav-button--prev i {
transform: rotateZ(180deg);
}
.agile__nav-button--next {
right: 10px;
}
.agile__dots {
bottom: 10px;
left: 50%;
position: absolute;
transform: translateX(-50%);
}
.agile__dot {
margin: 0 10px;
}
.agile__dot button {
background-color: hsla(0, 0%, 100%, 0.75);
border: 1px solid hsla(0, 0%, 100%, 0.75);
border-radius: 50%;
cursor: pointer;
display: block;
height: 10px;
font-size: 0;
line-height: 0;
margin: 0;
padding: 0;
transition-duration: 0.3s;
width: 10px;
}
.agile__dot--current button {
background-color: rgba(44, 62, 80);
border-color: rgba(44, 62, 80);
}
.agile__dot button:hover {
background-color: rgba(44, 62, 80);
border-color: rgba(44, 62, 80);
}
</style>

View File

@ -1,169 +0,0 @@
<script>
import { GITHUB_PREVIEW_RELEASE, GITHUB_STABLE_RELEASE } from "../constants";
export default {
data() {
return {
tagName: "0.00.0",
browserDownloadUrl: "",
previewTagName: "r0000",
previewbrowserDownloadUrl: "",
};
},
async mounted() {
try {
const { data } = await this.$store.dispatch("getStableReleaseData");
const apkAsset = data.assets.find((a) => /^tachiyomi-v\d+\.\d+\.\d+.apk/.test(a.name));
this.$data.tagName = data.tag_name.slice(1);
this.$data.browserDownloadUrl = apkAsset.browser_download_url;
} catch (e) {
console.error(e);
}
try {
const { data } = await this.$store.dispatch("getPreviewReleaseData");
const apkAsset = data.assets.find((a) => /^tachiyomi-r\d{4,}.apk/.test(a.name));
this.$data.previewTagName = data.tag_name;
this.$data.previewbrowserDownloadUrl = apkAsset.browser_download_url;
} catch (e) {
console.error(e);
}
},
methods: {
downloadStable() {
this.$swal({
title: "Downloading",
html: `Started downloading <strong>Tachiyomi Stable</strong>`,
icon: "success",
focusConfirm: false,
focusCancel: false,
timer: 3000,
timerProgressBar: true,
showClass: {
popup: "animate__animated animate__faster animate__pulse",
},
hideClass: {
popup: "animate__animated animate__faster animate__zoomOut",
},
});
window.location.assign(this.$data.browserDownloadUrl || GITHUB_STABLE_RELEASE);
window.ga("send", "event", "Action", "Download", "Tachiyomi");
},
downloadPreview() {
this.$swal({
icon: "warning",
title: "Are you sure?",
html: `
<strong>Tachiyomi Preview</strong> is not recommended if you're not willing to test for and endure issues.
<div class="note">
<p>
Read more about Tachiyomi Preview
<a href="../help/faq/#what-is-tachiyomi-preview" rel="help">here</a>.
</p>
</div>`,
confirmButtonText: "I am sure.",
showCloseButton: true,
showCancelButton: false,
showClass: {
popup: "animate__animated animate__headShake",
},
hideClass: {
popup: "animate__animated animate__faster animate__zoomOut",
},
customClass: {
content: "swal2-downloadPreview_content",
},
// eslint-disable-next-line no-shadow
}).then((result) => {
if (result.value) {
this.$swal({
icon: "success",
title: "Downloading",
html: `Started downloading <strong>Tachiyomi Preview</strong>`,
confirmButtonText: "Dismiss",
showCloseButton: false,
showCancelButton: false,
timer: 3000,
timerProgressBar: true,
showClass: {
popup: "animate__animated animate__faster animate__pulse",
},
hideClass: {
popup: "animate__animated animate__faster animate__zoomOut",
},
});
window.location.assign(this.$data.previewbrowserDownloadUrl || GITHUB_PREVIEW_RELEASE);
window.ga("send", "event", "Action", "Download", "Tachiyomi Preview");
}
});
},
},
};
</script>
<template>
<div id="DownloadButtons">
<ElButton type="success" icon="el-icon-download" @click="downloadStable" @keyup.enter="downloadStable">
<span class="spacing">Stable</span>
<br />
<span class="downloadTag">{{ $data.tagName }}</span>
</ElButton>
<ElButton type="warning" icon="el-icon-cpu" @click="downloadPreview" @keyup.enter="downloadPreview">
<span class="spacing">Preview</span>
<br />
<span class="downloadTag">{{ $data.previewTagName }}</span>
</ElButton>
<span class="versionNotice">
Requires
<strong>Android 6.0</strong>
or higher.
</span>
</div>
</template>
<style lang="stylus">
#DownloadButtons
text-align center
.el-button
font-size 1.125rem
margin 0.1em !important
padding 12px 32px
width 10em
&:focus
box-shadow 0 0 30px #b1aeae52, 0 0 0 1px #fff, 0 0 0 3px rgba(50, 100, 150, 0.4)
outline none
&--success
background-color $accentColor
border-color $accentColor
&:hover
background-color lighten($accentColor, 10%)
border-color lighten($accentColor, 10%)
.downloadTag
color lighten($accentColor, 75%)
&--warning
background-color $accentColorSecondary
border-color $accentColorSecondary
&:hover
background-color lighten($accentColorSecondary, 10%)
border-color lighten($accentColorSecondary, 10%)
.downloadTag
color lighten($accentColorSecondary, 75%)
.spacing
margin-right 16px
.downloadTag
font-size 0.7em
margin-top 2px
.versionNotice
display block
font-size 0.9rem
@media (max-width: $MQMobile)
.el-button
width 8.2em
padding 12px 28px
.swal2-
&downloadPreview_
&content
.note
text-align center
</style>

View File

@ -1,68 +0,0 @@
<script>
import { langName, simpleLangName } from "../scripts/languages";
export default {
props: ["extensions"],
emits: ["filters"],
data() {
return {
filters: {
search: "",
lang: [],
nsfw: "Don't care",
sort: "Ascending",
},
};
},
watch: {
filters: {
handler(value) {
this.$emit("filters", this.filters);
},
deep: true,
},
},
methods: {
simpleLangName,
langName,
},
};
</script>
<template>
<span class="filters-list">
<ElInput v-model="filters.search" placeholder="Search extensions by name or ID..." clearable />
<ElSelect v-model="filters.lang" placeholder="Show specific languages..." multiple clearable>
<ElOption
v-for="[group] in extensions"
:key="group.lang"
:label="group.lang === 'en' ? simpleLangName(group.lang) : langName(group.lang)"
:value="group.lang"
/>
</ElSelect>
<div>
Sort by
<ElRadioGroup v-model="filters.sort">
<ElRadioButton label="Ascending"></ElRadioButton>
<ElRadioButton label="Descending"></ElRadioButton>
</ElRadioGroup>
</div>
<div>
Display extensions with NSFW content?
<ElRadioGroup v-model="filters.nsfw">
<ElRadioButton label="Yes"></ElRadioButton>
<ElRadioButton label="No"></ElRadioButton>
<ElRadioButton label="Don't care"></ElRadioButton>
</ElRadioGroup>
</div>
</span>
</template>
<style lang="stylus">
.filters-list
display flex
flex-direction column
row-gap 1rem
</style>

View File

@ -1,55 +0,0 @@
<script>
import { langName, simpleLangName } from "../scripts/languages";
import ExtensionItem from "./ExtensionItem.vue";
export default {
components: { ExtensionItem },
props: ["list", "totalCount"],
computed: {
groupName: function () {
const firstItem = this.list[0];
return firstItem.lang === "en" ? simpleLangName(firstItem.lang) : langName(firstItem.lang);
},
},
methods: {
simpleLangName,
langName,
},
};
</script>
<template>
<div class="extension-group">
<h3>
{{ groupName }}
<span class="extensions-total">
Total:
<span class="extensions-total-sum">
{{ totalCount }}
</span>
</span>
</h3>
<div
v-for="extension in list"
:id="extension.pkg.replace('eu.kanade.tachiyomi.extension.', '')"
:key="extension.apk"
class="anchor"
>
<ExtensionItem :item="extension" />
</div>
</div>
</template>
<style lang="stylus">
.extensions-total
float right
&-sum
color $accentColor
.anchor
margin-top -3.9em
padding-bottom 0.2em
padding-top 4.5em
&:first-child
border-top 1px solid $borderColor
</style>

View File

@ -1,104 +0,0 @@
<script>
export default {
props: ["item"],
computed: {
pkgId: function () {
return this.item.pkg.replace("eu.kanade.tachiyomi.extension.", "");
},
pkgName: function () {
return this.item.name.split(": ")[1];
},
pkgVersion: function () {
return "v" + this.item.version;
},
iconUrl: function () {
return `https://raw.githubusercontent.com/tachiyomiorg/tachiyomi-extensions/repo/icon/${this.item.pkg}.png`;
},
apkUrl: function () {
return `https://raw.githubusercontent.com/tachiyomiorg/tachiyomi-extensions/repo/apk/${this.item.apk}`;
},
},
};
</script>
<template>
<div v-if="item" class="extension">
<a :href="`#${pkgId}`" class="header-anchor" aria-hidden="true" @click.stop>#</a>
<img class="extension-icon" :src="iconUrl" loading="lazy" width="42" height="42" />
<div class="extension-text">
<div class="upper">
{{ pkgName }}
<Badge :text="pkgVersion" />
</div>
<div class="lower">
{{ pkgId }}
</div>
</div>
<a :href="apkUrl" class="extension-download" title="Download APK" download>
<MaterialIcon icon="cloud_download" />
<span>Download</span>
</a>
</div>
</template>
<style lang="stylus">
.extension
align-items center
display flex
padding 0.4em 1.5em
.header-anchor
padding-left 0.2em
padding-right 0.2em
font-size 1.4em
opacity 0
&:hover .header-anchor
opacity 1
.extension-icon
margin-right 0.5em
.extension-text
flex 1
.upper
font-weight: 600
.badge
font-weight: 400
margin-left 8px
.lower
color #6c757d
font-family monospace
font-size 0.9rem
.extension-download
margin-right 0.5em
padding-left 1rem
padding-right 1rem
padding-top .5rem
padding-bottom .5rem
font-weight 700
border-radius 4px
color white
background-color $accentColor
border 1px solid $accentColor
.material-icons
color white
max-width 18px
&:hover
background-color white
color $accentColor
text-decoration none
.material-icons
color $accentColor
@media (max-width 767px)
padding 0.4em 0em
.extension-text .lower,
.extension-download span
display none
@media (max-width 767px)
.extension
border 1px solid $borderColor
border-radius 8px
.extension-download
background-color $accentColor
&:target
.extension
background-color $containerBackground
border-radius 8px
transition 500ms background-color
</style>

View File

@ -1,30 +0,0 @@
<script>
import ExtensionGroup from "./ExtensionGroup.vue";
export default {
components: { ExtensionGroup },
props: ["extensions"],
computed: {
totalCount() {
return this.extensions.reduce((sum, item) => sum + item.length, 0);
},
},
};
</script>
<template>
<div class="extension-list">
<div v-for="group in extensions" :key="group[0].lang">
<ExtensionGroup :list="group" :total-count="totalCount" />
</div>
</div>
</template>
<style lang="stylus">
.extension-list
h3
padding-bottom 0.75em
border-bottom 1px solid $borderColor
> div
&:not(:first-of-type)
.extensions-total
display none
</style>

View File

@ -1,103 +0,0 @@
<script>
import axios from "axios";
import groupBy from "lodash.groupby";
import { GITHUB_EXTENSION_JSON } from "../constants";
import { simpleLangName } from "../scripts/languages";
import ExtensionFilters from "./ExtensionFilters.vue";
import ExtensionList from "./ExtensionList.vue";
export default {
components: { ExtensionList, ExtensionFilters },
data() {
return {
extensions: [],
filters: {
search: "",
lang: [],
nsfw: "Don't care",
sort: "Ascending",
},
loading: true,
observer: null,
};
},
computed: {
filteredExtensions() {
const { extensions, filters } = this;
const filtered = [];
for (const group of extensions) {
let filteredGroup = filters.lang.length ? (filters.lang.includes(group[0].lang) ? group : []) : group;
if (filters.search) {
filteredGroup = filteredGroup.filter(
(ext) =>
ext.name.toLowerCase().includes(filters.search.toLowerCase()) ||
ext.sources.some((source) => source.id.includes(filters.search))
);
}
filteredGroup = filteredGroup.filter((ext) =>
filters.nsfw === "Don't care" ? true : ext.nsfw === (filters.nsfw === "Yes" ? 1 : 0)
);
if (filters.sort && filters.sort === "Descending") {
filteredGroup = filteredGroup.reverse();
}
if (filteredGroup.length) {
filtered.push(filteredGroup);
}
}
return filtered;
},
},
async beforeMount() {
const { data } = await axios.get(GITHUB_EXTENSION_JSON);
const values = Object.values(groupBy(data, "lang"));
values.sort(this.sortLanguages);
this.$data.extensions = values;
this.$nextTick(() => {
this.loading = false;
});
},
updated() {
if (window.location.hash) {
window.location.replace(window.location.hash);
}
},
methods: {
sortLanguages(a, b) {
const langA = simpleLangName(a[0].lang);
const langB = simpleLangName(b[0].lang);
if (langA === "All" && langB === "English") {
return -1;
}
if (langA === "English" && langB === "All") {
return 1;
}
if (langA === "English") {
return -1;
}
if (langB === "English") {
return 1;
}
if (langA < langB) {
return -1;
}
if (langA > langB) {
return 1;
}
return 0;
},
},
};
</script>
<template>
<div v-if="loading" v-loading.lock="loading" style="min-height: 200px"></div>
<div v-else>
<ExtensionFilters :extensions="extensions" @filters="filters = $event" />
<ExtensionList :extensions="filteredExtensions" />
</div>
</template>

View File

@ -1,129 +0,0 @@
<script>
import axios from "axios";
export default {
props: {
forkName: {
type: String,
required: true,
},
downloadForkLabel: {
type: String,
default: "Download",
},
downloadForkLink: {
type: String,
required: true,
},
downloadForkStyle: {
type: String,
default: "",
},
githubForkLabel: {
type: String,
default: "GitHub",
},
githubForkLink: {
type: String,
required: true,
},
githubForkStyle: {
type: String,
default: "",
},
androidVersion: {
type: String,
default: "5.0",
},
},
data() {
return {
tagName: "",
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"));
// Set the values.
this.$data.tagName = data.tag_name;
this.$data.browserDownloadUrl = apkAsset.browser_download_url;
},
methods: {
downloadFork() {
this.$swal({
title: "Downloading",
text: `${this.$props.forkName} is being downloaded.`,
icon: "success",
focusConfirm: false,
focusCancel: false,
timer: 5000,
timerProgressBar: true,
customClass: {
confirmButton: "download-confirm-button",
container: "download-container",
},
showClass: {
popup: "animated pulse faster",
},
hideClass: {
popup: "animated zoomOut faster",
},
});
window.location.assign(this.$data.browserDownloadUrl || this.$props.githubForkLink + "/releases/latest");
window.ga("send", "event", "Action", "Download", this.$props.forkName);
},
},
};
</script>
<template>
<div class="downloadContainer">
<button class="downloadForkButton" :style="downloadForkStyle" @click="downloadFork">
{{ downloadForkLabel }}
</button>
<button class="githubForkButton" :style="githubForkStyle" :onclick="'window.open(\'' + githubForkLink + '\')'">
{{ githubForkLabel }}
</button>
<br />
<span class="versionNotice">
Requires
<strong>Android {{ androidVersion }}</strong>
or higher.
</span>
</div>
</template>
<style lang="stylus">
.downloadContainer
user-select none
text-align center
margin 0.3125rem
.downloadForkButton
.githubForkButton
border-radius $buttonBorderRadius
border-style none
color white
font-family $fontButton
font-size 1.125em
height 3rem
margin 0.3125rem
padding 0.625 2em
width 8.5rem
&:focus
outline none
outline-style none
&:hover
cursor pointer
text-decoration none !important
background-image linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))
.downloadForkButton
background-color $accentColor
.githubForkButton
background-color #181818
&:hover
background-color lighten(#181818, 15)
</style>

View File

@ -1,27 +0,0 @@
<script>
import PageEdit from "@theme/components/PageEdit.vue";
import Layout from "@theme/layouts/Layout.vue";
export default {
components: { PageEdit, Layout },
};
</script>
<template>
<Layout :class="$frontmatter.title">
<main class="page">
<slot name="top" />
<Content class="theme-default-content" />
<PageEdit />
<slot name="bottom" />
</main>
</Layout>
</template>
<style lang="stylus">
.page
padding-bottom 2rem
display block
</style>

View File

@ -1,257 +0,0 @@
<script>
import AlgoliaSearchBox from "@theme/components/AlgoliaSearchBox.vue";
import NavBar from "@theme/components/NavBar.vue";
import PageFooter from "@theme/components/PageFooter.vue";
import ClipboardListIcon from "vue-material-design-icons/ClipboardList.vue";
import ClipboardSearchIcon from "vue-material-design-icons/ClipboardSearch.vue";
import FaqIcon from "vue-material-design-icons/FrequentlyAskedQuestions.vue";
import LifebuoyIcon from "vue-material-design-icons/Lifebuoy.vue";
import SourceForkIcon from "vue-material-design-icons/SourceFork.vue";
export default {
components: {
NavBar,
PageFooter,
AlgoliaSearchBox,
ClipboardListIcon,
SourceForkIcon,
LifebuoyIcon,
ClipboardSearchIcon,
FaqIcon,
},
computed: {
data() {
return this.$page.frontmatter;
},
algolia() {
return this.$themeLocaleConfig.algolia || this.$site.themeConfig.algolia || {};
},
isAlgoliaSearch() {
return this.algolia && this.algolia.apiKey && this.algolia.indexName;
},
},
};
</script>
<template>
<div class="theme-container help-page">
<NavBar />
<main class="page">
<div class="theme-custom-content content__default">
<slot name="top" />
<Content class="theme-custom-content" />
<Content slot-key="center" />
<AlgoliaSearchBox :options="algolia" />
<div v-if="data.help && data.help.length" class="row help">
<div v-for="(helpItem, index) in data.help" :key="index" class="column helpItem">
<a v-if="helpItem.link" :href="helpItem.link" tabindex="1">
<div class="card" :class="'card__' + helpItem.title">
<header v-if="helpItem.faq">
<FaqIcon />
<h3>{{ helpItem.title }}</h3>
</header>
<header v-else-if="helpItem.fixProblems">
<ClipboardSearchIcon />
<h3>{{ helpItem.title }}</h3>
</header>
<header v-else-if="helpItem.guides">
<ClipboardListIcon />
<h3>{{ helpItem.title }}</h3>
</header>
<header v-else-if="helpItem.forks">
<SourceForkIcon />
<h3>{{ helpItem.title }}</h3>
</header>
<header v-else-if="helpItem.contribution">
<LifebuoyIcon />
<h3>{{ helpItem.title }}</h3>
</header>
<header v-else-if="helpItem.icon">
<MaterialIcon :icon="helpItem.icon" icon-only />
<h3>{{ helpItem.title }}</h3>
</header>
<p>{{ helpItem.description }}</p>
</div>
</a>
</div>
</div>
<slot name="bottom" />
</div>
</main>
<PageFooter />
</div>
</template>
<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
span
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
.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(5, 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
span
display inline-block
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
.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

@ -1,48 +0,0 @@
<script>
/**
* For material icon references use https://material.io/resources/icons/
* Code example: <MaterialIcon icon="android" />
*/
export default {
props: {
iconOnly: {
type: Boolean,
default: false,
},
name: {
type: String,
default: "",
},
icon: {
type: String,
default: "",
},
},
};
</script>
<template>
<i v-if="iconOnly" :class="name" class="material-icons">{{ icon }}</i>
<div v-else :class="name" class="material-holder">
<i class="material-icons">{{ icon }}</i>
</div>
</template>
<style lang="scss">
$material-design-icons-font-directory-path: "~material-design-icons-iconfont/dist/fonts/";
@import "~material-design-icons-iconfont/src/material-design-icons";
</style>
<style lang="stylus">
.material-holder
color #476582
margin 0
font-size 0.85em
border-radius 3px
display inline
.material-icons
font-size 1.35em
position relative
top 0.2rem
</style>

View File

@ -1,127 +0,0 @@
<script>
/**
* Code example: <NavigationText item="library"/>
*/
export default {
props: {
item: {
type: String,
required: true,
},
entry: {
type: String,
default: "",
},
},
computed: {
nav() {
// prettier-ignore
return {
/* Menus */
library: { text: "Library", icon: "collections_bookmark" },
updates: { text: "Updates", icon: "new_releases" },
history: { text: "History", icon: "history" },
browse: { text: "Browse", icon: "explore" },
more: { text: "More", icon: "more_horiz" },
/* Actions */
update_library: { text: "Update library", icon: "refresh" },
search: { text: "Search", icon: "search" },
filter: { text: "Filter", icon: "filter_list" },
edit: { text: "EDIT", icon:"edit" },
delete: { text: "DELETE", icon:"delete" },
language: { text: "Filter", icon:"translate" },
/* More */
downloaded_only: { text: "Downloaded only", icon: "cloud_off" },
download_queue: { text: "Download queue", icon: "get_app" },
categories: { text: "Categories", icon: "label" },
settings: { text: "Settings", icon: "settings" },
about: { text: "About", icon: "info" },
help: { text: "Help", icon: "help" },
source_migration: { text: "Source migration", icon: "compare_arrows" },
/* Settings */
settings_general: { text: "General", icon: "tune" },
settings_library: { text: "Library", icon: "collections_bookmark" },
settings_reader: { text: "Reader", icon: "chrome_reader_mode" },
settings_downloads: { text: "Downloads", icon: "get_app" },
settings_tracking: { text: "Tracking", icon: "autorenew" },
settings_browse: { text: "Browse", icon: "explore" },
settings_backup: { text: "Backup and Restore", icon: "settings_backup_restore" },
settings_security: { text: "Security", icon: "security" },
settings_advanced: { text: "Advanced", icon: "code" },
/* Library info */
bookmark: { text: "Add to library", icon: "favorite_border" },
bookmarked: { text: "In library", icon: "favorite" },
set_categories: { text: "Set categories", icon: "label" },
share: { text: "Share", icon: "share" },
webview: { text: "WebView", icon: "public" },
/* Browse */
button_latest: { text: "LATEST" },
button_browse: { text: "BROWSE" },
tab_sources: { text: "SOURCES" },
tab_extensions: { text: "EXTENSIONS" },
sources: { text: "Sources" },
latest: { text: "Latest" },
extensions: { text: "Extensions" },
migrate: { text: "Migrate" },
/* Misc */
install: { text: "INSTALL", class: "ext-installation" },
reorder: { text: "Reorder", icon: "reorder" },
overflow: { text: "Overflow", icon: "more_vert" },
/* Forks */
neko: { text: "Neko", internalClass: "nav-tachiyomi_neko" },
tachiyomij2k: { text: "TachiyomiJ2K", link: "/forks/Neko" },
tachiyomiaz: { text: "TachiyomiAZ", link: "/forks/TachiyomiAZ" },
tachiyomisy: { text: "TachiyomiSY", link: "/forks/TachiyomiSY" },
}[this.item];
},
},
};
</script>
<template>
<span v-if="nav.link" id="NavigationVue" 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" :icon="nav.icon" />
<span class="app-label" :class="nav.internalClass">{{ nav.text }}</span>
<slot />
</a>
</span>
<span v-else id="NavigationVue" class="app-navigation" :class="nav.class" title="App navigation">
<MaterialIcon v-if="nav.icon" class="app-icon" :icon="nav.icon" />
<span class="app-label" :class="nav.internalClass">{{ nav.text }}</span>
<slot />
</span>
</template>
<style lang="stylus">
#NavigationVue
&.app-navigation
white-space pre
font-size 0
.app-icon,
.app-label
color darken($accentColor, 25%)
font-weight 500
font-size 1rem
.app-icon
vertical-align top
padding-right 0.25rem
.app-link
&:hover
cursor pointer
text-decoration none !important
.app-icon,
.app-label
color $accentColor
.app-image
max-height 1.5em
vertical-align sub
&:hover
cursor default
blockquote
.app-navigation
.app-icon,
.app-label
color inherit !important
</style>

View File

@ -1,63 +0,0 @@
<script>
/**
* Code example: <ReleaseDate preview />
*/
export default {
props: {
stable: {
type: Boolean,
default: false,
},
preview: {
type: Boolean,
default: false,
},
},
data() {
return {
stablePublishRelative: "at an unknown time",
stablePublishExact: "Can't connect to GitHub.",
previewPublishRelative: "at an unknown time",
previewPublishExact: "Can't connect to GitHub.",
};
},
async mounted() {
try {
const { data } = await this.$store.dispatch("getStableReleaseData");
this.$data.stablePublishRelative = this.$moment(data.published_at).fromNow();
this.$data.stablePublishExact = this.$moment(data.published_at).format("dddd, MMMM Do YYYY [at] HH:mm");
} catch (e) {
console.error(e);
}
try {
const { data } = await this.$store.dispatch("getPreviewReleaseData");
this.$data.previewPublishRelative = this.$moment(data.published_at).fromNow();
this.$data.previewPublishExact = this.$moment(data.published_at).format("dddd, MMMM Do YYYY [at] HH:mm");
} catch (e) {
console.error(e);
}
},
};
</script>
<template>
<div v-if="stable" class="buildTime">
<ElTooltip :content="stablePublishExact" placement="top" :open-delay="250">
<span>{{ stablePublishRelative }}</span>
</ElTooltip>
</div>
<div v-else-if="preview" class="buildTime">
<ElTooltip :content="previewPublishExact" placement="bottom-end" :open-delay="250">
<span>{{ previewPublishRelative }}</span>
</ElTooltip>
</div>
<span v-else>You need to specify props.</span>
</template>
<style lang="stylus" scoped>
.buildTime
font-weight 500
display inline-block
</style>

View File

@ -1,77 +0,0 @@
<script>
/**
* Code example: <VersionTag preview />
*/
export default {
props: {
stable: {
type: Boolean,
default: false,
},
fileName: {
type: Boolean,
default: false,
},
preview: {
type: Boolean,
default: false,
},
previewFileName: {
type: Boolean,
default: false,
},
},
data() {
return {
tagName: "0.00.0",
previewTagName: "r0000",
};
},
async mounted() {
try {
const { data } = await this.$store.dispatch("getStableReleaseData");
this.$data.tagName = data.tag_name.slice(1);
} catch (e) {
console.error(e);
}
try {
const { data } = await this.$store.dispatch("getPreviewReleaseData");
this.$data.previewTagName = data.tag_name;
} catch (e) {
console.error(e);
}
},
};
</script>
<template>
<span v-if="stable" class="downloadTag">{{ $data.tagName }}</span>
<span v-else-if="fileName" class="fileNameContainer" title="File name">
<MaterialIcon class="fileNameIcon" icon="get_app" />
<span class="fileName">tachiyomi-v{{ $data.tagName }}.apk</span>
<slot />
</span>
<span v-else-if="preview" class="downloadTag">{{ $data.previewTagName }}</span>
<span v-else-if="previewFileName" class="fileNameContainer" title="File name">
<MaterialIcon class="fileNameIcon" icon="get_app" />
<span class="fileName">tachiyomi-{{ $data.previewTagName }}.apk</span>
<slot />
</span>
<span v-else>You need to specify props.</span>
</template>
<style lang="stylus" scoped>
.fileNameContainer
white-space nowrap
.fileNameIcon,
.fileName
color #23638f
font-weight 500
font-size 1em
.fileNameIcon
vertical-align top
&:hover
cursor default
</style>

View File

@ -1,52 +0,0 @@
<script>
import { marked } from "marked";
export default {
data() {
return {
whatsNew: "Failed to load data from GitHub.",
};
},
async mounted() {
try {
const { data } = await this.$store.dispatch("getStableReleaseData");
this.$data.whatsNew = marked(data.body).replace(
/(?<=\(|(, ))@(.*?)(?=\)|(, ))/g,
"<a href='https://github.com/$2' target='_blank' rel='noopener'>@$2</a>"
);
} catch (e) {
console.error(e);
}
},
};
</script>
<template>
<div class="guide whatsNew">
<p class="title">
<MaterialIcon icon="new_releases" />
What's new
</p>
<!-- eslint-disable-next-line vue/no-v-html -->
<div v-html="whatsNew"></div>
<div class="note">
<p>
View the full release
<a href="https://github.com/tachiyomiorg/tachiyomi/releases/latest" target="_blank" rel="noopener">
here
</a>
</p>
</div>
</div>
</template>
<style lang="stylus">
.whatsNew
.title
text-align center
div
white-space
h3
font-size 1.1rem
</style>

View File

@ -1,52 +0,0 @@
const navBarConfig = require("./config/navBar");
const pluginsConfig = require("./config/plugins");
const sideBarConfig = require("./config/sideBar");
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" }],
["meta", { name: "theme-color", content: "#2e84bf" }],
["meta", { prefix: "og: http://ogp.me/ns#", property: "og:image", content: "https://tachiyomi.org/icons/logo.png" }],
['meta', { name: 'viewport', content: 'width=device-width, initial-scale=1.0' }],
// Custom headers
["link", { rel: "preconnect", href: "https://fonts.gstatic.com", crossorigin:""}],
["link", { rel: "stylesheet", href: "https://fonts.googleapis.com/css?family=Open+Sans"}],
["script", {src: "/scripts/remove_service_worker.js"}],
],
themeConfig: {
logo: "/icons/logo.svg",
repo: "tachiyomiorg/tachiyomi",
docsRepo: "tachiyomiorg/website",
docsDir: "src",
docsBranch: "main",
smoothScroll: true,
algolia: {
apiKey: "fc1c45b5a3835e1882cbbf0751dfe705",
indexName: "tachiyomi",
},
searchPlaceholder: "Search...",
editLinks: true,
editLinkText: "Help us improve this page",
lastUpdated: "Last updated",
nav: navBarConfig,
sidebar: {
"/help/guides/": sideBarConfig.default,
"/help/faq/": sideBarConfig.default,
"/help/contribution": sideBarConfig.default,
"/extensions": sideBarConfig.default,
"/forks": sideBarConfig.default,
"/sandbox": sideBarConfig.sandbox,
},
},
plugins: pluginsConfig,
extraWatchFiles: [".vuepress/config/plugins.js", ".vuepress/config/navBar.js", ".vuepress/config/sideBar.js"],
};

View File

@ -1,6 +0,0 @@
module.exports = [
{ text: "Home", link: "/" },
{ text: "Help Center", link: "/help/" },
{ text: "Download", link: "/download/" },
{ text: "Extensions", link: "/extensions/" },
];

View File

@ -1,132 +0,0 @@
module.exports = [
[
"@mr-hope/vuepress-plugin-sitemap",
{
hostname: "https://tachiyomi.org",
},
],
[
"@vuepress/last-updated",
{
transformer: (timestamp, lang) => {
const moment = require("moment");
moment.locale(lang);
return moment(timestamp).fromNow();
},
},
],
[
"vuepress-plugin-robots",
{
host: "https://tachiyomi.org",
allowAll: true,
sitemap: "/sitemap.xml",
},
],
["@vuepress/back-to-top"],
[
"google-analytics-4",
{
gtag: "G-2CBXXM1Y86",
},
],
["vuepress-plugin-dehydrate"],
[
"@vuepress/active-header-links",
{
sidebarLinkSelector: ".sidebar-link",
headerAnchorSelector: ".header-anchor",
},
],
[
"@vuepress/pwa",
{
serviceWorker: false,
},
],
[
"vuepress-plugin-clean-urls",
{
normalSuffix: "/",
},
],
[
"vuepress-plugin-zooming",
{
selector: ".theme-default-content img.zoomable",
delay: 1000,
options: {
bgColor: "black",
bgOpacity: "0.8",
},
},
],
["vuepress-plugin-element-ui"],
[
"vuepress-plugin-container",
{
type: "c-tip",
before: (info) => `<div class="custom-block c-tip"><h4 class="c-title">${info}</h4>`,
after: "</div>",
defaultTitle: "",
},
],
[
"vuepress-plugin-container",
{
type: "c-warning",
before: (info) => `<div class="custom-block c-warning"><h4 class="c-title">${info}</h4>`,
after: "</div>",
defaultTitle: "",
},
],
[
"vuepress-plugin-container",
{
type: "c-danger",
before: (info) => `<div class="custom-block c-danger"><h4 class="c-title">${info}</h4>`,
after: "</div>",
defaultTitle: "",
},
],
[
"vuepress-plugin-container",
{
type: "expander",
before: (info) => `<details class="expander"><summary class="expansion">${info}</summary>`,
after: "</details>",
},
],
[
"vuepress-plugin-container",
{
type: "guide",
before: (info) => `<div class="guide"><p class="title">${info}</p>`,
after: "</div>",
},
],
[
"vuepress-plugin-container",
{
type: "videolink",
before: "<div class='videolink'>",
after: "</div>",
},
],
[
"vuepress-plugin-container",
{
type: "guide-empty",
before: "<div class='guide g-empty'>",
after: "</div>",
},
],
[
"vuepress-plugin-container",
{
type: "note",
before: "<div class='note'><p>",
after: "</div></p>",
},
],
];

View File

@ -1,39 +0,0 @@
module.exports = {
default: [
{
title: "Frequently Asked Questions",
path: "/help/faq/",
},
{
title: "Guides",
collapsable: false,
sidebarDepth: 2,
children: [
"/help/guides/getting-started",
"/help/guides/troubleshooting",
"/help/guides/source-migration",
"/help/guides/backups",
"/help/guides/tracking",
"/help/guides/categories",
"/help/guides/local-manga",
"/help/guides/reader-settings",
],
},
{
title: "Tachiyomi",
collapsable: false,
sidebarDepth: 2,
children: ["/help/contribution", "/download/", "/extensions/", "/forks/"],
},
],
sandbox: [
"/",
{
title: "Sandbox",
path: "/sandbox/",
collapsable: false,
sidebarDepth: 2,
children: ["/sandbox/style-guide", "/sandbox/element-ui"],
},
],
};

View File

@ -1,6 +0,0 @@
export const GITHUB_EXTENSION_JSON =
"https://raw.githubusercontent.com/tachiyomiorg/tachiyomi-extensions/repo/index.json";
export const GITHUB_STABLE_API = "https://api.github.com/repos/tachiyomiorg/tachiyomi/releases/latest";
export const GITHUB_STABLE_RELEASE = "https://github.com/tachiyomiorg/tachiyomi/releases/latest";
export const GITHUB_PREVIEW_API = "https://api.github.com/repos/tachiyomiorg/android-app-preview/releases/latest";
export const GITHUB_PREVIEW_RELEASE = "https://github.com/tachiyomiorg/android-app-preview/releases/latest";

View File

@ -1,39 +0,0 @@
import "./styles/animate.css";
import "./styles/sweetalert2.css";
import "vue-material-design-icons/styles.css";
import Element from "element-ui";
import { VueAgile } from "vue-agile";
import VueMoment from "vue-moment";
import VueSweetalert2 from "vue-sweetalert2";
import store from "./store";
const redirectList = [
{
path: "/help/guides/troubleshooting-problems/",
redirect: "/help/guides/troubleshooting/",
},
{
path: "/help/guides/reading-local-manga/",
redirect: "/help/guides/local-manga/",
},
{
path: "/help/guides/creating-backups/",
redirect: "/help/guides/backups/",
},
];
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
}) => {
// eslint-disable-next-line vue/match-component-file-name
Vue.component("VueAgile", VueAgile);
Vue.use(VueSweetalert2);
Vue.use(VueMoment);
Vue.use(Element);
Vue.mixin({ store });
// Reroute to new pages
router.addRoutes(redirectList);
};

View File

@ -1 +0,0 @@
tachiyomi.org

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 108 108" style="enable-background:new 0 0 108 108;" xml:space="preserve">
<style type="text/css">
.st0{fill:#CE2828;}
.st1{fill:#F7D009;}
.st2{fill:#E40F85;}
</style>
<path class="st0" d="M28.5,54.5c0-6.8,2.7-13.3,7.5-18c4.8-4.8,11.3-7.5,18-7.5s13.3,2.7,18,7.5c4.8,4.8,7.5,11.3,7.5,18
s-2.7,13.3-7.5,18C67.3,77.3,60.8,80,54,80s-13.3-2.7-18-7.5C31.2,67.8,28.5,61.3,28.5,54.5"/>
<path d="M34.1,54.5c-0.1-4.3,1.2-8.5,3.6-11.9c2.5-3.5,6-6.1,10-7.4c4.1-1.3,8.4-1.3,12.5,0c4.1,1.3,7.6,3.9,10,7.4
c2.5,3.5,3.7,7.7,3.6,11.9c0.1,4.3-1.2,8.5-3.6,11.9c-2.5,3.5-6,6.1-10,7.4c-4.1,1.3-8.4,1.3-12.5,0c-4.1-1.3-7.6-3.9-10-7.4
C35.2,63,34,58.8,34.1,54.5"/>
<path class="st1" d="M51,47.5c0.9,0,2.5-2.8,2.5-3.7c0-0.9-3.2-3.3-7.8-3.3c-6.4,0-8.1,4.5-8.1,7.1c0,2.7,0.8,5.8,7.6,7.9
c1.8,0.6,4.6,1.5,4.6,3.8c0,1.9-2.1,2.9-4.4,2.9c-6.7,0-6.2-6.3-6.7-6.3c-0.3,0-1.9,1.5-1.9,4.2c0,5,4.5,7.3,9,7.3
c6.6,0,9.2-4.5,9.2-8.1c0-2.9-1.3-6.2-7.9-8.3c-1.7-0.6-4.8-1.4-4.8-3.7c0-1.9,2-2.6,3.6-2.6C48.9,44.7,50.2,47.5,51,47.5z"/>
<path class="st2" d="M56.7,66.3c0,0.8,0,1.2,0.8,1.2c6.9,0,14-8.9,13.7-18c0-1.3,0.1-2.4-0.5-2.4h-2.8c-0.3,0-1.1-0.1-1.1,0.4
c0,0.5,0.3,1.9,0.3,3.4c0,2.4-0.8,6.2-2.1,6.2c-0.6,0-3.7-3.5-3.7-7.2c0-0.9,0.3-1.9,0.3-2.4c0-0.6-0.7-0.5-1.1-0.5h-2.6
c-1.2,0-1.2,0-1.2,1.4c0,8.8,5.5,11,5.5,12.3c0,0.3-0.9,1.5-4.5,1.5c-0.8,0-0.9,0.9-0.9,1.3V66.3z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.82 17.59"><defs><style>.cls-1{fill:none;stroke:#e5422b;stroke-miterlimit:10;}.cls-2{fill:#e5422b;}</style></defs><title>icon-danger</title><g id="Layer_2" data-name="Layer 2"><path class="cls-1" d="M9.06,2,.73,16.39A1.09,1.09,0,0,0,1.67,18H18.33a1.09,1.09,0,0,0,.94-1.63L10.94,2A1.08,1.08,0,0,0,9.06,2Z" transform="translate(-0.09 -0.92)"/></g><g id="Layer_3" data-name="Layer 3"><rect class="cls-2" x="9.09" y="13.63" width="1.66" height="1.66" rx="0.26"/><path class="cls-2" d="M8.66,6.65,9.13,13a.29.29,0,0,0,.29.28h1.17a.29.29,0,0,0,.29-.28l.47-6.39a.3.3,0,0,0-.3-.33H9A.3.3,0,0,0,8.66,6.65Z" transform="translate(-0.09 -0.92)"/></g></svg>

Before

Width:  |  Height:  |  Size: 699 B

View File

@ -1 +0,0 @@
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.57 18.64"><defs><style>.cls-1,.cls-2{fill:none;stroke:#184cef;stroke-linecap:round;stroke-miterlimit:10;}.cls-1{stroke-width:1.2px;}.cls-2{stroke-width:1.1px;}</style></defs><title>bulb-icon</title><path class="cls-1" d="M12.5,12.76V11.65a1.84,1.84,0,0,1,.72-1.45,5.19,5.19,0,1,0-6.43,0,1.86,1.86,0,0,1,.71,1.45v1" transform="translate(-4.21 -0.37)"/><line class="cls-2" x1="2.99" y1="14.13" x2="8.58" y2="14.13"/><line class="cls-2" x1="3.56" y1="16.13" x2="8.01" y2="16.13"/><line class="cls-2" x1="5.17" y1="18.09" x2="6.41" y2="18.09"/><path class="cls-2" d="M10.36,3.25A2.31,2.31,0,0,1,12,4a2.46,2.46,0,0,1,.71,1.67" transform="translate(-4.21 -0.37)"/></svg>

Before

Width:  |  Height:  |  Size: 753 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.82 17.59"><defs><style>.cls-1{fill:none;stroke:#b29400;stroke-miterlimit:10;}.cls-2{fill:#b29400;}</style></defs><title>icon-danger-shit-colour</title><g id="Layer_2" data-name="Layer 2"><path class="cls-1" d="M9.06,2,.73,16.39A1.09,1.09,0,0,0,1.67,18H18.33a1.09,1.09,0,0,0,.94-1.63L10.94,2A1.08,1.08,0,0,0,9.06,2Z" transform="translate(-0.09 -0.92)"/></g><g id="Layer_3" data-name="Layer 3"><rect class="cls-2" x="9.09" y="13.63" width="1.66" height="1.66" rx="0.26"/><path class="cls-2" d="M8.66,6.65,9.13,13a.29.29,0,0,0,.29.28h1.17a.29.29,0,0,0,.29-.28l.47-6.39a.3.3,0,0,0-.3-.33H9A.3.3,0,0,0,8.66,6.65Z" transform="translate(-0.09 -0.92)"/></g></svg>

Before

Width:  |  Height:  |  Size: 711 B

View File

@ -1,27 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true"
focusable="false"
preserveAspectRatio="xMidYMid meet"
viewBox="0 0 256 256"
>
<defs>
<radialGradient
id="IconifyId-1783bed17af-30b546-3"
cx="50%"
cy="-50%"
fx="50%"
fy="-50%"
r="100%"
>
<stop stop-color="#20C6B7" offset="0%" />
<stop stop-color="#4D9ABF" offset="100%" />
</radialGradient>
</defs>
<path
d="M185.532 88.839l-.094-.04a.396.396 0 0 1-.154-.087a.734.734 0 0 1-.187-.621l5.167-31.553l24.229 24.209l-25.198 10.709a.555.555 0 0 1-.22.04h-.101a.694.694 0 0 1-.134-.114a11.468 11.468 0 0 0-3.308-2.543zm35.144-1.923l25.906 25.878c5.38 5.381 8.075 8.065 9.057 11.177c.147.46.267.921.361 1.395l-61.913-26.192a4.868 4.868 0 0 0-.1-.04c-.248-.1-.535-.214-.535-.467c0-.254.294-.374.541-.474l.08-.034l26.603-11.243zm34.268 46.756c-1.337 2.51-3.944 5.114-8.355 9.527l-29.209 29.17l-37.777-7.858l-.2-.04c-.335-.054-.689-.114-.689-.414a11.387 11.387 0 0 0-4.378-7.965c-.154-.154-.113-.394-.067-.615c0-.033 0-.066.014-.093l7.105-43.571l.026-.147c.04-.334.1-.721.401-.721a11.566 11.566 0 0 0 7.754-4.44c.06-.067.1-.14.18-.18c.214-.1.468 0 .689.093l64.5 27.254h.006zm-44.28 45.407l-48.031 47.978l8.22-50.475l.014-.067a.905.905 0 0 1 .04-.193c.067-.16.24-.227.408-.294l.08-.034c1.8-.767 3.392-1.95 4.646-3.451c.16-.187.354-.368.601-.401c.064-.01.13-.01.194 0l33.82 6.944l.007-.007zm-58.198 58.133l-5.414 5.408l-59.854-86.408a2.831 2.831 0 0 0-.067-.094c-.093-.127-.194-.253-.173-.4c.006-.107.073-.2.147-.28l.066-.087c.18-.268.335-.535.502-.822l.133-.233l.02-.02c.094-.16.18-.314.341-.401c.14-.067.335-.04.488-.007l66.311 13.66c.186.03.36.105.508.22c.087.088.107.181.127.288a11.735 11.735 0 0 0 6.871 7.845c.187.093.107.3.02.52a1.588 1.588 0 0 0-.1.301c-.835 5.074-8 48.726-9.926 60.51zm-11.309 11.29c-3.99 3.946-6.343 6.035-9.003 6.877a13.382 13.382 0 0 1-8.06 0c-3.115-.989-5.809-3.672-11.19-9.054l-60.108-60.042l15.7-24.323a1 1 0 0 1 .268-.314c.167-.12.408-.066.608 0a16.285 16.285 0 0 0 10.948-.554c.18-.066.361-.113.502.014c.07.064.133.135.187.213l60.148 87.19v-.007zm-94.156-68.008l-13.789-13.773l27.23-11.604a.562.562 0 0 1 .221-.047c.227 0 .361.227.481.434c.274.42.564.83.87 1.229l.086.106c.08.114.027.227-.053.334l-15.04 23.321h-.006zM27.11 160.625L9.665 143.199c-2.968-2.964-5.12-5.114-6.617-6.963l53.043 10.99l.2.033c.328.053.69.113.69.42c0 .334-.395.488-.73.614l-.153.067l-28.988 12.265zM0 127.275a13.34 13.34 0 0 1 .602-3.304c.989-3.112 3.676-5.796 9.063-11.177l22.324-22.3a14524.43 14524.43 0 0 0 30.92 44.647c.18.24.38.507.174.707c-.976 1.075-1.952 2.25-2.64 3.526c-.075.163-.19.306-.335.413c-.087.054-.18.034-.28.014h-.014L0 127.269v.007zm37.965-42.75l30.017-29.984c2.82 1.235 13.087 5.568 22.27 9.44c6.952 2.939 13.288 5.61 15.28 6.477c.2.08.381.16.468.36c.053.12.027.274 0 .401a13.363 13.363 0 0 0 3.496 12.205c.2.2 0 .487-.174.734l-.094.14l-30.478 47.157c-.08.134-.154.247-.288.334c-.16.1-.387.053-.575.007a15.215 15.215 0 0 0-3.629-.494c-1.096 0-2.286.2-3.489.42h-.007c-.133.02-.254.047-.36-.033a1.403 1.403 0 0 1-.301-.34L37.965 84.525zm36.08-36.04l38.86-38.817c5.38-5.375 8.074-8.065 11.188-9.047a13.382 13.382 0 0 1 8.061 0c3.115.982 5.808 3.672 11.189 9.047l8.422 8.413l-27.638 42.756a1.035 1.035 0 0 1-.274.32c-.167.114-.401.067-.602 0a14.028 14.028 0 0 0-12.833 2.471c-.18.187-.448.08-.675-.02c-3.61-1.569-31.682-13.42-35.699-15.122zm83.588-24.542l25.52 25.49l-6.15 38.044v.1a.9.9 0 0 1-.053.254c-.067.133-.201.16-.335.2a12.237 12.237 0 0 0-3.662 1.823a1.029 1.029 0 0 0-.134.113c-.074.08-.147.154-.267.167a.763.763 0 0 1-.288-.047l-38.887-16.504l-.073-.034c-.248-.1-.542-.22-.542-.474a14.664 14.664 0 0 0-2.072-6.109c-.187-.307-.394-.627-.234-.941l27.177-42.082zM131.352 81.4l36.454 15.423c.2.093.421.18.508.387a.707.707 0 0 1 0 .38c-.107.535-.2 1.142-.2 1.757v1.021c0 .254-.261.36-.502.46l-.073.027c-5.775 2.464-81.076 34.538-81.19 34.538c-.113 0-.234 0-.347-.113c-.2-.2 0-.48.18-.735l.094-.133l29.957-46.335l.053-.08c.174-.281.375-.595.696-.595l.3.047c.682.093 1.284.18 1.892.18c4.545 0 8.756-2.21 11.296-5.989c.06-.1.137-.19.227-.267c.18-.133.448-.066.655.027zm-41.748 61.324l82.079-34.965s.12 0 .234.114c.447.447.828.747 1.196 1.028l.18.113c.168.094.335.2.348.374c0 .067 0 .107-.013.167l-7.032 43.144l-.027.174c-.046.333-.093.714-.407.714a11.558 11.558 0 0 0-9.177 5.655l-.034.053c-.093.154-.18.3-.334.38c-.14.068-.32.041-.468.008l-65.455-13.487c-.067-.013-1.016-3.465-1.09-3.472z"
fill="url(#IconifyId-1783bed17af-30b546-3)"
/>
<rect x="0" y="0" width="256" height="256" fill="rgba(0, 0, 0, 0)" />
</svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -1,23 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="288.000000pt" height="288.000000pt" viewBox="0 0 288.000000 288.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,288.000000) scale(0.100000,-0.100000)"
fill="#2E84BF" stroke="none">
<path d="M1412 2513 l-183 -3 8 -98 c4 -53 8 -119 8 -147 l0 -50 -410 0 -410
0 3 -179 3 -179 67 7 c152 14 1015 18 1462 7 256 -7 472 -14 480 -16 13 -4 15
20 15 178 l0 182 -383 -4 c-210 -2 -398 0 -418 3 l-35 7 3 150 c3 128 1 149
-12 147 -8 -1 -97 -4 -198 -5z"/>
<path d="M845 1744 c-128 -50 -160 -67 -158 -81 1 -10 22 -73 47 -140 58 -153
124 -384 166 -578 18 -82 34 -151 35 -153 2 -2 83 25 182 60 l179 63 -12 60
c-35 168 -248 836 -267 834 -7 -1 -84 -30 -172 -65z"/>
<path d="M1781 1643 c-104 -417 -229 -832 -271 -901 l-19 -31 -173 -3 c-200
-3 -913 9 -943 16 -19 5 -20 0 -20 -180 l0 -186 50 6 c28 3 518 9 1090 12
l1040 7 0 176 0 176 -85 -7 c-47 -3 -195 -7 -329 -7 -191 -1 -242 2 -238 12 3
6 22 50 42 97 65 152 296 863 284 874 -4 4 -326 94 -365 103 -20 4 -24 -7 -63
-164z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,13 +0,0 @@
if ("serviceWorker" in navigator) {
console.log("Checking for service worker...");
navigator.serviceWorker.getRegistrations().then((registrations) => {
if (registrations.length < 1) {
console.log("Found no service worker!");
return;
}
registrations.forEach((registration) => {
registration.unregister();
console.log("Removed service worker!");
});
});
}

View File

@ -1,16 +0,0 @@
export function simpleLangName(code) {
if (code === "all") {
return "All";
}
const namesInEnglish = new Intl.DisplayNames(["en"], { type: "language" });
return namesInEnglish.of(code);
}
export function langName(code) {
if (code === "all") {
return "All";
}
const namesInEnglish = new Intl.DisplayNames(["en"], { type: "language" });
const namesInNative = new Intl.DisplayNames([code], { type: "language" });
return `${namesInEnglish.of(code)} - ${namesInNative.of(code)}`;
}

Some files were not shown because too many files have changed in this diff Show More