feat: replace jsdelivr with locally bundled resources (#3702)

* Replace jsdelivr with locally bundled resources

* Test build with forked mkdocs-material

* Update MathJax extra_javascript in build.sh

* Make theme and vendor resources download URL configurable

* Make install_theme_vendor.sh print messages and exit on error

* Change GITTALK_REPO default value to https URL

* Fix shell script syntax 🌿

* Print error message with temp directory in install_theme_vendor.sh

* Use "set -e" instead of "bash -e"

* Add post-build script to clean unused resources (mathjax)

* Update scripts/install_theme.sh
pull/3712/head
Menci 2021-12-24 10:52:46 +08:00 committed by GitHub
parent 416b82d910
commit f5092e8edc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 96 additions and 17 deletions

View File

@ -29,6 +29,7 @@ jobs:
run: |
chmod +x ./scripts/build.sh && ./scripts/build.sh
mkdocs build -v
bash ./scripts/post-build.sh
- name: Render math
run: node --max_old_space_size=3072 ./scripts/render_math.js
- name: Gulp minify

View File

@ -43,6 +43,13 @@ cd OI-wiki
pip3 install -U -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 使用我们的自定义主题Windows 下请使用 Git Bash 执行)
# 安装主题时将连接网络下载资源,可通过以下环境变量控制下载链接
# scripts/install_theme.sh:
# - THEME_REPO
# scripts/install_theme_vendor.sh:
# - MATHJAX_URL
# - MATERIAL_ICONS_URL
# - GITALK_REPO
chmod +x ./scripts/install_theme.sh && ./scripts/install_theme.sh
# 两种方法(选其一即可):

BIN
docs/images/hulu-black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

