新版本UI更新
19
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,19 @@
|
||||
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.231.6/containers/javascript-node/.devcontainer/base.Dockerfile
|
||||
|
||||
# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 16, 14, 12, 16-bullseye, 14-bullseye, 12-bullseye, 16-buster, 14-buster, 12-buster
|
||||
ARG VARIANT="16-bullseye"
|
||||
FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT}
|
||||
ENV TZ=Asia/Shanghai
|
||||
|
||||
# [Optional] Uncomment this section to install additional OS packages.
|
||||
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
||||
# && apt-get -y install --no-install-recommends <your-package-list-here>
|
||||
|
||||
# [Optional] Uncomment if you want to install an additional version of node using nvm
|
||||
# ARG EXTRA_NODE_VERSION=10
|
||||
# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}"
|
||||
|
||||
# [Optional] Uncomment if you want to install more global node modules
|
||||
RUN su node -c "yarn config set registry https://registry.npmmirror.com"
|
||||
RUN su node -c "yarn config set sharp_binary_host https://npmmirror.com/mirrors/sharp"
|
||||
RUN su node -c "yarn config set sharp_libvips_binary_host https://npmmirror.com/mirrors/sharp-libvips"
|
||||
34
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,34 @@
|
||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
|
||||
// https://github.com/microsoft/vscode-dev-containers/tree/v0.231.6/containers/javascript-node
|
||||
{
|
||||
"name": "Node.js",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
// Update 'VARIANT' to pick a Node version: 16, 14, 12.
|
||||
// Append -bullseye or -buster to pin to an OS version.
|
||||
// Use -bullseye variants on local arm64/Apple Silicon.
|
||||
"args": { "VARIANT": "18-bullseye" }
|
||||
},
|
||||
|
||||
// Set *default* container specific settings.json values on container create.
|
||||
"settings": {},
|
||||
|
||||
// Add the IDs of extensions you want installed when the container is created.
|
||||
"extensions": [
|
||||
"dbaeumer.vscode-eslint",
|
||||
"esbenp.prettier-vscode"
|
||||
],
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
"forwardPorts": [8000],
|
||||
|
||||
// Use 'postCreateCommand' to run commands after the container is created.
|
||||
"postCreateCommand": "sudo chown node node_modules",
|
||||
|
||||
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
|
||||
"remoteUser": "node",
|
||||
|
||||
"mounts": [
|
||||
"source=mirrorfront-nodemodules,target=${containerWorkspaceFolder}/node_modules,type=volume"
|
||||
]
|
||||
}
|
||||
3
.dockerignore
Normal file
@@ -0,0 +1,3 @@
|
||||
.cache/
|
||||
node_modules/
|
||||
public/
|
||||
10
.editorconfig
Normal file
@@ -0,0 +1,10 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
||||
[*.{ts,tsx,js,jsx,json,yml}]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
4
.eslintignore
Normal file
@@ -0,0 +1,4 @@
|
||||
build/
|
||||
public/
|
||||
.cache/
|
||||
node_modules/
|
||||
92
.eslintrc.js
Normal file
@@ -0,0 +1,92 @@
|
||||
module.exports = {
|
||||
env: {
|
||||
browser: true,
|
||||
node: true,
|
||||
es2021: true,
|
||||
},
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:react/recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'airbnb',
|
||||
'prettier',
|
||||
],
|
||||
parser: '@typescript-eslint/parser',
|
||||
parserOptions: {
|
||||
ecmaFeatures: {
|
||||
jsx: true,
|
||||
},
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
},
|
||||
plugins: ['react', '@typescript-eslint', 'prettier'],
|
||||
rules: {
|
||||
// needed by prettier
|
||||
'prettier/prettier': 'warn',
|
||||
'arrow-body-style': 'off',
|
||||
'prefer-arrow-callback': 'off',
|
||||
// allow jsx in typescript files
|
||||
'react/jsx-filename-extension': [
|
||||
2,
|
||||
{
|
||||
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
||||
},
|
||||
],
|
||||
// from google/gts
|
||||
'block-scoped-var': 'error',
|
||||
'eqeqeq': 'error',
|
||||
'no-var': 'error',
|
||||
'prefer-const': 'error',
|
||||
'eol-last': 'error',
|
||||
'no-trailing-spaces': 'error',
|
||||
'quotes': ['warn', 'single', { avoidEscape: true }],
|
||||
'no-restricted-properties': [
|
||||
'error',
|
||||
{
|
||||
object: 'describe',
|
||||
property: 'only',
|
||||
},
|
||||
{
|
||||
object: 'it',
|
||||
property: 'only',
|
||||
},
|
||||
],
|
||||
'react/function-component-definition': [
|
||||
2,
|
||||
{
|
||||
namedComponents: 'arrow-function',
|
||||
unnamedComponents: 'arrow-function',
|
||||
},
|
||||
],
|
||||
'import/extensions': [
|
||||
'error',
|
||||
'never',
|
||||
{
|
||||
svg: 'always',
|
||||
},
|
||||
],
|
||||
'no-unused-vars': 'off',
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
'warn',
|
||||
{
|
||||
argsIgnorePattern: '^_',
|
||||
varsIgnorePattern: '^_',
|
||||
caughtErrorsIgnorePattern: '^_',
|
||||
},
|
||||
],
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'react/destructuring-assignment': 'off',
|
||||
'react/jsx-props-no-spreading': 'off',
|
||||
'react/require-default-props': 'off',
|
||||
'react/no-array-index-key': 'off',
|
||||
'react/jsx-no-constructed-context-values': 'off',
|
||||
'no-empty-function': 'off',
|
||||
'@typescript-eslint/no-empty-function': 'off',
|
||||
},
|
||||
settings: {
|
||||
'import/resolver': {
|
||||
node: {},
|
||||
typescript: {},
|
||||
},
|
||||
},
|
||||
};
|
||||
70
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ main ]
|
||||
schedule:
|
||||
- cron: '41 5 * * 5'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
81
.gitignore
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Typescript v1 declaration files
|
||||
src/typings/
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# dotenv environment variable files
|
||||
.env*
|
||||
|
||||
# gatsby files
|
||||
.cache/
|
||||
public
|
||||
|
||||
# Mac files
|
||||
.DS_Store
|
||||
|
||||
# Yarn
|
||||
yarn-error.log
|
||||
.pnp/
|
||||
.pnp.js
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# JetBrains IDE config
|
||||
.idea/
|
||||
|
||||
# config file
|
||||
config.ts
|
||||
|
||||
# vscode config file
|
||||
.vscode/
|
||||
|
||||
# pnpm packages
|
||||
.pnpm-store/
|
||||
29
.gitlab-ci.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
image: node:lts-bullseye
|
||||
|
||||
stages:
|
||||
- build
|
||||
- deploy
|
||||
|
||||
gatsby-build:
|
||||
stage: build
|
||||
variables:
|
||||
CHOKIDAR_USEPOLLING: 1
|
||||
cache:
|
||||
paths:
|
||||
- node_modules/
|
||||
script:
|
||||
- bash cached-restore.sh
|
||||
- yarn run build
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
|
||||
deploy-webhook:
|
||||
stage: deploy
|
||||
only:
|
||||
- main
|
||||
script:
|
||||
- curl "$WEBHOOK_DEPLOY_URL"
|
||||
environment:
|
||||
name: staging
|
||||
url: https://mirrors.zju.edu.cn/index
|
||||
4
.prettierignore
Normal file
@@ -0,0 +1,4 @@
|
||||
.cache
|
||||
package.json
|
||||
package-lock.json
|
||||
public
|
||||
15
.prettierrc.js
Normal file
@@ -0,0 +1,15 @@
|
||||
module.exports = {
|
||||
// from google/gts
|
||||
"bracketSpacing": false,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "es5",
|
||||
"arrowParens": "avoid",
|
||||
// other rules
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"jsxSingleQuote": false,
|
||||
"semi": true,
|
||||
"endOfLine": "lf",
|
||||
"quoteProps": "consistent",
|
||||
"bracketSpacing": true,
|
||||
}
|
||||
13
Dockerfile
Normal file
@@ -0,0 +1,13 @@
|
||||
FROM node:18-bullseye
|
||||
|
||||
WORKDIR /app
|
||||
COPY package.json yarn.lock ./
|
||||
RUN yarn config set registry 'https://registry.npmmirror.com/' && \
|
||||
yarn config set sharp_binary_host https://npmmirror.com/mirrors/sharp && \
|
||||
yarn config set sharp_libvips_binary_host https://npmmirror.com/mirrors/sharp-libvips && \
|
||||
yarn install --frozen-lockfile
|
||||
|
||||
COPY . .
|
||||
RUN yarn run build
|
||||
CMD ["yarn", "run", "serve"]
|
||||
|
||||
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 ZJUSCT
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
13
README.md
Normal file
@@ -0,0 +1,13 @@
|
||||

