Remove Vuepress site
@ -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
|
@ -1 +0,0 @@
|
||||
!.vuepress
|
32
.eslintrc.js
@ -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"
|
||||
},
|
||||
};
|
13
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -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
|
59
.github/ISSUE_TEMPLATE/report_issue.yml
vendored
@ -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.
|
35
.github/ISSUE_TEMPLATE/request_feature.yml
vendored
@ -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.
|
111
.github/assets/tachiyomi-handbrake-profile.json
vendored
@ -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
@ -1,10 +0,0 @@
|
||||
{
|
||||
"extends": [
|
||||
"config:base"
|
||||
],
|
||||
"schedule": ["every sunday"],
|
||||
"ignoreDeps": [
|
||||
"vue monorepo",
|
||||
"vue"
|
||||
]
|
||||
}
|
23
.gitignore
vendored
@ -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/
|
@ -1 +0,0 @@
|
||||
18
|
2
.npmrc
@ -1,2 +0,0 @@
|
||||
# Workaround for Webpack 4 + Node 17+: https://github.com/webpack/webpack/issues/14532
|
||||
node-options="--openssl-legacy-provider"
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"tabWidth": 4,
|
||||
"useTabs": true,
|
||||
"printWidth": 120,
|
||||
"trailingComma": "es5",
|
||||
"bracketSpacing": true,
|
||||
"htmlWhitespaceSensitivity": "ignore",
|
||||
"endOfLine": "auto"
|
||||
}
|
47
.stylintrc
@ -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"
|
||||
}
|
@ -1 +0,0 @@
|
||||
nodejs lts-hydrogen
|
@ -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).
|
113
CONTRIBUTING.md
@ -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
@ -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.
|
55
README.md
@ -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
60
package.json
@ -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"
|
||||
}
|
||||
}
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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"],
|
||||
};
|
@ -1,6 +0,0 @@
|
||||
module.exports = [
|
||||
{ text: "Home", link: "/" },
|
||||
{ text: "Help Center", link: "/help/" },
|
||||
{ text: "Download", link: "/download/" },
|
||||
{ text: "Extensions", link: "/extensions/" },
|
||||
];
|
@ -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>",
|
||||
},
|
||||
],
|
||||
];
|
@ -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"],
|
||||
},
|
||||
],
|
||||
};
|
@ -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";
|
@ -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);
|
||||
};
|
@ -1 +0,0 @@
|
||||
tachiyomi.org
|
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 6.0 KiB |
@ -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 |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 164 KiB |
Before Width: | Height: | Size: 164 KiB |
Before Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 49 KiB |
@ -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 |
@ -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 |
@ -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 |
@ -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 |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 9.3 KiB |
@ -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 |
@ -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!");
|
||||
});
|
||||
});
|
||||
}
|
@ -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)}`;
|
||||
}
|