BIN
docs/images/netlify.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -4,7 +4,7 @@ title: OI Wiki
# 欢迎来到 **OI Wiki**[![GitHub watchers](https://img.shields.io/github/watchers/OI-wiki/OI-wiki.svg?style=social&label=Watch)](https://github.com/OI-wiki/OI-wiki) [![GitHub stars](https://img.shields.io/github/stars/OI-wiki/OI-wiki.svg?style=social&label=Stars)](https://github.com/OI-wiki/OI-wiki)
[![Word Art](https://cdn.jsdelivr.net/npm/oicdn@0.0.1/wordArt.webp)](https://github.com/OI-wiki/OI-wiki)
[![Word Art](images/wordArt.webp)](https://github.com/OI-wiki/OI-wiki)
**OI**Olympiad in Informatics信息学奥林匹克竞赛在中国起源于 1984 年,是五大高中学科竞赛之一。
@ -94,6 +94,6 @@ title: OI Wiki
</script>
<div align="center">
<a href="https://www.hulu.com/" target="_blank"><img height="40px" src="https://cdn.jsdelivr.net/npm/oicdn@0.0.1/hulu-black.png"></a>
<a href="https://www.netlify.com/" target="_blank" style="margin-left: 60px;"><img height="40px" src="https://cdn.jsdelivr.net/npm/oicdn@0.0.2/netlify.png"></a>
<a href="https://www.hulu.com/" target="_blank"><img height="40px" src="images/hulu-black.png"></a>
<a href="https://www.netlify.com/" target="_blank" style="margin-left: 60px;"><img height="40px" src="images/netlify.png"></a>
</div>

View File

@ -3,15 +3,15 @@
"name": "OI Wiki",
"icons": [
{
"src": "https://cdn.jsdelivr.net/npm/oicdn@0.0.1/favicon.ico",
"src": "favicon.ico",
"sizes": "48x48"
},
{
"src": "https://cdn.jsdelivr.net/npm/oicdn@0.0.1/favicon_192x192.png",
"src": "favicon_192x192.png",
"sizes": "192x192"
},
{
"src": "https://cdn.jsdelivr.net/npm/oicdn@0.0.2/favicon_512x512.png",
"src": "favicon_512x512.png",
"sizes": "512x512"
}
],

View File

@ -491,7 +491,7 @@ theme:
accent: 'red'
include_search_page: false
search_index_only: true
favicon: 'https://cdn.jsdelivr.net/npm/oicdn@0.0.1/favicon.ico'
favicon: 'favicon.ico'
logo:
icon: 'school'
@ -520,7 +520,7 @@ extra:
extra_javascript:
- '_static/js/extra.js?v=16'
- 'https://cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js?config=TeX-MML-AM_CHTML'
- 'assets/vendor/mathjax/MathJax.js?config=TeX-MML-AM_CHTML'
extra_css:

2
scripts/build.sh vendored
View File

@ -14,4 +14,4 @@ chmod +x $INSTALL_THEME && $INSTALL_THEME
git rev-parse --short HEAD | xargs -I % sed -i "s/githash: ''/githash: '%'/g" mkdocs.yml
#Will NOT Use Mathjax for Deploy
sed -i "s/- 'https:\/\/cdn.jsdelivr.net\/npm\/mathjax@2.7.5\/MathJax.js?config=TeX-MML-AM_CHTML'//g" mkdocs.yml
sed -i "s# - 'assets/vendor/mathjax/MathJax.js?config=TeX-MML-AM_CHTML'##g" mkdocs.yml

View File

@ -2,13 +2,9 @@
set -e
if [ ! -d "mkdocs-material" ] ; then
git clone --depth=1 https://github.com/OI-wiki/mkdocs-material.git
THEME_NAME="mkdocs-material"
if [ ! -d "$THEME_NAME" ] ; then
git clone --depth=1 ${THEME_REPO:-"https://github.com/OI-wiki/mkdocs-material.git"} "$THEME_NAME"
fi
if [ "$(uname)" == "Darwin" ] ; then
# macOS sed -i 需要添加""表示不备份修改
sed -i "" "s/name: 'material'/name: null\n custom_dir: 'mkdocs-material\/material'\n static_templates:\n - 404.html/g" mkdocs.yml
else
sed -i "s/name: 'material'/name: null\n custom_dir: 'mkdocs-material\/material'\n static_templates:\n - 404.html/g" mkdocs.yml
fi
bash scripts/install_theme_vendor.sh

73
scripts/install_theme_vendor.sh vendored Normal file
View File

@ -0,0 +1,73 @@
set -e
VENDOR_DIR="mkdocs-material/material/assets/vendor"
rm -rf "$VENDOR_DIR"
function _when_error() {
echo -e "\nOops! Failed to fetch vendor resources!"
if [[ -d "$TEMP_DIR" ]]; then
echo "Check the temp directory: $TEMP_DIR"
fi
}
trap _when_error ERR
# MathJax
TEMP_DIR="$(mktemp -d -t "download-mathjax-XXXXXXXX")"
MATHJAX_URL=${MATHJAX_URL:-"https://registry.npmjs.org/mathjax/-/mathjax-2.7.5.tgz"}
echo "Downloading MathJax to $TEMP_DIR"
echo "URL: $MATHJAX_URL"
MATHJAX_REQUIRED_FILES=(
"config/TeX-MML-AM_CHTML.js"
"extensions/TeX"
"fonts/HTML-CSS/TeX/woff"
"jax/output/CommonHTML"
"jax/element"
"MathJax.js"
)
curl "$MATHJAX_URL" | tar -C "$TEMP_DIR" -xzf -
for FILE in "${MATHJAX_REQUIRED_FILES[@]}"; do
FILE_TARGET_PATH="$VENDOR_DIR/mathjax/$FILE"
FILE_SOURCE_PATH="$TEMP_DIR/package/$FILE"
mkdir -p "$(dirname "$FILE_TARGET_PATH")"
cp -r "$FILE_SOURCE_PATH" "$FILE_TARGET_PATH"
done
rm -rf "$TEMP_DIR"
# Material Icons
TEMP_DIR="$(mktemp -d -t "download-material-icons-XXXXXXXX")"
MATERIAL_ICONS_URL=${MATERIAL_ICONS_URL:-"https://registry.npmjs.org/material-icons/-/material-icons-0.2.3.tgz"}
echo "Downloading material-icons to $TEMP_DIR"
echo "URL: $MATERIAL_ICONS_URL"
MATERIAL_ICONS_REQUIRED_FILES=(
"iconfont/material-icons.css"
"iconfont/MaterialIcons-Regular.woff"
"iconfont/MaterialIcons-Regular.woff2"
)
curl "$MATERIAL_ICONS_URL" | tar -C "$TEMP_DIR" -xzf -
for FILE in "${MATERIAL_ICONS_REQUIRED_FILES[@]}"; do
FILE_TARGET_PATH="$VENDOR_DIR/material-icons/$FILE"
FILE_SOURCE_PATH="$TEMP_DIR/package/$FILE"
mkdir -p "$(dirname "$FILE_TARGET_PATH")"
cp -r "$FILE_SOURCE_PATH" "$FILE_TARGET_PATH"
done
rm -rf "$TEMP_DIR"
# Gitalk
TEMP_DIR="$(mktemp -d -t "download-gittalk-XXXXXXXX")"
echo "Downloading Gitalk to $TEMP_DIR"
echo "Repo: $TEMP_DIR"
GITALK_REPO=${GITALK_REPO:-"https://github.com/OI-wiki/gitalk"}
GITALK_BRANCH="mv1.0"
GITALK_REQUIRED_FILES=(
"gitalk-component.js"
"gitalk.css"
"gitalk.min.js"
)
git clone --single-branch --branch "$GITALK_BRANCH" --depth 1 "$GITALK_REPO" "$TEMP_DIR/gitalk"
for FILE in "${GITALK_REQUIRED_FILES[@]}"; do
FILE_TARGET_PATH="$VENDOR_DIR/gitalk/$FILE"
FILE_SOURCE_PATH="$TEMP_DIR/gitalk/dist/$FILE"
mkdir -p "$(dirname "$FILE_TARGET_PATH")"
cp -r "$FILE_SOURCE_PATH" "$FILE_TARGET_PATH"
done
rm -rf "$TEMP_DIR"

2
scripts/post-build.sh vendored Normal file
View File

@ -0,0 +1,2 @@
# Clean unused files after build
rm -rf site/assets/vendor/mathjax