|
||||
|
||||
# 荆楚理工学院开源镜像站
|
||||
|
||||
back-end JSON format: [MirrorsDotNet API](https://github.com/ZJUSCT/MirrorsDotNet/blob/main/Docs/Swagger.json)
|
||||
|
||||
## Deployment
|
||||
|
||||
All static files must be mapped to `/static/*`.
|
||||
|
||||
## Special Thanks
|
||||
|
||||
UI Designer: [Rynco Maekawa](https://github.com/lynzrand)
|
||||
25
babel-extract.config.js
Normal file
@@ -0,0 +1,25 @@
|
||||
const config = require('./config');
|
||||
|
||||
module.exports = {
|
||||
presets: ['babel-preset-gatsby'],
|
||||
plugins: [
|
||||
[
|
||||
'i18next-extract',
|
||||
{
|
||||
locales: config.locales,
|
||||
keySeparator: null,
|
||||
nsSeparator: null,
|
||||
keyAsDefaultValue: [config.defaultLanguage],
|
||||
useI18nextDefaultValue: [config.defaultLanguage],
|
||||
outputPath: 'locales/{{locale}}/{{ns}}.json',
|
||||
customTransComponents: [['gatsby-plugin-react-i18next', 'Trans']]
|
||||
}
|
||||
]
|
||||
],
|
||||
overrides: [
|
||||
{
|
||||
test: [`**/*.ts`, `**/*.tsx`],
|
||||
plugins: [[`@babel/plugin-transform-typescript`, { isTSX: true }]]
|
||||
}
|
||||
]
|
||||
};
|
||||
16
cached-restore.sh
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
md5sum yarn.lock || true
|
||||
md5sum node_modules/yarn.lock || true
|
||||
|
||||
if cmp -s "yarn.lock" "node_modules/yarn.lock"; then
|
||||
echo "yarn.lock did not change, skipping install"
|
||||
else
|
||||
echo "yarn.lock changed, reinstalling packages"
|
||||
yarn config set registry https://mirrors.zju.edu.cn/npm
|
||||
yarn config set sharp_binary_host https://npmmirror.com/mirrors/sharp
|
||||
yarn config set sharp_libvips_binary_host https://npmmirror.com/mirrors/sharp-libvips
|
||||
yarn install --frozen-lockfile
|
||||
sed -i 's/fonts.googleapis.com/fonts.loli.net/g' node_modules/gatsby-plugin-webfonts/modules/google.js
|
||||
cp yarn.lock node_modules/yarn.lock
|
||||
fi
|
||||
6
caddy/Caddyfile
Normal file
@@ -0,0 +1,6 @@
|
||||
localhost:50000
|
||||
|
||||
file_server
|
||||
reverse_proxy /api/* https://mirror.zju.edu.cn {
|
||||
header_up Host {upstream_hostport}
|
||||
}
|
||||
1
caddy/docs
Normal file
@@ -0,0 +1 @@
|
||||
index/docs
|
||||
1
caddy/index
Normal file
@@ -0,0 +1 @@
|
||||
../public/
|
||||
1
caddy/index.html
Normal file
@@ -0,0 +1 @@
|
||||
index/index.html
|
||||
21
config.js
Normal file
@@ -0,0 +1,21 @@
|
||||
module.exports = {
|
||||
documentSources: {
|
||||
mirrors: {
|
||||
folder: '/:lang/:segment+',
|
||||
path: '/:lang?/docs/:segment+',
|
||||
template: `./src/templates/mirror-doc.tsx`,
|
||||
getLanguageFromPath: true
|
||||
},
|
||||
news: {
|
||||
folder: '/:lang/:segment+',
|
||||
path: '/:lang?/news/:segment+',
|
||||
template: `./src/templates/news.tsx`,
|
||||
getLanguageFromPath: true
|
||||
}
|
||||
},
|
||||
defaultLanguage: 'zh',
|
||||
locales: ['zh', 'en'],
|
||||
siteUrl: 'https://mirrors.zju.edu.cn',
|
||||
pathPrefix: '',
|
||||
assetPrefix: '/index',
|
||||
};
|
||||
10
docker-compose.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
web:
|
||||
image: git.zju.edu.cn:5050/zju-mirror/mirror-front
|
||||
restart: always
|
||||
ports:
|
||||
- 6001:9000
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
61
docs/zh/CPAN.mdx
Normal file
@@ -0,0 +1,61 @@
|
||||
---
|
||||
mirrorId: CPAN
|
||||
---
|
||||
|
||||
[CPAN](https://www.cpan.org/) (The Comprehensive Perl Archive Network) 镜像源的配置文件为 `MyConfig.pm` (一般位于 `$HOME/.cpan/CPAN/MyConfig.pm` ),可使用包管理脚本 `cpan` 进行修改。
|
||||
|
||||
首先需确保 `MyConfig.pm` 配置文件存在,在命令行中执行:
|
||||
|
||||
```bash
|
||||
# 确保 MyConfig.pm 配置文件存在,如不存在则自动生成
|
||||
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'mkmyconfig'
|
||||
|
||||
# 不使用默认配置,手动确认各个配置选项
|
||||
perl -MCPAN -e 'mkmyconfig'
|
||||
```
|
||||
|
||||
### 在 CPAN Shell 中手动设置镜像
|
||||
|
||||
在命令行中执行 `cpan` 进入 cpan shell :
|
||||
|
||||
```bash
|
||||
cpan shell -- CPAN exploration and modules installation
|
||||
Enter 'h' for help.
|
||||
|
||||
# 列出当前的镜像设置
|
||||
cpan[1]> o conf urllist
|
||||
|
||||
# 将本站镜像加入镜像列表首位
|
||||
# 注:若已在列表中则可跳过本步直接退出,修改列表不会执行自动去重
|
||||
cpan[2]> o conf urllist unshift https://mirrors.zju.edu.cn/CPAN/
|
||||
|
||||
# 或将本站镜像加入镜像列表末尾
|
||||
# 注:本命令和上面的命令执行一个即可,修改列表不会执行自动去重
|
||||
cpan[3]> o conf urllist push https://mirrors.zju.edu.cn/CPAN/
|
||||
|
||||
# 或清空镜像列表,仅保留本站
|
||||
cpan[4]> o conf urllist https://mirrors.zju.edu.cn/CPAN/
|
||||
|
||||
# 保存修改后的配置至 MyConfig.pm
|
||||
cpan[5]> o conf commit
|
||||
|
||||
# 退出 cpan shell
|
||||
cpan[6]> quit
|
||||
```
|
||||
|
||||
### 在命令行中使用脚本设置
|
||||
|
||||
在命令行中执行:
|
||||
|
||||
```bash
|
||||
# 若本站不在镜像列表中则将其加入列表首位
|
||||
if ! (
|
||||
perl -MCPAN -e 'CPAN::HandleConfig->load();' \
|
||||
-e 'CPAN::HandleConfig->prettyprint("urllist")' |
|
||||
grep -qF 'https://mirrors.zju.edu.cn/CPAN/'
|
||||
); then
|
||||
perl -MCPAN -e 'CPAN::HandleConfig->load();' \
|
||||
-e 'CPAN::HandleConfig->edit("urllist", "unshift", "https://mirrors.zju.edu.cn/CPAN/");' \
|
||||
-e 'CPAN::HandleConfig->commit()'
|
||||
fi
|
||||
```
|
||||
25
docs/zh/CRAN.mdx
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
mirrorId: CRAN
|
||||
---
|
||||
|
||||
[CRAN](https://cran.r-project.org/) (The Comprehensive R Archive Network) 镜像源配置文件之一是 `.Rprofile` (linux 下位于 `$HOME/.Rprofile` )。
|
||||
|
||||
在文末添加如下语句:
|
||||
|
||||
```bash
|
||||
options("repos" = c(CRAN="https://mirrors.zju.edu.cn/CRAN/"))
|
||||
```
|
||||
|
||||
打开 R 即可使用该 CRAN 镜像源安装 R 软件包。
|
||||
|
||||
### Ubuntu 下添加 CRAN 镜像安装 R
|
||||
|
||||
参考 [README 里的步骤](https://mirrors.zju.edu.cn/CRAN/bin/linux/ubuntu),运行
|
||||
|
||||
```bash
|
||||
sudo apt update -qq
|
||||
sudo apt install --no-install-recommends software-properties-common dirmngr
|
||||
wget -qO- https://mirrors.zju.edu.cn/misc/cran/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
|
||||
sudo add-apt-repository "deb https://mirrors.zju.edu.cn/CRAN/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
|
||||
```
|
||||
|
||||
63
docs/zh/CTAN.mdx
Normal file
@@ -0,0 +1,63 @@
|
||||
---
|
||||
mirrorId: CTAN
|
||||
---
|
||||
|
||||
CTAN (The Comprehensive TeX Archive Network) 是所有 TeX 排版系统相关材料的汇集地,收录了编译引擎、宏包及字体等的源代码与说明文档。目前,绝大多数 LaTeX 宏包会被上传至 CTAN 核心站点,随后同步到遍布全球的各个镜像。
|
||||
|
||||
- CTAN 主页: https://www.ctan.org/
|
||||
- 浙江大学镜像: https://mirrors.zju.edu.cn/CTAN/
|
||||
|
||||
本文提供了 TeX Live 和 MiKTeX 两大主要发行版的镜像配置方法。
|
||||
|
||||
### TeX Live
|
||||
|
||||
TeX Live 是目前使用最为广泛的 TeX 发行版,支持 Windows、Linux 和 macOS。其中在 macOS 上发行的版本称为 MacTeX。
|
||||
|
||||
#### 安装
|
||||
|
||||
TeX Live 发行版的常见安装方法可以参考[此文档](https://mirrors.zju.edu.cn/CTAN/info/install-latex-guide-zh-cn/install-latex-guide-zh-cn.pdf)。
|
||||
|
||||
除每年更新的完整版 ISO 镜像以外, CTAN 镜像中也包含在线安装器。这种方法可以使安装的所有宏包均为最新版本,但受网络连接状况影响较大。操作方法为(*很可能需要管理员权限*):
|
||||
|
||||
1. 下载 [`install-tl.zip`](https://mirrors.zju.edu.cn/CTAN/systems/texlive/tlnet/install-tl.zip) 并解压缩
|
||||
2. Windows 下双击运行其中的 `install-tl.bat` 。如果有图形化界面,可以在进入安装器前的右下角按钮指定使用镜像源。
|
||||
Linux 下使用如下命令:
|
||||
```bash
|
||||
perl install-tl --repository https://mirrors.zju.edu.cn/CTAN/systems/texlive/tlnet
|
||||
```
|
||||
|
||||
#### 切换镜像
|
||||
|
||||
TeX Live 使用的 CTAN 镜像源可以从内置的包管理器 `tlmgr` 更改(*很可能需要管理员权限*)。
|
||||
|
||||
在命令行中执行
|
||||
|
||||
```bash
|
||||
tlmgr option repository https://mirrors.zju.edu.cn/CTAN/systems/texlive/tlnet
|
||||
```
|
||||
|
||||
即可永久更改镜像源。
|
||||
|
||||
如果只需要临时切换,可以用如下命令:
|
||||
|
||||
```bash
|
||||
tlmgr update --all --repository https://mirrors.zju.edu.cn/CTAN/systems/texlive/tlnet
|
||||
```
|
||||
|
||||
其中的 ```update --all``` 指令可根据需要修改。
|
||||
|
||||
### MiKTeX
|
||||
|
||||
MiKTeX 发行版的特点在于仅安装用户需要的宏包,节省了磁盘空间占用,但在部分实现细节上与 TeX Live 有所出入。该发行版支持 Windows、Linux 和 macOS。
|
||||
|
||||
#### 安装
|
||||
|
||||
MiKTeX 仅提供 Windows 和 macOS 的独立安装包,前往 TeX 排版系统下载页即可。在 Linux 下的安装请参考[官方文档](https://miktex.org/howto/install-miktex-unx)。
|
||||
|
||||
#### 切换镜像
|
||||
|
||||
MiKTeX 使用的 CTAN 镜像源可以从内置的 MiKTeX Console 图形化应用程序进行切换,也可以使用如下命令:
|
||||
|
||||
```bash
|
||||
mpm --set-repository=https://mirrors.zju.edu.cn/CTAN/systems/win32/miktex/tm/packages/
|
||||
```
|
||||
14
docs/zh/almalinux.mdx
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
mirrorId: almalinux
|
||||
---
|
||||
|
||||
> 以下命令在 AlmaLinux 9.1 上经过测试,结合您使用的实际版本命令也许有所更改。
|
||||
|
||||
输入以下命令替换配置:
|
||||
|
||||
```bash
|
||||
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
|
||||
-e 's|^#\s*baseurl=https://repo.almalinux.org/almalinux|baseurl=https://mirrors.zju.edu.cn/almalinux|g' \
|
||||
-i.bak \
|
||||
/etc/yum.repos.d/almalinux-*.repo
|
||||
```
|
||||
11
docs/zh/alpine.mdx
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
mirrorId: alpine
|
||||
---
|
||||
|
||||
Alpine Linux 是一个面向安全、轻量级的,基于 musl libc 与 busybox 项目的 Linux 发行版。
|
||||
|
||||
在终端输入以下命令以替换浙大镜像源:
|
||||
|
||||
```bash
|
||||
sed -i 's/dl-cdn.alpinelinux.org/mirrors.zju.edu.cn/g' /etc/apk/repositories
|
||||
```
|
||||
51
docs/zh/anaconda.mdx
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
mirrorId: anaconda
|
||||
---
|
||||
|
||||
Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。
|
||||
|
||||
Anaconda 安装包可以到 https://mirrors.zju.edu.cn/anaconda/archive/ 下载。
|
||||
|
||||
浙大镜像源与其同步上游 TUNA 镜像源提供的软件包一致。
|
||||
|
||||
> TUNA 提供了 Anaconda 仓库与第三方源( conda-forge、msys2、pytorch 等,[查看完整列表](https://mirrors.zju.edu.cn/anaconda/cloud/))的镜像。
|
||||
>
|
||||
> 注: 由于更新过快难以同步,我们不同步 `pytorch-nightly`, `pytorch-nightly-cpu`, `ignite-nightly` 这三个包。
|
||||
|
||||
各系统都可以通过修改用户目录下的 `.condarc` 文件来使用浙大镜像源。Windows 用户无法直接创建名为 `.condarc` 的文件,可先执行 `conda config --set show_channel_urls yes` 生成该文件之后再修改。
|
||||
|
||||
修改 `.condarc` 配置如下:
|
||||
|
||||
```yaml
|
||||
channels:
|
||||
- defaults
|
||||
show_channel_urls: true
|
||||
default_channels:
|
||||
- https://mirrors.zju.edu.cn/anaconda/pkgs/main
|
||||
- https://mirrors.zju.edu.cn/anaconda/pkgs/r
|
||||
- https://mirrors.zju.edu.cn/anaconda/pkgs/msys2
|
||||
custom_channels:
|
||||
conda-forge: https://mirrors.zju.edu.cn/anaconda/cloud
|
||||
msys2: https://mirrors.zju.edu.cn/anaconda/cloud
|
||||
bioconda: https://mirrors.zju.edu.cn/anaconda/cloud
|
||||
menpo: https://mirrors.zju.edu.cn/anaconda/cloud
|
||||
pytorch: https://mirrors.zju.edu.cn/anaconda/cloud
|
||||
pytorch-lts: https://mirrors.zju.edu.cn/anaconda/cloud
|
||||
simpleitk: https://mirrors.zju.edu.cn/anaconda/cloud
|
||||
```
|
||||
|
||||
即可添加 Anaconda Python 免费仓库。
|
||||
|
||||
运行 `conda clean -i` 清除索引缓存,保证用的是镜像站提供的索引。
|
||||
|
||||
运行 `conda create -n myenv numpy` 测试一下吧。
|
||||
|
||||
### Miniconda 镜像使用帮助
|
||||
|
||||
Miniconda 是一个 Anaconda 的轻量级替代,默认只包含了 python 和 conda ,但是可以通过 pip 和 conda 来安装所需要的包。
|
||||
|
||||
Miniconda 安装包可以到 https://mirrors.zju.edu.cn/anaconda/miniconda/ 下载。
|
||||
|
||||
### 其他第三方源
|
||||
|
||||
暂不支持。
|
||||
13
docs/zh/anolis.mdx
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
mirrorId: anolis
|
||||
---
|
||||
|
||||
> 以下代码在 AnolisOS 8.6 上经过测试,结合您所使用的系统版本,命令可能有所不同。
|
||||
|
||||
输入以下命令替换配置:
|
||||
|
||||
```bash
|
||||
sed -e 's|mirrors.openanolis.cn|mirrors.zju.edu.cn|g' \
|
||||
-i.bak \
|
||||
/etc/yum.repos.d/AnolisOS-*.repo
|
||||
```
|
||||
15
docs/zh/archlinux.mdx
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
mirrorId: archlinux
|
||||
---
|
||||
|
||||
编辑 `/etc/pacman.d/mirrorlist` , 在文件的最顶端添加:
|
||||
|
||||
```plaintext
|
||||
Server = https://mirrors.zju.edu.cn/archlinux/$repo/os/$arch
|
||||
```
|
||||
|
||||
更新软件包缓存:
|
||||
|
||||
```bash
|
||||
sudo pacman -Syy
|
||||
```
|
||||
19
docs/zh/archlinuxcn.mdx
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
mirrorId: archlinuxcn
|
||||
---
|
||||
|
||||
Arch Linux 中文社区仓库 是由 Arch Linux 中文社区驱动的非官方用户仓库。包含中文用户常用软件、工具、字体/美化包等。
|
||||
|
||||
完整的包信息列表(包名称/架构/维护者/状态)请 [点击这里](https://github.com/archlinuxcn/repo) 查看。
|
||||
|
||||
- 官方仓库地址: https://repo.archlinuxcn.org
|
||||
- 镜像地址: https://mirrors.zju.edu.cn/archlinuxcn/
|
||||
|
||||
使用方法:在 `/etc/pacman.conf` 文件末尾添加以下两行:
|
||||
|
||||
```toml
|
||||
[archlinuxcn]
|
||||
Server = https://mirrors.zju.edu.cn/archlinuxcn/$arch
|
||||
```
|
||||
|
||||
之后安装 `archlinuxcn-keyring` 包导入 GPG key。
|
||||
32
docs/zh/bioconductor.mdx
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
mirrorId: bioconductor
|
||||
---
|
||||
|
||||
Bioconductor 为高通量基因组数据的分析和可视化提供开源工具。Bioconductor 多数软件包采用 R 统计编程语言开发。Bioconductor 每年释出两个版本,并有活跃的用户社区。
|
||||
|
||||
使用方法:[Bioconductor](https://www.bioconductor.org/) 镜像源配置文件之一是 `.Rprofile`(linux 下位于 `~/.Rprofile`, Windows 下位于 `~\library\base\R\Rprofile`)。
|
||||
|
||||
在文末添加如下语句或在 R/RStudio 终端下键入:
|
||||
|
||||
```R
|
||||
options(BioC_mirror="https://mirrors.zju.edu.cn/bioconductor")
|
||||
```
|
||||
|
||||
即可使用该 Bioconductor 镜像源安装 Bioconductor 软件包。命令如下:
|
||||
|
||||
```R
|
||||
if (!requireNamespace("BiocManager", quietly = TRUE))
|
||||
install.packages("BiocManager")
|
||||
BiocManager::install("$package_name")
|
||||
```
|
||||
|
||||
### 离线使用
|
||||
|
||||
如果您的网络环境处于校内但无法访问公网,在完成下列步骤后,即可正常使用 Bioconductor 镜像。
|
||||
1. 确保 BiocManager 的版本不低于 `1.30.12`。
|
||||
2. 使用一台可以访问公网的设备,访问 [https://bioconductor.org/config.yaml](https://bioconductor.org/config.yaml) 下载 `config.yaml`,并将该文件拷贝到 BiocManager 所在的校内设备上。然后,在 `~/.Rprofile` 添加如下配置:
|
||||
```R
|
||||
options(
|
||||
BIOCONDUCTOR_CONFIG_FILE = "file:///path/to/config.yaml" # config.yaml 所在的路径
|
||||
)
|
||||
```
|
||||
43
docs/zh/centos-vault.mdx
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
mirrorId: centos-vault
|
||||
---
|
||||
|
||||
该文件夹提供较早版本的 CentOS,例如 CentOS 6;同时提供当前 CentOS 大版本的历史小版本的归档;
|
||||
还提供 CentOS 各个版本的源代码和调试符号。
|
||||
|
||||
建议先备份 `/etc/yum.repos.d/` 内的文件。
|
||||
|
||||
需要确定您所需要的小版本,如无特殊需要则使用该大版本的最后一个小版本,比如 6.10,5.11,我们将其标记为 `$minorver`,需要您在之后的命令中替换。
|
||||
|
||||
然后编辑 `/etc/yum.repos.d/` 中的相应文件,在 `mirrorlist=` 开头行前面加 `#` 注释掉;并将 `baseurl=` 开头行取消注释(如果被注释的话)。
|
||||
|
||||
- 对于 CentOS 8 之前的版本,请把该行内的域名及路径(例如`mirror.centos.org/centos/$releasever`)替换为 `{{mirror}}/$minorver`。
|
||||
- 对于 CentOS 8,请注意域名及路径发生了更换,此时需要替换的字段为 `http://mirror.centos.org/$contentdir/$releasever` 。
|
||||
|
||||
以上步骤可以被下方的命令完成
|
||||
|
||||
```shell
|
||||
# CentOS 8 之前
|
||||
minorver=6.10
|
||||
sed -e "s|^mirrorlist=|#mirrorlist=|g" \
|
||||
-e "s|^#baseurl=http://mirror.centos.org/centos/\$releasever|baseurl=https://mirrors.zju.edu.cn/$minorver|g" \
|
||||
-i.bak \
|
||||
/etc/yum.repos.d/CentOS-*.repo
|
||||
|
||||
# CentOS 8 之后
|
||||
minorver=8.5.2111
|
||||
sed -e "s|^mirrorlist=|#mirrorlist=|g" \
|
||||
-e "s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.zju.edu.cn/$minorver|g" \
|
||||
-i.bak \
|
||||
/etc/yum.repos.d/CentOS-*.repo
|
||||
```
|
||||
|
||||
注意其中的`*`通配符,如果只需要替换一些文件中的源,请自行增删。
|
||||
|
||||
注意,如果需要启用其中一些 repo,需要将其中的 `enabled=0` 改为 `enabled=1`。
|
||||
|
||||
最后,更新软件包缓存
|
||||
|
||||
```shell
|
||||
yum makecache
|
||||
```
|
||||
35
docs/zh/centos.mdx
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
mirrorId: centos
|
||||
---
|
||||
|
||||
在使用 CentOS 镜像前,请检查您所应该使用的对应软件源:
|
||||
|
||||
| CentOS 版本 | 架构 | 对应软件源 |
|
||||
|---|---|---|
|
||||
| 6 及之前 | - | centos-vault |
|
||||
| 7 | x86_64 | centos |
|
||||
| 7 | 其他 | centos-altarch |
|
||||
| 8 ~ 8.1 | x86_64 | centos |
|
||||
| 8 ~ 8.1 | 其他 | centos-altarch |
|
||||
| 8.1 ~ 8.5 | - | centos-vault |
|
||||
| 8 Stream | - | centos |
|
||||
| 9 Stream | - | centos-stream |
|
||||
|
||||
|
||||
使用以下命令切换源并备份原始配置:
|
||||
|
||||
```bash
|
||||
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
|
||||
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.zju.edu.cn|g' \
|
||||
-i.bak \
|
||||
/etc/yum.repos.d/CentOS-*.repo
|
||||
```
|
||||
注意其中的*通配符,如果只需要替换一些文件中的源,请自行增删。
|
||||
|
||||
如果需要启用其中一些 repo,需要将其中的 `enabled=0` 改为 `enabled=1`。
|
||||
|
||||
然后,更新软件包缓存:
|
||||
|
||||
```bash
|
||||
sudo yum makecache
|
||||
```
|
||||
16
docs/zh/crates.io-index.git.mdx
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
mirrorId: crates.io-index.git
|
||||
isGit: true
|
||||
---
|
||||
|
||||
编辑 `~/.cargo/config` 文件,添加以下内容:
|
||||
|
||||
```toml
|
||||
[source.crates-io]
|
||||
replace-with = 'zju'
|
||||
|
||||
[source.zju]
|
||||
registry = "https://mirrors.zju.edu.cn/git/crates.io-index.git"
|
||||
```
|
||||
|
||||
该镜像可加快 cargo 读取软件包索引的速度。
|
||||
15
docs/zh/cygwin.mdx
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
mirrorId: cygwin
|
||||
---
|
||||
|
||||
从 https://cygwin.com 上下载 [setup-x86.exe](https://cygwin.com/setup-x86.exe) 或 [setup-x86_64.exe](https://cygwin.com/setup-x86_64.exe) 。
|
||||
|
||||
选择 `Install from Internet` , 在 `User URL` 处输入以下地址:
|
||||
|
||||
```plaintext
|
||||
https://mirrors.zju.edu.cn/cygwin/
|
||||
```
|
||||
|
||||
点击 `Add` 按钮, 然后选中 `https://mirrors.zju.edu.cn` , 点击“下一步”进行安装。
|
||||
|
||||
注意,该列表为可多选列表,把上面不需要的镜像点掉。
|
||||
7
docs/zh/debian-security.mdx
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
mirrorId: debian-security
|
||||
---
|
||||
|
||||
`debian-security` 是 Debian 的安全更新软件源。
|
||||
|
||||
请参阅 Debian 镜像源的使用帮助。
|
||||
72
docs/zh/debian.mdx
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
mirrorId: debian
|
||||
---
|
||||
|
||||
import ConfigGenerator from '../../src/components/config-generator'
|
||||
|
||||
export const debianVersions = [
|
||||
"bookworm", // 12
|
||||
"bullseye", // 11
|
||||
"buster", // 10
|
||||
"stretch", // 9
|
||||
"jessie", // 8
|
||||
"testing", // next stable in dev
|
||||
"sid", // unstable
|
||||
]
|
||||
|
||||
export const GenDebianConfig = (version) => {
|
||||
if (version === 'sid') { // unstable
|
||||
return `# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
deb https://mirrors.zju.edu.cn/debian/ sid main contrib non-free non-free-firmware
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ sid main contrib non-free non-free-firmware`
|
||||
} else if (version === 'bullseye') { // 11
|
||||
return `# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
deb https://mirrors.zju.edu.cn/debian/ ${version} main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ ${version} main contrib non-free
|
||||
deb https://mirrors.zju.edu.cn/debian/ ${version}-updates main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ ${version}-updates main contrib non-free\n
|
||||
deb https://mirrors.zju.edu.cn/debian/ ${version}-backports main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ ${version}-backports main contrib non-free\n
|
||||
deb https://mirrors.zju.edu.cn/debian-security ${version}-security main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian-security ${version}-security main contrib non-free`
|
||||
} else if (version === 'buster' || version === 'stretch') { // 9, 10
|
||||
return `# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
deb https://mirrors.zju.edu.cn/debian/ ${version} main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ ${version} main contrib non-free
|
||||
deb https://mirrors.zju.edu.cn/debian/ ${version}-updates main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ ${version}-updates main contrib non-free
|
||||
deb https://mirrors.zju.edu.cn/debian/ ${version}-backports main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ ${version}-backports main contrib non-free
|
||||
deb https://mirrors.zju.edu.cn/debian-security ${version}/updates main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian-security ${version}/updates main contrib non-free`
|
||||
} else if (version === 'jessie') { // 8
|
||||
return `# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
deb https://mirrors.zju.edu.cn/debian/ jessie main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ jessie main contrib non-free
|
||||
deb https://mirrors.zju.edu.cn/debian/ jessie-updates main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ jessie-updates main contrib non-free
|
||||
deb https://mirrors.zju.edu.cn/debian-security jessie/updates main contrib non-free
|
||||
# deb-src https://mirrors.zju.edu.cn/debian-security jessie/updates main contrib non-free`
|
||||
}
|
||||
return `# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
deb https://mirrors.zju.edu.cn/debian/ ${version} main contrib non-free non-free-firmware
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ ${version} main contrib non-free non-free-firmware
|
||||
deb https://mirrors.zju.edu.cn/debian/ ${version}-updates main contrib non-free non-free-firmware
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ ${version}-updates main contrib non-free non-free-firmware
|
||||
deb https://mirrors.zju.edu.cn/debian/ ${version}-backports main contrib non-free non-free-firmware
|
||||
# deb-src https://mirrors.zju.edu.cn/debian/ ${version}-backports main contrib non-free non-free-firmware
|
||||
deb https://mirrors.zju.edu.cn/debian-security ${version}-security main contrib non-free non-free-firmware
|
||||
# deb-src https://mirrors.zju.edu.cn/debian-security ${version}-security main contrib non-free non-free-firmware`
|
||||
}
|
||||
|
||||
Debian 的软件源配置文件是 `/etc/apt/sources.list`。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用我们的软件源镜像。
|
||||
|
||||
如果遇到无法拉取 https 源的情况,请先使用 http 源并安装:
|
||||
|
||||
```bash
|
||||
sudo apt install apt-transport-https ca-certificates
|
||||
```
|
||||
|
||||
再使用我们的软件源镜像。
|
||||
|
||||
<ConfigGenerator promptString="请选择您的 Debian 版本:" versionList={debianVersions} configGen={GenDebianConfig} language="bash" />
|
||||
5
docs/zh/deepin.mdx
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
mirrorId: deepin
|
||||
---
|
||||
|
||||
编辑 `/etc/apt/sources.list` ,将其中的 URL 替换为 `http://mirrors.zju.edu.cn/deepin` 。
|
||||
82
docs/zh/docker-ce.mdx
Normal file
@@ -0,0 +1,82 @@
|
||||
---
|
||||
mirrorId: docker-ce
|
||||
---
|
||||
|
||||
import ConfigGenerator from '../../src/components/config-generator'
|
||||
|
||||
export const osList = ['Debian', 'Ubuntu'];
|
||||
export const genCommand = (os) => {
|
||||
const o = os.toLowerCase();
|
||||
return `#信任 Docker 的 GPG 公钥:\n
|
||||
curl -fsSL https://download.docker.com/linux/${o}/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n
|
||||
#添加软件仓库:\n
|
||||
echo \\\n
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.zju.edu.cn/docker-ce/linux/${o} \\\n
|
||||
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
|
||||
#最后安装\n
|
||||
sudo apt-get update
|
||||
sudo apt-get install docker-ce
|
||||
`;
|
||||
}
|
||||
export const osList2 = ['CentOS/RHEL', 'Fedora'];
|
||||
export const genCommand2 = (os) => {
|
||||
const o = os.toLowerCase().charAt(0) == 'c' ? 'centos' : 'fedora';
|
||||
return `yum-config-manager --add-repo https://download.docker.com/linux/${o}/docker-ce.repo`;
|
||||
}
|
||||
|
||||
注意: 本镜像只提供 docker 程序安装包,非 dockerhub
|
||||
|
||||
### Linux 平台使用说明
|
||||
|
||||
#### Debian/Ubuntu 用户
|
||||
|
||||
以下内容根据 [官方文档](https://docs.docker.com/engine/install/debian/) 修改而来。
|
||||
|
||||
如果你过去安装过 docker ,先删掉:
|
||||
|
||||
```bash
|
||||
sudo apt-get remove docker docker-engine docker.io containerd runc
|
||||
```
|
||||
|
||||
首先安装依赖:
|
||||
|
||||
```bash
|
||||
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
|
||||
```
|
||||
|
||||
根据你的发行版,下面的内容有所不同。你使用的发行版:
|
||||
|
||||
<ConfigGenerator promptString="选择你使用的发行版:" versionList={osList} defaultVersion={'Debian'} configGen={genCommand} />
|
||||
|
||||
#### Fedora/CentOS/RHEL
|
||||
|
||||
以下内容根据 [官方文档](https://docs.docker.com/engine/install/centos/) 修改而来。
|
||||
|
||||
如果你之前安装过 docker ,先删掉:
|
||||
|
||||
```bash
|
||||
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
|
||||
```
|
||||
|
||||
安装一些依赖:
|
||||
|
||||
```bash
|
||||
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
|
||||
```
|
||||
|
||||
根据你的发行版下载repo文件:
|
||||
|
||||
<ConfigGenerator promptString="选择你使用的发行版:" versionList={osList2} defaultVersion={'CentOS/RHEL'} configGen={genCommand2} />
|
||||
|
||||
把软件仓库地址替换为浙大源:
|
||||
|
||||
```bash
|
||||
sudo sed -i 's+download.docker.com+mirrors.zju.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
|
||||
```
|
||||
|
||||
最后安装:
|
||||
|
||||
```bash
|
||||
sudo yum makecache fast
|
||||
sudo yum install docker-ce
|
||||
```
|
||||
91
docs/zh/elpa.mdx
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
mirrorId: elpa
|
||||
---
|
||||
|
||||
ELPA 是 Emacs 内建包管理器 `package.el` 的软件源,镜像站支持了如下 ELPA :
|
||||
|
||||
- gnu
|
||||
- gnu-devel
|
||||
- melpa
|
||||
- nongnu
|
||||
- nongnu-devel
|
||||
- org
|
||||
- stable-melpa
|
||||
|
||||
根据你的需求,设置 package-archives,比如用 GNU ELPA 和 MELPA:
|
||||
|
||||
```lisp
|
||||
(setq package-archives '(("gnu" . "https://mirrors.zju.edu.cn/elpa/gnu/")
|
||||
("nongnu" . "https://mirrors.zju.edu.cn/elpa/nongnu/")
|
||||
("melpa" . "https://mirrors.zju.edu.cn/elpa/melpa/")))
|
||||
(package-initialize) ;; You might already have this line
|
||||
```
|
||||
|
||||
### Spacemacs 用户
|
||||
|
||||
#### master 分支
|
||||
|
||||
添加下面的代码到`.spacemacs`的`dotspacemacs/user-init()`
|
||||
|
||||
```lisp
|
||||
(setq configuration-layer--elpa-archives
|
||||
'(("melpa-cn" . "https://mirrors.zju.edu.cn/elpa/melpa/")
|
||||
("org-cn" . "https://mirrors.zju.edu.cn/elpa/org/")
|
||||
("gnu-cn" . "https://mirrors.zju.edu.cn/elpa/gnu/")))
|
||||
```
|
||||
|
||||
#### develop 分支
|
||||
|
||||
使用 `configuration-layer-elpa-archives` 代替原来的 `configuration-layer--elpa-archives` ( `--` 换成 `-` )
|
||||
|
||||
```lisp
|
||||
(setq configuration-layer-elpa-archives
|
||||
'(("melpa-cn" . "https://mirrors.zju.edu.cn/elpa/melpa/")
|
||||
("org-cn" . "https://mirrors.zju.edu.cn/elpa/org/")
|
||||
("gnu-cn" . "https://mirrors.zju.edu.cn/elpa/gnu/")))
|
||||
```
|
||||
|
||||
### Cask 用户
|
||||
|
||||
[Cask](https://github.com/cask/cask) 是一个 Emacs Lisp 的项目管理工具。这里还是以 GNU ELPA 和 MELPA 为例,在添加下面的代码到 Cask
|
||||
|
||||
```lisp
|
||||
(source "gnu" "https://mirrors.zju.edu.cn/elpa/gnu/")
|
||||
(source "melpa" "https://mirrors.zju.edu.cn/elpa/melpa/")
|
||||
```
|
||||
|
||||
### 关于 ELPA 的选择
|
||||
|
||||
(来自[@xuchunyang](https://github.com/xuchunyang))
|
||||
|
||||
假如不清楚需要用哪些 ELPA 的话
|
||||
|
||||
- `gnu` 一般是必备的,其它的 elpa 中的包会依赖 `gnu` 中的包
|
||||
- `nongnu` 建议启用,类似于 `melpa` 但是 Emacs 官方维护的
|
||||
- `melpa` 滚动升级,收录了的包的数量最大
|
||||
- `stable-melpa` 依据源码的 Tag(Git)升级,数量比 `melpa` 少,因为很多包作者根本不打 Tag
|
||||
- `org` 仅仅为了 `org-plus-contrib` 这一个包,org 重度用户使用
|
||||
- `gnu-devel` 收录 `gnu` 中的包的开发中版本,一般不必启用(与 `gnu` 的关系类似于 `melpa` 与 `stable-melpa` 的关系)
|
||||
- `nongnu-devel` 收录 `nongnu` 中的包的开发中版本,一般不必启用
|
||||
|
||||
### 上游
|
||||
|
||||
本文档参考了 http://elpa.emacs-china.org/ 提供的帮助。
|
||||
|
||||
### URL Bug
|
||||
|
||||
各个仓库的 URL 末尾一定要加`/`,否则会无法拉取,提示`Failed to download melpa archive`。
|
||||
|
||||
事实上,末尾没有`/`的话,emacs 会去尝试取以下链接:
|
||||
|
||||
```plaintext
|
||||
https://mirrors.zju.edu.cn/elpa/melpaarchive-contents
|
||||
```
|
||||
|
||||
而正常的链接应该是
|
||||
|
||||
```plaintext
|
||||
https://mirrors.zju.edu.cn/elpa/melpa/archive-contents
|
||||
```
|
||||
|
||||
这个是 emacs 自己的 bug。在 https://github.com/melpa/melpa/issues/2139 中有描述。
|
||||
50
docs/zh/elrepo.mdx
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
mirrorId: elrepo
|
||||
---
|
||||
|
||||
import ConfigGenerator from '../../src/components/config-generator'
|
||||
|
||||
export const osVersion = ['7', '8', '6'];
|
||||
export const versionName = [
|
||||
'RHEL-7, SL-7, CentOS-7',
|
||||
'RHEL-8, SL-8, CentOS-8',
|
||||
'RHEL-6, SL-6, CentOS-6'
|
||||
];
|
||||
export const configGen = (version) => {
|
||||
return `
|
||||
yum install https://www.elrepo.org/elrepo-release-${version}.el${version}.elrepo.noarch.rpm`;
|
||||
}
|
||||
|
||||
首先按照[官网的安装说明](https://elrepo.org/tiki/tiki-index.php),配置 ELRepo:
|
||||
|
||||
```bash
|
||||
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
|
||||
```
|
||||
|
||||
接着,按照你的系统版本,运行:
|
||||
|
||||
<ConfigGenerator
|
||||
promptString=""
|
||||
versionList={osVersion}
|
||||
friendlyNameList={versionName}
|
||||
configGen={configGen} />
|
||||
|
||||
接下来是换源,建议先备份 `/etc/yum.repos.d/elrepo.repo` :
|
||||
|
||||
```shell
|
||||
cp /etc/yum.repos.d/elrepo.repo /etc/yum.repos.d/elrepo.repo.bak
|
||||
```
|
||||
|
||||
然后编辑 /etc/yum.repos.d/elrepo.repo 文件,在 `mirrorlist=` 开头的行前面加 `#` 注释掉;并将 `http://elrepo.org/linux` 替换为
|
||||
|
||||
|
||||
```plaintext
|
||||
https://mirrors.zju.edu.cn/elrepo
|
||||
```
|
||||
|
||||
|
||||
最后,更新软件包缓存
|
||||
|
||||
```shell
|
||||
yum makecache
|
||||
```
|
||||
67
docs/zh/epel.mdx
Normal file
@@ -0,0 +1,67 @@
|
||||
---
|
||||
mirrorId: epel
|
||||
---
|
||||
|
||||
|
||||
EPEL(Extra Packages for Enterprise Linux) 是由 Fedora Special Interest Group 维护的 Enterprise Linux(RHEL、CentOS)中经
|
||||
常用到的包。
|
||||
|
||||
|
||||
下面以 CentOS 7 为例讲解如何使用本镜像站的 epel 镜像。CentOS 8 同样可用该方法。
|
||||
|
||||
首先从 CentOS Extras 这个源里安装 epel-release:
|
||||
|
||||
```shell
|
||||
yum install epel-release
|
||||
```
|
||||
|
||||
修改`/etc/yum.repos.d/epel.repo`,将`mirrorlist`和`metalink`开头的行注释掉。
|
||||
|
||||
接下来,取消注释这个文件里`baseurl`开头的行,并将其中的`http://download.fedoraproject.org/pub/epel`替换成`https://mirrors.zju.edu.cn/epel`。
|
||||
|
||||
可以用如下命令自动替换:(来自 https://github.com/tuna/issues/issues/687 )
|
||||
|
||||
|
||||
```shell
|
||||
sed -e 's!^metalink=!#metalink=!g' \
|
||||
-e 's!^#baseurl=!baseurl=!g' \
|
||||
-e 's!http://download\.fedoraproject\.org/pub/epel!https://mirrors.zju.edu.cn/epel!g' \
|
||||
-e 's!http://download\.example/pub/epel!https://mirrors.zju.edu.cn/epel!g' \
|
||||
-i /etc/yum.repos.d/epel*.repo
|
||||
```
|
||||
|
||||
|
||||
修改结果如下:(仅供参考,不同版本可能不同)
|
||||
|
||||
|
||||
```ini
|
||||
[epel]
|
||||
name=Extra Packages for Enterprise Linux 7 - $basearch
|
||||
baseurl=https://mirrors.zju.edu.cn/epel/7/$basearch
|
||||
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
|
||||
failovermethod=priority
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
|
||||
|
||||
[epel-debuginfo]
|
||||
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
|
||||
baseurl=https://mirrors.zju.edu.cn/epel/7/$basearch/debug
|
||||
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
|
||||
failovermethod=priority
|
||||
enabled=0
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
|
||||
gpgcheck=1
|
||||
|
||||
[epel-source]
|
||||
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
|
||||
baseurl=https://mirrors.zju.edu.cn/epel/7/SRPMS
|
||||
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
|
||||
failovermethod=priority
|
||||
enabled=0
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
|
||||
gpgcheck=1
|
||||
```
|
||||
|
||||
|
||||
运行 `yum update` 测试一下吧。
|
||||
70
docs/zh/fedora.mdx
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
mirrorId: fedora
|
||||
---
|
||||
|
||||
Fedora 默认使用 [Metalink](https://zh.fedoracommunity.org/2018/04/05/fedora-secures-package-delivery.html) 给出推荐的镜像列表,保证用户使用的镜像仓库足够新,并且能够尽快拿到安全更新,从而提供更好的安全性。所以通常情况下使用默认配置即可,无需更改配置文件。
|
||||
|
||||
由于 Metalink 需要从国外的 Fedora 项目服务器上获取元信息,所以对于校园内网、无国外访问等特殊情况, metalink 并不适用,此时可以如下修改配置文件。
|
||||
|
||||
Fedora 的软件源配置文件可以有多个,其中: 系统默认的 `fedora` 仓库配置文件为 `/etc/yum.repos.d/fedora.repo` ,系统默认的 `updates` 仓库配置文件为 `/etc/yum.repos.d/fedora-updates.repo` 。将上述两个文件先做个备份,根据 Fedora 系统版本分别替换为下面内容,之后通过 `sudo dnf makecache` 命令更新本地缓存,即可使用 TUNA 的软件源镜像。
|
||||
|
||||
### Fedora 29 或更旧版本
|
||||
|
||||
Fedora 29 及更旧版本已不再受官方支持, Fedora 官方已将 Fedora 29 及更旧版本的软件仓库从主镜像中移除,并转移至了 archive 镜像中。故Fedora 29 及更旧版本无法使用 ZJU 的镜像。请使用默认配置文件,以使 `yum` / `dnf` 自动获取可用的镜像源。
|
||||
|
||||
### Fedora 30 或更新版本
|
||||
|
||||
`fedora` 仓库 (/etc/yum.repos.d/fedora.repo)
|
||||
|
||||
```ini
|
||||
[fedora]
|
||||
name=Fedora $releasever - $basearch
|
||||
failovermethod=priority
|
||||
baseurl=https://mirrors.zju.edu.cn/fedora/releases/$releasever/Everything/$basearch/os/
|
||||
metadata_expire=28d
|
||||
gpgcheck=1
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
|
||||
skip_if_unavailable=False
|
||||
```
|
||||
|
||||
`updates` 仓库 (/etc/yum.repos.d/fedora-updates.repo)
|
||||
|
||||
```ini
|
||||
[updates]
|
||||
name=Fedora $releasever - $basearch - Updates
|
||||
failovermethod=priority
|
||||
baseurl=https://mirrors.zju.edu.cn/fedora/updates/$releasever/Everything/$basearch/
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
metadata_expire=6h
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
|
||||
skip_if_unavailable=False
|
||||
```
|
||||
|
||||
`fedora-modular` 仓库 (/etc/yum.repos.d/fedora-modular.repo)
|
||||
|
||||
```ini
|
||||
[fedora-modular]
|
||||
name=Fedora Modular $releasever - $basearch
|
||||
failovermethod=priority
|
||||
baseurl=https://mirrors.zju.edu.cn/fedora/releases/$releasever/Modular/$basearch/os/
|
||||
enabled=1
|
||||
metadata_expire=7d
|
||||
gpgcheck=1
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
|
||||
skip_if_unavailable=False
|
||||
```
|
||||
|
||||
`updates-modular` 仓库 (/etc/yum.repos.d/fedora-updates-modular.repo)
|
||||
|
||||
```ini
|
||||
[updates-modular]
|
||||
name=Fedora Modular $releasever - $basearch - Updates
|
||||
failovermethod=priority
|
||||
baseurl=https://mirrors.zju.edu.cn/fedora/updates/$releasever/Modular/$basearch/
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
metadata_expire=6h
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
|
||||
skip_if_unavailable=False
|
||||
```
|
||||
34
docs/zh/gentoo-portage.git.mdx
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
mirrorId: gentoo-portage.git
|
||||
isGit: true
|
||||
---
|
||||
|
||||
第一次使用 `git` 同步方式的用户需要进行如下操作:
|
||||
|
||||
- 修改 `/etc/portage/repos.conf/gentoo.conf`
|
||||
- 将 `sync-type` 改为 `git`
|
||||
- 将 `sync-uri` 改为
|
||||
|
||||
```text
|
||||
https://mirrors.zju.edu.cn/git/gentoo-portage.git
|
||||
```
|
||||
|
||||
- 删除 `/var/db/repos/gentoo`
|
||||
- 执行 `emerge --sync`
|
||||
|
||||
已经配置 `git` 同步的用户只需:
|
||||
|
||||
- 修改 `/etc/portage/repos.conf/gentoo.conf`
|
||||
- 将 `sync-uri` 改为
|
||||
|
||||
```text
|
||||
https://mirrors.zju.edu.cn/git/gentoo-portage.git
|
||||
```
|
||||
|
||||
- 于 `/var/db/repos/gentoo` 下,执行
|
||||
|
||||
```bash
|
||||
git remote set-url origin https://mirrors.zju.edu.cn/git/gentoo-portage.git
|
||||
```
|
||||
|
||||
- 执行 `emerge --sync`
|
||||
29
docs/zh/gentoo-portage.mdx
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
mirrorId: gentoo-portage
|
||||
---
|
||||
|
||||
### Portage 配置
|
||||
|
||||
#### rsync 方式
|
||||
|
||||
修改 `/etc/portage/repos.conf/gentoo.conf` ,将
|
||||
|
||||
```conf
|
||||
sync-uri = rsync://rsync.gentoo.org/gentoo-portage
|
||||
```
|
||||
|
||||
修改为
|
||||
|
||||
```conf
|
||||
sync-uri = rsync://mirror.zju.edu.cn/gentoo-portage
|
||||
```
|
||||
|
||||
#### git 方式
|
||||
|
||||
参考 [Gentoo Portage Git 帮助](/docs/gentoo-portage.git/)。
|
||||
|
||||
### Distfiles 配置
|
||||
|
||||
参考 [Gentoo 帮助](/docs/gentoo/)。
|
||||
|
||||
配置好 Portage 与 Distfiles 后,执行 `emerge --sync` 进行更新。
|
||||
31
docs/zh/gentoo.mdx
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
mirrorId: gentoo
|
||||
---
|
||||
|
||||
本仓库是 Gentoo 的 Stage 3 镜像。
|
||||
|
||||
### Distfiles 配置
|
||||
|
||||
在 `/etc/portage/make.conf` 中加入:
|
||||
|
||||
```conf
|
||||
GENTOO_MIRRORS="https://mirrors.zju.edu.cn/gentoo"
|
||||
```
|
||||
|
||||
关于 Portage 配置可以参考 [Gentoo Portage 镜像](/docs/gentoo-portage/)。
|
||||
|
||||
配置好 Portage 与 Distfiles 后,执行 `emerge --sync` 进行更新。
|
||||
|
||||
### Gentoo Prefix Bootstrap 镜像配置
|
||||
|
||||
在运行 Bootstrap 脚本之前,可通过设置以下环境变量选择 Bootstrap 过程中使用的镜像。
|
||||
|
||||
```bash
|
||||
export GENTOO_MIRRORS="https://mirrors.zju.edu.cn/gentoo"
|
||||
export SNAPSHOT_URL="https://mirrors.zju.edu.cn/gentoo/snapshots"
|
||||
# export GNU_URL="http://mirrors.zju.edu.cn/gnu"
|
||||
```
|
||||
|
||||
`GNU_URL` 的具体设置可以参考 [GNU 帮助](/docs/gnu/)。
|
||||
|
||||
Bootstrap 成功后,若对 Gentoo Portage 和 Distfiles 换源,可参照以上几节,只需将 `/etc` 换成 `$EPREFIX/etc`
|
||||
10
docs/zh/glibc.git.mdx
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
mirrorId: glibc.git
|
||||
isGit: true
|
||||
---
|
||||
|
||||
此仓库提供 glibc.git 的镜像:
|
||||
|
||||
```bash
|
||||
git clone https://mirrors.zju.edu.cn/git/glibc.git
|
||||
```
|
||||
15
docs/zh/gnu.mdx
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
mirrorId: gnu
|
||||
---
|
||||
|
||||
### Gentoo
|
||||
|
||||
本节供 [Gentoo 帮助](/docs/gentoo/) 使用
|
||||
|
||||
```bash
|
||||
export GNU_URL="https://mirrors.zju.edu.cn/gnu"
|
||||
```
|
||||
|
||||
### 其他使用
|
||||
|
||||
直接进入文件浏览界面,选取需要的文件进行下载
|
||||
176
docs/zh/homebrew.git.mdx
Normal file
@@ -0,0 +1,176 @@
|
||||
---
|
||||
mirrorId: homebrew
|
||||
isGit: true
|
||||
---
|
||||
|
||||
> 该镜像仍在施工中,可能无法正常工作
|
||||
|
||||
**注:该镜像是 Homebrew / Linuxbrew 源程序以及 formula / cask 索引的镜像(即 `brew update` 时所更新内容)。镜像站同时提供相应的二进制预编译包的镜像([Homebrew bottles](https://mirrors.zju.edu.cn/homebrew-bottles)) **
|
||||
|
||||
镜像站提供了 https://github.com/Homebrew 组织下的以下 `repo`:`brew`, `homebrew-core`, `homebrew-cask`, `homebrew-cask-fonts`, `homebrew-cask-drivers`, `homebrew-cask-versions`, `homebrew-command-not-found`, `install`。
|
||||
|
||||
### 日常使用(只使用 Homebrew bottles 镜像)
|
||||
|
||||
```bash
|
||||
export HOMEBREW_API_DOMAIN="https://mirrors.zju.edu.cn/homebrew-bottles/api"
|
||||
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.zju.edu.cn/homebrew-bottles"
|
||||
export HOMEBREW_PIP_INDEX_URL="https://mirrors.zju.edu.cn/pypi/web/simple/"
|
||||
```
|
||||
|
||||
### 首次安装 Homebrew / Linuxbrew
|
||||
|
||||
首先,需要确保系统中安装了 bash、git 和 curl,对于 macOS 用户需额外要求安装 Command Line Tools (CLT) for Xcode。
|
||||
|
||||
- 对于 macOS 用户,系统自带 bash、git 和 curl,在命令行输入 `xcode-select --install` 安装 CLT for Xcode 即可。
|
||||
- 对于 Linux 用户,系统自带 bash,仅需额外安装 git 和 curl。
|
||||
|
||||
接着,在终端输入以下几行命令设置环境变量:
|
||||
|
||||
```bash
|
||||
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/brew.git"
|
||||
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git"
|
||||
export HOMEBREW_INSTALL_FROM_API=1
|
||||
# export HOMEBREW_API_DOMAIN
|
||||
# export HOMEBREW_BOTTLE_DOMAIN
|
||||
# export HOMEBREW_PIP_INDEX_URL
|
||||
```
|
||||
|
||||
前往 [Homebrew bottles 镜像使用帮助](/docs/homebrew-bottles/)中「临时替换」一节设置好 `HOMEBREW_API_DOMAIN` 与 `HOMEBREW_BOTTLE_DOMAIN`。
|
||||
|
||||
前往 [PyPI 镜像使用帮助](/docs/pypi/)中「Homebrew」一节设置好 `HOMEBREW_PIP_INDEX_URL`。
|
||||
|
||||
_注:自 `brew` 4.0 起,`HOMEBREW_INSTALL_FROM_API` 会成为默认行为,无需设置;大部分用户无需再克隆 homebrew/core 仓库,故无需设置 `HOMEBREW_CORE_GIT_REMOTE` 环境变量。但若需要运行 `brew` 的开发命令或者 `brew` 安装在非官方支持的默认 prefix 位置,则仍需设置 `HOMEBREW_CORE_GIT_REMOTE` 环境变量;如果不想通过 API 安装,可以设置 `HOMEBREW_NO_INSTALL_FROM_API=1`。_
|
||||
|
||||
最后,在终端运行以下命令以安装 Homebrew / Linuxbrew:
|
||||
|
||||
```bash
|
||||
# 从镜像下载安装脚本并安装 Homebrew / Linuxbrew
|
||||
git clone --depth=1 https://mirrors.zju.edu.cn/git/homebrew/install.git brew-install
|
||||
/bin/bash brew-install/install.sh
|
||||
rm -rf brew-install
|
||||
# 也可从 GitHub 获取官方安装脚本安装 Homebrew / Linuxbrew
|
||||
/bin/bash -c "$(curl -fsSL https://github.com/Homebrew/install/raw/master/install.sh)"
|
||||
```
|
||||
|
||||
这样在首次安装的时候也可以使用镜像。更多信息请参考 [Homebrew 官方安装文档](https://docs.brew.sh/Installation)。
|
||||
|
||||
_* 安装成功后需将 brew 程序的相关路径加入到环境变量中:_
|
||||
|
||||
- _以下针对基于 Apple Silicon CPU 设备上的 macOS 系统(命令行运行 `uname -m` 应输出 `arm64`)上的 Homebrew:_
|
||||
|
||||
```bash
|
||||
test -r ~/.bash_profile && echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.bash_profile
|
||||
test -r ~/.zprofile && echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
|
||||
```
|
||||
|
||||
_对基于 Intel CPU 设备上的 macOS 系统(命令行运行 `uname -m` 应输出 `x86_64`)的用户可跳过本步。_
|
||||
|
||||
- _以下针对 Linux 系统上的 Linuxbrew:_
|
||||
|
||||
```bash
|
||||
test -d ~/.linuxbrew && eval "$(~/.linuxbrew/bin/brew shellenv)"
|
||||
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
||||
test -r ~/.bash_profile && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bash_profile
|
||||
test -r ~/.profile && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.profile
|
||||
test -r ~/.zprofile && echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.zprofile
|
||||
```
|
||||
|
||||
_参考了 [https://docs.brew.sh/Homebrew-on-Linux](https://docs.brew.sh/Homebrew-on-Linux)。_
|
||||
|
||||
### 替换现有仓库上游
|
||||
|
||||
替换 brew 程序本身的源,Homebrew / Linuxbrew 相同:
|
||||
|
||||
```bash
|
||||
# export HOMEBREW_API_DOMAIN=
|
||||
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/brew.git"
|
||||
brew update
|
||||
```
|
||||
|
||||
前往 [Homebrew bottles 镜像使用帮助](/docs/homebrew-bottles/)中「临时替换」一节设置好 `HOMEBREW_API_DOMAIN`
|
||||
|
||||
以下针对 macOS 系统上的 Homebrew:
|
||||
|
||||
```bash
|
||||
# 手动设置
|
||||
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git"
|
||||
# 注:自 brew 4.0 起,大部分 Homebrew 用户无需设置 homebrew/core 和 homebrew/cask 镜像,只需设置 HOMEBREW_API_DOMAIN 即可。
|
||||
# 如果需要使用 Homebrew 的开发命令 (如 `brew cat <formula>`),则仍然需要设置 homebrew/core 和 homebrew/cask 镜像。
|
||||
# 请按需执行如下两行命令:
|
||||
brew tap --custom-remote --force-auto-update homebrew/core https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git
|
||||
brew tap --custom-remote --force-auto-update homebrew/cask https://mirrors.zju.edu.cn/git/homebrew/homebrew-cask.git
|
||||
# 除 homebrew/core 和 homebrew/cask 仓库外的 tap 仓库仍然需要设置镜像
|
||||
brew tap --custom-remote --force-auto-update homebrew/cask-fonts https://mirrors.zju.edu.cn/git/homebrew/homebrew-cask-fonts.git
|
||||
brew tap --custom-remote --force-auto-update homebrew/cask-drivers https://mirrors.zju.edu.cn/git/homebrew/homebrew-cask-drivers.git
|
||||
brew tap --custom-remote --force-auto-update homebrew/cask-versions https://mirrors.zju.edu.cn/git/homebrew/homebrew-cask-versions.git
|
||||
brew tap --custom-remote --force-auto-update homebrew/command-not-found https://mirrors.zju.edu.cn/git/homebrew/homebrew-command-not-found.git
|
||||
brew update
|
||||
# 或使用下面的几行命令自动设置
|
||||
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git"
|
||||
for tap in core cask{,-fonts,-drivers,-versions} command-not-found; do
|
||||
brew tap --custom-remote --force-auto-update "homebrew/${tap}" "https://mirrors.zju.edu.cn/git/homebrew/homebrew-${tap}.git"
|
||||
done
|
||||
brew update
|
||||
```
|
||||
|
||||
以下针对 Linux 系统上的 Linuxbrew:
|
||||
|
||||
```bash
|
||||
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git"
|
||||
# 注:自 brew 4.0 起,使用默认 prefix (即 "/home/linuxbrew/.linuxbrew") 的大部分 Homebrew 用户无需设置 homebrew/core 镜像,只需设置 HOMEBREW_API_DOMAIN 即可。
|
||||
# 如果不是默认 prefix 或者需要使用 Homebrew 的开发命令 (如 `brew cat <formula>`),则仍然需要设置 homebrew/core 镜像。
|
||||
# 请按需执行如下命令:
|
||||
brew tap --custom-remote --force-auto-update homebrew/core https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git
|
||||
# 除 homebrew/core 仓库外的 tap 仓库仍然需要设置镜像
|
||||
brew tap --custom-remote --force-auto-update homebrew/command-not-found https://mirrors.zju.edu.cn/git/homebrew/homebrew-command-not-found.git
|
||||
brew update
|
||||
```
|
||||
|
||||
**注:如果用户设置了环境变量 `HOMEBREW_BREW_GIT_REMOTE` 和 `HOMEBREW_CORE_GIT_REMOTE`,则每次执行 `brew update` 时,`brew` 程序本身和 Core Tap (`homebrew-core`) 的远程将被自动设置。推荐用户将这两个环境变量设置加入 shell 的 profile 设置中。**
|
||||
|
||||
```bash
|
||||
test -r ~/.bash_profile && echo 'export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/brew.git"' >> ~/.bash_profile # bash
|
||||
test -r ~/.bash_profile && echo 'export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git"' >> ~/.bash_profile
|
||||
test -r ~/.profile && echo 'export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/brew.git"' >> ~/.profile
|
||||
test -r ~/.profile && echo 'export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git"' >> ~/.profile
|
||||
test -r ~/.zprofile && echo 'export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/brew.git"' >> ~/.zprofile # zsh
|
||||
test -r ~/.zprofile && echo 'export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git"' >> ~/.zprofile
|
||||
```
|
||||
|
||||
对于 `HOMEBREW_API_DOMAIN` 与其余 bottles 相关环境变量的持久化,可以参考 [Homebrew Bottles 帮助](/docs/homebrew-bottles/)。
|
||||
|
||||
_镜像迁移说明:Linuxbrew 核心仓库(`linuxbrew-core`)自 2021 年 10 月 25 日(`brew` 版本 3.3.0 起)被弃用,Linuxbrew 用户应迁移至 `homebrew-core`。Linuxbrew 用户请依新版镜像说明重新设置镜像。注意迁移前请先运行 `brew update` 将 `brew` 更新至 3.3.0 或以上版本。迁移过程中若出现任何问题,可使用如下命令重新安装 `homebrew-core`:_
|
||||
|
||||
```bash
|
||||
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git"
|
||||
rm -rf "$(brew --repo homebrew/core)"
|
||||
brew tap --custom-remote --force-auto-update homebrew/core https://mirrors.zju.edu.cn/git/homebrew/homebrew-core.git
|
||||
```
|
||||
|
||||
### 复原仓库上游
|
||||
|
||||
_(感谢 Snowonion Lee 提供说明)_
|
||||
|
||||
```bash
|
||||
# brew 程序本身,Homebrew / Linuxbrew 相同
|
||||
unset HOMEBREW_API_DOMAIN
|
||||
unset HOMEBREW_BREW_GIT_REMOTE
|
||||
git -C "$(brew --repo)" remote set-url origin https://github.com/Homebrew/brew
|
||||
# 以下针对 macOS 系统上的 Homebrew
|
||||
unset HOMEBREW_CORE_GIT_REMOTE
|
||||
BREW_TAPS="$(BREW_TAPS="$(brew tap 2>/dev/null)"; echo -n "${BREW_TAPS//$'\n'/:}")"
|
||||
for tap in core cask{,-fonts,-drivers,-versions} command-not-found; do
|
||||
if [[ ":${BREW_TAPS}:" == *":homebrew/${tap}:"* ]]; then # 只复原已安装的 Tap
|
||||
brew tap --custom-remote "homebrew/${tap}" "https://github.com/Homebrew/homebrew-${tap}"
|
||||
fi
|
||||
done
|
||||
# 以下针对 Linux 系统上的 Linuxbrew
|
||||
unset HOMEBREW_API_DOMAIN
|
||||
unset HOMEBREW_CORE_GIT_REMOTE
|
||||
brew tap --custom-remote homebrew/core https://github.com/Homebrew/homebrew-core
|
||||
brew tap --custom-remote homebrew/command-not-found https://github.com/Homebrew/homebrew-command-not-found
|
||||
# 重新拉取远程
|
||||
brew update
|
||||
```
|
||||
|
||||
**注:重置回默认远程后,用户应该删除 shell 的 profile 设置中的环境变量 `HOMEBREW_BREW_GIT_REMOTE` 和 `HOMEBREW_CORE_GIT_REMOTE` 以免运行 `brew update` 时远程再次被更换。**
|
||||
24
docs/zh/ius.mdx
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
mirrorId: ius
|
||||
---
|
||||
|
||||
### 设置
|
||||
|
||||
如果要在您的系统上启用 IUS 仓库,请安装 **ius-release** 包。此包包含 IUS 的仓库配置和签名公钥。此外,许多 IUS 中的软件包依赖于 [EPEL](http://mirrors.zju.edu.cn/docs/epel/) 仓库,因此也要安装 **epel-release** 包。
|
||||
|
||||
#### RHEL/CentOS 7
|
||||
|
||||
```bash
|
||||
yum install \
|
||||
https://mirrors.zju.edu.cn/ius/ius-release-el7.rpm \
|
||||
https://mirrors.zju.edu.cn/epel/epel-release-latest-7.noarch.rpm
|
||||
```
|
||||
|
||||
#### 测试
|
||||
|
||||
IUS 软件包在被发布到主仓库之前,将首先在 ius-testing 中提供。安装 ius-release 时,默认情况下 ius-testing 仓库是禁用的。如果您希望参与测试新的 IUS 软件包,请启用它。
|
||||
|
||||
```bash
|
||||
yum install yum-utils
|
||||
yum-config-manager --enable ius-testing
|
||||
```
|
||||
19
docs/zh/kali.mdx
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
mirrorId: kali
|
||||
---
|
||||
|
||||
### 手动替换
|
||||
编辑 `/etc/apt/sources.list` 文件,在文件最前面添加以下条目:
|
||||
|
||||
```properties
|
||||
deb https://mirrors.zju.edu.cn/kali kali-rolling main non-free contrib
|
||||
#deb-src https://mirrors.zju.edu.cn/kali kali-rolling main non-free contrib
|
||||
```
|
||||
|
||||
### sed 替换
|
||||
|
||||
执行如下命令 sed 替换
|
||||
|
||||
```bash
|
||||
sed -i "s@http://http.kali.org/kali@https://mirrors.zju.edu.cn/kali@g" /etc/apt/sources.list
|
||||
```
|
||||
36
docs/zh/linux.git.mdx
Normal file
@@ -0,0 +1,36 @@
|
||||
---
|
||||
mirrorId: linux.git
|
||||
---
|
||||
|
||||
如需克隆 Linux 代码,使用
|
||||
|
||||
```bash
|
||||
git clone https://mirrors.zju.edu.cn/git/linux.git
|
||||
```
|
||||
|
||||
若要将 mirror 加入已有代码库,可在已有仓库中运行
|
||||
|
||||
|
||||
```bash
|
||||
git remote add mirror https://mirrors.zju.edu.cn/git/linux.git
|
||||
```
|
||||
|
||||
或运行
|
||||
|
||||
```bash
|
||||
git remote set-url origin https://mirrors.zju.edu.cn/git/linux.git
|
||||
```
|
||||
|
||||
将默认上游设置为镜像站
|
||||
|
||||
### 增量下载
|
||||
|
||||
如果需要其它 linux 分支的代码(如树莓派内核代码),可以在 clone 本项目基础上增量下载分支的代码,从而加速下载
|
||||
|
||||
以树莓派为例,具体操作为
|
||||
|
||||
```bash
|
||||
git clone https://mirrors.zju.edu.cn/git/linux.git
|
||||
git remote add rasp https://github.com/raspberrypi/linux.git
|
||||
git fetch rasp
|
||||
```
|
||||
31
docs/zh/linuxmint.mdx
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
mirrorId: linuxmint
|
||||
---
|
||||
|
||||
import ConfigGenerator from '../../src/components/config-generator'
|
||||
|
||||
export const linuxmintVersionMap = {
|
||||
"21.1": "vera",
|
||||
"21": "vanessa",
|
||||
"20.3": "una",
|
||||
"20.2": "uma",
|
||||
"20.1": "ulyssa",
|
||||
}
|
||||
|
||||
export const GetConfig = (version) => {
|
||||
var versionName = linuxmintVersionMap[version]
|
||||
return `deb https://mirrors.zju.edu.cn/linuxmint/ ${versionName} main upstream import backport`
|
||||
}
|
||||
|
||||
Linux Mint 也采用 apt 作为包管理器,与 Ubuntu 和 Debian 类似,你需要编辑 `/etc/apt/sources.list` 和 `/etc/apt/sources.list.d/*` 中的路径。对于来自 Ubuntu 与 Debian 的部分源,可以参考 [Ubuntu 帮助](/docs/ubuntu/)与 [Debian 帮助](/docs/debian/)进行修改。
|
||||
|
||||
需要修改 `/etc/apt/sources.list.d/official-package-repositories.list`(注意备份),把 `packages.linuxmint.com` 替换为镜像源
|
||||
|
||||
|
||||
<ConfigGenerator promptString="Linux Mint 版本:" versionList={Object.keys(linuxmintVersionMap)} defaultVersion="21.1" configGen={GetConfig} language="text" />
|
||||
|
||||
|
||||
然后运行 `apt update` 即可。
|
||||
|
||||
注:完成后请不要再使用 mintsources(自带的图形化软件源设置工具)进行任何操作,因为在操作后,无论是否有按“确定”,mintsources 均会复写 `/etc/apt/sources.list.d/official-package-repositories.list`。
|
||||
|
||||
27
docs/zh/llvm-apt.mdx
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
mirrorId: llvm-apt
|
||||
---
|
||||
|
||||
import ConfigGenerator from '../../src/components/config-generator'
|
||||
|
||||
### 安装脚本
|
||||
|
||||
export const llvmVersionMap = {
|
||||
"默认": "",
|
||||
"15": "15",
|
||||
"14": "14",
|
||||
"13": "13",
|
||||
"12": "12",
|
||||
"11": "11",
|
||||
}
|
||||
|
||||
export const GetConfig = (version) => {
|
||||
var versionName = llvmVersionMap[version]
|
||||
return `wget https://mirrors.zju.edu.cn/llvm-apt/llvm.sh
|
||||
chmod +x llvm.sh
|
||||
./llvm.sh ${versionName} all -m https://mirrors.zju.edu.cn/llvm-apt`
|
||||
}
|
||||
|
||||
使用下面的指令进行配置。
|
||||
|
||||
<ConfigGenerator promptString="请选择您需要的 LLVM 版本:" versionList={Object.keys(llvmVersionMap)} defaultVersion="默认" configGen={GetConfig} language="bash" />
|
||||
33
docs/zh/manjaro.mdx
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
mirrorId: manjaro
|
||||
---
|
||||
|
||||
> 镜像站已正常工作,但可能未进入中国镜像站列表。
|
||||
>
|
||||
> 手动设置方法可参照 [ArchLinux 文档](/docs/archlinux)
|
||||
|
||||
包含架构:`i686`, `x86_64`, `aarch64`
|
||||
|
||||
目前 AArch64 (ARM) 架构的 manjaro 源位于主源,manjaro-arm 镜像上游已不再更新。
|
||||
|
||||
### 使用说明
|
||||
|
||||
生成可用中国镜像站列表:
|
||||
|
||||
```shell
|
||||
pacman-mirrors -i -c China -m rank
|
||||
```
|
||||
|
||||
勾选
|
||||
|
||||
```plaintext
|
||||
https://mirrors.zju.edu.cn/manjaro/
|
||||
```
|
||||
|
||||
然后按 ``OK`` 键两次。
|
||||
|
||||
最后刷新缓存:
|
||||
|
||||
```bash
|
||||
pacman -Syy
|
||||
```
|
||||
29
docs/zh/msys2.mdx
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
mirrorId: msys2
|
||||
---
|
||||
|
||||
### 收录架构
|
||||
|
||||
* MINGW: i686, x86_64, ucrt64, clang64
|
||||
* MSYS: i686, x86_64
|
||||
|
||||
### 安装
|
||||
|
||||
请访问镜像目录下的 `distrib/` 目录
|
||||
|
||||
```conf
|
||||
# x86_64
|
||||
https://mirrors.zju.edu.cn/msys2/distrib/x86_64/
|
||||
# i686
|
||||
https://mirrors.zju.edu.cn/msys2/distrib/i686/
|
||||
```
|
||||
|
||||
找到名为 `msys2-<架构>-<日期>.exe` 的文件(如 `msys2-x86_64-20141113.exe`),下载安装即可。
|
||||
|
||||
### pacman 的配置
|
||||
|
||||
直接运行
|
||||
|
||||
```bash
|
||||
sed -i "s#https\?://mirror.msys2.org/#https://mirrors.zju.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
|
||||
```
|
||||
31
docs/zh/npm.mdx
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
mirrorId: npm
|
||||
---
|
||||
|
||||
### Yarn
|
||||
|
||||
#### 临时修改
|
||||
|
||||
```bash
|
||||
yarn add <package> --registry https://mirrors.zju.edu.cn/npm
|
||||
```
|
||||
|
||||
#### 永久修改
|
||||
|
||||
```bash
|
||||
yarn config set registry https://mirrors.zju.edu.cn/npm
|
||||
```
|
||||
|
||||
### NPM
|
||||
|
||||
#### 临时修改
|
||||
|
||||
```bash
|
||||
npm install <package> --registry=https://mirrors.zju.edu.cn/npm
|
||||
```
|
||||
|
||||
#### 永久修改
|
||||
|
||||
```bash
|
||||
npm config set registry https://mirrors.zju.edu.cn/npm
|
||||
```
|
||||
78
docs/zh/opensuse.mdx
Normal file
@@ -0,0 +1,78 @@
|
||||
---
|
||||
mirrorId: opensuse
|
||||
---
|
||||
|
||||
openSUSE 项目是一个由 Novell 赞助的社区项目。该项目旨在推进 Linux 的广泛应用,提供自由、易于入手和美观实用的 openSUSE Linux 发行版。openSUSE 使用 `zypper` 作为包管理器。
|
||||
|
||||
openSUSE 默认使用 [MirrorBrain](https://zh.opensuse.org/MirrorBrain) 技术统一镜像入口,在下载时自动分配镜像站点,从而给用户提供更好的安全性,通常情况下使用默认配置即可。
|
||||
|
||||
使用 MirrorBrain 需要从位于德国的 openSUSE 主服务器上获取元数据,这可能导致使用默认软件源时获取元数据较慢,此时可以使用镜像源替换默认软件源。
|
||||
|
||||
### openSUSE Leap 15.2 或更新版本使用方法
|
||||
|
||||
禁用官方软件源
|
||||
|
||||
```bash
|
||||
zypper mr -da
|
||||
```
|
||||
|
||||
添加镜像源
|
||||
|
||||
```bash
|
||||
zypper ar -cfg 'https://mirrors.zju.edu.cn/opensuse/distribution/leap/$releasever/repo/oss/' mirror-oss
|
||||
zypper ar -cfg 'https://mirrors.zju.edu.cn/opensuse/distribution/leap/$releasever/repo/non-oss/' mirror-non-oss
|
||||
zypper ar -cfg 'https://mirrors.zju.edu.cn/opensuse/update/leap/$releasever/oss/' mirror-update
|
||||
zypper ar -cfg 'https://mirrors.zju.edu.cn/opensuse/update/leap/$releasever/non-oss/' mirror-update-non-oss
|
||||
```
|
||||
|
||||
Leap 15.3 用户还需添加 sle 和 backports 源
|
||||
|
||||
```bash
|
||||
zypper ar -cfg 'https://mirrors.zju.edu.cn/opensuse/update/leap/$releasever/sle/' mirror-sle-update
|
||||
zypper ar -cfg 'https://mirrors.zju.edu.cn/opensuse/update/leap/$releasever/backports/' mirror-backports-update
|
||||
```
|
||||
|
||||
Leap 15.3 注:若在安装时**没有**启用在线软件源,sle 源和 backports 源将在系统首次更新后引入,请确保系统在更新后仅启用了**六个**所需软件源。可使用 `zypper lr` 检查软件源状态,并使用 `zypper mr -d` 禁用多余的软件源。
|
||||
|
||||
### openSUSE Tumbleweed 使用方法
|
||||
|
||||
禁用官方软件源
|
||||
|
||||
```bash
|
||||
zypper mr -da
|
||||
```
|
||||
|
||||
添加镜像源
|
||||
|
||||
```bash
|
||||
zypper ar -cfg 'https://mirrors.zju.edu.cn/opensuse/tumbleweed/repo/oss/' mirror-oss
|
||||
zypper ar -cfg 'https://mirrors.zju.edu.cn/opensuse/tumbleweed/repo/non-oss/' mirror-non-oss
|
||||
```
|
||||
|
||||
刷新软件源
|
||||
|
||||
```bash
|
||||
zypper ref
|
||||
```
|
||||
|
||||
Tumbleweed 注:Tumbleweed 安装后默认会启用 oss, non-oss, update, 3 个官方软件源,
|
||||
其中 oss 及 non-oss 源用于发布 Tumbleweed 的每日构建快照,快照中已包含系统所需的全部软件包及更新。
|
||||
update 源仅用于推送临时安全补丁,如当日快照已发布但仍有临时安全补丁时,会首先推送至 update 源,并在次日合入下一版快照。
|
||||
由于 update 源存在较强的时效性,上游镜像并未同步 update 源,镜像源亦无法提供该源的镜像。
|
||||
禁用 update 源并不会使系统缺失任何功能或安全更新,仅会导致极少数更新晚些推送,如有需求可以重新启用官方 update 源。
|
||||
|
||||
### 图形界面下配置方法
|
||||
|
||||
以 openSUSE Leap 15.3 为例:
|
||||
|
||||
1. 打开 YaST;
|
||||
2. 点击 Software 分组中的 Software Repositories;
|
||||
3. 在打开的窗口上方的列表中点击 Main Repository,点击 Edit;
|
||||
4. 将 download.opensuse.org 替换为
|
||||
|
||||
```plaintext
|
||||
mirrors.zju.edu.cn/opensuse
|
||||
```
|
||||
|
||||
点 OK;
|
||||
5. 再用同样的方法编辑 Non-OSS Repository, Main Update Repository, Update Repository (Non-Oss) 和 Update repository with updates from SUSE Linux Enterprise 15。
|
||||
28
docs/zh/openwrt.mdx
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
mirrorId: openwrt
|
||||
---
|
||||
|
||||
OpenWRT(曾用名 LEDE)是一款广泛应用于路由器的嵌入式操作系统。本站提供 OpenWRT 的包管理器 `opkg` 的 release 部分镜像。
|
||||
|
||||
部分镜像站(例如 TUNA/BFSU)并不包含 snapshots 镜像,USTC 提供了对 snapshots 的反代,请在替换之前确认各镜像站的情况。
|
||||
|
||||
### 手工替换
|
||||
|
||||
登录到路由器,并编辑 `/etc/opkg/distfeeds.conf` 文件,将其中的 `http://downloads.openwrt.org` 替换为
|
||||
|
||||
```plaintext
|
||||
https://mirrors.zju.edu.cn/openwrt
|
||||
```
|
||||
|
||||
即可。
|
||||
|
||||
### 自动替换
|
||||
|
||||
执行如下命令自动替换
|
||||
|
||||
```shell
|
||||
sed -i 's_https\?://downloads.openwrt.org_https://mirrors.zju.edu.cn/openwrt_' /etc/opkg/distfeeds.conf
|
||||
```
|
||||
|
||||
|
||||
注:使用 HTTPS 可以有效避免国内运营商的缓存劫持,但需要另行安装 `libustream-openssl ca-bundle ca-certificates` 。
|
||||
14
docs/zh/packman.mdx
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
mirrorId: packman
|
||||
---
|
||||
|
||||
openSUSE 非官方社区软件源,主要收录允许自由分发但存在专利纠纷的软件,
|
||||
例如多媒体解码器等。
|
||||
|
||||
### 使用说明
|
||||
|
||||
以 openSUSE Leap 为例添加软件源:
|
||||
|
||||
```bash
|
||||
zypper ar -fcg https://mirrors.zju.edu.cn/packman/suse/openSUSE_Leap_\$releasever/ mirror-packman
|
||||
```
|
||||
23
docs/zh/pypi.mdx
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
mirrorId: pypi
|
||||
---
|
||||
|
||||
> pypi 镜像目前仅为校内用户提供镜像服务。若您的网络环境处于校外, pip 的 HTTP(S) 请求将会被重定向( 302 )至清华 TUNA 镜像站。
|
||||
|
||||
### 临时使用
|
||||
```bash
|
||||
pip install -i https://mirrors.zju.edu.cn/pypi/web/simple some-package
|
||||
```
|
||||
注意,`simple` 不能少,若使用 http 镜像需要加上 `--trusted-host mirrors.zju.edu.cn`
|
||||
|
||||
### 设为默认
|
||||
升级 pip 到最新的版本 (>=10.0.0) 后进行配置:
|
||||
|
||||
```bash
|
||||
pip install pip -U
|
||||
pip config set global.index-url https://mirrors.zju.edu.cn/pypi/web/simple
|
||||
```
|
||||
如果您到 pip 默认源的网络连接较差,临时使用本镜像站来升级 pip :
|
||||
```bash
|
||||
pip install -i https://mirrors.zju.edu.cn/pypi/web/simple pip -U
|
||||
```
|
||||
30
docs/zh/raspberrypi.mdx
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
mirrorId: raspberrypi
|
||||
---
|
||||
|
||||
import ConfigGenerator from '../../src/components/config-generator'
|
||||
|
||||
export const osVersion = ['11', '10', '9'];
|
||||
export const versionName = [
|
||||
'Debian 11 (bullseye)',
|
||||
'Debian 10 (buster)',
|
||||
'Debian 9 (stretch)',
|
||||
];
|
||||
export const configGen = (version) => {
|
||||
const versionMap = {
|
||||
'9': 'stretch',
|
||||
'10': 'buster',
|
||||
'11': 'bullseye',
|
||||
};
|
||||
const release_name = versionMap[version];
|
||||
return `deb https://mirrors.zju.edu.cn/raspberrypi/ ${release_name} main
|
||||
`;
|
||||
}
|
||||
|
||||
编辑 `/etc/apt/sources.list.d/raspi.list` :
|
||||
|
||||
<ConfigGenerator
|
||||
promptString=""
|
||||
versionList={osVersion}
|
||||
friendlyNameList={versionName}
|
||||
configGen={configGen} />
|
||||
82
docs/zh/raspbian.mdx
Normal file
@@ -0,0 +1,82 @@
|
||||
---
|
||||
mirrorId: raspbian
|
||||
---
|
||||
|
||||
import ConfigGenerator from '../../src/components/config-generator'
|
||||
|
||||
### Raspbian 简介
|
||||
|
||||
Raspbian 是专门用于 ARM 卡片式计算机 Raspberry Pi® “树莓派”的操作系统,
|
||||
其基于 Debian 开发,针对 Raspberry Pi 硬件优化。
|
||||
|
||||
Raspbian 并非由树莓派的开发与维护机构 The Raspberry Pi Foundation
|
||||
“树莓派基金会”官方支持。其维护者是一群 Raspberry Pi 硬件和 Debian 项目的爱好者。
|
||||
|
||||
注:Raspbian 系统由于从诞生开始就基于(为了 armhf,也必须基于)当时还是
|
||||
testing 版本的 7.0/wheezy,所以 Raspbian 不倾向于使用 stable/testing
|
||||
表示版本。
|
||||
|
||||
### 使用说明
|
||||
|
||||
首先通过 `uname -m` 确定你使用的系统的架构。
|
||||
|
||||
编辑镜像站后,请使用`sudo apt-get update`命令,更新软件源列表,同时检查您的编辑是否正确。
|
||||
|
||||
#### armv7l
|
||||
|
||||
export const osVersion = ['11', '10', '9'];
|
||||
export const versionName = [
|
||||
'Debian 11 (bullseye)',
|
||||
'Debian 10 (buster)',
|
||||
'Debian 9 (stretch)',
|
||||
];
|
||||
export const configGen = (version) => {
|
||||
const versionMap = {
|
||||
'9': 'stretch',
|
||||
'10': 'buster',
|
||||
'11': 'bullseye',
|
||||
};
|
||||
const release_name = versionMap[version];
|
||||
return `deb https://mirrors.zju.edu.cn/raspbian/raspbian/ ${release_name} main non-free contrib rpi
|
||||
# deb-src https://mirrors.zju.edu.cn/raspbian/raspbian/ ${release_name} main non-free contrib rpi
|
||||
deb [arch=arm64] https://mirrors.zju.edu.cn/raspbian/multiarch/ ${release_name} main
|
||||
`;
|
||||
}
|
||||
|
||||
编辑 `/etc/apt/sources.list` :
|
||||
|
||||
<ConfigGenerator
|
||||
promptString=""
|
||||
versionList={osVersion}
|
||||
friendlyNameList={versionName}
|
||||
configGen={configGen} />
|
||||
|
||||
|
||||
注意:网址末尾的`raspbian`重复两次是必须的。因为 Raspbian 的仓库中除了 APT 软件源还包含其他代码。APT 软件源不在仓库的根目录,而在`raspbian/`子目录下。
|
||||
|
||||
#### aarch64
|
||||
|
||||
aarch64 用户可直接参考 [Debian 帮助](/docs/debian/)
|
||||
|
||||
#### raspberry 镜像
|
||||
|
||||
对于两个架构,编辑 `/etc/apt/sources.list.d/raspi.list` 文件,这需要查看 [Raspberrypi 帮助](/docs/raspberrypi/)。
|
||||
|
||||
|
||||
### 相关链接
|
||||
|
||||
#### Raspbian 链接
|
||||
|
||||
* Raspbian 主页:[https://www.raspbian.org](https://www.raspbian.org)
|
||||
* 文档:[https://www.raspbian.org/RaspbianDocumentation](https://www.raspbian.org/RaspbianDocumentation)
|
||||
* Bug 反馈:[https://www.raspbian.org/RaspbianBugs](https://www.raspbian.org/RaspbianBugs)
|
||||
* 镜像列表: [https://www.raspbian.org/RaspbianMirrors](https://www.raspbian.org/RaspbianMirrors)
|
||||
|
||||
#### 树莓派链接
|
||||
|
||||
* 树莓派基金会主页:[https://www.raspberrypi.org/](https://www.raspberrypi.org/)
|
||||
* 树莓派基金会论坛 Raspberry Pi OS 版块:[https://raspberrypi.org/forums/viewforum.php?f=66](https://raspberrypi.org/forums/viewforum.php?f=66)
|
||||
|
||||
### 关于本文档
|
||||
|
||||
本文档内容的原始版本由 Raspberry Pi 中文社区“树莓爱好者论坛” 按照 [知识共享署名 - 非商业性使用 3.0 中国大陆许可协议](http://creativecommons.org/licenses/by-nc/3.0/cn/) 提供。
|
||||
27
docs/zh/rocky.mdx
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
mirrorId: rocky
|
||||
---
|
||||
|
||||
> 本项文档参照 http://mirrors.ustc.edu.cn/help/rocky.html 编写。
|
||||
|
||||
对于 Rocky Linux 9 ,输入以下命令替换配置:
|
||||
|
||||
```bash
|
||||
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
|
||||
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.zju.edu.cn/rocky|g' \
|
||||
-i.bak \
|
||||
/etc/yum.repos.d/rocky-extras.repo \
|
||||
/etc/yum.repos.d/rocky.repo
|
||||
```
|
||||
|
||||
对于 Rocky Linux 8 ,输入以下命令替换配置:
|
||||
|
||||
```bash
|
||||
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
|
||||
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.zju.edu.cn/rocky|g' \
|
||||
-i.bak \
|
||||
/etc/yum.repos.d/Rocky-AppStream.repo \
|
||||
/etc/yum.repos.d/Rocky-BaseOS.repo \
|
||||
/etc/yum.repos.d/Rocky-Extras.repo \
|
||||
/etc/yum.repos.d/Rocky-PowerTools.repo
|
||||
```
|
||||
48
docs/zh/ros.mdx
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
mirrorId: ros
|
||||
---
|
||||
|
||||
ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。ROS遵循BSD开源许可协议。
|
||||
|
||||
### ROS 安装指南
|
||||
|
||||
根据使用的 ROS 版本与使用的操作系统,在本镜像站 ROS Wiki 镜像中找到对应 [安装指南](http://mirrors.zju.edu.cn/roswiki/ROS(2f)Installation.html)。
|
||||
|
||||
**如需要在安装中使用本镜像站加速安装,请先阅读以下内容。**
|
||||
|
||||
### ROS 软件包镜像
|
||||
|
||||
在安装指南“ 1.2 Setup your sources.list ”节,将命令替换为以下内容:
|
||||
|
||||
```bash
|
||||
sudo sh -c 'echo "deb http://mirrors.zju.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
|
||||
```
|
||||
|
||||
在安装指南“ 1.3 Setup your keys ”节,将命令替换为以下内容:
|
||||
|
||||
```bash
|
||||
sudo apt install curl # if you haven't already installed curl
|
||||
curl -s http://mirrors.zju.edu.cn/rosdistro/ros.asc | sudo apt-key add -
|
||||
```
|
||||
|
||||
在安装指南“ 1.6.1 Initialize rosdep ”节,将:
|
||||
|
||||
```bash
|
||||
sudo rosdep init
|
||||
rosdep update
|
||||
```
|
||||
|
||||
替换为:
|
||||
|
||||
```bash
|
||||
# 手动模拟 rosdep init
|
||||
sudo mkdir -p /etc/ros/rosdep/sources.list.d/
|
||||
sudo curl -o /etc/ros/rosdep/sources.list.d/20-default.list https://mirrors.zju.edu.cn/rosdistro/rosdep/sources.list.d/20-default.list
|
||||
# 为 rosdep update 换源
|
||||
export ROSDISTRO_INDEX_URL=https://mirrors.zju.edu.cn/rosdistro/index-v4.yaml
|
||||
rosdep update
|
||||
|
||||
# 每次 rosdep update 之前,均需要增加该环境变量
|
||||
# 为了持久化该设定,可以将其写入 .bashrc 中,例如
|
||||
echo 'export ROSDISTRO_INDEX_URL=https://mirrors.zju.edu.cn/rosdistro/index-v4.yaml' >> ~/.bashrc
|
||||
```
|
||||
18
docs/zh/ros2.mdx
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
mirrorId: ros2
|
||||
---
|
||||
|
||||
请参照 [官方指南](https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html) ,流程中仅做如下修改:
|
||||
|
||||
下载并安装 ROS 的 GPG Key :
|
||||
|
||||
```bash
|
||||
sudo apt install curl gnupg2
|
||||
sudo curl -sSL https://mirrors.zju.edu.cn/rosdistro/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
|
||||
```
|
||||
|
||||
添加软件仓库,更新索引:
|
||||
|
||||
```bash
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://mirrors.zju.edu.cn/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
|
||||
```
|
||||
5
docs/zh/rosdistro.mdx
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
mirrorId: rosdistro
|
||||
---
|
||||
|
||||
参照 ROS 说明: [链接](/docs/ros/)
|
||||
37
docs/zh/rustup.mdx
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
mirrorId: rustup
|
||||
---
|
||||
|
||||
[Rustup](https://rustup.rs/) 是 Rust 官方的跨平台 Rust 安装工具。
|
||||
|
||||
镜像站只会保留一段时间的 nightly,如果在安装时出现错误,请用 `RUSTUP_DIST_SERVER= rustup ...` 来使用官方源。
|
||||
|
||||
使用 rustup 安装 rust 时,若要启用镜像源,执行:
|
||||
|
||||
```bash
|
||||
# for bash
|
||||
RUSTUP_DIST_SERVER=https://mirrors.zju.edu.cn/rustup rustup install stable # for stable
|
||||
# for fish
|
||||
env RUSTUP_DIST_SERVER=https://mirrors.zju.edu.cn/rustup rustup install stable # for stable
|
||||
# for bash
|
||||
RUSTUP_DIST_SERVER=https://mirrors.zju.edu.cn/rustup rustup install nightly # for nightly
|
||||
# for fish
|
||||
env RUSTUP_DIST_SERVER=https://mirrors.zju.edu.cn/rustup rustup install nightly # for nightly
|
||||
# for bash
|
||||
RUSTUP_DIST_SERVER=https://mirrors.zju.edu.cn/rustup rustup install nightly-YYYY-mm-dd
|
||||
# for fish
|
||||
env RUSTUP_DIST_SERVER=https://mirrors.zju.edu.cn/rustup rustup install nightly-YYYY-mm-dd
|
||||
```
|
||||
|
||||
若要长期启用镜像源,执行:
|
||||
|
||||
```bash
|
||||
# for bash
|
||||
echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.zju.edu.cn/rustup/rustup' >> ~/.bash_profile
|
||||
echo 'export RUSTUP_DIST_SERVER=https://mirrors.zju.edu.cn/rustup' >> ~/.bash_profile
|
||||
# for fish
|
||||
echo 'set -x RUSTUP_UPDATE_ROOT https://mirrors.zju.edu.cn/rustup/rustup' >> ~/.config/fish/config.fish
|
||||
echo 'set -x RUSTUP_DIST_SERVER https://mirrors.zju.edu.cn/rustup' >> ~/.config/fish/config.fish
|
||||
```
|
||||
|
||||
注:rustup 在判断是否需要更新时依赖于 toml 的 sha256,由于 toml 内容中相关链接被替换为镜像源,第一次切换到镜像源时各个 channel 会被认为需要更新。
|
||||
42
docs/zh/ubuntu-ports.mdx
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
mirrorId: ubuntu-ports
|
||||
---
|
||||
|
||||
import ConfigGenerator from '../../src/components/config-generator'
|
||||
|
||||
export const ubuntuVersionMap = {
|
||||
"23.04": "lunar",
|
||||
"22.10": "kinetic",
|
||||
"22.04 LTS": "jammy",
|
||||
"20.04 LTS": "focal",
|
||||
"18.04 LTS": "bionic",
|
||||
"16.04 LTS": "xenial",
|
||||
"14.04 LTS": "trusty",
|
||||
}
|
||||
|
||||
|
||||
export const GenUbuntuConfig = (version) => {
|
||||
var ubuntuName = ubuntuVersionMap[version]
|
||||
return `# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
deb https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName} main restricted universe multiverse
|
||||
# deb-src https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName} main restricted universe multiverse
|
||||
deb https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName}-updates main restricted universe multiverse
|
||||
# deb-src https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName}-updates main restricted universe multiverse
|
||||
deb https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName}-backports main restricted universe multiverse
|
||||
# deb-src https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName}-backports main restricted universe multiverse
|
||||
deb https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName}-security main restricted universe multiverse
|
||||
# deb-src https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName}-security main restricted universe multiverse\n
|
||||
# 预发布软件源,不建议启用
|
||||
# deb https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName}-proposed main restricted universe multiverse
|
||||
# deb-src https://mirrors.zju.edu.cn/ubuntu-ports/ ${ubuntuName}-proposed main restricted universe multiverse`
|
||||
}
|
||||
|
||||
export const defaultVersion = Object.keys(ubuntuVersionMap).find(x => x.indexOf("LTS") > 0);
|
||||
|
||||
> ubuntu-ports 镜像目前仅为校内反向代理清华 TUNA 镜像站。若您的网络环境处于校外, apt 的 HTTP(S) 请求将会被重定向( 302 )至 TUNA 镜像站。
|
||||
|
||||
Ubuntu 的软件源配置文件是 `/etc/apt/sources.list`。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用我们的软件源镜像。
|
||||
|
||||
<ConfigGenerator promptString="请选择您的 Ubuntu 版本:" versionList={Object.keys(ubuntuVersionMap)} defaultVersion={defaultVersion} configGen={GenUbuntuConfig} language="bash" />
|
||||
|
||||
本镜像仅包含 arm64 armhf ppc64el riscv64 s390x 架构的软件包。
|
||||
39
docs/zh/ubuntu.mdx
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
mirrorId: ubuntu
|
||||
---
|
||||
|
||||
import ConfigGenerator from '../../src/components/config-generator'
|
||||
|
||||
export const ubuntuVersionMap = {
|
||||
"23.04": "lunar",
|
||||
"22.10": "kinetic",
|
||||
"22.04 LTS": "jammy",
|
||||
"20.04 LTS": "focal",
|
||||
"18.04 LTS": "bionic",
|
||||
"16.04 LTS": "xenial",
|
||||
"14.04 LTS": "trusty",
|
||||
}
|
||||
|
||||
export const GenUbuntuConfig = (version) => {
|
||||
var ubuntuName = ubuntuVersionMap[version]
|
||||
return `# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
deb https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName} main restricted universe multiverse
|
||||
# deb-src https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName} main restricted universe multiverse
|
||||
deb https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName}-updates main restricted universe multiverse
|
||||
# deb-src https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName}-updates main restricted universe multiverse
|
||||
deb https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName}-backports main restricted universe multiverse
|
||||
# deb-src https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName}-backports main restricted universe multiverse
|
||||
deb https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName}-security main restricted universe multiverse
|
||||
# deb-src https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName}-security main restricted universe multiverse\n
|
||||
# 预发布软件源,不建议启用
|
||||
# deb https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName}-proposed main restricted universe multiverse
|
||||
# deb-src https://mirrors.jcut.edu.cn/ubuntu/ ${ubuntuName}-proposed main restricted universe multiverse`
|
||||
}
|
||||
|
||||
export const defaultVersion = Object.keys(ubuntuVersionMap).find(x => x.indexOf("LTS") > 0);
|
||||
|
||||
Ubuntu 的软件源配置文件是 `/etc/apt/sources.list`。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用我们的软件源镜像。
|
||||
|
||||
<ConfigGenerator promptString="请选择您的 Ubuntu 版本:" versionList={Object.keys(ubuntuVersionMap)} defaultVersion={defaultVersion} configGen={GenUbuntuConfig} language="bash" />
|
||||
|
||||
本镜像仅包含 32/64 位 x86 架构处理器的软件包,在 ARM(arm64, armhf)、PowerPC(ppc64el)、RISC-V(riscv64) 和 S390x 等架构的设备上(对应官方源为`ports.ubuntu.com`)请使用 [ubuntu-ports](/docs/ubuntu-ports) 镜像。
|
||||
1
gatsby-browser.js
Normal file
@@ -0,0 +1 @@
|
||||
import './src/styles/global.scss';
|
||||
141
gatsby-config.js
Normal file
@@ -0,0 +1,141 @@
|
||||
/**
|
||||
* Configure your Gatsby site with this file.
|
||||
*
|
||||
* See: https://www.gatsbyjs.com/docs/gatsby-config/
|
||||
*/
|
||||
const { createProxyMiddleware } = require('http-proxy-middleware');
|
||||
const config = require('./config');
|
||||
|
||||
module.exports = {
|
||||
siteMetadata: {
|
||||
title: 'JCUT Mirror',
|
||||
siteUrl: config.siteUrl,
|
||||
description: 'JCUT Mirror is a non-profit program aimed at popularizing open source software and facilitating efficient access to various resources of open source projects by all users.',
|
||||
author: 'JCUT YF',
|
||||
},
|
||||
assetPrefix: config.assetPrefix,
|
||||
pathPrefix: config.pathPrefix,
|
||||
plugins: [
|
||||
{
|
||||
resolve: `gatsby-theme-material-ui`,
|
||||
options: {
|
||||
webFontsConfig: {
|
||||
fonts: {
|
||||
google: [
|
||||
{
|
||||
family: `Metrophobic`
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
{
|
||||
resolve: 'gatsby-source-filesystem',
|
||||
options: {
|
||||
name: 'mirrors',
|
||||
path: `${__dirname}/docs`,
|
||||
}
|
||||
},
|
||||
{
|
||||
resolve: 'gatsby-source-filesystem',
|
||||
options: {
|
||||
name: 'locales',
|
||||
path: `${__dirname}/locales`,
|
||||
}
|
||||
},
|
||||
{
|
||||
resolve: 'gatsby-source-filesystem',
|
||||
options: {
|
||||
name: 'news',
|
||||
path: `${__dirname}/news`,
|
||||
}
|
||||
},
|
||||
{
|
||||
resolve: "gatsby-plugin-mdx",
|
||||
options: {
|
||||
mdxOptions: {
|
||||
remarkPlugins: [
|
||||
// Add GitHub Flavored Markdown (GFM) support
|
||||
// Warning: Most of the remark ecosystem is ESM which means that packages
|
||||
// like remark-gfm don’t work out of the box with Gatsby v5. To make remark-gfm
|
||||
// compatible with the current Gatsby version, we have to use an old version of
|
||||
// remark-gfm. Please take care in future updates.
|
||||
require(`remark-gfm`),
|
||||
],
|
||||
},
|
||||
}
|
||||
},
|
||||
{
|
||||
resolve: "gatsby-plugin-react-svg",
|
||||
options: {
|
||||
rule: {
|
||||
include: /icons/,
|
||||
omitKeys: [
|
||||
'inkscapePageshadow', 'inkscapePageopacity', 'inkscapePagecheckerboard',
|
||||
'inkscapeZoom', 'inkscapeCx', 'inkscapeCy', 'inkscapeWindowWidth', 'inkscapeWindowHeight',
|
||||
'inkscapeWindowX', 'inkscapeWindowY', 'inkscapeWindowMaximized', 'inkscapeCurrentLayer',
|
||||
'sodipodiNodetypes', 'sodipodiDocname', 'inkscapeVersion', 'xmlnsInkscape', 'xmlnsSodipodi',
|
||||
'xmlnsSvg',
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
resolve: `gatsby-plugin-react-i18next`,
|
||||
options: {
|
||||
localeJsonSourceName: 'locales', // name given to `gatsby-source-filesystem` plugin.
|
||||
languages: config.locales,
|
||||
defaultLanguage: config.defaultLanguage,
|
||||
redirect: false,
|
||||
// if you are using Helmet, you must include siteUrl, and make sure you add http:https
|
||||
siteUrl: config.siteUrl,
|
||||
// you can pass any i18next options
|
||||
// pass following options to allow message content as a key
|
||||
i18nextOptions: {
|
||||
interpolation: {
|
||||
escapeValue: false // not needed for react as it escapes by default
|
||||
},
|
||||
keySeparator: false,
|
||||
nsSeparator: false
|
||||
},
|
||||
pages: Object.values(config.documentSources).map(
|
||||
s => ({
|
||||
matchPath: s.path,
|
||||
getLanguageFromPath: s.getLanguageFromPath,
|
||||
})
|
||||
)
|
||||
}
|
||||
},
|
||||
{
|
||||
resolve: 'gatsby-plugin-manifest',
|
||||
options: {
|
||||
icon: 'resource/icons/favicon.svg',
|
||||
},
|
||||
},
|
||||
`gatsby-plugin-preact`,
|
||||
`gatsby-plugin-sass`,
|
||||
{
|
||||
resolve: "gatsby-plugin-sitemap",
|
||||
options: {
|
||||
serialize: ({ path }) => {
|
||||
return {
|
||||
url: path,
|
||||
lastmod: new Date(0).toISOString(),
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
developMiddleware: app => {
|
||||
app.use(
|
||||
'/api',
|
||||
createProxyMiddleware({
|
||||
target: 'http://mirrors.zju.edu.cn',
|
||||
onProxyReq: (proxyRes, req, res) => {
|
||||
proxyRes.setHeader('host', 'mirrors.zju.edu.cn');
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
196
gatsby-node.js
Normal file
@@ -0,0 +1,196 @@
|
||||
const { match, compile } = require("path-to-regexp");
|
||||
const { createFilePath } = require(`gatsby-source-filesystem`)
|
||||
const { createContentDigest } = require(`gatsby-core-utils`)
|
||||
const config = require('./config');
|
||||
|
||||
const mdxResolverPassthrough = (fieldName) => async (
|
||||
source,
|
||||
args,
|
||||
context,
|
||||
info
|
||||
) => {
|
||||
const type = info.schema.getType(`Mdx`);
|
||||
const mdxNode = context.nodeModel.getNodeById({
|
||||
id: source.parent,
|
||||
});
|
||||
const resolver = type.getFields()[fieldName].resolve;
|
||||
const result = await resolver(mdxNode, args, context, info);
|
||||
return result;
|
||||
}
|
||||
|
||||
exports.createSchemaCustomization = ({ actions, schema }) => {
|
||||
const { createTypes } = actions;
|
||||
|
||||
// interface for all kinds of documents
|
||||
createTypes(`interface Document implements Node {
|
||||
id: ID!
|
||||
title: String
|
||||
source: String!
|
||||
body: String!
|
||||
html: String!
|
||||
slug: String!
|
||||
date: Date @dateformat
|
||||
tags: [String]!
|
||||
tableOfContents: JSON
|
||||
frontmatter: JSON
|
||||
locale: String!
|
||||
}`);
|
||||
|
||||
// MDX document implements Document interface
|
||||
createTypes(
|
||||
schema.buildObjectType({
|
||||
name: `MdxDocument`,
|
||||
fields: {
|
||||
id: { type: `ID!` },
|
||||
title: {
|
||||
type: `String`,
|
||||
},
|
||||
source: {
|
||||
type: `String!`,
|
||||
},
|
||||
slug: {
|
||||
type: `String!`,
|
||||
},
|
||||
date: { type: `Date`, extensions: { dateformat: {} } },
|
||||
tags: { type: `[String]!` },
|
||||
tableOfContents: {
|
||||
type: `JSON`,
|
||||
resolve: mdxResolverPassthrough(`tableOfContents`),
|
||||
},
|
||||
body: {
|
||||
type: `String!`,
|
||||
resolve: mdxResolverPassthrough(`body`),
|
||||
},
|
||||
html: {
|
||||
type: `String!`,
|
||||
resolve: mdxResolverPassthrough(`html`),
|
||||
},
|
||||
frontmatter: {
|
||||
type: `JSON`,
|
||||
resolve: mdxResolverPassthrough(`frontmatter`),
|
||||
},
|
||||
locale: {
|
||||
type: `String!`,
|
||||
},
|
||||
},
|
||||
interfaces: [`Node`, `Document`],
|
||||
extensions: {
|
||||
infer: false,
|
||||
},
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// create fields for documents slugs and sources
|
||||
exports.onCreateNode = async (
|
||||
{ node, actions, getNode, createNodeId, store, cache, reporter },
|
||||
) => {
|
||||
const { createNode, createParentChildLink } = actions;
|
||||
if (node.internal.type !== `Mdx`) return;
|
||||
|
||||
// create source field according to source name passed to gatsby-source-filesystem
|
||||
const fileNode = getNode(node.parent);
|
||||
const source = fileNode.sourceInstanceName;
|
||||
|
||||
const docConfig = config.documentSources[source];
|
||||
if (!docConfig) reporter.panic(`Unknown source of documents ${source}`);
|
||||
const { folder: folderLayout, path: pathTemplate } = docConfig;
|
||||
|
||||
let slug, locale;
|
||||
if (node.frontmatter.slug) {
|
||||
// a relative slug gets turned into a sub path
|
||||
slug = node.frontmatter.slug;
|
||||
locale = match(pathTemplate)(path)?.params?.lang;
|
||||
} else {
|
||||
// otherwise use the filepath function from gatsby-source-filesystem
|
||||
const path = createFilePath({
|
||||
node: fileNode,
|
||||
getNode,
|
||||
});
|
||||
|
||||
const pathMatch = match(folderLayout)(path);
|
||||
if (!pathMatch) reporter.panic(`Path ${path} does not match the layout ${folderLayout}`);
|
||||
|
||||
const params = pathMatch.params;
|
||||
locale = params.lang;
|
||||
// remove default language from slug
|
||||
if (params.lang === config.defaultLanguage) params.lang = undefined;
|
||||
slug = compile(pathTemplate)(params);
|
||||
}
|
||||
|
||||
// normalize use of trailing slash
|
||||
slug = slug.replace(/\/*$/, `/`);
|
||||
|
||||
const fieldData = {
|
||||
title: node.frontmatter.title,
|
||||
tags: node.frontmatter.tags || [],
|
||||
slug,
|
||||
source,
|
||||
locale,
|
||||
date: node.frontmatter.date
|
||||
};
|
||||
|
||||
const id = createNodeId(`${node.id} >>> MdxDocument`);
|
||||
await createNode({
|
||||
...fieldData,
|
||||
// required fields
|
||||
id,
|
||||
parent: node.id,
|
||||
children: [],
|
||||
internal: {
|
||||
type: `MdxDocument`,
|
||||
contentDigest: createContentDigest(fieldData),
|
||||
contentFilePath: node.internal.contentFilePath,
|
||||
content: JSON.stringify(fieldData),
|
||||
description: `Mdx implementation of the Document interface`,
|
||||
},
|
||||
});
|
||||
createParentChildLink({ parent: node, child: getNode(id) });
|
||||
}
|
||||
|
||||
exports.createPages = async ({ graphql, actions, reporter }) => {
|
||||
const { createPage } = actions;
|
||||
|
||||
const result = await graphql(`
|
||||
{
|
||||
allDocument {
|
||||
nodes {
|
||||
id
|
||||
slug
|
||||
source
|
||||
frontmatter
|
||||
internal {
|
||||
contentFilePath
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`);
|
||||
|
||||
if (result.errors) {
|
||||
reporter.panic(result.errors);
|
||||
}
|
||||
|
||||
const { allDocument } = result.data;
|
||||
const docs = allDocument.nodes;
|
||||
|
||||
// create pages for documents
|
||||
docs.forEach((doc, index) => {
|
||||
const previous = index === docs.length - 1 ? null : docs[index + 1];
|
||||
const next = index === 0 ? null : docs[index - 1];
|
||||
const { slug, frontmatter } = doc;
|
||||
createPage({
|
||||
path: slug,
|
||||
component: `${require.resolve(
|
||||
config.documentSources[doc.source]?.template
|
||||
)}?__contentFilePath=${doc.internal.contentFilePath}`,
|
||||
context: {
|
||||
id: doc.id,
|
||||
previousId: previous ? previous.id : undefined,
|
||||
nextId: next ? next.id : undefined,
|
||||
frontmatter
|
||||
},
|
||||
});
|
||||
})
|
||||
}
|
||||
37
locales/en/translation.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Blog": "Blog",
|
||||
"Email": "Email",
|
||||
"GitHub": "GitHub",
|
||||
"ISO": "ISO",
|
||||
"JCUT Mirror": "JCUT Mirror",
|
||||
"MirrorZ 镜像站项目": "The MirrorZ Project",
|
||||
"使用说明": "Help",
|
||||
"关于我们": "About Us",
|
||||
"安装映像": "Installation Image",
|
||||
"展开": "Expand",
|
||||
"常用镜像": "Popular Mirrors",
|
||||
"所有镜像": "All Mirrors",
|
||||
"折叠": "Collapse",
|
||||
"文件列表": "File List",
|
||||
"最近更新于 {{date}}": "Last updated at {{date}}",
|
||||
"本镜像站提供了包括 Docker, PostgreSQL, Ubuntu 等项目源的镜像,以服务教育和科学研究为目的,提倡自由、平等、协作、共享的精神。": "We provide a variety of mirrors including Docker, PostgreSQL, and Ubuntu, for the purpose of serving education and scientific research, and promoting the spirit of freedom, equality, collaboration, and sharing.",
|
||||
"浅色": "Light",
|
||||
"浙江大学信息技术中心": "Information Technology Center of Zhejiang University",
|
||||
"浙江大学开源软件镜像站": "Open Source Software Mirror Site of Zhejiang University",
|
||||
"浙江大学开源软件镜像站是一个致力于普及开源软件,方便校内外用户高效访问开源项目的各种资源的非盈利计划。": "JCUT Mirror is a non-profit program aimed at popularizing open source software and facilitating efficient access to various resources of open source projects by all users.",
|
||||
"根据相关法律法规,本站不对欧盟用户提供服务。": "According to the relevant laws and regulations, this site does not provide services to EU users.",
|
||||
"深色": "Dark",
|
||||
"清华大学 TUNA 协会": "TUNA @ Tsinghua University",
|
||||
"版本": "Version",
|
||||
"特别鸣谢": "Special Thanks",
|
||||
"系统默认": "System Default",
|
||||
"语言": "Language",
|
||||
"返回": "Back",
|
||||
"显示镜像目录名称": "List mirrors by directory",
|
||||
"显示镜像名称": "List mirrors by name",
|
||||
"校外网络": "Off-Campus",
|
||||
"校内网络 - IPv4": "On-Campus - IPv4",
|
||||
"校内网络 - IPv6": "On-Campus - IPv6",
|
||||
"近期更新": "Latest Update",
|
||||
"问题反馈与镜像请求(GitHub)": "Issues & Mirror Request (GitHub)"
|
||||
}
|
||||
37
locales/zh/translation.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"Blog": "Blog",
|
||||
"Email": "Email",
|
||||
"GitHub": "GitHub",
|
||||
"ISO": "ISO",
|
||||
"JCUT Mirror": "JCUT Mirror",
|
||||
"MirrorZ 镜像站项目": "MirrorZ 镜像站项目",
|
||||
"使用说明": "使用说明",
|
||||
"关于我们": "关于我们",
|
||||
"安装映像": "安装映像",
|
||||
"展开": "展开",
|
||||
"常用镜像": "常用镜像",
|
||||
"所有镜像": "所有镜像",
|
||||
"折叠": "折叠",
|
||||
"文件列表": "文件列表",
|
||||
"最近更新于 {{date}}": "最近更新于 {{date}}",
|
||||
"本镜像站提供了包括 Docker, PostgreSQL, Ubuntu 等项目源的镜像,以服务教育和科学研究为目的,提倡自由、平等、协作、共享的精神。": "本镜像站提供了包括 Docker, PostgreSQL, Ubuntu 等项目源的镜像,以服务教育和科学研究为目的,提倡自由、平等、协作、共享的精神。",
|
||||
"浅色": "浅色",
|
||||
"浙江大学信息技术中心": "浙江大学信息技术中心",
|
||||
"浙江大学开源软件镜像站": "浙江大学开源软件镜像站",
|
||||
"浙江大学开源软件镜像站是一个致力于普及开源软件,方便校内外用户高效访问开源项目的各种资源的非盈利计划。": "浙江大学开源软件镜像站是一个致力于普及开源软件,方便校内外用户高效访问开源项目的各种资源的非盈利计划。",
|
||||
"根据相关法律法规,本站不对欧盟用户提供服务。": "根据相关法律法规,本站不对欧盟用户提供服务。",
|
||||
"深色": "深色",
|
||||
"清华大学 TUNA 协会": "清华大学 TUNA 协会",
|
||||
"版本": "版本",
|
||||
"特别鸣谢": "特别鸣谢",
|
||||
"系统默认": "系统默认",
|
||||
"语言": "语言",
|
||||
"返回": "返回",
|
||||
"显示镜像目录名称": "显示镜像目录名称",
|
||||
"显示镜像名称": "显示镜像名称",
|
||||
"校外网络": "校外网络",
|
||||
"校内网络 - IPv4": "校内网络 - IPv4",
|
||||
"校内网络 - IPv6": "校内网络 - IPv6",
|
||||
"近期更新": "近期更新",
|
||||
"问题反馈与镜像请求(GitHub)": "问题反馈与镜像请求(GitHub)"
|
||||
}
|
||||
8
news/en/221115_hello_mirror.mdx
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
title: Introducing our new mirror site!
|
||||
name: hello_mirror
|
||||
author: NCJ @ ZJUSCT Falcon Team
|
||||
date: 2022-11-15
|
||||
---
|
||||
|
||||
After more than a year's development, the new ZJU Mirror site is finally here. It's developed and maintained by [ZJUSCT](https://www.zjusct.io/) with hardware support from [Information Technology Center of Zhejiang University](https://zuits.zju.edu.cn/). Issues related to the new mirror site including mirror request and bugs can be reported in [our dedicated issue repo](https://github.com/ZJUSCT/mirror-issues). Hope you enjoy using it!
|
||||
20
news/zh/221115_hello_mirror.mdx
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
title: 欢迎使用全新的荆楚理工学院开源镜像站
|
||||
name: hello_mirror
|
||||
author: YF @ JCIOT Mirrors Team
|
||||
date: 2024-02-15
|
||||
---
|
||||
|
||||
经过一年多的开发与测试,全新的荆楚理工学院开源软件镜像站正式上线了!新镜像站由[浙江大学超算队(ZJUSCT)](https://www.zjusct.io/)建设与维护,[浙江大学信息技术中心](https://zuits.zju.edu.cn/)提供设备支持,其拥有更多的镜像、全新设计的前端网站和管理后端、以及更加稳健的镜像同步服务,欢迎大家使用!
|
||||
|
||||
### 从测试版镜像站迁移
|
||||
|
||||
今年上半年我们在 `https://mirror.zju.edu.cn` 提供了新站的测试版服务,该域名未来也将持续提供服务,但镜像站网站上的帮助文档将全部使用正式版的域名(`https://mirrors.zju.edu.cn`)。您可以通过将所有相关 URL 的 `mirror` 更改为 `mirrors` 来切换到正式版镜像站。
|
||||
|
||||
### 开源代码
|
||||
|
||||
我们目前已经将镜像站所使用的[前端](https://github.com/ZJUSCT/mirror-front)和[后端](https://github.com/ZJUSCT/MirrorsDotNet)代码公开在 [ZJUSCT 的 GitHub 组织下](https://github.com/ZJUSCT/),欢迎大家 star🌟!
|
||||
|
||||
### 想要反馈意见?
|
||||
|
||||
镜像请求、故障报告、以及其他你对 mirror 的改进意见都可以在我们提供的[专用 issue 仓库](https://github.com/ZJUSCT/mirror-issues)里进行反馈。期待大家的声音。
|
||||
89
package.json
Normal file
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"name": "zju-mirror",
|
||||
"private": false,
|
||||
"description": "ZJU open source mirror site",
|
||||
"version": "0.1.0",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"build": "gatsby build --prefix-paths",
|
||||
"develop": "gatsby develop -H 0.0.0.0",
|
||||
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
|
||||
"start": "gatsby develop",
|
||||
"serve": "gatsby serve -H 0.0.0.0 -p 9000",
|
||||
"clean": "gatsby clean",
|
||||
"test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1",
|
||||
"extract": "yarn run babel --config-file ./babel-extract.config.js -o tmp/chunk.js 'src/**/*.{js,jsx,ts,tsx}' && rm -rf tmp",
|
||||
"types-check": "tsc --noEmit --project ./tsconfig.json",
|
||||
"lint-check": "eslint src/**/*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.9.0",
|
||||
"@emotion/styled": "^11.8.1",
|
||||
"@fontsource/poppins": "^4.5.10",
|
||||
"@formatjs/intl-displaynames": "^5.4.3",
|
||||
"@iconify/icons-logos": "^1.2.6",
|
||||
"@iconify/icons-simple-icons": "^1.2.44",
|
||||
"@iconify/icons-mdi": "^1.2.44",
|
||||
"@iconify/icons-file-icons": "^1.2.3",
|
||||
"@iconify/react": "^3.2.1",
|
||||
"@mdx-js/react": "^2.3.0",
|
||||
"@mui/icons-material": "^5.6.2",
|
||||
"@mui/material": "^5.6.3",
|
||||
"gatsby": "^5.9.1",
|
||||
"gatsby-plugin-manifest": "^5.6.0",
|
||||
"gatsby-plugin-mdx": "^5.6.0",
|
||||
"gatsby-plugin-preact": "^7.6.1",
|
||||
"gatsby-plugin-react-i18next": "^3.0.1",
|
||||
"gatsby-plugin-react-svg": "^3.1.0",
|
||||
"gatsby-plugin-sass": "^6.6.0",
|
||||
"gatsby-plugin-sitemap": "^6.7.0",
|
||||
"gatsby-source-filesystem": "^5.6.0",
|
||||
"gatsby-theme-material-ui": "^5.2.0",
|
||||
"gatsby-theme-material-ui-top-layout": "^5.2.0",
|
||||
"i18next": "^21.6.16",
|
||||
"js-search": "^2.0.0",
|
||||
"natsort": "^2.0.3",
|
||||
"path-to-regexp": "^6.2.0",
|
||||
"preact": "^10.12.1",
|
||||
"preact-render-to-string": "^5.2.6",
|
||||
"prism-react-renderer": "^1.3.1",
|
||||
"react": "^18.1.0",
|
||||
"react-dom": "^18.1.0",
|
||||
"react-helmet": "^6.1.0",
|
||||
"react-i18next": "^11.16.7",
|
||||
"remark-gfm": "^1",
|
||||
"sass": "^1.53.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.17.10",
|
||||
"@babel/plugin-transform-typescript": "^7.16.8",
|
||||
"@types/js-search": "^1.4.0",
|
||||
"@types/mdx": "^2.0.1",
|
||||
"@types/mdx-js__react": "^1.5.5",
|
||||
"@types/node": "^18.0.0",
|
||||
"@types/react": "^18.0.14",
|
||||
"@types/react-dom": "^18.0.5",
|
||||
"@typescript-eslint/eslint-plugin": "^5.28.0",
|
||||
"@typescript-eslint/parser": "^5.28.0",
|
||||
"babel-plugin-i18next-extract": "^0.8.3",
|
||||
"eslint": "^8.2.0",
|
||||
"eslint-config-airbnb": "19.0.4",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-import-resolver-typescript": "^3.2.1",
|
||||
"eslint-plugin-import": "^2.25.3",
|
||||
"eslint-plugin-jsx-a11y": "^6.5.1",
|
||||
"eslint-plugin-prettier": "^4.0.0",
|
||||
"eslint-plugin-react": "^7.30.0",
|
||||
"eslint-plugin-react-hooks": "^4.3.0",
|
||||
"http-proxy-middleware": "^2.0.6",
|
||||
"prettier": "2.7.1",
|
||||
"typescript": "^4.7.3"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ZJUSCT/mirror-front"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/ZJUSCT/mirror-front/issues"
|
||||
}
|
||||
}
|
||||
127
resource/icons/favicon.svg
Normal file
|
After Width: | Height: | Size: 134 KiB |
56
resource/icons/jciot.svg
Normal file
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 27.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1"
|
||||
id="Layer_1" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" sodipodi:docname="zjusct.svg"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1009.8 304.3"
|
||||
style="enable-background:new 0 0 1009.8 304.3;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#1D1D1D;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st2{fill:#FEFEFE;}
|
||||
.st3{fill:#ADADAD;}
|
||||
</style>
|
||||
<sodipodi:namedview bordercolor="#ffffff" borderopacity="1" id="namedview37" inkscape:current-layer="Layer_1" inkscape:cx="501.27629" inkscape:cy="87.570194" inkscape:pagecheckerboard="1" inkscape:pageopacity="0" inkscape:pageshadow="0" inkscape:window-height="1021" inkscape:window-maximized="1" inkscape:window-width="1920" inkscape:window-x="0" inkscape:window-y="28" inkscape:zoom="1.3874584" pagecolor="#505050" showgrid="false">
|
||||
</sodipodi:namedview>
|
||||
<g id="path35">
|
||||
<rect class="st0" width="1009.8" height="304.3"/>
|
||||
</g>
|
||||
<path id="path16" sodipodi:nodetypes="ccccccccccccccc" class="st1" d="M50.5,154.9c6.8-0.3,11.7,1.4,16.8,2.2
|
||||
c12.7,2.1,25.8,1.2,38.1-2.6c5.1-1.6,8.6-0.5,11,4.2c0.1,0.2,0.2,0.3,0.3,0.5c6.4,13.5,12.5,17.5,26.3,19.8
|
||||
c3.3,0.6,11.7-0.1,14.6-1.1c18.1-6.1,33.8-17.6,49.9-28c8.7-5.6,17.1-11.6,25.7-17.3c1.5-1,2.7-2.8,5.3-2.4
|
||||
c-0.4,0.9-0.8,1.7-1.2,2.5c-13.9,20.6-25.8,37.3-41.7,56.5c-3.1,3.7-7.5,7.6-11.3,9.6c-9.2,4.8-20.6,4.5-30.5,0.9
|
||||
C118.3,187.1,83.9,172.1,50.5,154.9z"/>
|
||||
<path id="path20" class="st1" d="M753.5,161.6c-8.5,0-16.9-0.1-25.3,0.1c-3.2,0.1-4.2-1-4.3-4.2c-1-23.9,7.1-32.4,31.2-32.4
|
||||
c12.3,0,24.6,0.1,36.8-0.1c4-0.1,5.8,1.1,5.2,5.1c0,0.6,0,1.1,0,1.7c0,7.5,0,7.6-7.4,7.6h-40.3c-3.3,0-6.5,0.2-9,2.9
|
||||
c-0.6,0.7-2.3,2.1-1.7,3.9c0.7,1.9,2.6,1.7,4,1.7c15.4,0.1,30.7,0,46.1,0.1c9.8,0,8.4-1.2,8.6,8.5c0.2,4.2-0.3,8.4-1.3,12.5
|
||||
c-2.5,9.1-10.1,14.9-21.3,15.3c-15.7,0.5-31.5,0.1-47.2,0.3c-2.7,0-3.7-0.9-3.7-3.6c0-10.2-0.7-10.4,9.7-10.4c12.7,0,25.3,0,38,0
|
||||
c4.2,0,8.1-0.6,10.3-4.8c1.4-2.7,1.3-4.2-2.4-4.2C770.9,161.7,762.2,161.7,753.5,161.6z"/>
|
||||
<path id="path22" class="st1" d="M467.8,184.2l44.8-45.4c-12.2,0-22.9,0.1-33.6,0.1c-5.3,0-6-2.4-6-6.2c0-3.3-1.1-7.7,5.8-7.6
|
||||
c21.3,0.3,42.6,0.1,65.6,0.1l-44.6,45.7c9.5-0.2,17.7,0.6,25.9-0.6c2.1-0.3,3.7-1.8,5-3.6c1.1-1.6,0.5-4.6,3.3-4.8
|
||||
c3.6-0.3,7.3-0.2,10.9,0.1c2.3,0.3,1.1,2.4,0.9,3.8c-1.7,10.6-8,17.7-19.7,18.3C507.1,184.9,487.9,184.2,467.8,184.2z"/>
|
||||
<path id="path24" class="st1" d="M844.5,184.6c-10.9,0-21.9,0-32.8,0c-2.5,0-4.5-0.1-4.4-3.5c0.2-10.1-0.4-20.3,0.5-30.3
|
||||
c1.4-16,11-25,27-25.5c14.4-0.5,28.8,0,43.2-0.2c3.1,0,3.9,1.2,3.8,4.1c-0.2,12.6,1.3,10.1-9.7,10.2c-11.5,0.2-23-0.1-34.5,0.1
|
||||
c-10.9,0.1-15.6,5-15.8,15.9c0,3.4-0.1,6.9-0.1,10.3c0,4.2,1.4,5,5.3,5c16.3-0.2,32.6,0,48.9-0.2c4.3-0.1,6.1,0.8,5.9,5.6
|
||||
c-0.4,8.4,0,8.5-8.6,8.5L844.5,184.6z"/>
|
||||
<path id="path26" class="st1" d="M639,154.9c0-8.2,0.2-16.4-0.1-24.6c-0.1-3.9,1.1-5.2,5.2-5.2c10.4,0,9.2-1.2,9.4,9.4
|
||||
c0.2,10.6-0.2,21-0.1,31.5c0,3.9,1.2,4.7,4.9,4.8c9.7,0.1,18,0.6,27-0.9c9.9-1.7,14.3-6.7,14.4-16.6c0-7.8,0.1-15.6-0.1-23.4
|
||||
c-0.1-3.4,1-4.7,4.5-4.6c12.6,0.3,10.1-1.2,10.2,9.8c0.1,8,0.4,15.9-0.8,23.9c-2.5,17.1-12.3,25-28.1,25.6
|
||||
c-14.2,0.6-28.4,0.1-42.6,0.2c-3.1,0-4-1.1-3.9-4C639.1,172,639,163.4,639,154.9z"/>
|
||||
<path id="path28" class="st1" d="M628,155.4c0,8.2-0.1,16.4,0.1,24.6c0.1,3.3-0.7,4.7-4.4,4.7c-14.6-0.2-29.2,0.1-43.8-0.2
|
||||
c-11.9-0.2-22.1-7.7-25.8-17.8c-1.2-3.4-1.4-5.4,3.2-5.1c5.3,0.3,10.8-1.1,14.3,5.3c1.8,3.3,6.6,3.6,10.5,3.7c9,0.2,18,0.1,27.1,0.1
|
||||
c3.5,0,4.2-1.2,4.2-4.4c0-7.5,0-14.9,0-22.3c0-3.5-1-4.5-4.5-4.5c-4.9,0-6.4-0.5-6.4-5.8c0.1-9.7-1-8.3,8.9-8.5
|
||||
c4-0.1,8.1,0,12.1-0.1c3.5,0,4.8,1,4.7,4.5C627.9,138.2,628,146.8,628,155.4z"/>
|
||||
<path id="path30" class="st2" d="M936.1,125.2c7.5,0,15-0.1,22.4-0.1c4.2,0,4.9,1,4.9,4.8c0.1,10.8,1.5,9.5-9.4,9.6
|
||||
c-7.8,0-13.3-0.5-15.9,2.7c-2.3,2.8-2.3,9.3-2.3,15.1c0,7.6,0.1,15.2,0,22.9c0,3.7-0.7,4.6-4.5,4.5c-11.2-0.3-9.9,1.5-10-9.9
|
||||
c-0.2-9.7,0.2-19.3,0.1-29.2c-0.1-4.6-0.8-6.2-6-6.2c-6.2,0-10.7,0.6-14.4,7.5c-2.1,4-7.8,2.6-11.5,1.4c-3.4-1.2-1.6-4-0.8-5.6
|
||||
c5.1-10.3,10.6-17,23.7-17.4c0.4,0,0.8,0,1.2,0L936.1,125.2z"/>
|
||||
<path id="path32" class="st3" d="M254.1,220.2c-21.3-2.6-42.4-5.7-63-11.4l-0.5-1.6c7.4-3.6,14.7-7.3,22.1-10.8
|
||||
c1.2-0.6,2.2,0.4,3.1,1c11.4,8.1,24,14.2,36.5,20.4C253.2,218.2,254.2,218.4,254.1,220.2z"/>
|
||||
<path id="path34" class="st3" d="M211.5,85.9c21.7,2.4,42.8,5.8,63.5,11.3l0.2,1.6L254,109.5c-1.1,0.5-2.3,0.3-3.2-0.5
|
||||
c-12-8.7-25.4-14.8-38.4-21.6C212.1,87.3,212,86.8,211.5,85.9z"/>
|
||||
<path id="path2057" sodipodi:nodetypes="ccccccccccccccc" class="st1" d="M415.1,151.4c-6.8,0.4-11.7-1.4-16.8-2.2
|
||||
c-12.7-2.1-25.8-1.2-38.1,2.6c-5.1,1.6-8.6,0.5-11-4.2c-0.1-0.2-0.2-0.3-0.3-0.5c-6.4-13.5-12.5-17.5-26.3-19.8
|
||||
c-3.3-0.6-11.7,0.1-14.6,1.1c-18.1,6.1-33.8,17.6-49.9,28c-8.7,5.6-17.1,11.6-25.7,17.3c-1.5,1-2.7,2.8-5.3,2.4
|
||||
c0.4-0.9,0.8-1.7,1.2-2.5c13.9-20.6,25.8-37.3,41.7-56.5c3.1-3.7,7.5-7.6,11.3-9.6c9.2-4.8,20.6-4.5,30.5-0.9
|
||||
C347.3,119.2,381.8,134.2,415.1,151.4L415.1,151.4z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.0 KiB |
54
resource/icons/jcut-dark.svg
Normal file
|
After Width: | Height: | Size: 460 KiB |
61
resource/icons/jcut.svg
Normal file
|
After Width: | Height: | Size: 807 KiB |
61
resource/icons/jcut1.svg
Normal file
|
After Width: | Height: | Size: 807 KiB |
122
resource/icons/zju-dark.svg
Normal file
@@ -0,0 +1,122 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 311.68 69.84">
|
||||
<g id="_图层_1" data-name="图层 1">
|
||||
<g>
|
||||
<g>
|
||||
<path d="m82.6,64.77h5.21v.55h-6.11v-.19l5.27-7.96h-4.85v-.55h5.78v.16l-5.29,8Z" style="fill: #fff;"/>
|
||||
<path d="m98.31,65.31v-4.18h-4.98v4.18h-.6v-8.71h.6v3.98h4.98v-3.98h.6v8.71h-.6Z" style="fill: #fff;"/>
|
||||
<path d="m103.63,65.31v-8.71h4.07v.55h-3.47v3.49h3.22v.55h-3.22v3.57h3.67v.55h-4.27Z" style="fill: #fff;"/>
|
||||
<path d="m115.17,62.31c0,2.1-.73,3.15-2.19,3.15-.23,0-.45-.03-.66-.09v-.58c.24.08.46.12.67.12.56,0,.96-.21,1.21-.63.25-.42.37-1.08.37-1.98v-5.69h.59v5.71Z" style="fill: #fff;"/>
|
||||
<path d="m119.85,65.31v-8.71h.6v8.71h-.6Z" style="fill: #fff;"/>
|
||||
<path d="m131.34,65.31l-1-2.71h-3.78l-1,2.71h-.66l3.28-8.71h.57l3.25,8.71h-.67Zm-2.67-7.29c-.04-.12-.08-.24-.11-.36-.03-.1-.06-.2-.09-.3h-.02c-.07.27-.14.48-.2.65l-1.46,4.04h3.36l-1.47-4.02Z" style="fill: #fff;"/>
|
||||
<path d="m142.87,65.31l-5.19-7.04c-.11-.14-.2-.28-.28-.43l-.08-.12h-.02c0,.11.01.23.01.38v7.2h-.6v-8.71h.46l5.15,6.98c.11.15.24.34.37.56h.03c-.02-.28-.03-.53-.03-.73v-6.81h.6v8.71h-.42Z" style="fill: #fff;"/>
|
||||
<path d="m154.52,64.71c-.9.51-1.82.76-2.77.76-1.19,0-2.15-.4-2.88-1.21-.73-.8-1.1-1.86-1.1-3.17s.39-2.42,1.18-3.3c.79-.88,1.84-1.32,3.16-1.32.77,0,1.51.15,2.23.46v.66c-.79-.38-1.56-.57-2.31-.57-1.1,0-1.98.38-2.64,1.12-.67.75-1,1.7-1,2.87,0,1.22.31,2.18.94,2.87.62.69,1.47,1.04,2.53,1.04.79,0,1.47-.17,2.06-.51v-2.87h-2.05v-.55h2.65v3.72Z" style="fill: #fff;"/>
|
||||
<path d="m172.33,61.84c0,2.42-1.03,3.63-3.1,3.63s-2.94-1.17-2.94-3.5v-5.36h.6v5.28c0,2.02.82,3.03,2.46,3.03s2.39-.98,2.39-2.95v-5.36h.6v5.23Z" style="fill: #fff;"/>
|
||||
<path d="m183.1,65.31l-5.19-7.04c-.1-.14-.2-.28-.28-.43l-.08-.12h-.02c0,.11.01.23.01.38v7.2h-.6v-8.71h.46l5.15,6.98c.11.15.24.34.37.56h.03c-.02-.28-.03-.53-.03-.73v-6.81h.6v8.71h-.42Z" style="fill: #fff;"/>
|
||||
<path d="m188.19,65.31v-8.71h.6v8.71h-.6Z" style="fill: #fff;"/>
|
||||
<path d="m197.02,65.31h-.45l-3.18-8.71h.67l2.52,7.01c.1.29.18.57.22.83h.02c.04-.21.12-.49.25-.84l2.68-7h.64l-3.38,8.71Z" style="fill: #fff;"/>
|
||||
<path d="m205.01,65.31v-8.71h4.07v.55h-3.47v3.49h3.22v.55h-3.22v3.57h3.67v.55h-4.27Z" style="fill: #fff;"/>
|
||||
<path d="m218.41,65.31l-1.16-2.55c-.24-.53-.48-.88-.72-1.06-.24-.18-.54-.27-.9-.27h-1.08v3.88h-.6v-8.71h2.42c.77,0,1.37.21,1.81.62.44.42.66.96.66,1.64,0,.63-.18,1.15-.54,1.57-.36.42-.86.69-1.51.81v.02c.34.14.68.56,1.01,1.26l1.29,2.77h-.68Zm-3.85-8.15v3.73h1.5c.66,0,1.19-.17,1.58-.52.39-.35.59-.83.59-1.43,0-.55-.18-.99-.53-1.3-.35-.31-.86-.47-1.51-.47h-1.63Z" style="fill: #fff;"/>
|
||||
<path d="m223.82,65v-.69c.62.4,1.25.6,1.89.6.68,0,1.2-.14,1.55-.42.35-.28.53-.67.53-1.18,0-.44-.12-.8-.36-1.07-.24-.26-.75-.63-1.54-1.08-.88-.51-1.44-.94-1.68-1.29-.23-.35-.35-.75-.35-1.2,0-.62.24-1.14.72-1.57.48-.43,1.12-.64,1.91-.64.52,0,1.04.09,1.55.26v.63c-.51-.23-1.05-.35-1.63-.35s-1.06.15-1.41.45c-.35.3-.52.68-.52,1.14s.12.8.36,1.06c.24.26.75.62,1.53,1.07.81.46,1.35.87,1.62,1.23.27.36.4.77.4,1.24,0,.67-.23,1.21-.69,1.63-.46.42-1.12.63-1.96.63-.3,0-.64-.05-1.04-.14-.39-.09-.69-.2-.9-.32Z" style="fill: #fff;"/>
|
||||
<path d="m233.01,65.31v-8.71h.6v8.71h-.6Z" style="fill: #fff;"/>
|
||||
<path d="m241.19,57.16v8.15h-.6v-8.15h-2.51v-.55h5.62v.55h-2.51Z" style="fill: #fff;"/>
|
||||
<path d="m251.43,62v3.31h-.59v-3.3l-2.67-5.41h.67l2.03,4.2c.07.15.16.36.27.64h.02c.06-.15.16-.36.3-.63l2.12-4.21h.65l-2.81,5.4Z" style="fill: #fff;"/>
|
||||
</g>
|
||||
<line x1="81.29" y1="34.19" x2="309.03" y2="34.19" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10; stroke-width: .74px;"/>
|
||||
<g>
|
||||
<path d="m152.49,26.66c-1.06-.23-.43-.56-.6-1.47-.14-.78-.85-1.55-.83-2.13.06-1.56,2.06-1.46,3.28-.96.22.09.47.42.69.74.56.8,1.21,1.97.35,2.85-.75.76-1.97,1.17-2.89.97" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m140.42,25.04s-.07-.03-.1-.04c.01-.12.02-.23.03-.34.33-.13,3.22-2.01,3.21-2.09.84-.67,1.6-1.42,1.83-2.49-2.07.68-4.03,2.18-6.17,2.34-.99-.25-1.67-.79-2.37-1.09,0-.05,0-.09,0-.12-1.13-.74-1.24-1.69.01-2.11,2.16.48,5.46-1.06,7.49-1.84.46-.2,1.77-.67,2.12-1.08.48-2.85.17-5.7.34-8.42.69-1.97,1.92-.63,3.14.36.08.16.36.34.61.71.03,0,.07,0,.12,0,.52.82.66,1.2-.14,1.96-.54,1.34-.8,2.82-.73,4.36,1.48-.21,2.38-1.51,4.09-1.53.41.8.36,1.47-.4,2.13-1.25.6-2.61,1.14-4.03,1.78-.33,1.44-.9,3.2-1.91,4.37-.15.17-.88.85-1.06.95-.92.54-1.75,1.18-2.75,1.47-2.78.77-2.81.64-3.32.71" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m113.83,29.89c-1.02-.47-1.95-1.71-2.51-2.48.09-.27.19-.55.3-.8,2.41-1.81,4.8-3.48,6.99-5.64.66-1.02,1.53-2.08,2.24-3.09.03-.02.08-.04.12-.04,0-.05,0-.08,0-.11.62-.48.88-.61,1.4.18.04.66-1.15,1.37-1.52,1.99-.46,1.18-.99,2.38-1.59,3.58q-.19.22-.96,1.48c-.65.5-1.51,1.81-1.87,2.61-.76.44-1.09,1.79-2,2.26-.21.01-.39.04-.58.07" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m128.07,21.44c-1.49-.06-1.91-1.02-2.72-1.88-.02-.39.21-.63.24-.9q.37-.09.6-.23c.62-.09.85-.05,1.52-.09.86-.19,3.05-1.7,3.78-1.05.11,1.81-1.86,3.63-3.43,4.15" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m116.65,18.59c-.57-.5-.68-2.79-.73-3.52.42-1.29,1.72-1.34,2.8-.5.86,1.13,1.44,1.6.54,2.91-1.02.88-1.47.94-2.61,1.11" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m127.67,17.47c-.15-.7.81-2.19.53-2.55-.36.05-.73.19-1.11.21-.89-.43-1.88-1.52-1.52-2.36.66-.75.41-.56,1.44-.62.99-.44,1.97-.87,2.97-1.29,1.67-.31,2.44.61,2.54,2.24-.3,1.06-1,1.89-1.69,2.72-.89.48-1.69,1.02-2.49,1.54-.23.03-.45.08-.67.12" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m118.54,12.75c-.35-.31-.2-.48-.02-.79-.04-.69-.46-1.25-.5-1.91.22-1.21,0-1.66,1-2.24.78.35,3.5,1.73,2.85,3.26-.75.95-2.26,1.55-3.33,1.68" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m83.32,31.02c-1.62-.62-3.03-3.82-1.08-4.61.05-.28.29-.57.53-.65,0-.05,0-.09,0-.12,1.57-1.52,2.6-3.64,3.92-5.32.34-.64.52-1.25,1.25-1.43.36.32.24,1.05.13,1.61.16.14.72.04,1.06-.07,1.09-.94,2.51-1.77,3.6-2.76.06-.49.11-.97.19-1.44-.76.18-3.26.77-2.66-.64.94-.37,2.36-1.17,2.86-2.19.24-1.03.11-2.17.62-2.9,1.05-.54,2.29.79,2.5,1.92.42.75,1.74-.18.1,2.12-.35.26-.33.76-.26,1.28.12,0,.24.02.36.03.92-.66,1.92-1.37,2.96-1.97.29-1.48.52-2.71,1.23-3.95,1.02-.7,2.4.06,3.4.85.77-.05,1.25-.37,1.93-.88q.27-.08.78-.08c.21.36.29.74.32,1.28-.49,1.5-4.79,1.99-3.97,3.74.75-.05,1.01-.87,1.29-1.42.84-.45,2.66.09,3.54.74.98,1.19.22,1.6-.87,2.35-.11.16-.22.32-.31.48q-.07,2.41-.04,5.66c-.37.88-.64,1.31-1.32,2.02,0,.03,0,.07,0,.1-.05,0-.09,0-.12,0-.42.73-1.44,1.44-2.04.76-.01-2.67.14-5.44.05-7.99-.05,0-.1.02-.13.04-.19,1.3-1.5,3.75-2.61,4.55-1.03.06-1.89-.53-2.18-1.41.1-.26.31-.33.52-.51.58-1.18.41-3.37.4-4.53-.83.12-2.24,2.01-2.87,2.71-.42.33-.85.67-1.26,1.01-.3.99-.53,1.97-.79,3.03-.23.47-.46.97-.68,1.46-.05,0-.09,0-.12,0-.39.66-1.65,2.38-2.4,1.3,0-.15-.02-.29,0-.43.63-.93,1.11-2.23,1.13-3.29-1.03.34-1.7,1.27-2.73,1.33-.59-.12-1.18-.3-1.57-.5,0-.05,0-.09,0-.12-.25-.16-.5-.38-.65-.32-.19.58-.37,1.17-.54,1.77-1.06,2.21-1.84,4.38-2.52,6.8-.39.38-.52.44-.93.54" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m85.34,18.3c-.32-.46.07-1.07.09-1.6-.5-1.51-.9-2.64.06-3.91.15-.03.31-.03.46-.05.7.49,1.69,1.61,2.29,2.41.73,1.81-1.6,2.62-2.91,3.15" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m86.79,12.45c-.38-.13-.37-.22-.45-.35.18-.37.36-.59.28-.96-.93-1.42-.87-3.58.73-4.3.47.05.47.45.68,1.09,1.04,1.01,2.98,2.27,1.14,3.64-.78.34-1.62.61-2.39.88" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m164.01,17.99c-1.45-.45-1.17-2.83-.93-3.79,1.06-.67,2.45.73,2.52,1.97-.27,1.37-.26,1.57-1.59,1.82" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m171.85,28.96c-.05-.03-.09-.06-.13-.08-1.85.12-3.62-.06-5.28-.65q-.08-.14-.09-.37c.98-.57,2.36-.41,3.1-1.44.12-.8.21-1.48.13-2.17-1.84.12-2.82,1.41-4.27,1.94-1.24.08-3.46-1.05-3.83-2.04,0-1.6.33-.88,2.05-.99,2.04-.36,4.08-1.53,6.05-2.4q.42-.32.65-.41c.44-1.33.75-1.57,2.13-1.84q.54-.27,2.12-1.23c.04-.15.08-.31.14-.46-2.4.28-4.34,2.23-6.25,3.51-.95.26-1.67.1-2.33-.19-.42.06-2.81.48-1.65-.47.71-.28,1.25-.79,2.01-1.12,1.8-1.21,3.88-2.25,5.82-3.37-.02-.3-.13-.46-.19-.55,0-.41.08-.61.2-.92-.37.12-.47.1-.53.37-1.15.51-1.64,1.55-2.61.45-.26,1.01-.98,1.71-1.99,1.78-1.03-.53-1.05-2.25-1.24-3.05-.07-.09-.22-.76-.5-1.54-.47-.95-1.32-2.01-.75-2.87.73-.45,1.02-.62,1.64.37.53.41,1.21.95,1.74,1.66.04,0,.07,0,.12,0,.33.87,1.12,2.02,1.04,3.14.54-.32,1.31-.94.91-1.63-.89-.48-.39-1.31.24-1.62q.44.02,1.01-.03c-.01-.22-.03-.22-.14-.35-.74-.25-.6-.43-.4-1.04-.87-.32-1.19-1.23-.86-1.87q2.51-.63,3.69-1.01c.78-.97,1.63-3.64,3.15-3.15.47.56.8,1.5.71,2.44-.19.4-.46.74-.53,1.18.15-.01.3,0,.45,0,1.05-.52,1.54-1.14,2.16.42,1.01.55,1.38.41,1,1.88-.74,1.48-1.53,3.07-2.35,4.55-.01.07-.03.14-.02.2.19.04.37.08.56.14.11.67.13,1.49.11,2.31-.63.93-1.43.93-2.44,1.06-1.28.64-2.43,1.17-3.63,1.88,0,.24-.04.48.08.79.61-.02,1.23-.02,1.86-.03.69.45.63,1.7.2,2.43-.7.1-1.12.19-1.66.48-.06.34-.13.68-.19,1.04.05,1.33.74,4.54-1.23,4.85m3.93-16.41c.62-.63,1.05-1.25,1-2.11-.52-.45-1.42-.52-1.96-.49q-.07.24-.69,1.4c.05.03.12.06.19.09-.06.02-.13.04-.18.08,0,.03.02.06.04.11.27.04.43-.18.55-.37.97-.16.99.19.92,1.22.04.02.07.03.12.06" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="m34.92,0c19.23,0,34.92,15.69,34.92,34.92s-15.69,34.92-34.92,34.92S0,54.16,0,34.92,15.69,0,34.92,0m0,1.39C16.46,1.39,1.39,16.46,1.39,34.92s15.06,33.53,33.53,33.53,33.53-15.06,33.53-33.53S53.39,1.39,34.92,1.39" style="fill: #fff;"/>
|
||||
<path d="m22.66,49.81c-2.18-1.81-3.97-4.09-5.2-6.68-1.18-2.49-1.84-5.27-1.84-8.21,0-10.63,8.67-19.3,19.3-19.3s19.3,8.67,19.3,19.3c0,2.93-.66,5.72-1.84,8.21-1.22,2.59-3.01,4.87-5.2,6.68l-.44-.54c2.11-1.75,3.83-3.94,5.01-6.44,1.13-2.4,1.77-5.09,1.77-7.91,0-10.25-8.36-18.61-18.61-18.61s-18.61,8.36-18.61,18.61c0,2.83.64,5.51,1.77,7.91,1.18,2.49,2.9,4.69,5.01,6.44l-.44.54Z" style="fill: #fff;"/>
|
||||
<polygon points="5.02 46.59 3.7 43.05 4.42 42.8 10.46 43.72 9.53 41.24 10.25 40.99 11.45 44.23 10.74 44.47 4.7 43.56 5.73 46.33 5.02 46.59" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="7.31 51.4 6.95 50.69 9.79 49.24 8.89 47.49 6.05 48.94 5.69 48.23 11.76 45.12 12.12 45.82 9.56 47.13 10.46 48.89 13.02 47.57 13.38 48.28 7.31 51.4" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="10.19 55.24 8.04 52.23 13.73 48.69 15.78 51.56 15.15 51.96 13.58 49.77 11.82 50.87 13.26 52.88 12.62 53.27 11.19 51.26 9.16 52.52 10.83 54.85 10.19 55.24" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="15.03 59.98 14.31 59.37 18.5 54.22 19.22 54.83 15.03 59.98" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m18.28,62.24l.86-1.83-1.04-.75-1.55,1.51-.71-.55,4.91-4.85.99.6-2.62,6.34-.84-.47Zm1.25-2.72l1.02-2.35-.09-.08-1.77,1.81.84.62Z" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="23.2 64.62 22.31 64.21 22.83 59.48 20.89 63.46 20 63.05 23.08 56.96 23.88 57.33 23.51 61.82 25.51 58.11 26.25 58.42 23.2 64.62" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m27.78,65.99l-.57-.19.05-.54c-.13.11-.31.19-.53.22-.22.04-.44.02-.67-.06-.47-.15-.82-.52-1.05-1.11-.23-.59-.18-1.4.14-2.43.35-1.13.78-1.91,1.28-2.35.5-.44,1.28-.68,1.96-.47.73.23,1.21,1.14,1,2.38l-.87-.07c.15-.53.07-1.37-.45-1.54-.43-.14-.9,0-1.2.33-.3.34-.6.97-.88,1.91-.27.89-.35,1.53-.23,1.94.12.41.33.66.62.76.29.09.56.06.8-.12.24-.17.43-.5.58-.98l.12-.4-1.05-.34.22-.68,1.72.56-.98,3.17Z" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m36.86,64.48c-.02.62-.19,1.1-.49,1.44-.31.35-.78.51-1.42.48-.64-.02-1.11-.22-1.39-.59-.28-.37-.41-.86-.4-1.48l.15-4.65.82.04-.15,4.65c-.02.44.07.76.26.97.18.21.43.32.74.34.31.01.56-.08.76-.28.2-.2.3-.51.32-.95l.15-4.65.82.03-.15,4.65Z" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="41.52 65.72 40.79 65.84 38.48 61.4 38.84 66.17 37.97 66.29 37.46 59.61 38.46 59.52 40.36 62.63 40.01 59.28 40.73 59.15 41.52 65.72" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="44.01 65.03 43.16 65.29 41.38 58.97 42.23 58.7 44.01 65.03" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="46.32 57.02 47.4 64 46.56 64.41 42.86 58.49 43.68 58.14 46.25 62.18 45.53 57.36 46.32 57.02" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="53.19 60.97 50.07 62.66 46.67 56.82 49.64 55.22 50.02 55.87 47.75 57.09 48.81 58.9 50.89 57.78 51.26 58.42 49.19 59.55 50.4 61.63 52.81 60.32 53.19 60.97" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m56.74,58.48l-.69.59-2.42-2.01-.62.57,1.63,2.22-.69.71-4-5.62,1.27-.91c.41-.29.94-.5,1.43-.44,1.24.15,1.78.99,1.72,1.96-.02.31-.04.61-.16.91l2.52,2Zm-4.31-3.96c-.51-.13-.91.26-1.27.54l1.33,1.76c.41-.3.59-.36.9-.89.13-.64-.15-1.2-.96-1.41" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m58.9,53.05c1.4.84,1.07,3.22-.76,3.5-.49.07-1.08-.08-1.32-.23l.31-.71c.3.06.61.18.9.12,1.19-.23,1.14-1.46.44-1.97-.24-.18-.58-.2-.87-.17-.8.09-1.32.69-2.21.75-.97.06-1.65-.54-1.82-1.49-.08-.5.04-.99.29-1.38.51-.81,1.61-.92,2.41-.45l-.31.73c-.43-.22-1.2-.22-1.49.23-.15.23-.2.48-.16.72.1.54.46.86.98.79.87-.1,1.45-.81,2.3-.79.4.01.88.11,1.29.36" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="61.85 52.19 61.35 52.81 55.59 49.2 56.09 48.58 61.85 52.19" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="58.94 44.91 58.31 46.09 63.74 49.29 63.37 49.96 57.94 46.77 57.3 47.95 56.63 47.55 58.27 44.51 58.94 44.91" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<polygon points="59.94 40.42 63.25 43.38 65.47 44.33 65.2 45.08 63.15 44.28 58.43 44.18 58.65 43.42 61.95 43.47 59.62 41.33 59.94 40.42" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m14.52,57c-.59.59-1.13.89-1.64.91-.51.02-.97-.19-1.38-.61-.37-.38-.56-.83-.56-1.34,0-.26.08-.53.23-.8l.75.46c-.07.13-.1.25-.1.37,0,.28.08.51.26.69.25.26.52.37.79.35.28-.02.61-.23,1.01-.63l3.32-3.29.62.63-3.29,3.25Z" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m25.81,55.85l-2.32-1.44.21-.37.86.53,1.38-2.41-.87-.54.19-.32c.33.2.59.32.78.34.19.03.36-.05.49-.24l.5.31-1.86,3.23.84.53-.21.36Zm6.94-1.47c.04-.19-.02-.35-.19-.5-.17-.15-.42-.25-.76-.3-.31-.04-.58-.02-.8.06-.22.08-.35.22-.39.41-.03.14,0,.26.08.37.08.11.21.21.4.32.08.04.21.11.38.19.17.08.33.14.47.2.27-.09.46-.19.58-.31.12-.12.19-.26.23-.43m-.3,2.08c.03-.17.01-.31-.07-.42-.08-.12-.26-.24-.54-.39-.09-.04-.21-.09-.36-.16-.15-.06-.33-.14-.52-.22-.26.07-.46.17-.62.3-.15.12-.25.29-.29.48-.05.25.03.47.23.67.2.19.47.32.83.37.36.05.66.02.91-.09.25-.11.39-.28.44-.52m-1.44,1.02c-.32-.04-.6-.11-.85-.21-.25-.1-.45-.22-.61-.35-.16-.14-.27-.29-.33-.45-.06-.17-.07-.33-.04-.5.04-.22.18-.41.4-.58.22-.16.52-.27.89-.33v-.02c-.29-.16-.49-.32-.62-.48-.12-.16-.16-.35-.12-.55.06-.31.29-.54.7-.7.41-.16.89-.19,1.44-.12.58.08,1.03.24,1.34.49.31.24.43.52.37.82-.04.19-.16.36-.36.51-.2.16-.47.26-.81.32v.02c.34.16.6.34.76.52.16.19.21.41.16.66-.07.35-.33.62-.77.8-.45.18-.96.23-1.56.15m8.05-2.55c0-.28-.04-.51-.12-.69-.08-.18-.19-.32-.32-.42-.12-.08-.25-.15-.38-.18-.12-.03-.26-.05-.41-.05-.35,0-.62.08-.82.24-.21.17-.31.41-.31.72,0,.17.03.32.1.44.07.11.18.21.33.29.1.06.23.1.36.12.13.02.28.03.43.03.18,0,.38-.02.58-.06.21-.04.39-.1.54-.17,0-.03,0-.06.01-.11,0-.05,0-.1,0-.16m-3.22-.35c0-.22.06-.42.16-.59.11-.18.25-.33.43-.46.18-.12.39-.22.64-.29.25-.07.5-.11.76-.11.29,0,.55.04.78.1.24.06.43.16.61.28.22.15.38.35.5.6.12.25.18.57.18.95,0,.34-.06.67-.18.98-.12.31-.29.57-.52.78-.24.21-.53.38-.87.49-.34.11-.76.17-1.25.17-.11,0-.23,0-.36-.01-.13-.01-.25-.03-.36-.05v-.54h.04c.07.03.18.06.33.08.15.02.3.03.45.03.55,0,.98-.12,1.3-.36.31-.24.49-.58.53-1.03-.22.1-.44.18-.64.22-.2.05-.43.07-.67.07s-.44-.02-.63-.05c-.19-.03-.38-.1-.57-.2-.23-.11-.4-.26-.51-.43-.12-.18-.17-.38-.17-.63m9.12-3.58l-.15,4.31-.66.41.06-4.07-2.52,1.22-.22-.49,3.16-1.64.33.26Z" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<g>
|
||||
<path d="m46.32,16.13c-.51-.25-.15-.34-.12-.81.02-.41-.24-.88-.16-1.17.22-.78,1.22-.48,1.77-.08.1.07.19.26.26.46.18.47.36,1.14-.18,1.47-.47.3-1.13.35-1.57.14" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m40.45,13.84s-.03-.02-.04-.04c.02-.06.04-.12.05-.16.18-.03,1.86-.62,1.87-.66.51-.23.97-.52,1.23-1.03-1.12.08-2.29.6-3.38.42-.47-.25-.75-.6-1.06-.84,0-.02,0-.04.01-.06-.48-.51-.41-1,.27-1.05,1.02.5,2.87.13,3.98,0,.25-.05.97-.12,1.2-.29.59-1.37.78-2.84,1.2-4.19.59-.9,1.04-.08,1.53.57.02.09.14.21.22.43.02,0,.03,0,.06.01.16.47.18.68-.31.96-.43.6-.75,1.31-.9,2.1.77.08,1.38-.46,2.24-.27.11.45,0,.79-.46,1.02-.7.15-1.45.25-2.24.4-.34.68-.84,1.5-1.5,1.96-.09.07-.55.32-.65.35-.53.16-1.02.37-1.56.4-1.49.05-1.49-.02-1.75-.04" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="m23.44,18.81c-.62-.04-1.34-.48-1.78-.77,0-.16-.02-.32-.01-.47.87-1.41,1.76-2.76,2.44-4.3.13-.66.36-1.38.52-2.04.01-.01.03-.03.05-.05-.01-.02-.02-.04-.02-.05.22-.37.33-.49.75-.19.15.33-.31.93-.38,1.32,0,.7-.03,1.42-.09,2.16q-.05.15-.19.95c-.23.39-.41,1.24-.44,1.71-.3.38-.2,1.14-.57,1.57-.1.04-.19.1-.28.15" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m29.04,11.6c-.78.26-1.18-.13-1.77-.41-.09-.2-.02-.37-.06-.51q.17-.12.26-.24c.3-.17.42-.2.76-.36.4-.27,1.22-1.49,1.73-1.31.42.91-.22,2.24-.92,2.83" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m22.6,12.44c-.39-.14-.91-1.3-1.08-1.66-.04-.74.61-1.03,1.33-.82.67.41,1.06.53.87,1.39-.34.65-.56.78-1.11,1.1" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m28.03,9.65c-.22-.33-.03-1.28-.24-1.41-.18.1-.34.24-.53.33-.55-.04-1.27-.41-1.26-.91.19-.52.1-.37.61-.61.42-.42.83-.83,1.26-1.26.79-.49,1.37-.18,1.75.63.06.61-.13,1.17-.32,1.74-.36.43-.66.86-.97,1.29-.12.07-.22.13-.32.2" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m22.39,9.07c-.24-.09-.2-.2-.17-.4-.16-.34-.49-.55-.64-.88-.13-.67-.34-.85.06-1.35.47.02,2.15.18,2.12,1.1-.19.63-.84,1.24-1.37,1.53" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
</g>
|
||||
<path d="m13.81,32.08c-.72.5-2.47.17-2.24-.87-.1-.1-.15-.29-.12-.41-.02-.01-.04-.02-.05-.03-.18-1.09-.77-2.14-1.1-3.16-.17-.33-.37-.58-.24-.93.24-.06.51.2.71.4.11-.03.23-.29.27-.46-.08-.72-.02-1.55-.12-2.29-.19-.16-.37-.33-.55-.49-.15.37-.62,1.58-1.03.93.11-.5.18-1.32-.1-1.83-.36-.39-.87-.66-1.03-1.09.07-.6.99-.74,1.52-.51.43.04.43-.77.92.57.01.22.22.35.46.48.04-.05.08-.09.11-.14,0-.58-.02-1.2.03-1.81-.53-.54-.98-.99-1.3-1.64,0-.62.71-.99,1.33-1.18.2-.34.2-.62.19-1.06q.04-.14.19-.35c.21.01.39.09.63.23.49.64-.54,2.58.43,2.74.2-.33-.08-.67-.22-.95.06-.48.8-1.08,1.33-1.26.78-.07.73.36.73,1.03.04.1.07.19.11.27q.99.72,2.35,1.64c.26.41.37.64.47,1.13.01,0,.03.02.04.03-.01.02-.02.04-.03.06.19.38.19,1.01-.27,1.07-1.12-.76-2.23-1.62-3.33-2.32-.01.03-.02.05-.02.07.49.46,1.14,1.7,1.15,2.4-.27.45-.76.63-1.21.51-.08-.12-.05-.22-.07-.36-.33-.58-1.29-1.14-1.78-1.47-.19.38.19,1.51.31,1.98.02.27.04.54.06.81.33.41.68.79,1.04,1.2.13.23.27.47.42.7-.01.02-.02.03-.03.05.16.35.52,1.37-.15,1.37-.06-.04-.12-.07-.18-.12-.21-.53-.61-1.1-1.05-1.42-.16.52.04,1.08-.23,1.52-.22.21-.47.41-.66.52-.02-.01-.04-.02-.05-.03-.14.06-.3.1-.32.18.19.24.38.49.58.73.62,1.08,1.31,2.02,2.12,3.01.05.27.04.35-.04.54" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m9.07,27.59c-.28,0-.43-.33-.64-.5-.78-.22-1.36-.38-1.62-1.15.03-.07.07-.14.11-.2.4-.15,1.16-.24,1.66-.27.97.21.64,1.42.48,2.12" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m7.04,25.3c-.17.12-.2.09-.28.09-.1-.18-.14-.32-.32-.39-.86-.03-1.75-.67-1.59-1.54.16-.18.32-.07.65.03.72-.15,1.8-.6,1.84.57-.07.42-.21.85-.31,1.25" style="fill: #fff; fill-rule: evenodd;"/>
|
||||
<path d="m51.32,26.41h-8.49c-2.48,0-3.75,2.42-4.69,4.62l-1.43-3.22,2.4-.88c-1.41-1.33-5.79-2.06-6.37-.05l-1.03,4.16c-.82-1.88-1.97-4.62-4.56-4.62h-8.62c1.12,1.98,2.19,2.7,6.16,2.53l.52,1.36-4.35.02c1.28,2.37,2.02,2.47,5.52,2.37l.74,1.63-3.42.12c.73,1.67,1.51,2.39,4.44,2.26l.57,1.45h-2.72c1.02,1.7,1.52,2.47,3.68,2.28l.58,1.58h-1.88c.81,1.82,1.76,1.89,2.92,2.08,1.04.16,1.19,2.11-.02,2.74l3.66,5.93,3.66-5.94c-1.22-.63-1.07-2.58-.02-2.74,1.16-.18,2.11-.25,2.92-2.08h-1.88l.58-1.58c2.15.19,2.66-.58,3.68-2.26h-2.72s.57-1.46.57-1.46c2.93.13,3.71-.58,4.44-2.26l-3.42-.12.74-1.63c3.5.1,4.24,0,5.52-2.37l-4.35-.02.52-1.37c3.96.17,5.03-.54,6.16-2.52" style="fill: #fff;"/>
|
||||
<path d="m64.25,22.34l.03-.07c.12-.31.11-.43.08-.49-.04-.07-.17-.11-.38-.16-.06-.02-.12-.02-.2-.03l-.12-.02-.04-.08s-.08-.08-.14-.12l-.16-.06-.04-.02.21-.16c.15-.12.32-.17.51-.23l.02-.05.08.03c.3-.26.5-.64.53-1.04-.09-.12-.25-.18-.48-.18-.3,0-.66.12-.98.21-.2.07-.44.14-.66.19l-.08-.04c-.54-.26-.57-.27-1.7-.87-.08.06-.15.13-.18.23-.07.16-.06.35.03.52l.11.08h0s0,.01,0,.01l-.27.14c-.06.04-.08.04-.07.04h0l-.08.07s.02.08.07.15l.02.12c0,.11-.02.15-.11.25l-.03.13h0v.02l-.16-.13c-.22-.17-.24-.19-.4-.34-.04,0-.09-.01-.14-.01-.12,0-.22.04-.27.11-.05.07-.04.15,0,.27l-.02.06c-.04.16-.17.44-.68.45h-.26s-.1,0-.18.04c0,.34.15.37.51.43.14.02.28.04.48.09.03-.01.07-.02.1-.02.08,0,.14.03.21.06l.27.11.1.03.05.02-.33.16c-.12.07-.21.11-.33.24-.02.09-.07.18-.15.28v.07s-.15-.03-.15-.03c-.24-.06-.49-.12-.73-.18l-.38-.1c-.67-.18-1.49-.39-2.27-.53-.19-.07-.36-.1-.54-.13l-.37-.04-.02.1c.09.07.21.16.4.28l.02.06c.11.26.28.57.69.8.27.05.55.09.88.12.97.11,1.98.23,2.76.82l.21.1h.05s0,0,0,0h0l-.29.15c-.07.04-.14.08-.23.16l-.09-.02q-.94-.21-1.27-.32c-.34-.22-.5-.29-.68-.29-.14,0-.3.06-.56.22-.02,0-.03.01-.04.02h-.01s-.02.02-.02.03l-.1-.04c-.1-.04-.11-.04-.39-.08-.26-.09-.53-.18-.81-.27-.81-.26-1.65-.54-2.34-1-.2-.17-.34-.33-.45-.46-.04-.05-.06-.07-.08-.07h0l-.07-.08c-.05.01-.14.09-.28.24-.15.46.27,1.56.64,1.88.26.12.54.17.84.22.49.09,1,.18,1.49.59l.13.03h.01s-.12.17-.12.17c-.16.21-.35.38-.56.58l-.09.08c-.06.05-.12.1-.17.16h-.09c-.07.02-.13.03-.21.03-.36,0-.67-.17-.94-.33-.09-.05-.18-.09-.31-.13l-.05.09c.37.65.89,1.24,1.58,1.81l.06.1c.08.05.17.07.25.07h.01c.49-.01,1.02-.68,1.42-1.18.08-.1.16-.21.25-.3l.1-.07c.37-.27.4-.29.38-.29l.09.02c.31.09.51.21.81.37.29-.13.59-.42.56-.74l-.12-.11c-.18-.16-.35-.32-.53-.48l-.09-.02.06-.15c.07-.16.16-.25.29-.38l.02-.07.12.03c.53.12,1,.27,1.58.44l.5.17.12.09c.29.22.5.38.83.38.05,0,.1,0,.18-.04.31-.32.49-.53.61-.78h0s0-.01,0-.02c-.1-.14-.14-.18-.16-.18l.09-.11s.06-.06.15-.11c.85-.27,1.78-.61,2.46-.85.41-.25.45-.28.31-.66-.03-.06-.06-.14-.11-.24m-3.32.51l.14-.12c.19-.18.28-.26.29-.35,0-.03-.05-.08-.13-.14h-.04s-.05,0-.09,0c-.15,0-.25-.07-.3-.14l-.06-.05v-.07s.06-.18.06-.18h-.03s.19-.07.19-.07q.63-.21.73-.27l.05-.08.12.1c.13.12.57.51.64,1.02l-.06.07c-.33.4-.79.46-1.22.48l-.12.03-.06-.18-.08-.05h0Z" style="fill: #fff;"/>
|
||||
<path d="m57.3,21.35c-.19,0-.37-.06-.53-.17-.1-.41.2-.84.42-1.16.07-.11.13-.19.18-.26l.04-.1.07-.14c.09-.17.18-.34.26-.53.03-.1.06-.2.08-.29.13-.53.23-.86.5-.95.21.03.31.06.36.14.05.08.03.18,0,.38l-.03.08c.03.06.04.16.05.25.06.31.07.64.04.93v.12c-.03.12-.06.21-.1.32-.12.37-.26.8-.54,1.05l-.11.11-.08.04c-.19.12-.39.19-.59.19h-.02Z" style="fill: #fff;"/>
|
||||
<path d="m57.3,21.34h.02c.19,0,.39-.07.58-.19l.07-.04.11-.1c.27-.25.41-.67.53-1.05.03-.1.07-.2.08-.31l.02-.12c.03-.33.01-.64-.04-.93-.01-.09-.02-.18-.04-.26h-.01l.03-.07c.04-.19.06-.3.01-.37-.05-.07-.14-.1-.34-.13-.26.09-.36.41-.48.91-.03.1-.06.2-.09.32-.08.19-.17.36-.26.53l-.08.14-.04.09c-.04.08-.1.16-.18.26-.22.32-.52.75-.42,1.14.16.11.33.17.52.17" style="fill: #fff;"/>
|
||||
<path d="m55.43,20.87c-.09,0-.21-.05-.43-.19-.29-.64.74-1.38.86-1.46.17.04.26.13.32.29.12.33.03.79-.19,1.05-.31.22-.44.31-.56.31h0Z" style="fill: #fff;"/>
|
||||
<path d="m55.43,20.85h0c.11,0,.24-.09.54-.3.22-.26.3-.72.19-1.04-.05-.15-.14-.24-.29-.28-.12.08-1.13.81-.86,1.43.21.13.33.19.42.19" style="fill: #fff;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path d="m190.2,14.25c.78-1.6,1.42-3.26,1.9-4.98l1.48.42c-.4,1.41-.89,2.79-1.46,4.14v13.32h-1.48v-10.4c-.54.88-1.11,1.73-1.72,2.54l-.97-1.32c.86-1.16,1.61-2.4,2.25-3.72Zm9.88-5.16c.45.81.88,1.63,1.32,2.46h5.32v1.4h-13.16v-1.4h6.11c-.36-.67-.74-1.33-1.11-2l1.52-.46Zm5.02,5.56v1.28h-10.42v-1.28h10.42Zm0,2.94v1.3h-10.42v-1.3h10.42Zm-.02,2.96v6.56h-1.52v-1.12h-7.33v1.12h-1.52v-6.56h10.36Zm-8.85,4.1h7.33v-2.76h-7.33v2.76Z" style="fill: #fff;"/>
|
||||
<path d="m210.48,21.23l1.38.46c-.61,1.69-1.37,3.31-2.29,4.86l-1.3-.7c.88-1.47,1.61-3.01,2.21-4.62Zm5.1-10.2c.24-.64.47-1.29.67-1.96l1.74.32c-.19.56-.38,1.11-.59,1.64h6.8v9.38h-6.62c.76.93,1.5,1.87,2.25,2.82l-1.21.86c-.72-1.01-1.46-2.01-2.25-2.98l.99-.7h-6.64v-9.38h4.86Zm-3.4,2.72h10.57v-1.48h-10.57v1.48Zm0,2.68h10.57v-1.44h-10.57v1.44Zm10.57,2.74v-1.5h-10.57v1.5h10.57Zm-8.02,2.14v2.76c-.01.23,0,.45.06.66.04.12.1.23.18.32.11.11.24.18.41.22.23.05.46.08.69.08h3.12c.24,0,.49-.02.75-.06.12-.04.24-.08.36-.12.13-.09.23-.21.28-.36.07-.19.11-.39.12-.6l.08-1.74,1.48.38c-.05.65-.12,1.3-.18,1.94-.04.33-.13.65-.26.96-.09.19-.22.35-.36.48-.23.17-.48.29-.75.36-.39.07-.78.1-1.15.1h-4.05c-.39,0-.77-.05-1.13-.14-.28-.07-.53-.21-.73-.42-.13-.17-.24-.37-.3-.58-.09-.37-.13-.77-.12-1.18v-3.06h1.52Zm9.09-.24c1,1.45,1.97,2.93,2.91,4.42l-1.3.74c-.89-1.51-1.83-2.99-2.81-4.44l1.19-.72Z" style="fill: #fff;"/>
|
||||
<path d="m230.34,25.31c.2,0,.4-.02.59-.06.15-.03.27-.08.36-.16.07-.08.12-.17.16-.26.04-.19.06-.38.06-.58v-4.42c-.92.31-1.83.62-2.73.94l-.49-1.62c1.08-.29,2.15-.63,3.22-1v-3.78h-2.53v-1.58h2.53v-3.54h1.54v3.54h2.12v1.58h-2.12v3.24c.63-.21,1.27-.44,1.92-.68l.24.82.22.76c-.81.27-1.61.53-2.39.8v5.56c0,.35-.04.69-.12,1.02-.07.19-.16.35-.28.5-.2.17-.43.29-.69.34-.38.08-.75.12-1.11.12h-1.6l-.3-1.54h1.4Zm7.37-7.62h-2.06v-1.44h4.39v-2.84h-4.41v-1.46h4.41v-2.82h1.52v2.82h5.18v1.46h-5.18v2.84h3.85v1.48c-.43,1.13-.97,2.21-1.62,3.22-.54.83-1.17,1.57-1.9,2.22.76.61,1.57,1.13,2.45,1.56.9.44,1.84.82,2.81,1.14l-.59,1.6c-1.2-.49-2.36-1.06-3.48-1.7-.84-.48-1.63-1.03-2.37-1.66-.8.55-1.62,1.04-2.47,1.48-1.21.61-2.46,1.19-3.72,1.72l-.81-1.52c1.17-.43,2.33-.91,3.46-1.46.81-.39,1.59-.83,2.35-1.34-1.27-1.39-2.27-2.95-3-4.68l1.19-.62Zm1.52,2.54c.43.67.92,1.29,1.48,1.86,1.4-1.19,2.42-2.65,3.04-4.4h-5.83c.36.88.8,1.73,1.32,2.54Z" style="fill: #fff;"/>
|
||||
<path d="m253.35,19.91c1.46-1.52,2.69-3.21,3.68-5.08h-7.47v-1.56h7.79v-4.06h1.58v4.06h7.91v1.56h-7.59c.94,1.85,2.15,3.53,3.62,5.02,1.43,1.43,3,2.69,4.72,3.78l-.93,1.56c-1.7-1.16-3.27-2.48-4.72-3.96-1.16-1.21-2.17-2.54-3.02-3.98v9.94h-1.58v-9.94c-.88,1.44-1.88,2.77-3.02,4-1.4,1.49-2.94,2.85-4.59,4.06l-1.03-1.5c1.67-1.13,3.22-2.43,4.64-3.9Zm8.28-10.56c.99.85,1.97,1.71,2.96,2.56l-1.01,1.06c-.96-.89-1.93-1.77-2.91-2.62l.97-1Z" style="fill: #fff;"/>
|
||||
<path d="m279.2,9.17v3.86h7.06v9.18h-1.6v-1.24h-5.47v6.22h-1.6v-6.22h-5.4v1.28h-1.6v-9.22h7v-3.86h1.6Zm-7,10.3h5.4v-4.92h-5.4v4.92Zm7-4.92v4.92h5.47v-4.92h-5.47Z" style="fill: #fff;"/>
|
||||
<path d="m291.67,14.95l1.62.34c-.62,2.68-1.43,5.29-2.43,7.82l-1.54-.5c.96-2.49,1.74-5.05,2.35-7.66Zm4.45-1.74v10.14c-.01.29.01.57.08.84.04.15.11.28.22.4.15.15.33.24.55.28.3.07.6.09.91.08h2.37c.34.01.67,0,1.01-.06.18-.04.34-.11.49-.2.16-.12.28-.28.36-.48.08-.27.13-.55.14-.84.04-.97.07-1.96.08-2.96l1.66.36-.16,3.18c-.03.45-.11.89-.26,1.3-.11.24-.26.45-.45.64-.28.24-.61.4-.99.48-.51.11-1.03.16-1.56.16h-3.06c-.51,0-1.01-.05-1.5-.16-.36-.09-.68-.27-.95-.54-.19-.21-.32-.45-.4-.7-.14-.48-.2-.97-.18-1.48v-10.44h1.64Zm1.38-3.98c1.54,1.91,3.04,3.84,4.49,5.8l-1.38.98c-1.4-1.99-2.85-3.94-4.35-5.86l1.23-.92Zm7.21,5.38c1.17,2.47,2.33,4.93,3.46,7.4l-1.54.66c-1.09-2.49-2.22-4.97-3.38-7.44l1.46-.62Z" style="fill: #fff;"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="m84.37,49.77h-1.56v-9.1h1.56v9.1Z" style="fill: #fff;"/>
|
||||
<path d="m94.33,49.77h-1.65l-4.35-6.69c-.11-.17-.2-.34-.27-.53h-.04c.03.19.05.61.05,1.25v5.97h-1.46v-9.1h1.76l4.2,6.53c.18.27.29.46.34.56h.03c-.04-.24-.06-.65-.06-1.23v-5.87h1.45v9.1Z" style="fill: #fff;"/>
|
||||
<path d="m101.49,41.95h-3.4v2.74h3.14v1.28h-3.14v3.81h-1.51v-9.1h4.91v1.28Z" style="fill: #fff;"/>
|
||||
<path d="m106.86,49.92c-1.31,0-2.36-.43-3.15-1.28-.79-.85-1.18-1.96-1.18-3.32,0-1.46.4-2.63,1.21-3.5s1.9-1.31,3.28-1.31c1.28,0,2.31.42,3.09,1.27.78.85,1.17,1.95,1.17,3.32,0,1.49-.4,2.66-1.2,3.52s-1.87,1.29-3.21,1.29Zm.07-8.08c-.83,0-1.51.31-2.03.93-.52.62-.78,1.44-.78,2.46s.25,1.83.76,2.44,1.17.93,1.99.93c.87,0,1.56-.29,2.06-.88s.76-1.41.76-2.47-.24-1.93-.73-2.52c-.49-.59-1.16-.89-2.02-.89Z" style="fill: #fff;"/>
|
||||
<path d="m119.97,49.77h-1.76l-1.45-2.44c-.13-.22-.26-.42-.38-.57-.12-.16-.25-.29-.38-.39-.13-.1-.27-.18-.42-.22s-.32-.07-.51-.07h-.61v3.69h-1.5v-9.1h3c.43,0,.82.05,1.18.15s.67.25.94.46c.27.21.48.46.63.77.15.31.23.67.23,1.08,0,.32-.05.62-.14.89-.09.27-.23.51-.41.72-.18.21-.39.39-.63.54-.25.15-.53.26-.83.34v.03c.17.09.31.2.43.31.12.11.24.23.35.35s.22.25.33.4c.11.15.23.33.36.52l1.62,2.56Zm-5.53-7.88v2.96h1.26c.23,0,.45-.04.64-.11.2-.07.37-.18.51-.31s.26-.3.34-.5.12-.41.12-.65c0-.44-.14-.78-.41-1.02s-.67-.37-1.19-.37h-1.27Z" style="fill: #fff;"/>
|
||||
<path d="m130.81,49.77h-1.5v-5.89c0-.48.03-1.07.09-1.77h-.03c-.09.4-.18.68-.25.86l-2.72,6.8h-1.04l-2.72-6.75c-.08-.2-.16-.5-.24-.91h-.03c.03.36.05.96.05,1.78v5.88h-1.4v-9.1h2.13l2.39,6.06c.18.47.3.81.36,1.04h.03c.16-.48.28-.83.38-1.07l2.44-6.04h2.05v9.1Z" style="fill: #fff;"/>
|
||||
<path d="m140.52,49.77h-1.66l-.82-2.32h-3.58l-.79,2.32h-1.65l3.41-9.1h1.7l3.38,9.1Zm-2.88-3.55l-1.26-3.63c-.04-.12-.08-.31-.12-.57h-.03c-.04.24-.08.43-.13.57l-1.25,3.63h2.79Z" style="fill: #fff;"/>
|
||||
<path d="m146.69,41.95h-2.62v7.82h-1.51v-7.82h-2.61v-1.28h6.73v1.28Z" style="fill: #fff;"/>
|
||||
<path d="m149.58,49.77h-1.56v-9.1h1.56v9.1Z" style="fill: #fff;"/>
|
||||
<path d="m155.57,49.92c-1.31,0-2.36-.43-3.15-1.28-.79-.85-1.18-1.96-1.18-3.32,0-1.46.4-2.63,1.21-3.5s1.9-1.31,3.28-1.31c1.28,0,2.31.42,3.09,1.27.78.85,1.17,1.95,1.17,3.32,0,1.49-.4,2.66-1.2,3.52s-1.87,1.29-3.21,1.29Zm.07-8.08c-.83,0-1.51.31-2.03.93-.52.62-.78,1.44-.78,2.46s.25,1.83.76,2.44,1.17.93,1.99.93c.87,0,1.56-.29,2.06-.88s.76-1.41.76-2.47-.24-1.93-.73-2.52c-.49-.59-1.16-.89-2.02-.89Z" style="fill: #fff;"/>
|
||||
<path d="m169.36,49.77h-1.65l-4.35-6.69c-.11-.17-.2-.34-.27-.53h-.04c.03.19.05.61.05,1.25v5.97h-1.46v-9.1h1.76l4.2,6.53c.18.27.29.46.34.56h.03c-.04-.24-.06-.65-.06-1.23v-5.87h1.45v9.1Z" style="fill: #fff;"/>
|
||||
<path d="m181.03,41.95h-2.62v7.82h-1.51v-7.82h-2.61v-1.28h6.73v1.28Z" style="fill: #fff;"/>
|
||||
<path d="m187.47,49.77h-5.11v-9.1h4.91v1.28h-3.4v2.58h3.13v1.28h-3.13v2.69h3.6v1.28Z" style="fill: #fff;"/>
|
||||
<path d="m195.44,49.38c-.69.36-1.54.53-2.56.53-1.32,0-2.38-.42-3.17-1.25s-1.19-1.93-1.19-3.28c0-1.46.45-2.63,1.34-3.53.89-.9,2.03-1.35,3.39-1.35.88,0,1.61.12,2.19.37v1.5c-.61-.36-1.29-.55-2.03-.55-.99,0-1.78.32-2.4.95-.61.63-.92,1.47-.92,2.53s.29,1.8.86,2.4c.57.59,1.32.89,2.25.89.86,0,1.6-.2,2.23-.61v1.4Z" style="fill: #fff;"/>
|
||||
<path d="m204.48,49.77h-1.52v-3.95h-4.28v3.95h-1.51v-9.1h1.51v3.83h4.28v-3.83h1.52v9.1Z" style="fill: #fff;"/>
|
||||
<path d="m214.44,49.77h-1.65l-4.35-6.69c-.11-.17-.2-.34-.27-.53h-.04c.03.19.05.61.05,1.25v5.97h-1.46v-9.1h1.76l4.2,6.53c.18.27.29.46.34.56h.03c-.04-.24-.06-.65-.06-1.23v-5.87h1.45v9.1Z" style="fill: #fff;"/>
|
||||
<path d="m220.45,49.92c-1.31,0-2.36-.43-3.15-1.28-.79-.85-1.18-1.96-1.18-3.32,0-1.46.4-2.63,1.21-3.5s1.9-1.31,3.28-1.31c1.28,0,2.31.42,3.09,1.27.78.85,1.17,1.95,1.17,3.32,0,1.49-.4,2.66-1.2,3.52s-1.87,1.29-3.21,1.29Zm.07-8.08c-.83,0-1.51.31-2.03.93-.52.62-.78,1.44-.78,2.46s.25,1.83.76,2.44,1.17.93,1.99.93c.87,0,1.56-.29,2.06-.88s.76-1.41.76-2.47-.24-1.93-.73-2.52c-.49-.59-1.16-.89-2.02-.89Z" style="fill: #fff;"/>
|
||||
<path d="m231.56,49.77h-5.04v-9.1h1.51v7.83h3.53v1.28Z" style="fill: #fff;"/>
|
||||
<path d="m236.24,49.92c-1.31,0-2.36-.43-3.15-1.28-.79-.85-1.18-1.96-1.18-3.32,0-1.46.4-2.63,1.21-3.5s1.9-1.31,3.28-1.31c1.28,0,2.31.42,3.09,1.27.78.85,1.17,1.95,1.17,3.32,0,1.49-.4,2.66-1.2,3.52s-1.87,1.29-3.21,1.29Zm.07-8.08c-.83,0-1.51.31-2.03.93-.52.62-.78,1.44-.78,2.46s.25,1.83.76,2.44,1.17.93,1.99.93c.87,0,1.56-.29,2.06-.88s.76-1.41.76-2.47-.24-1.93-.73-2.52c-.49-.59-1.16-.89-2.02-.89Z" style="fill: #fff;"/>
|
||||
<path d="m249.42,49.14c-.95.52-2,.77-3.17.77-1.35,0-2.44-.42-3.27-1.26s-1.25-1.95-1.25-3.33.46-2.57,1.37-3.47c.91-.9,2.07-1.36,3.48-1.36,1.01,0,1.86.15,2.55.44v1.56c-.7-.47-1.53-.7-2.49-.7s-1.76.32-2.38.96c-.62.64-.93,1.47-.93,2.48s.27,1.87.8,2.47c.53.6,1.26.9,2.17.9.63,0,1.17-.12,1.62-.36v-2.16h-1.92v-1.27h3.42v4.32Z" style="fill: #fff;"/>
|
||||
<path d="m257.72,40.66l-2.98,5.8v3.31h-1.51v-3.28l-2.91-5.83h1.72l1.79,3.9s.08.22.19.53h.02c.04-.14.11-.31.21-.53l1.87-3.9h1.6Z" style="fill: #fff;"/>
|
||||
<path d="m268.8,49.38c-.69.36-1.54.53-2.56.53-1.32,0-2.38-.42-3.17-1.25s-1.19-1.93-1.19-3.28c0-1.46.45-2.63,1.34-3.53.89-.9,2.03-1.35,3.39-1.35.88,0,1.61.12,2.19.37v1.5c-.61-.36-1.29-.55-2.03-.55-.99,0-1.78.32-2.4.95-.61.63-.92,1.47-.92,2.53s.29,1.8.86,2.4c.57.59,1.32.89,2.25.89.86,0,1.6-.2,2.23-.61v1.4Z" style="fill: #fff;"/>
|
||||
<path d="m275.64,49.77h-5.11v-9.1h4.91v1.28h-3.4v2.58h3.13v1.28h-3.13v2.69h3.6v1.28Z" style="fill: #fff;"/>
|
||||
<path d="m284.98,49.77h-1.65l-4.35-6.69c-.11-.17-.2-.34-.27-.53h-.04c.03.19.05.61.05,1.25v5.97h-1.46v-9.1h1.76l4.2,6.53c.18.27.29.46.34.56h.03c-.04-.24-.06-.65-.06-1.23v-5.87h1.45v9.1Z" style="fill: #fff;"/>
|
||||
<path d="m293.07,41.95h-2.62v7.82h-1.51v-7.82h-2.61v-1.28h6.73v1.28Z" style="fill: #fff;"/>
|
||||
<path d="m299.51,49.77h-5.11v-9.1h4.91v1.28h-3.4v2.58h3.13v1.28h-3.13v2.69h3.6v1.28Z" style="fill: #fff;"/>
|
||||
<path d="m308.16,49.77h-1.76l-1.45-2.44c-.13-.22-.26-.42-.38-.57-.12-.16-.25-.29-.38-.39-.13-.1-.27-.18-.42-.22s-.32-.07-.51-.07h-.61v3.69h-1.5v-9.1h3c.43,0,.82.05,1.18.15s.67.25.94.46c.27.21.48.46.63.77.15.31.23.67.23,1.08,0,.32-.05.62-.14.89-.09.27-.23.51-.41.72-.18.21-.39.39-.63.54-.25.15-.53.26-.83.34v.03c.17.09.31.2.43.31.12.11.24.23.35.35s.22.25.33.4c.11.15.23.33.36.52l1.62,2.56Zm-5.53-7.88v2.96h1.26c.23,0,.45-.04.64-.11.2-.07.37-.18.51-.31s.26-.3.34-.5.12-.41.12-.65c0-.44-.14-.78-.41-1.02s-.67-.37-1.19-.37h-1.27Z" style="fill: #fff;"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 33 KiB |
127
resource/icons/zju-falcon.svg
Normal file
|
After Width: | Height: | Size: 134 KiB |
122
resource/icons/zju.svg
Normal file
@@ -0,0 +1,122 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 311.68 69.84">
|
||||
<g id="_图层_1" data-name="图层 1">
|
||||
<g>
|
||||
<g>
|
||||
<path d="m82.6,64.77h5.21v.55h-6.11v-.19l5.27-7.96h-4.85v-.55h5.78v.16l-5.29,8Z" style="fill: #003f89;"/>
|
||||
<path d="m98.31,65.31v-4.18h-4.98v4.18h-.6v-8.71h.6v3.98h4.98v-3.98h.6v8.71h-.6Z" style="fill: #003f89;"/>
|
||||
<path d="m103.63,65.31v-8.71h4.07v.55h-3.47v3.49h3.22v.55h-3.22v3.57h3.67v.55h-4.27Z" style="fill: #003f89;"/>
|
||||
<path d="m115.17,62.31c0,2.1-.73,3.15-2.19,3.15-.23,0-.45-.03-.66-.09v-.58c.24.08.46.12.67.12.56,0,.96-.21,1.21-.63.25-.42.37-1.08.37-1.98v-5.69h.59v5.71Z" style="fill: #003f89;"/>
|
||||
<path d="m119.85,65.31v-8.71h.6v8.71h-.6Z" style="fill: #003f89;"/>
|
||||
<path d="m131.34,65.31l-1-2.71h-3.78l-1,2.71h-.66l3.28-8.71h.57l3.25,8.71h-.67Zm-2.67-7.29c-.04-.12-.08-.24-.11-.36-.03-.1-.06-.2-.09-.3h-.02c-.07.27-.14.48-.2.65l-1.46,4.04h3.36l-1.47-4.02Z" style="fill: #003f89;"/>
|
||||
<path d="m142.87,65.31l-5.19-7.04c-.11-.14-.2-.28-.28-.43l-.08-.12h-.02c0,.11.01.23.01.38v7.2h-.6v-8.71h.46l5.15,6.98c.11.15.24.34.37.56h.03c-.02-.28-.03-.53-.03-.73v-6.81h.6v8.71h-.42Z" style="fill: #003f89;"/>
|
||||
<path d="m154.52,64.71c-.9.51-1.82.76-2.77.76-1.19,0-2.15-.4-2.88-1.21-.73-.8-1.1-1.86-1.1-3.17s.39-2.42,1.18-3.3c.79-.88,1.84-1.32,3.16-1.32.77,0,1.51.15,2.23.46v.66c-.79-.38-1.56-.57-2.31-.57-1.1,0-1.98.38-2.64,1.12-.67.75-1,1.7-1,2.87,0,1.22.31,2.18.94,2.87.62.69,1.47,1.04,2.53,1.04.79,0,1.47-.17,2.06-.51v-2.87h-2.05v-.55h2.65v3.72Z" style="fill: #003f89;"/>
|
||||
<path d="m172.33,61.84c0,2.42-1.03,3.63-3.1,3.63s-2.94-1.17-2.94-3.5v-5.36h.6v5.28c0,2.02.82,3.03,2.46,3.03s2.39-.98,2.39-2.95v-5.36h.6v5.23Z" style="fill: #003f89;"/>
|
||||
<path d="m183.1,65.31l-5.19-7.04c-.1-.14-.2-.28-.28-.43l-.08-.12h-.02c0,.11.01.23.01.38v7.2h-.6v-8.71h.46l5.15,6.98c.11.15.24.34.37.56h.03c-.02-.28-.03-.53-.03-.73v-6.81h.6v8.71h-.42Z" style="fill: #003f89;"/>
|
||||
<path d="m188.19,65.31v-8.71h.6v8.71h-.6Z" style="fill: #003f89;"/>
|
||||
<path d="m197.02,65.31h-.45l-3.18-8.71h.67l2.52,7.01c.1.29.18.57.22.83h.02c.04-.21.12-.49.25-.84l2.68-7h.64l-3.38,8.71Z" style="fill: #003f89;"/>
|
||||
<path d="m205.01,65.31v-8.71h4.07v.55h-3.47v3.49h3.22v.55h-3.22v3.57h3.67v.55h-4.27Z" style="fill: #003f89;"/>
|
||||
<path d="m218.41,65.31l-1.16-2.55c-.24-.53-.48-.88-.72-1.06-.24-.18-.54-.27-.9-.27h-1.08v3.88h-.6v-8.71h2.42c.77,0,1.37.21,1.81.62.44.42.66.96.66,1.64,0,.63-.18,1.15-.54,1.57-.36.42-.86.69-1.51.81v.02c.34.14.68.56,1.01,1.26l1.29,2.77h-.68Zm-3.85-8.15v3.73h1.5c.66,0,1.19-.17,1.58-.52.39-.35.59-.83.59-1.43,0-.55-.18-.99-.53-1.3-.35-.31-.86-.47-1.51-.47h-1.63Z" style="fill: #003f89;"/>
|
||||
<path d="m223.82,65v-.69c.62.4,1.25.6,1.89.6.68,0,1.2-.14,1.55-.42.35-.28.53-.67.53-1.18,0-.44-.12-.8-.36-1.07-.24-.26-.75-.63-1.54-1.08-.88-.51-1.44-.94-1.68-1.29-.23-.35-.35-.75-.35-1.2,0-.62.24-1.14.72-1.57.48-.43,1.12-.64,1.91-.64.52,0,1.04.09,1.55.26v.63c-.51-.23-1.05-.35-1.63-.35s-1.06.15-1.41.45c-.35.3-.52.68-.52,1.14s.12.8.36,1.06c.24.26.75.62,1.53,1.07.81.46,1.35.87,1.62,1.23.27.36.4.77.4,1.24,0,.67-.23,1.21-.69,1.63-.46.42-1.12.63-1.96.63-.3,0-.64-.05-1.04-.14-.39-.09-.69-.2-.9-.32Z" style="fill: #003f89;"/>
|
||||
<path d="m233.01,65.31v-8.71h.6v8.71h-.6Z" style="fill: #003f89;"/>
|
||||
<path d="m241.19,57.16v8.15h-.6v-8.15h-2.51v-.55h5.62v.55h-2.51Z" style="fill: #003f89;"/>
|
||||
<path d="m251.43,62v3.31h-.59v-3.3l-2.67-5.41h.67l2.03,4.2c.07.15.16.36.27.64h.02c.06-.15.16-.36.3-.63l2.12-4.21h.65l-2.81,5.4Z" style="fill: #003f89;"/>
|
||||
</g>
|
||||
<line x1="81.29" y1="34.19" x2="309.03" y2="34.19" style="fill: #003f89; stroke: #004088; stroke-miterlimit: 10; stroke-width: .74px;"/>
|
||||
<g>
|
||||
<path d="m152.49,26.66c-1.06-.23-.43-.56-.6-1.47-.14-.78-.85-1.55-.83-2.13.06-1.56,2.06-1.46,3.28-.96.22.09.47.42.69.74.56.8,1.21,1.97.35,2.85-.75.76-1.97,1.17-2.89.97" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m140.42,25.04s-.07-.03-.1-.04c.01-.12.02-.23.03-.34.33-.13,3.22-2.01,3.21-2.09.84-.67,1.6-1.42,1.83-2.49-2.07.68-4.03,2.18-6.17,2.34-.99-.25-1.67-.79-2.37-1.09,0-.05,0-.09,0-.12-1.13-.74-1.24-1.69.01-2.11,2.16.48,5.46-1.06,7.49-1.84.46-.2,1.77-.67,2.12-1.08.48-2.85.17-5.7.34-8.42.69-1.97,1.92-.63,3.14.36.08.16.36.34.61.71.03,0,.07,0,.12,0,.52.82.66,1.2-.14,1.96-.54,1.34-.8,2.82-.73,4.36,1.48-.21,2.38-1.51,4.09-1.53.41.8.36,1.47-.4,2.13-1.25.6-2.61,1.14-4.03,1.78-.33,1.44-.9,3.2-1.91,4.37-.15.17-.88.85-1.06.95-.92.54-1.75,1.18-2.75,1.47-2.78.77-2.81.64-3.32.71" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m113.83,29.89c-1.02-.47-1.95-1.71-2.51-2.48.09-.27.19-.55.3-.8,2.41-1.81,4.8-3.48,6.99-5.64.66-1.02,1.53-2.08,2.24-3.09.03-.02.08-.04.12-.04,0-.05,0-.08,0-.11.62-.48.88-.61,1.4.18.04.66-1.15,1.37-1.52,1.99-.46,1.18-.99,2.38-1.59,3.58q-.19.22-.96,1.48c-.65.5-1.51,1.81-1.87,2.61-.76.44-1.09,1.79-2,2.26-.21.01-.39.04-.58.07" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m128.07,21.44c-1.49-.06-1.91-1.02-2.72-1.88-.02-.39.21-.63.24-.9q.37-.09.6-.23c.62-.09.85-.05,1.52-.09.86-.19,3.05-1.7,3.78-1.05.11,1.81-1.86,3.63-3.43,4.15" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m116.65,18.59c-.57-.5-.68-2.79-.73-3.52.42-1.29,1.72-1.34,2.8-.5.86,1.13,1.44,1.6.54,2.91-1.02.88-1.47.94-2.61,1.11" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m127.67,17.47c-.15-.7.81-2.19.53-2.55-.36.05-.73.19-1.11.21-.89-.43-1.88-1.52-1.52-2.36.66-.75.41-.56,1.44-.62.99-.44,1.97-.87,2.97-1.29,1.67-.31,2.44.61,2.54,2.24-.3,1.06-1,1.89-1.69,2.72-.89.48-1.69,1.02-2.49,1.54-.23.03-.45.08-.67.12" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m118.54,12.75c-.35-.31-.2-.48-.02-.79-.04-.69-.46-1.25-.5-1.91.22-1.21,0-1.66,1-2.24.78.35,3.5,1.73,2.85,3.26-.75.95-2.26,1.55-3.33,1.68" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m83.32,31.02c-1.62-.62-3.03-3.82-1.08-4.61.05-.28.29-.57.53-.65,0-.05,0-.09,0-.12,1.57-1.52,2.6-3.64,3.92-5.32.34-.64.52-1.25,1.25-1.43.36.32.24,1.05.13,1.61.16.14.72.04,1.06-.07,1.09-.94,2.51-1.77,3.6-2.76.06-.49.11-.97.19-1.44-.76.18-3.26.77-2.66-.64.94-.37,2.36-1.17,2.86-2.19.24-1.03.11-2.17.62-2.9,1.05-.54,2.29.79,2.5,1.92.42.75,1.74-.18.1,2.12-.35.26-.33.76-.26,1.28.12,0,.24.02.36.03.92-.66,1.92-1.37,2.96-1.97.29-1.48.52-2.71,1.23-3.95,1.02-.7,2.4.06,3.4.85.77-.05,1.25-.37,1.93-.88q.27-.08.78-.08c.21.36.29.74.32,1.28-.49,1.5-4.79,1.99-3.97,3.74.75-.05,1.01-.87,1.29-1.42.84-.45,2.66.09,3.54.74.98,1.19.22,1.6-.87,2.35-.11.16-.22.32-.31.48q-.07,2.41-.04,5.66c-.37.88-.64,1.31-1.32,2.02,0,.03,0,.07,0,.1-.05,0-.09,0-.12,0-.42.73-1.44,1.44-2.04.76-.01-2.67.14-5.44.05-7.99-.05,0-.1.02-.13.04-.19,1.3-1.5,3.75-2.61,4.55-1.03.06-1.89-.53-2.18-1.41.1-.26.31-.33.52-.51.58-1.18.41-3.37.4-4.53-.83.12-2.24,2.01-2.87,2.71-.42.33-.85.67-1.26,1.01-.3.99-.53,1.97-.79,3.03-.23.47-.46.97-.68,1.46-.05,0-.09,0-.12,0-.39.66-1.65,2.38-2.4,1.3,0-.15-.02-.29,0-.43.63-.93,1.11-2.23,1.13-3.29-1.03.34-1.7,1.27-2.73,1.33-.59-.12-1.18-.3-1.57-.5,0-.05,0-.09,0-.12-.25-.16-.5-.38-.65-.32-.19.58-.37,1.17-.54,1.77-1.06,2.21-1.84,4.38-2.52,6.8-.39.38-.52.44-.93.54" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m85.34,18.3c-.32-.46.07-1.07.09-1.6-.5-1.51-.9-2.64.06-3.91.15-.03.31-.03.46-.05.7.49,1.69,1.61,2.29,2.41.73,1.81-1.6,2.62-2.91,3.15" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m86.79,12.45c-.38-.13-.37-.22-.45-.35.18-.37.36-.59.28-.96-.93-1.42-.87-3.58.73-4.3.47.05.47.45.68,1.09,1.04,1.01,2.98,2.27,1.14,3.64-.78.34-1.62.61-2.39.88" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m164.01,17.99c-1.45-.45-1.17-2.83-.93-3.79,1.06-.67,2.45.73,2.52,1.97-.27,1.37-.26,1.57-1.59,1.82" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m171.85,28.96c-.05-.03-.09-.06-.13-.08-1.85.12-3.62-.06-5.28-.65q-.08-.14-.09-.37c.98-.57,2.36-.41,3.1-1.44.12-.8.21-1.48.13-2.17-1.84.12-2.82,1.41-4.27,1.94-1.24.08-3.46-1.05-3.83-2.04,0-1.6.33-.88,2.05-.99,2.04-.36,4.08-1.53,6.05-2.4q.42-.32.65-.41c.44-1.33.75-1.57,2.13-1.84q.54-.27,2.12-1.23c.04-.15.08-.31.14-.46-2.4.28-4.34,2.23-6.25,3.51-.95.26-1.67.1-2.33-.19-.42.06-2.81.48-1.65-.47.71-.28,1.25-.79,2.01-1.12,1.8-1.21,3.88-2.25,5.82-3.37-.02-.3-.13-.46-.19-.55,0-.41.08-.61.2-.92-.37.12-.47.1-.53.37-1.15.51-1.64,1.55-2.61.45-.26,1.01-.98,1.71-1.99,1.78-1.03-.53-1.05-2.25-1.24-3.05-.07-.09-.22-.76-.5-1.54-.47-.95-1.32-2.01-.75-2.87.73-.45,1.02-.62,1.64.37.53.41,1.21.95,1.74,1.66.04,0,.07,0,.12,0,.33.87,1.12,2.02,1.04,3.14.54-.32,1.31-.94.91-1.63-.89-.48-.39-1.31.24-1.62q.44.02,1.01-.03c-.01-.22-.03-.22-.14-.35-.74-.25-.6-.43-.4-1.04-.87-.32-1.19-1.23-.86-1.87q2.51-.63,3.69-1.01c.78-.97,1.63-3.64,3.15-3.15.47.56.8,1.5.71,2.44-.19.4-.46.74-.53,1.18.15-.01.3,0,.45,0,1.05-.52,1.54-1.14,2.16.42,1.01.55,1.38.41,1,1.88-.74,1.48-1.53,3.07-2.35,4.55-.01.07-.03.14-.02.2.19.04.37.08.56.14.11.67.13,1.49.11,2.31-.63.93-1.43.93-2.44,1.06-1.28.64-2.43,1.17-3.63,1.88,0,.24-.04.48.08.79.61-.02,1.23-.02,1.86-.03.69.45.63,1.7.2,2.43-.7.1-1.12.19-1.66.48-.06.34-.13.68-.19,1.04.05,1.33.74,4.54-1.23,4.85m3.93-16.41c.62-.63,1.05-1.25,1-2.11-.52-.45-1.42-.52-1.96-.49q-.07.24-.69,1.4c.05.03.12.06.19.09-.06.02-.13.04-.18.08,0,.03.02.06.04.11.27.04.43-.18.55-.37.97-.16.99.19.92,1.22.04.02.07.03.12.06" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="m34.92,0c19.23,0,34.92,15.69,34.92,34.92s-15.69,34.92-34.92,34.92S0,54.16,0,34.92,15.69,0,34.92,0m0,1.39C16.46,1.39,1.39,16.46,1.39,34.92s15.06,33.53,33.53,33.53,33.53-15.06,33.53-33.53S53.39,1.39,34.92,1.39" style="fill: #003f89;"/>
|
||||
<path d="m22.66,49.81c-2.18-1.81-3.97-4.09-5.2-6.68-1.18-2.49-1.84-5.27-1.84-8.21,0-10.63,8.67-19.3,19.3-19.3s19.3,8.67,19.3,19.3c0,2.93-.66,5.72-1.84,8.21-1.22,2.59-3.01,4.87-5.2,6.68l-.44-.54c2.11-1.75,3.83-3.94,5.01-6.44,1.13-2.4,1.77-5.09,1.77-7.91,0-10.25-8.36-18.61-18.61-18.61s-18.61,8.36-18.61,18.61c0,2.83.64,5.51,1.77,7.91,1.18,2.49,2.9,4.69,5.01,6.44l-.44.54Z" style="fill: #003f89;"/>
|
||||
<polygon points="5.02 46.59 3.7 43.05 4.42 42.8 10.46 43.72 9.53 41.24 10.25 40.99 11.45 44.23 10.74 44.47 4.7 43.56 5.73 46.33 5.02 46.59" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="7.31 51.4 6.95 50.69 9.79 49.24 8.89 47.49 6.05 48.94 5.69 48.23 11.76 45.12 12.12 45.82 9.56 47.13 10.46 48.89 13.02 47.57 13.38 48.28 7.31 51.4" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="10.19 55.24 8.04 52.23 13.73 48.69 15.78 51.56 15.15 51.96 13.58 49.77 11.82 50.87 13.26 52.88 12.62 53.27 11.19 51.26 9.16 52.52 10.83 54.85 10.19 55.24" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="15.03 59.98 14.31 59.37 18.5 54.22 19.22 54.83 15.03 59.98" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m18.28,62.24l.86-1.83-1.04-.75-1.55,1.51-.71-.55,4.91-4.85.99.6-2.62,6.34-.84-.47Zm1.25-2.72l1.02-2.35-.09-.08-1.77,1.81.84.62Z" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="23.2 64.62 22.31 64.21 22.83 59.48 20.89 63.46 20 63.05 23.08 56.96 23.88 57.33 23.51 61.82 25.51 58.11 26.25 58.42 23.2 64.62" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m27.78,65.99l-.57-.19.05-.54c-.13.11-.31.19-.53.22-.22.04-.44.02-.67-.06-.47-.15-.82-.52-1.05-1.11-.23-.59-.18-1.4.14-2.43.35-1.13.78-1.91,1.28-2.35.5-.44,1.28-.68,1.96-.47.73.23,1.21,1.14,1,2.38l-.87-.07c.15-.53.07-1.37-.45-1.54-.43-.14-.9,0-1.2.33-.3.34-.6.97-.88,1.91-.27.89-.35,1.53-.23,1.94.12.41.33.66.62.76.29.09.56.06.8-.12.24-.17.43-.5.58-.98l.12-.4-1.05-.34.22-.68,1.72.56-.98,3.17Z" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m36.86,64.48c-.02.62-.19,1.1-.49,1.44-.31.35-.78.51-1.42.48-.64-.02-1.11-.22-1.39-.59-.28-.37-.41-.86-.4-1.48l.15-4.65.82.04-.15,4.65c-.02.44.07.76.26.97.18.21.43.32.74.34.31.01.56-.08.76-.28.2-.2.3-.51.32-.95l.15-4.65.82.03-.15,4.65Z" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="41.52 65.72 40.79 65.84 38.48 61.4 38.84 66.17 37.97 66.29 37.46 59.61 38.46 59.52 40.36 62.63 40.01 59.28 40.73 59.15 41.52 65.72" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="44.01 65.03 43.16 65.29 41.38 58.97 42.23 58.7 44.01 65.03" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="46.32 57.02 47.4 64 46.56 64.41 42.86 58.49 43.68 58.14 46.25 62.18 45.53 57.36 46.32 57.02" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="53.19 60.97 50.07 62.66 46.67 56.82 49.64 55.22 50.02 55.87 47.75 57.09 48.81 58.9 50.89 57.78 51.26 58.42 49.19 59.55 50.4 61.63 52.81 60.32 53.19 60.97" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m56.74,58.48l-.69.59-2.42-2.01-.62.57,1.63,2.22-.69.71-4-5.62,1.27-.91c.41-.29.94-.5,1.43-.44,1.24.15,1.78.99,1.72,1.96-.02.31-.04.61-.16.91l2.52,2Zm-4.31-3.96c-.51-.13-.91.26-1.27.54l1.33,1.76c.41-.3.59-.36.9-.89.13-.64-.15-1.2-.96-1.41" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m58.9,53.05c1.4.84,1.07,3.22-.76,3.5-.49.07-1.08-.08-1.32-.23l.31-.71c.3.06.61.18.9.12,1.19-.23,1.14-1.46.44-1.97-.24-.18-.58-.2-.87-.17-.8.09-1.32.69-2.21.75-.97.06-1.65-.54-1.82-1.49-.08-.5.04-.99.29-1.38.51-.81,1.61-.92,2.41-.45l-.31.73c-.43-.22-1.2-.22-1.49.23-.15.23-.2.48-.16.72.1.54.46.86.98.79.87-.1,1.45-.81,2.3-.79.4.01.88.11,1.29.36" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="61.85 52.19 61.35 52.81 55.59 49.2 56.09 48.58 61.85 52.19" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="58.94 44.91 58.31 46.09 63.74 49.29 63.37 49.96 57.94 46.77 57.3 47.95 56.63 47.55 58.27 44.51 58.94 44.91" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<polygon points="59.94 40.42 63.25 43.38 65.47 44.33 65.2 45.08 63.15 44.28 58.43 44.18 58.65 43.42 61.95 43.47 59.62 41.33 59.94 40.42" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m14.52,57c-.59.59-1.13.89-1.64.91-.51.02-.97-.19-1.38-.61-.37-.38-.56-.83-.56-1.34,0-.26.08-.53.23-.8l.75.46c-.07.13-.1.25-.1.37,0,.28.08.51.26.69.25.26.52.37.79.35.28-.02.61-.23,1.01-.63l3.32-3.29.62.63-3.29,3.25Z" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m25.81,55.85l-2.32-1.44.21-.37.86.53,1.38-2.41-.87-.54.19-.32c.33.2.59.32.78.34.19.03.36-.05.49-.24l.5.31-1.86,3.23.84.53-.21.36Zm6.94-1.47c.04-.19-.02-.35-.19-.5-.17-.15-.42-.25-.76-.3-.31-.04-.58-.02-.8.06-.22.08-.35.22-.39.41-.03.14,0,.26.08.37.08.11.21.21.4.32.08.04.21.11.38.19.17.08.33.14.47.2.27-.09.46-.19.58-.31.12-.12.19-.26.23-.43m-.3,2.08c.03-.17.01-.31-.07-.42-.08-.12-.26-.24-.54-.39-.09-.04-.21-.09-.36-.16-.15-.06-.33-.14-.52-.22-.26.07-.46.17-.62.3-.15.12-.25.29-.29.48-.05.25.03.47.23.67.2.19.47.32.83.37.36.05.66.02.91-.09.25-.11.39-.28.44-.52m-1.44,1.02c-.32-.04-.6-.11-.85-.21-.25-.1-.45-.22-.61-.35-.16-.14-.27-.29-.33-.45-.06-.17-.07-.33-.04-.5.04-.22.18-.41.4-.58.22-.16.52-.27.89-.33v-.02c-.29-.16-.49-.32-.62-.48-.12-.16-.16-.35-.12-.55.06-.31.29-.54.7-.7.41-.16.89-.19,1.44-.12.58.08,1.03.24,1.34.49.31.24.43.52.37.82-.04.19-.16.36-.36.51-.2.16-.47.26-.81.32v.02c.34.16.6.34.76.52.16.19.21.41.16.66-.07.35-.33.62-.77.8-.45.18-.96.23-1.56.15m8.05-2.55c0-.28-.04-.51-.12-.69-.08-.18-.19-.32-.32-.42-.12-.08-.25-.15-.38-.18-.12-.03-.26-.05-.41-.05-.35,0-.62.08-.82.24-.21.17-.31.41-.31.72,0,.17.03.32.1.44.07.11.18.21.33.29.1.06.23.1.36.12.13.02.28.03.43.03.18,0,.38-.02.58-.06.21-.04.39-.1.54-.17,0-.03,0-.06.01-.11,0-.05,0-.1,0-.16m-3.22-.35c0-.22.06-.42.16-.59.11-.18.25-.33.43-.46.18-.12.39-.22.64-.29.25-.07.5-.11.76-.11.29,0,.55.04.78.1.24.06.43.16.61.28.22.15.38.35.5.6.12.25.18.57.18.95,0,.34-.06.67-.18.98-.12.31-.29.57-.52.78-.24.21-.53.38-.87.49-.34.11-.76.17-1.25.17-.11,0-.23,0-.36-.01-.13-.01-.25-.03-.36-.05v-.54h.04c.07.03.18.06.33.08.15.02.3.03.45.03.55,0,.98-.12,1.3-.36.31-.24.49-.58.53-1.03-.22.1-.44.18-.64.22-.2.05-.43.07-.67.07s-.44-.02-.63-.05c-.19-.03-.38-.1-.57-.2-.23-.11-.4-.26-.51-.43-.12-.18-.17-.38-.17-.63m9.12-3.58l-.15,4.31-.66.41.06-4.07-2.52,1.22-.22-.49,3.16-1.64.33.26Z" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<g>
|
||||
<path d="m46.32,16.13c-.51-.25-.15-.34-.12-.81.02-.41-.24-.88-.16-1.17.22-.78,1.22-.48,1.77-.08.1.07.19.26.26.46.18.47.36,1.14-.18,1.47-.47.3-1.13.35-1.57.14" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m40.45,13.84s-.03-.02-.04-.04c.02-.06.04-.12.05-.16.18-.03,1.86-.62,1.87-.66.51-.23.97-.52,1.23-1.03-1.12.08-2.29.6-3.38.42-.47-.25-.75-.6-1.06-.84,0-.02,0-.04.01-.06-.48-.51-.41-1,.27-1.05,1.02.5,2.87.13,3.98,0,.25-.05.97-.12,1.2-.29.59-1.37.78-2.84,1.2-4.19.59-.9,1.04-.08,1.53.57.02.09.14.21.22.43.02,0,.03,0,.06.01.16.47.18.68-.31.96-.43.6-.75,1.31-.9,2.1.77.08,1.38-.46,2.24-.27.11.45,0,.79-.46,1.02-.7.15-1.45.25-2.24.4-.34.68-.84,1.5-1.5,1.96-.09.07-.55.32-.65.35-.53.16-1.02.37-1.56.4-1.49.05-1.49-.02-1.75-.04" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="m23.44,18.81c-.62-.04-1.34-.48-1.78-.77,0-.16-.02-.32-.01-.47.87-1.41,1.76-2.76,2.44-4.3.13-.66.36-1.38.52-2.04.01-.01.03-.03.05-.05-.01-.02-.02-.04-.02-.05.22-.37.33-.49.75-.19.15.33-.31.93-.38,1.32,0,.7-.03,1.42-.09,2.16q-.05.15-.19.95c-.23.39-.41,1.24-.44,1.71-.3.38-.2,1.14-.57,1.57-.1.04-.19.1-.28.15" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m29.04,11.6c-.78.26-1.18-.13-1.77-.41-.09-.2-.02-.37-.06-.51q.17-.12.26-.24c.3-.17.42-.2.76-.36.4-.27,1.22-1.49,1.73-1.31.42.91-.22,2.24-.92,2.83" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m22.6,12.44c-.39-.14-.91-1.3-1.08-1.66-.04-.74.61-1.03,1.33-.82.67.41,1.06.53.87,1.39-.34.65-.56.78-1.11,1.1" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m28.03,9.65c-.22-.33-.03-1.28-.24-1.41-.18.1-.34.24-.53.33-.55-.04-1.27-.41-1.26-.91.19-.52.1-.37.61-.61.42-.42.83-.83,1.26-1.26.79-.49,1.37-.18,1.75.63.06.61-.13,1.17-.32,1.74-.36.43-.66.86-.97,1.29-.12.07-.22.13-.32.2" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m22.39,9.07c-.24-.09-.2-.2-.17-.4-.16-.34-.49-.55-.64-.88-.13-.67-.34-.85.06-1.35.47.02,2.15.18,2.12,1.1-.19.63-.84,1.24-1.37,1.53" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
</g>
|
||||
<path d="m13.81,32.08c-.72.5-2.47.17-2.24-.87-.1-.1-.15-.29-.12-.41-.02-.01-.04-.02-.05-.03-.18-1.09-.77-2.14-1.1-3.16-.17-.33-.37-.58-.24-.93.24-.06.51.2.71.4.11-.03.23-.29.27-.46-.08-.72-.02-1.55-.12-2.29-.19-.16-.37-.33-.55-.49-.15.37-.62,1.58-1.03.93.11-.5.18-1.32-.1-1.83-.36-.39-.87-.66-1.03-1.09.07-.6.99-.74,1.52-.51.43.04.43-.77.92.57.01.22.22.35.46.48.04-.05.08-.09.11-.14,0-.58-.02-1.2.03-1.81-.53-.54-.98-.99-1.3-1.64,0-.62.71-.99,1.33-1.18.2-.34.2-.62.19-1.06q.04-.14.19-.35c.21.01.39.09.63.23.49.64-.54,2.58.43,2.74.2-.33-.08-.67-.22-.95.06-.48.8-1.08,1.33-1.26.78-.07.73.36.73,1.03.04.1.07.19.11.27q.99.72,2.35,1.64c.26.41.37.64.47,1.13.01,0,.03.02.04.03-.01.02-.02.04-.03.06.19.38.19,1.01-.27,1.07-1.12-.76-2.23-1.62-3.33-2.32-.01.03-.02.05-.02.07.49.46,1.14,1.7,1.15,2.4-.27.45-.76.63-1.21.51-.08-.12-.05-.22-.07-.36-.33-.58-1.29-1.14-1.78-1.47-.19.38.19,1.51.31,1.98.02.27.04.54.06.81.33.41.68.79,1.04,1.2.13.23.27.47.42.7-.01.02-.02.03-.03.05.16.35.52,1.37-.15,1.37-.06-.04-.12-.07-.18-.12-.21-.53-.61-1.1-1.05-1.42-.16.52.04,1.08-.23,1.52-.22.21-.47.41-.66.52-.02-.01-.04-.02-.05-.03-.14.06-.3.1-.32.18.19.24.38.49.58.73.62,1.08,1.31,2.02,2.12,3.01.05.27.04.35-.04.54" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m9.07,27.59c-.28,0-.43-.33-.64-.5-.78-.22-1.36-.38-1.62-1.15.03-.07.07-.14.11-.2.4-.15,1.16-.24,1.66-.27.97.21.64,1.42.48,2.12" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m7.04,25.3c-.17.12-.2.09-.28.09-.1-.18-.14-.32-.32-.39-.86-.03-1.75-.67-1.59-1.54.16-.18.32-.07.65.03.72-.15,1.8-.6,1.84.57-.07.42-.21.85-.31,1.25" style="fill: #003f89; fill-rule: evenodd;"/>
|
||||
<path d="m51.32,26.41h-8.49c-2.48,0-3.75,2.42-4.69,4.62l-1.43-3.22,2.4-.88c-1.41-1.33-5.79-2.06-6.37-.05l-1.03,4.16c-.82-1.88-1.97-4.62-4.56-4.62h-8.62c1.12,1.98,2.19,2.7,6.16,2.53l.52,1.36-4.35.02c1.28,2.37,2.02,2.47,5.52,2.37l.74,1.63-3.42.12c.73,1.67,1.51,2.39,4.44,2.26l.57,1.45h-2.72c1.02,1.7,1.52,2.47,3.68,2.28l.58,1.58h-1.88c.81,1.82,1.76,1.89,2.92,2.08,1.04.16,1.19,2.11-.02,2.74l3.66,5.93,3.66-5.94c-1.22-.63-1.07-2.58-.02-2.74,1.16-.18,2.11-.25,2.92-2.08h-1.88l.58-1.58c2.15.19,2.66-.58,3.68-2.26h-2.72s.57-1.46.57-1.46c2.93.13,3.71-.58,4.44-2.26l-3.42-.12.74-1.63c3.5.1,4.24,0,5.52-2.37l-4.35-.02.52-1.37c3.96.17,5.03-.54,6.16-2.52" style="fill: #003f89;"/>
|
||||
<path d="m64.25,22.34l.03-.07c.12-.31.11-.43.08-.49-.04-.07-.17-.11-.38-.16-.06-.02-.12-.02-.2-.03l-.12-.02-.04-.08s-.08-.08-.14-.12l-.16-.06-.04-.02.21-.16c.15-.12.32-.17.51-.23l.02-.05.08.03c.3-.26.5-.64.53-1.04-.09-.12-.25-.18-.48-.18-.3,0-.66.12-.98.21-.2.07-.44.14-.66.19l-.08-.04c-.54-.26-.57-.27-1.7-.87-.08.06-.15.13-.18.23-.07.16-.06.35.03.52l.11.08h0s0,.01,0,.01l-.27.14c-.06.04-.08.04-.07.04h0l-.08.07s.02.08.07.15l.02.12c0,.11-.02.15-.11.25l-.03.13h0v.02l-.16-.13c-.22-.17-.24-.19-.4-.34-.04,0-.09-.01-.14-.01-.12,0-.22.04-.27.11-.05.07-.04.15,0,.27l-.02.06c-.04.16-.17.44-.68.45h-.26s-.1,0-.18.04c0,.34.15.37.51.43.14.02.28.04.48.09.03-.01.07-.02.1-.02.08,0,.14.03.21.06l.27.11.1.03.05.02-.33.16c-.12.07-.21.11-.33.24-.02.09-.07.18-.15.28v.07s-.15-.03-.15-.03c-.24-.06-.49-.12-.73-.18l-.38-.1c-.67-.18-1.49-.39-2.27-.53-.19-.07-.36-.1-.54-.13l-.37-.04-.02.1c.09.07.21.16.4.28l.02.06c.11.26.28.57.69.8.27.05.55.09.88.12.97.11,1.98.23,2.76.82l.21.1h.05s0,0,0,0h0l-.29.15c-.07.04-.14.08-.23.16l-.09-.02q-.94-.21-1.27-.32c-.34-.22-.5-.29-.68-.29-.14,0-.3.06-.56.22-.02,0-.03.01-.04.02h-.01s-.02.02-.02.03l-.1-.04c-.1-.04-.11-.04-.39-.08-.26-.09-.53-.18-.81-.27-.81-.26-1.65-.54-2.34-1-.2-.17-.34-.33-.45-.46-.04-.05-.06-.07-.08-.07h0l-.07-.08c-.05.01-.14.09-.28.24-.15.46.27,1.56.64,1.88.26.12.54.17.84.22.49.09,1,.18,1.49.59l.13.03h.01s-.12.17-.12.17c-.16.21-.35.38-.56.58l-.09.08c-.06.05-.12.1-.17.16h-.09c-.07.02-.13.03-.21.03-.36,0-.67-.17-.94-.33-.09-.05-.18-.09-.31-.13l-.05.09c.37.65.89,1.24,1.58,1.81l.06.1c.08.05.17.07.25.07h.01c.49-.01,1.02-.68,1.42-1.18.08-.1.16-.21.25-.3l.1-.07c.37-.27.4-.29.38-.29l.09.02c.31.09.51.21.81.37.29-.13.59-.42.56-.74l-.12-.11c-.18-.16-.35-.32-.53-.48l-.09-.02.06-.15c.07-.16.16-.25.29-.38l.02-.07.12.03c.53.12,1,.27,1.58.44l.5.17.12.09c.29.22.5.38.83.38.05,0,.1,0,.18-.04.31-.32.49-.53.61-.78h0s0-.01,0-.02c-.1-.14-.14-.18-.16-.18l.09-.11s.06-.06.15-.11c.85-.27,1.78-.61,2.46-.85.41-.25.45-.28.31-.66-.03-.06-.06-.14-.11-.24m-3.32.51l.14-.12c.19-.18.28-.26.29-.35,0-.03-.05-.08-.13-.14h-.04s-.05,0-.09,0c-.15,0-.25-.07-.3-.14l-.06-.05v-.07s.06-.18.06-.18h-.03s.19-.07.19-.07q.63-.21.73-.27l.05-.08.12.1c.13.12.57.51.64,1.02l-.06.07c-.33.4-.79.46-1.22.48l-.12.03-.06-.18-.08-.05h0Z" style="fill: #003f89;"/>
|
||||
<path d="m57.3,21.35c-.19,0-.37-.06-.53-.17-.1-.41.2-.84.42-1.16.07-.11.13-.19.18-.26l.04-.1.07-.14c.09-.17.18-.34.26-.53.03-.1.06-.2.08-.29.13-.53.23-.86.5-.95.21.03.31.06.36.14.05.08.03.18,0,.38l-.03.08c.03.06.04.16.05.25.06.31.07.64.04.93v.12c-.03.12-.06.21-.1.32-.12.37-.26.8-.54,1.05l-.11.11-.08.04c-.19.12-.39.19-.59.19h-.02Z" style="fill: #003f89;"/>
|
||||
<path d="m57.3,21.34h.02c.19,0,.39-.07.58-.19l.07-.04.11-.1c.27-.25.41-.67.53-1.05.03-.1.07-.2.08-.31l.02-.12c.03-.33.01-.64-.04-.93-.01-.09-.02-.18-.04-.26h-.01l.03-.07c.04-.19.06-.3.01-.37-.05-.07-.14-.1-.34-.13-.26.09-.36.41-.48.91-.03.1-.06.2-.09.32-.08.19-.17.36-.26.53l-.08.14-.04.09c-.04.08-.1.16-.18.26-.22.32-.52.75-.42,1.14.16.11.33.17.52.17" style="fill: #003f89;"/>
|
||||
<path d="m55.43,20.87c-.09,0-.21-.05-.43-.19-.29-.64.74-1.38.86-1.46.17.04.26.13.32.29.12.33.03.79-.19,1.05-.31.22-.44.31-.56.31h0Z" style="fill: #003f89;"/>
|
||||
<path d="m55.43,20.85h0c.11,0,.24-.09.54-.3.22-.26.3-.72.19-1.04-.05-.15-.14-.24-.29-.28-.12.08-1.13.81-.86,1.43.21.13.33.19.42.19" style="fill: #003f89;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path d="m190.2,14.25c.78-1.6,1.42-3.26,1.9-4.98l1.48.42c-.4,1.41-.89,2.79-1.46,4.14v13.32h-1.48v-10.4c-.54.88-1.11,1.73-1.72,2.54l-.97-1.32c.86-1.16,1.61-2.4,2.25-3.72Zm9.88-5.16c.45.81.88,1.63,1.32,2.46h5.32v1.4h-13.16v-1.4h6.11c-.36-.67-.74-1.33-1.11-2l1.52-.46Zm5.02,5.56v1.28h-10.42v-1.28h10.42Zm0,2.94v1.3h-10.42v-1.3h10.42Zm-.02,2.96v6.56h-1.52v-1.12h-7.33v1.12h-1.52v-6.56h10.36Zm-8.85,4.1h7.33v-2.76h-7.33v2.76Z" style="fill: #004088;"/>
|
||||
<path d="m210.48,21.23l1.38.46c-.61,1.69-1.37,3.31-2.29,4.86l-1.3-.7c.88-1.47,1.61-3.01,2.21-4.62Zm5.1-10.2c.24-.64.47-1.29.67-1.96l1.74.32c-.19.56-.38,1.11-.59,1.64h6.8v9.38h-6.62c.76.93,1.5,1.87,2.25,2.82l-1.21.86c-.72-1.01-1.46-2.01-2.25-2.98l.99-.7h-6.64v-9.38h4.86Zm-3.4,2.72h10.57v-1.48h-10.57v1.48Zm0,2.68h10.57v-1.44h-10.57v1.44Zm10.57,2.74v-1.5h-10.57v1.5h10.57Zm-8.02,2.14v2.76c-.01.23,0,.45.06.66.04.12.1.23.18.32.11.11.24.18.41.22.23.05.46.08.69.08h3.12c.24,0,.49-.02.75-.06.12-.04.24-.08.36-.12.13-.09.23-.21.28-.36.07-.19.11-.39.12-.6l.08-1.74,1.48.38c-.05.65-.12,1.3-.18,1.94-.04.33-.13.65-.26.96-.09.19-.22.35-.36.48-.23.17-.48.29-.75.36-.39.07-.78.1-1.15.1h-4.05c-.39,0-.77-.05-1.13-.14-.28-.07-.53-.21-.73-.42-.13-.17-.24-.37-.3-.58-.09-.37-.13-.77-.12-1.18v-3.06h1.52Zm9.09-.24c1,1.45,1.97,2.93,2.91,4.42l-1.3.74c-.89-1.51-1.83-2.99-2.81-4.44l1.19-.72Z" style="fill: #004088;"/>
|
||||
<path d="m230.34,25.31c.2,0,.4-.02.59-.06.15-.03.27-.08.36-.16.07-.08.12-.17.16-.26.04-.19.06-.38.06-.58v-4.42c-.92.31-1.83.62-2.73.94l-.49-1.62c1.08-.29,2.15-.63,3.22-1v-3.78h-2.53v-1.58h2.53v-3.54h1.54v3.54h2.12v1.58h-2.12v3.24c.63-.21,1.27-.44,1.92-.68l.24.82.22.76c-.81.27-1.61.53-2.39.8v5.56c0,.35-.04.69-.12,1.02-.07.19-.16.35-.28.5-.2.17-.43.29-.69.34-.38.08-.75.12-1.11.12h-1.6l-.3-1.54h1.4Zm7.37-7.62h-2.06v-1.44h4.39v-2.84h-4.41v-1.46h4.41v-2.82h1.52v2.82h5.18v1.46h-5.18v2.84h3.85v1.48c-.43,1.13-.97,2.21-1.62,3.22-.54.83-1.17,1.57-1.9,2.22.76.61,1.57,1.13,2.45,1.56.9.44,1.84.82,2.81,1.14l-.59,1.6c-1.2-.49-2.36-1.06-3.48-1.7-.84-.48-1.63-1.03-2.37-1.66-.8.55-1.62,1.04-2.47,1.48-1.21.61-2.46,1.19-3.72,1.72l-.81-1.52c1.17-.43,2.33-.91,3.46-1.46.81-.39,1.59-.83,2.35-1.34-1.27-1.39-2.27-2.95-3-4.68l1.19-.62Zm1.52,2.54c.43.67.92,1.29,1.48,1.86,1.4-1.19,2.42-2.65,3.04-4.4h-5.83c.36.88.8,1.73,1.32,2.54Z" style="fill: #004088;"/>
|
||||
<path d="m253.35,19.91c1.46-1.52,2.69-3.21,3.68-5.08h-7.47v-1.56h7.79v-4.06h1.58v4.06h7.91v1.56h-7.59c.94,1.85,2.15,3.53,3.62,5.02,1.43,1.43,3,2.69,4.72,3.78l-.93,1.56c-1.7-1.16-3.27-2.48-4.72-3.96-1.16-1.21-2.17-2.54-3.02-3.98v9.94h-1.58v-9.94c-.88,1.44-1.88,2.77-3.02,4-1.4,1.49-2.94,2.85-4.59,4.06l-1.03-1.5c1.67-1.13,3.22-2.43,4.64-3.9Zm8.28-10.56c.99.85,1.97,1.71,2.96,2.56l-1.01,1.06c-.96-.89-1.93-1.77-2.91-2.62l.97-1Z" style="fill: #004088;"/>
|
||||
<path d="m279.2,9.17v3.86h7.06v9.18h-1.6v-1.24h-5.47v6.22h-1.6v-6.22h-5.4v1.28h-1.6v-9.22h7v-3.86h1.6Zm-7,10.3h5.4v-4.92h-5.4v4.92Zm7-4.92v4.92h5.47v-4.92h-5.47Z" style="fill: #004088;"/>
|
||||
<path d="m291.67,14.95l1.62.34c-.62,2.68-1.43,5.29-2.43,7.82l-1.54-.5c.96-2.49,1.74-5.05,2.35-7.66Zm4.45-1.74v10.14c-.01.29.01.57.08.84.04.15.11.28.22.4.15.15.33.24.55.28.3.07.6.09.91.08h2.37c.34.01.67,0,1.01-.06.18-.04.34-.11.49-.2.16-.12.28-.28.36-.48.08-.27.13-.55.14-.84.04-.97.07-1.96.08-2.96l1.66.36-.16,3.18c-.03.45-.11.89-.26,1.3-.11.24-.26.45-.45.64-.28.24-.61.4-.99.48-.51.11-1.03.16-1.56.16h-3.06c-.51,0-1.01-.05-1.5-.16-.36-.09-.68-.27-.95-.54-.19-.21-.32-.45-.4-.7-.14-.48-.2-.97-.18-1.48v-10.44h1.64Zm1.38-3.98c1.54,1.91,3.04,3.84,4.49,5.8l-1.38.98c-1.4-1.99-2.85-3.94-4.35-5.86l1.23-.92Zm7.21,5.38c1.17,2.47,2.33,4.93,3.46,7.4l-1.54.66c-1.09-2.49-2.22-4.97-3.38-7.44l1.46-.62Z" style="fill: #004088;"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="m84.37,49.77h-1.56v-9.1h1.56v9.1Z" style="fill: #004188;"/>
|
||||
<path d="m94.33,49.77h-1.65l-4.35-6.69c-.11-.17-.2-.34-.27-.53h-.04c.03.19.05.61.05,1.25v5.97h-1.46v-9.1h1.76l4.2,6.53c.18.27.29.46.34.56h.03c-.04-.24-.06-.65-.06-1.23v-5.87h1.45v9.1Z" style="fill: #004188;"/>
|
||||
<path d="m101.49,41.95h-3.4v2.74h3.14v1.28h-3.14v3.81h-1.51v-9.1h4.91v1.28Z" style="fill: #004188;"/>
|
||||
<path d="m106.86,49.92c-1.31,0-2.36-.43-3.15-1.28-.79-.85-1.18-1.96-1.18-3.32,0-1.46.4-2.63,1.21-3.5s1.9-1.31,3.28-1.31c1.28,0,2.31.42,3.09,1.27.78.85,1.17,1.95,1.17,3.32,0,1.49-.4,2.66-1.2,3.52s-1.87,1.29-3.21,1.29Zm.07-8.08c-.83,0-1.51.31-2.03.93-.52.62-.78,1.44-.78,2.46s.25,1.83.76,2.44,1.17.93,1.99.93c.87,0,1.56-.29,2.06-.88s.76-1.41.76-2.47-.24-1.93-.73-2.52c-.49-.59-1.16-.89-2.02-.89Z" style="fill: #004188;"/>
|
||||
<path d="m119.97,49.77h-1.76l-1.45-2.44c-.13-.22-.26-.42-.38-.57-.12-.16-.25-.29-.38-.39-.13-.1-.27-.18-.42-.22s-.32-.07-.51-.07h-.61v3.69h-1.5v-9.1h3c.43,0,.82.05,1.18.15s.67.25.94.46c.27.21.48.46.63.77.15.31.23.67.23,1.08,0,.32-.05.62-.14.89-.09.27-.23.51-.41.72-.18.21-.39.39-.63.54-.25.15-.53.26-.83.34v.03c.17.09.31.2.43.31.12.11.24.23.35.35s.22.25.33.4c.11.15.23.33.36.52l1.62,2.56Zm-5.53-7.88v2.96h1.26c.23,0,.45-.04.64-.11.2-.07.37-.18.51-.31s.26-.3.34-.5.12-.41.12-.65c0-.44-.14-.78-.41-1.02s-.67-.37-1.19-.37h-1.27Z" style="fill: #004188;"/>
|
||||
<path d="m130.81,49.77h-1.5v-5.89c0-.48.03-1.07.09-1.77h-.03c-.09.4-.18.68-.25.86l-2.72,6.8h-1.04l-2.72-6.75c-.08-.2-.16-.5-.24-.91h-.03c.03.36.05.96.05,1.78v5.88h-1.4v-9.1h2.13l2.39,6.06c.18.47.3.81.36,1.04h.03c.16-.48.28-.83.38-1.07l2.44-6.04h2.05v9.1Z" style="fill: #004188;"/>
|
||||
<path d="m140.52,49.77h-1.66l-.82-2.32h-3.58l-.79,2.32h-1.65l3.41-9.1h1.7l3.38,9.1Zm-2.88-3.55l-1.26-3.63c-.04-.12-.08-.31-.12-.57h-.03c-.04.24-.08.43-.13.57l-1.25,3.63h2.79Z" style="fill: #004188;"/>
|
||||
<path d="m146.69,41.95h-2.62v7.82h-1.51v-7.82h-2.61v-1.28h6.73v1.28Z" style="fill: #004188;"/>
|
||||
<path d="m149.58,49.77h-1.56v-9.1h1.56v9.1Z" style="fill: #004188;"/>
|
||||
<path d="m155.57,49.92c-1.31,0-2.36-.43-3.15-1.28-.79-.85-1.18-1.96-1.18-3.32,0-1.46.4-2.63,1.21-3.5s1.9-1.31,3.28-1.31c1.28,0,2.31.42,3.09,1.27.78.85,1.17,1.95,1.17,3.32,0,1.49-.4,2.66-1.2,3.52s-1.87,1.29-3.21,1.29Zm.07-8.08c-.83,0-1.51.31-2.03.93-.52.62-.78,1.44-.78,2.46s.25,1.83.76,2.44,1.17.93,1.99.93c.87,0,1.56-.29,2.06-.88s.76-1.41.76-2.47-.24-1.93-.73-2.52c-.49-.59-1.16-.89-2.02-.89Z" style="fill: #004188;"/>
|
||||
<path d="m169.36,49.77h-1.65l-4.35-6.69c-.11-.17-.2-.34-.27-.53h-.04c.03.19.05.61.05,1.25v5.97h-1.46v-9.1h1.76l4.2,6.53c.18.27.29.46.34.56h.03c-.04-.24-.06-.65-.06-1.23v-5.87h1.45v9.1Z" style="fill: #004188;"/>
|
||||
<path d="m181.03,41.95h-2.62v7.82h-1.51v-7.82h-2.61v-1.28h6.73v1.28Z" style="fill: #004188;"/>
|
||||
<path d="m187.47,49.77h-5.11v-9.1h4.91v1.28h-3.4v2.58h3.13v1.28h-3.13v2.69h3.6v1.28Z" style="fill: #004188;"/>
|
||||
<path d="m195.44,49.38c-.69.36-1.54.53-2.56.53-1.32,0-2.38-.42-3.17-1.25s-1.19-1.93-1.19-3.28c0-1.46.45-2.63,1.34-3.53.89-.9,2.03-1.35,3.39-1.35.88,0,1.61.12,2.19.37v1.5c-.61-.36-1.29-.55-2.03-.55-.99,0-1.78.32-2.4.95-.61.63-.92,1.47-.92,2.53s.29,1.8.86,2.4c.57.59,1.32.89,2.25.89.86,0,1.6-.2,2.23-.61v1.4Z" style="fill: #004188;"/>
|
||||
<path d="m204.48,49.77h-1.52v-3.95h-4.28v3.95h-1.51v-9.1h1.51v3.83h4.28v-3.83h1.52v9.1Z" style="fill: #004188;"/>
|
||||
<path d="m214.44,49.77h-1.65l-4.35-6.69c-.11-.17-.2-.34-.27-.53h-.04c.03.19.05.61.05,1.25v5.97h-1.46v-9.1h1.76l4.2,6.53c.18.27.29.46.34.56h.03c-.04-.24-.06-.65-.06-1.23v-5.87h1.45v9.1Z" style="fill: #004188;"/>
|
||||
<path d="m220.45,49.92c-1.31,0-2.36-.43-3.15-1.28-.79-.85-1.18-1.96-1.18-3.32,0-1.46.4-2.63,1.21-3.5s1.9-1.31,3.28-1.31c1.28,0,2.31.42,3.09,1.27.78.85,1.17,1.95,1.17,3.32,0,1.49-.4,2.66-1.2,3.52s-1.87,1.29-3.21,1.29Zm.07-8.08c-.83,0-1.51.31-2.03.93-.52.62-.78,1.44-.78,2.46s.25,1.83.76,2.44,1.17.93,1.99.93c.87,0,1.56-.29,2.06-.88s.76-1.41.76-2.47-.24-1.93-.73-2.52c-.49-.59-1.16-.89-2.02-.89Z" style="fill: #004188;"/>
|
||||
<path d="m231.56,49.77h-5.04v-9.1h1.51v7.83h3.53v1.28Z" style="fill: #004188;"/>
|
||||
<path d="m236.24,49.92c-1.31,0-2.36-.43-3.15-1.28-.79-.85-1.18-1.96-1.18-3.32,0-1.46.4-2.63,1.21-3.5s1.9-1.31,3.28-1.31c1.28,0,2.31.42,3.09,1.27.78.85,1.17,1.95,1.17,3.32,0,1.49-.4,2.66-1.2,3.52s-1.87,1.29-3.21,1.29Zm.07-8.08c-.83,0-1.51.31-2.03.93-.52.62-.78,1.44-.78,2.46s.25,1.83.76,2.44,1.17.93,1.99.93c.87,0,1.56-.29,2.06-.88s.76-1.41.76-2.47-.24-1.93-.73-2.52c-.49-.59-1.16-.89-2.02-.89Z" style="fill: #004188;"/>
|
||||
<path d="m249.42,49.14c-.95.52-2,.77-3.17.77-1.35,0-2.44-.42-3.27-1.26s-1.25-1.95-1.25-3.33.46-2.57,1.37-3.47c.91-.9,2.07-1.36,3.48-1.36,1.01,0,1.86.15,2.55.44v1.56c-.7-.47-1.53-.7-2.49-.7s-1.76.32-2.38.96c-.62.64-.93,1.47-.93,2.48s.27,1.87.8,2.47c.53.6,1.26.9,2.17.9.63,0,1.17-.12,1.62-.36v-2.16h-1.92v-1.27h3.42v4.32Z" style="fill: #004188;"/>
|
||||
<path d="m257.72,40.66l-2.98,5.8v3.31h-1.51v-3.28l-2.91-5.83h1.72l1.79,3.9s.08.22.19.53h.02c.04-.14.11-.31.21-.53l1.87-3.9h1.6Z" style="fill: #004188;"/>
|
||||
<path d="m268.8,49.38c-.69.36-1.54.53-2.56.53-1.32,0-2.38-.42-3.17-1.25s-1.19-1.93-1.19-3.28c0-1.46.45-2.63,1.34-3.53.89-.9,2.03-1.35,3.39-1.35.88,0,1.61.12,2.19.37v1.5c-.61-.36-1.29-.55-2.03-.55-.99,0-1.78.32-2.4.95-.61.63-.92,1.47-.92,2.53s.29,1.8.86,2.4c.57.59,1.32.89,2.25.89.86,0,1.6-.2,2.23-.61v1.4Z" style="fill: #004188;"/>
|
||||
<path d="m275.64,49.77h-5.11v-9.1h4.91v1.28h-3.4v2.58h3.13v1.28h-3.13v2.69h3.6v1.28Z" style="fill: #004188;"/>
|
||||
<path d="m284.98,49.77h-1.65l-4.35-6.69c-.11-.17-.2-.34-.27-.53h-.04c.03.19.05.61.05,1.25v5.97h-1.46v-9.1h1.76l4.2,6.53c.18.27.29.46.34.56h.03c-.04-.24-.06-.65-.06-1.23v-5.87h1.45v9.1Z" style="fill: #004188;"/>
|
||||
<path d="m293.07,41.95h-2.62v7.82h-1.51v-7.82h-2.61v-1.28h6.73v1.28Z" style="fill: #004188;"/>
|
||||
<path d="m299.51,49.77h-5.11v-9.1h4.91v1.28h-3.4v2.58h3.13v1.28h-3.13v2.69h3.6v1.28Z" style="fill: #004188;"/>
|
||||
<path d="m308.16,49.77h-1.76l-1.45-2.44c-.13-.22-.26-.42-.38-.57-.12-.16-.25-.29-.38-.39-.13-.1-.27-.18-.42-.22s-.32-.07-.51-.07h-.61v3.69h-1.5v-9.1h3c.43,0,.82.05,1.18.15s.67.25.94.46c.27.21.48.46.63.77.15.31.23.67.23,1.08,0,.32-.05.62-.14.89-.09.27-.23.51-.41.72-.18.21-.39.39-.63.54-.25.15-.53.26-.83.34v.03c.17.09.31.2.43.31.12.11.24.23.35.35s.22.25.33.4c.11.15.23.33.36.52l1.62,2.56Zm-5.53-7.88v2.96h1.26c.23,0,.45-.04.64-.11.2-.07.37-.18.51-.31s.26-.3.34-.5.12-.41.12-.65c0-.44-.14-.78-.41-1.02s-.67-.37-1.19-.37h-1.27Z" style="fill: #004188;"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 33 KiB |
52
src/components/code-block.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
import Highlight, {
|
||||
defaultProps,
|
||||
Language,
|
||||
PrismTheme,
|
||||
} from 'prism-react-renderer';
|
||||
import React from 'react';
|
||||
import prismDarkTheme from 'prism-react-renderer/themes/vsDark';
|
||||
import prismLightTheme from 'prism-react-renderer/themes/github';
|
||||
import { useTheme } from '@mui/material';
|
||||
|
||||
export interface CodeBlockProps {
|
||||
children: string;
|
||||
language: Language;
|
||||
codeStyle?: React.CSSProperties;
|
||||
}
|
||||
|
||||
export default ({ children, codeStyle, language }: CodeBlockProps) => {
|
||||
const theme = useTheme();
|
||||
const prismTheme =
|
||||
theme.palette.mode === 'light' ? prismLightTheme : prismDarkTheme;
|
||||
|
||||
return (
|
||||
<Highlight
|
||||
{...defaultProps}
|
||||
code={children.trim()}
|
||||
theme={prismTheme as PrismTheme}
|
||||
language={language}
|
||||
>
|
||||
{({ className, style, tokens, getLineProps, getTokenProps }) => (
|
||||
<code
|
||||
className={className}
|
||||
style={{
|
||||
display: 'block',
|
||||
padding: 20,
|
||||
overflowX: 'auto',
|
||||
borderRadius: 5,
|
||||
...style,
|
||||
...codeStyle,
|
||||
}}
|
||||
>
|
||||
{tokens.map((line, i) => (
|
||||
<div key={i} {...getLineProps({ line, key: i })}>
|
||||
{line.map((token, key) => (
|
||||
<span key={key} {...getTokenProps({ token, key })} />
|
||||
))}
|
||||
</div>
|
||||
))}
|
||||
</code>
|
||||
)}
|
||||
</Highlight>
|
||||
);
|
||||
};
|
||||
72
src/components/config-generator.tsx
Normal file
@@ -0,0 +1,72 @@
|
||||
import React, { useState } from 'react';
|
||||
import {
|
||||
FormControl,
|
||||
InputLabel,
|
||||
Select,
|
||||
MenuItem,
|
||||
Box,
|
||||
Grid,
|
||||
Typography,
|
||||
} from '@mui/material';
|
||||
import { Language } from 'prism-react-renderer';
|
||||
import { Trans } from 'gatsby-plugin-react-i18next';
|
||||
import CodeBlock from './code-block';
|
||||
|
||||
export default ({
|
||||
promptString,
|
||||
versionList,
|
||||
friendlyNameList,
|
||||
defaultVersion,
|
||||
language,
|
||||
configGen,
|
||||
}: {
|
||||
promptString: string;
|
||||
versionList: string[];
|
||||
friendlyNameList: string[] | undefined;
|
||||
defaultVersion: string | undefined;
|
||||
language: Language;
|
||||
configGen: (version: string) => string;
|
||||
}) => {
|
||||
const [version, setVersion] = useState(defaultVersion ?? versionList[0]);
|
||||
return (
|
||||
<Box>
|
||||
<Grid
|
||||
container
|
||||
direction="row"
|
||||
justifyContent="flex-start"
|
||||
alignItems="flex-end"
|
||||
>
|
||||
<Grid item sx={{ mb: 1 }}>
|
||||
<Typography component="p">{promptString}</Typography>
|
||||
</Grid>
|
||||
<Grid item>
|
||||
<FormControl variant="standard" sx={{ m: 1, minWidth: 120 }}>
|
||||
<InputLabel id="demo-simple-select-helper-label">
|
||||
<Trans>版本</Trans>
|
||||
</InputLabel>
|
||||
<Select
|
||||
labelId="demo-simple-select-helper-label"
|
||||
id="demo-simple-select-helper"
|
||||
label="Age"
|
||||
onChange={event => {
|
||||
setVersion(event.target.value as string);
|
||||
}}
|
||||
defaultValue={version}
|
||||
>
|
||||
{versionList.map((item, i) => {
|
||||
const desc =
|
||||
friendlyNameList === undefined ? item : friendlyNameList[i];
|
||||
return (
|
||||
<MenuItem key={i} value={item}>
|
||||
{desc}
|
||||
</MenuItem>
|
||||
);
|
||||
})}
|
||||
</Select>
|
||||
</FormControl>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<CodeBlock language={language}>{configGen(version)}</CodeBlock>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
108
src/components/config-theme.ts
Normal file
@@ -0,0 +1,108 @@
|
||||
import { PaletteMode, ThemeOptions } from '@mui/material';
|
||||
import '@fontsource/poppins';
|
||||
|
||||
export default function configTheme(mode: PaletteMode): ThemeOptions {
|
||||
return {
|
||||
palette:
|
||||
mode === 'light'
|
||||
? {
|
||||
primary: {
|
||||
main: '#21a675',
|
||||
},
|
||||
neutral: {
|
||||
main: '#f2f7f9',
|
||||
},
|
||||
success: {
|
||||
main: '#27a881',
|
||||
},
|
||||
warning: {
|
||||
main: '#37adc7',
|
||||
},
|
||||
info: {
|
||||
main: '#6780da',
|
||||
light: '#63a0cf;',
|
||||
},
|
||||
error: {
|
||||
main: '#e44918',
|
||||
},
|
||||
background: {
|
||||
default: '#F0F3F8',
|
||||
},
|
||||
}
|
||||
: {
|
||||
primary: {
|
||||
main: '#39DE96',
|
||||
},
|
||||
neutral: {
|
||||
main: '#070707',
|
||||
},
|
||||
success: {
|
||||
main: '#27a881',
|
||||
},
|
||||
warning: {
|
||||
main: '#37adc7',
|
||||
},
|
||||
info: {
|
||||
main: '#6780da',
|
||||
light: '#63a0cf;',
|
||||
},
|
||||
error: {
|
||||
main: '#e44918',
|
||||
},
|
||||
background: {
|
||||
default: '#070707',
|
||||
paper: '#161718',
|
||||
},
|
||||
},
|
||||
typography: {
|
||||
h1: {
|
||||
fontFamily: '"Poppins", sans-serif',
|
||||
fontWeight: 700,
|
||||
},
|
||||
h2: {
|
||||
fontFamily: '"Metropolis", sans-serif',
|
||||
fontWeight: 700,
|
||||
},
|
||||
h3: {
|
||||
fontFamily: '"Metropolis", sans-serif',
|
||||
fontWeight: 700,
|
||||
},
|
||||
h5: {
|
||||
fontFamily: '"Metropolis", sans-serif',
|
||||
fontWeight: 700,
|
||||
},
|
||||
h6: {
|
||||
fontFamily: '"Metropolis", sans-serif',
|
||||
fontWeight: 700,
|
||||
},
|
||||
subtitle1: {
|
||||
fontFamily: '"Metropolis", sans-serif',
|
||||
fontWeight: 700,
|
||||
},
|
||||
subtitle2: {
|
||||
fontFamily: '"Metropolis", sans-serif',
|
||||
fontWeight: 700,
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/* the code below decares customized color */
|
||||
|
||||
declare module '@mui/material/styles' {
|
||||
interface Palette {
|
||||
neutral: Palette['primary'];
|
||||
}
|
||||
|
||||
// allow configuration using `createTheme`
|
||||
interface PaletteOptions {
|
||||
neutral?: PaletteOptions['primary'];
|
||||
}
|
||||
}
|
||||
|
||||
// Update the Button"s color prop options
|
||||
declare module '@mui/material/Button' {
|
||||
interface ButtonPropsColorOverrides {
|
||||
neutral: true;
|
||||
}
|
||||
}
|
||||
49
src/components/file-list.tsx
Normal file
@@ -0,0 +1,49 @@
|
||||
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
|
||||
import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';
|
||||
import { Box, Button, Collapse } from '@mui/material/';
|
||||
import natsort from 'natsort';
|
||||
import * as React from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import File, { FileProps } from './file';
|
||||
|
||||
export interface FileListProps {
|
||||
files: FileProps[];
|
||||
}
|
||||
|
||||
export default ({ files }: FileListProps) => {
|
||||
const { t } = useTranslation();
|
||||
const [showAll, setShowAll] = React.useState<boolean>(false);
|
||||
|
||||
var sorter = natsort({desc: true});
|
||||
files.sort(function (a, b) {
|
||||
return sorter(a.name, b.name);
|
||||
});
|
||||
|
||||
return (
|
||||
<Box display="flex" flexDirection="column" alignContent="center">
|
||||
<Box display="flex" gap="8px" flexWrap="wrap">
|
||||
{files.map(({ name, url }, i) => (
|
||||
<Collapse
|
||||
unmountOnExit
|
||||
in={i < 4 || showAll}
|
||||
sx={{ width: { xs: '100%', md: 'calc(50% - 4px)' } }}
|
||||
>
|
||||
<File name={name} url={url} />
|
||||
</Collapse>
|
||||
))}
|
||||
</Box>
|
||||
{files.length > 4 && (
|
||||
<Button
|
||||
sx={{ mt: 1 }}
|
||||
variant="text"
|
||||
onClick={() => setShowAll(!showAll)}
|
||||
startIcon={
|
||||
showAll ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />
|
||||
}
|
||||
>
|
||||
{showAll ? t('折叠') : t('展开')}
|
||||
</Button>
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
46
src/components/file.tsx
Normal file
@@ -0,0 +1,46 @@
|
||||
import React from 'react';
|
||||
import { Card, Grid, Typography } from '@mui/material';
|
||||
import AlbumIcon from '@mui/icons-material/Album';
|
||||
import { Trans } from 'gatsby-plugin-react-i18next';
|
||||
import { CardActionArea } from 'gatsby-theme-material-ui';
|
||||
|
||||
export interface FileProps {
|
||||
name: string;
|
||||
url: string;
|
||||
}
|
||||
|
||||
export default ({ name, url }: FileProps) => {
|
||||
return (
|
||||
<Card className="zju-mirror-card" style={{ height: '100%' }}>
|
||||
<CardActionArea to={url} sx={{ p: 2 }}>
|
||||
<Grid
|
||||
container
|
||||
direction="row"
|
||||
justifyContent="flex-start"
|
||||
alignItems="stretch"
|
||||
spacing={1}
|
||||
>
|
||||
<Grid item height="0px">
|
||||
<AlbumIcon color="primary" />
|
||||
</Grid>
|
||||
<Grid item>
|
||||
<Typography
|
||||
variant="subtitle1"
|
||||
component="div"
|
||||
color="primary"
|
||||
lineHeight={1.5}
|
||||
fontWeight={400}
|
||||
>
|
||||
<Trans>ISO</Trans>
|
||||
</Typography>
|
||||
</Grid>
|
||||
<Grid item>
|
||||
<Typography variant="subtitle1" component="div" lineHeight={1.5}>
|
||||
{name}
|
||||
</Typography>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</CardActionArea>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
172
src/components/footer.tsx
Normal file
@@ -0,0 +1,172 @@
|
||||
import { Box, Grid, Link, Typography } from '@mui/material';
|
||||
import { Trans } from 'gatsby-plugin-react-i18next';
|
||||
import React from 'react';
|
||||
import JCIOT from '../../resource/icons/jciot.svg';
|
||||
import JCUT from '../../resource/icons/jcut.svg';
|
||||
import JcutDark from '../../resource/icons/jcut-dark.svg';
|
||||
import { useTheme } from '@mui/material';
|
||||
|
||||
export default () => {
|
||||
const theme = useTheme();
|
||||
const JCUTIcon = theme.palette.mode === 'light' ? JCUT : JcutDark;
|
||||
|
||||
return (
|
||||
<Box sx={{ px: { xs: 4, sm: 8 }, py: 6 }}>
|
||||
<Grid
|
||||
container
|
||||
direction="row"
|
||||
justifyContent="space-between"
|
||||
alignItems="flex-start"
|
||||
rowSpacing={2}
|
||||
>
|
||||
<Grid item>
|
||||
<Grid
|
||||
container
|
||||
direction="row"
|
||||
justifyContent="flex-start"
|
||||
alignItems="flex-start"
|
||||
columns={2}
|
||||
rowSpacing={2}
|
||||
columnSpacing={8}
|
||||
>
|
||||
<Grid item xs={2} md={1}>
|
||||
<Box maxWidth={520}>
|
||||
<Typography gutterBottom variant="body2" color="text.secondary">
|
||||
<Trans>
|
||||
荆楚理工学院开源镜像站是一个致力于助力开发者开发,方便荆楚校内外师生高效访问开源资源的非盈利计划。
|
||||
</Trans>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2" color="text.secondary">
|
||||
<Trans>
|
||||
本站由荆楚理工学院信息化办公室支持创办
|
||||
</Trans>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2" color="text.secondary">
|
||||
<Trans>
|
||||
由JCIOT团队开发运行维护,感谢团队成员YangFan,ZhaoYinghao为本站建设作出的贡献
|
||||
</Trans>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2" color="text.secondary">
|
||||
<Trans>
|
||||
本站基于浙江大学ZJUSCT开源的mirror-front与清华大学TUNA开源的tunasync项目,感谢ZJUSCT与TUNA为国内开源生态作出的伟大贡献
|
||||
除特殊注明外,本站源码在 Apache License 2.0 许可下发布,本站创作内容均在 CC BY-NC-SA 4.0 许可下发布,相关源码及创作内容可在 GitHub 获取。
|
||||
</Trans>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2" color="text.secondary">
|
||||
<Link
|
||||
href="https://github.com/ZJUSCT/mirror-issues"
|
||||
color="text.secondary"
|
||||
underline="hover"
|
||||
>
|
||||
<Trans>问题反馈与镜像请求(GitHub)</Trans>
|
||||
</Link>
|
||||
</Typography>
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
<Trans>根据相关法律法规,本站部分内容仅对校内用户提供服务。</Trans>
|
||||
</Typography>
|
||||
</Box>
|
||||
</Grid>
|
||||
<Grid item xs={2} md={1}>
|
||||
<Grid
|
||||
container
|
||||
direction="row"
|
||||
justifyContent="flex-start"
|
||||
alignItems="flex-end"
|
||||
columnSpacing={8}
|
||||
>
|
||||
<Grid item>
|
||||
<Typography
|
||||
gutterBottom
|
||||
variant="body1"
|
||||
color="text.secondary"
|
||||
fontWeight={700}
|
||||
>
|
||||
<Trans>关于我们-JCIOT团队</Trans>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2">
|
||||
<Link
|
||||
href="mailto:mirrors@zju.edu.cn"
|
||||
color="text.secondary"
|
||||
underline="hover"
|
||||
>
|
||||
<Trans>Email</Trans>
|
||||
</Link>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2">
|
||||
<Link
|
||||
href="https://github.com/zjusct"
|
||||
color="text.secondary"
|
||||
underline="hover"
|
||||
>
|
||||
<Trans>GitHub</Trans>
|
||||
</Link>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2">
|
||||
<Link
|
||||
href="https://www.zjusct.io"
|
||||
color="text.secondary"
|
||||
underline="hover"
|
||||
>
|
||||
<Trans>Blog</Trans>
|
||||
</Link>
|
||||
</Typography>
|
||||
</Grid>
|
||||
<Grid item>
|
||||
<Typography
|
||||
gutterBottom
|
||||
variant="body1"
|
||||
color="text.secondary"
|
||||
fontWeight={700}
|
||||
>
|
||||
<Trans>特别鸣谢</Trans>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2">
|
||||
<Link
|
||||
href="http://zuits.zju.edu.cn"
|
||||
color="text.secondary"
|
||||
underline="hover"
|
||||
>
|
||||
<Trans>荆楚理工学院信息化办公室</Trans>
|
||||
</Link>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2">
|
||||
<Link
|
||||
href="https://tuna.moe"
|
||||
color="text.secondary"
|
||||
underline="hover"
|
||||
>
|
||||
<Trans>清华大学 TUNA 协会</Trans>
|
||||
</Link>
|
||||
</Typography>
|
||||
<Typography gutterBottom variant="body2">
|
||||
<Link
|
||||
href="https://mirrorz.org/"
|
||||
color="text.secondary"
|
||||
underline="hover"
|
||||
>
|
||||
<Trans>中国教育网 MirrorZ 镜像站项目</Trans>
|
||||
</Link>
|
||||
</Typography>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<Grid item>
|
||||
<Grid container direction="row" columnSpacing={4} rowSpacing={2} alignItems="center">
|
||||
<Grid item>
|
||||
<Link href="https://zuits.zju.edu.cn/">
|
||||
<JCUT width="16rem"/>
|
||||
</Link>
|
||||
</Grid>
|
||||
<Grid item>
|
||||
<Link href="https://www.zjusct.io">
|
||||
<JCUTIcon width="12rem"/>
|
||||
</Link>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
52
src/components/frequently-used-mirror-card.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
import { Box, Card, CardContent, Grid, Typography } from '@mui/material';
|
||||
import { CardActionArea } from 'gatsby-theme-material-ui';
|
||||
import * as React from 'react';
|
||||
|
||||
export type mirrorBrief = {
|
||||
name: string;
|
||||
img: React.ReactNode;
|
||||
desc: string;
|
||||
};
|
||||
|
||||
export interface FrequentlyUsedMirrorCardProps {
|
||||
name: string;
|
||||
icon: React.ReactNode;
|
||||
desc: string;
|
||||
url: string;
|
||||
}
|
||||
|
||||
export default ({ name, icon, desc, url }: FrequentlyUsedMirrorCardProps) => {
|
||||
return (
|
||||
<Card className="zju-mirror-card" style={{ height: '100%' }}>
|
||||
<CardActionArea to={url} style={{ height: '100%' }}>
|
||||
<Grid
|
||||
container
|
||||
direction="column"
|
||||
justifyContent="flex-start"
|
||||
alignItems="center"
|
||||
>
|
||||
<Box sx={{ pt: 4 }}>{icon}</Box>
|
||||
<CardContent>
|
||||
<Grid
|
||||
container
|
||||
direction="column"
|
||||
justifyContent="flex-start"
|
||||
alignItems="center"
|
||||
>
|
||||
<Typography variant="h6" component="div" textAlign="center">
|
||||
{name}
|
||||
</Typography>
|
||||
<Typography
|
||||
variant="body2"
|
||||
color="text.secondary"
|
||||
textAlign="center"
|
||||
>
|
||||
{desc}
|
||||
</Typography>
|
||||
</Grid>
|
||||
</CardContent>
|
||||
</Grid>
|
||||
</CardActionArea>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
57
src/components/language-icon-button.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
import TranslateIcon from '@mui/icons-material/Translate';
|
||||
import IconButton from '@mui/material/IconButton';
|
||||
import Menu from '@mui/material/Menu';
|
||||
import MenuItem from '@mui/material/MenuItem';
|
||||
import ToolTip from '@mui/material/Tooltip';
|
||||
import { useI18next, useTranslation } from 'gatsby-plugin-react-i18next';
|
||||
import React from 'react';
|
||||
import { Link } from '../utils/i18n-link';
|
||||
import '@formatjs/intl-displaynames/polyfill';
|
||||
import '@formatjs/intl-displaynames/locale-data/en';
|
||||
import '@formatjs/intl-displaynames/locale-data/zh';
|
||||
|
||||
function languageName(lang: string) {
|
||||
const { language } = useI18next();
|
||||
const origName = new Intl.DisplayNames([lang], { type: 'language' }).of(lang);
|
||||
const name = new Intl.DisplayNames([language], { type: 'language' }).of(lang);
|
||||
return origName === name ? origName : `${origName} (${name})`;
|
||||
}
|
||||
|
||||
export default () => {
|
||||
const { t } = useTranslation();
|
||||
const [anchorEl, setAnchorEl] = React.useState<Element | null>(null);
|
||||
const { languages, originalPath } = useI18next();
|
||||
|
||||
return (
|
||||
<>
|
||||
<ToolTip title={t('语言')}>
|
||||
<IconButton
|
||||
aria-label="switch languages"
|
||||
color="primary"
|
||||
onClick={e => setAnchorEl(e.currentTarget)}
|
||||
>
|
||||
<TranslateIcon fontSize="small" />
|
||||
</IconButton>
|
||||
</ToolTip>
|
||||
|
||||
<Menu
|
||||
anchorEl={anchorEl}
|
||||
keepMounted
|
||||
open={Boolean(anchorEl)}
|
||||
onClose={() => setAnchorEl(null)}
|
||||
>
|
||||
{languages.map(lng => (
|
||||
<Link
|
||||
key={lng}
|
||||
to={originalPath}
|
||||
language={lng}
|
||||
color="inherit"
|
||||
underline="none"
|
||||
>
|
||||
<MenuItem dense>{languageName(lng)}</MenuItem>
|
||||
</Link>
|
||||
))}
|
||||
</Menu>
|
||||
</>
|
||||
);
|
||||
};
|
||||
46
src/components/name-icon-button.tsx
Normal file
@@ -0,0 +1,46 @@
|
||||
import InfoIcon from '@mui/icons-material/Info';
|
||||
import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
|
||||
import { Tooltip } from '@mui/material';
|
||||
import { IconButton } from 'gatsby-theme-material-ui';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import * as React from 'react';
|
||||
import { usePrefs } from './preferences-context';
|
||||
|
||||
const nameMode = {
|
||||
friendly: {
|
||||
name: '显示镜像目录名称',
|
||||
icon: InfoIcon,
|
||||
},
|
||||
raw: {
|
||||
name: '显示镜像名称',
|
||||
icon: InfoOutlinedIcon,
|
||||
},
|
||||
};
|
||||
|
||||
const getModeName = (m: boolean): string => (m ? 'friendly' : 'raw');
|
||||
|
||||
export default () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const [prefs, setPrefs] = usePrefs();
|
||||
const modeName = getModeName(prefs.friendlyName);
|
||||
const mode = modeName === 'friendly' ? nameMode.friendly : nameMode.raw;
|
||||
const toggle = () => {
|
||||
setPrefs({
|
||||
...prefs,
|
||||
friendlyName: !prefs.friendlyName,
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<Tooltip title={t(mode.name)}>
|
||||
<IconButton
|
||||
aria-label="toggle friendly name"
|
||||
color="primary"
|
||||
onClick={toggle}
|
||||
>
|
||||
<mode.icon fontSize="small" />
|
||||
</IconButton>
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
50
src/components/nav-bar.tsx
Normal file
@@ -0,0 +1,50 @@
|
||||
import React from 'react';
|
||||
import { Link, Grid, Hidden } from '@mui/material';
|
||||
import { MirrorDto } from '../types/mirror';
|
||||
|
||||
export default ({ data }: { data: MirrorDto[] }) => {
|
||||
const caps: { [key: string]: boolean } = {};
|
||||
|
||||
data.forEach(mirror => {
|
||||
if (mirror.id.length < 0) {
|
||||
throw new Error('mirror id empty');
|
||||
}
|
||||
const cap = mirror.id[0].toLocaleUpperCase();
|
||||
|
||||
caps[cap] = true;
|
||||
});
|
||||
|
||||
const buttons: React.ReactNode[] = [];
|
||||
|
||||
for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i += 1) {
|
||||
const char = String.fromCharCode(i);
|
||||
if (caps[char]) {
|
||||
buttons.push(
|
||||
<Link href={`#${char}`} style={{ textDecoration: 'none' }}>
|
||||
{char}
|
||||
</Link>
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
return (
|
||||
<Hidden smDown>
|
||||
<Grid
|
||||
container
|
||||
flexDirection="column"
|
||||
flexWrap="nowrap"
|
||||
spacing={1}
|
||||
sx={{
|
||||
position: 'fixed',
|
||||
bottom: '1rem',
|
||||
right: '1rem',
|
||||
width: 'fit-content',
|
||||
}}
|
||||
>
|
||||
{buttons.map(fab => (
|
||||
<Grid item>{fab}</Grid>
|
||||
))}
|
||||
</Grid>
|
||||
</Hidden>
|
||||
);
|
||||
};
|
||||
34
src/components/preferences-context.tsx
Normal file
@@ -0,0 +1,34 @@
|
||||
import { createContext, useContext, useState } from 'react';
|
||||
import * as React from 'react';
|
||||
|
||||
type Preferences = {
|
||||
friendlyName: boolean;
|
||||
};
|
||||
|
||||
type PrefsContextInterface = [
|
||||
Preferences,
|
||||
React.Dispatch<React.SetStateAction<Preferences>>
|
||||
];
|
||||
|
||||
const defaultPrefs: Preferences = {
|
||||
friendlyName: true,
|
||||
};
|
||||
|
||||
const PrefsContext = createContext<PrefsContextInterface>(
|
||||
{} as PrefsContextInterface
|
||||
);
|
||||
|
||||
const PrefsProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
const [prefs, setPrefs] = useState(defaultPrefs);
|
||||
const value = React.useMemo(
|
||||
() => [prefs, setPrefs] as PrefsContextInterface,
|
||||
[prefs]
|
||||
);
|
||||
return (
|
||||
<PrefsContext.Provider value={value}>{children}</PrefsContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
const usePrefs = () => useContext(PrefsContext);
|
||||
|
||||
export { Preferences as PrefsInterface, PrefsContext, PrefsProvider, usePrefs };
|
||||
83
src/components/search-item-card.tsx
Normal file
@@ -0,0 +1,83 @@
|
||||
import { Card, Grid, Typography, Tooltip } from '@mui/material';
|
||||
import { useI18next } from 'gatsby-plugin-react-i18next';
|
||||
import { CardActionArea } from 'gatsby-theme-material-ui';
|
||||
import * as React from 'react';
|
||||
import { Locale, Mirror } from '../types/mirror';
|
||||
import StatusIndicator from './status-indicator';
|
||||
import { getUrl } from '../utils/url';
|
||||
import { usePrefs } from './preferences-context';
|
||||
import VerifiedIcon from '@mui/icons-material/Verified';
|
||||
import officialCertificatedMirrorList from '../utils/official-certificated-mirror-list';
|
||||
|
||||
const SearchItemCard = (props: { queryItem: Mirror }) => {
|
||||
const { language } = useI18next();
|
||||
const lang = language as Locale;
|
||||
const [prefs, _] = usePrefs();
|
||||
|
||||
return (
|
||||
<Card className="zju-mirror-card" style={{ height: '100%' }}>
|
||||
<CardActionArea
|
||||
to={getUrl(
|
||||
props.queryItem.docUrl || props.queryItem.url,
|
||||
!!props.queryItem.docUrl
|
||||
)}
|
||||
style={{ height: '100%' }}
|
||||
>
|
||||
<Grid
|
||||
container
|
||||
direction="column"
|
||||
justifyContent="space-between"
|
||||
alignItems="flex-start"
|
||||
height="100%"
|
||||
padding={2}
|
||||
>
|
||||
<Grid item width="100%">
|
||||
<Grid
|
||||
container
|
||||
direction="row"
|
||||
flexWrap="nowrap"
|
||||
justifyContent="flex-start"
|
||||
alignItems="flex-end"
|
||||
spacing={1}
|
||||
>
|
||||
<Grid item>
|
||||
<Typography variant="h6" component="div">
|
||||
{prefs.friendlyName
|
||||
? props.queryItem.name[lang]
|
||||
: props.queryItem.id}
|
||||
</Typography>
|
||||
</Grid>
|
||||
<Grid
|
||||
item
|
||||
display={
|
||||
officialCertificatedMirrorList.includes(props.queryItem.id)
|
||||
? 'block'
|
||||
: 'none'
|
||||
}
|
||||
>
|
||||
<Tooltip
|
||||
title={
|
||||
lang === 'zh'
|
||||
? `已加入 ${props.queryItem.id} 官方镜像列表`
|
||||
: `Added to ${props.queryItem.id} official mirror list`
|
||||
}
|
||||
placement="top"
|
||||
>
|
||||
<VerifiedIcon fontSize="small" color="primary" />
|
||||
</Tooltip>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<Typography gutterBottom variant="body2" color="text.secondary">
|
||||
{props.queryItem.desc[lang]}
|
||||
</Typography>
|
||||
</Grid>
|
||||
<Grid item>
|
||||
<StatusIndicator status={props.queryItem.status} fontSize={12} />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</CardActionArea>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
export default SearchItemCard;
|
||||