為 jsProxy 應用 Material 界面

如果你還不知道的話, jsProxy 是一個基於瀏覽器端實現的網頁代理. 用人話說, 就是你可以把 jsProxy 當作 “翻牆瀏覽器” 使用. 而和雜七雜八的 “翻牆瀏覽器” 不同, jsProxy 不紀錄用戶數據, 而且無需安裝, 隨時可以使用.

因為可以部署在 Cloudflare Workers ( 從雲端運行腳本 ) 的緣故, jsProxy 一直被視為一個很好的白嫖途徑. 不過其他都好, 就是介面有點… 怎麼說呢, 太過復古. 而且 jsProxy 已經長期無人維護, pr 攢了一大堆無人理會, 導致一大堆鏈接無法打開, 默認搜索引擎是谷歌也導致了每次使用它總會被谷歌以機器人的理由擋下來, 體驗非常不友好.

不是我太挑剔, 但是原本的介面真的是有夠醜的

本著 DIY 的精神, 我稍微改動了一下 jsProxy 的代碼, 然後用 MDUI 庫給他前端做了一個美化. 因為我並沒有怎麼學過前端知識, 所以整個網頁現在基本就是一堆 tag soup. 不過總算跑起來了, 而且看著還不賴.

現在 jsProxy 的樣式看起來好多了.

自我感覺良好 ing

得益於 MDUI, 這個網站現在還跟上了 “響應性設計” 的概念, 儘管我完全不知道響應性設計到底是什麼鬼東西. 我修改了默認搜索引擎, 把它改成了 Duckduckgo, 我還刪掉了網站圖標改成了 fontawesome 的字體優化加載速度, 添加了暗黑模式… ( 為什麼要加省略號, 已經沒有可列的了啊 ) 總之, 現在的 jsProxy 絕對比原來的 jsProxy 要好用不只一點.

如果想要體驗的話, 你可以在點擊下方鏈接前往我自己用 CF Worker 搭建的服務, 或者 Clone Git 源碼.

鏈接: jsproxy.justin.education
源碼: git.io/jsproxy-material

雙卡齊發? Nvidia Computex2021 發佈會總結

Nvidia 在這次發佈會上主要發佈了兩張卡, 據說都有針對挖礦的限制, 具體情況如何我暫時表示蒙在鼓裡. 發佈會的鏈接在這裡, 你也可以通過下面的嵌入式播放器觀看.

廢話不多說. 大家最關心的發佈日期、價格、規格已經整理好寫在下面.

RTX 3080 Ti
RTX 3070 Ti
型號RTX 3080 TiRTX 3070 TI
顯存12G8G
價格(美刀)$1199$599
價格(RMB)¥7638¥3816
發布時間(美東)June 3rdJune 10th
發布時間(北京)6月4號 0:006月11號 0:00

至於搶卡的問題, 我們就都當吃瓜群眾好了. 據說 NVIDIA 官方已經承諾, 會在下次發售時添加機器人驗證限制腳本的使用. 到底有沒有真的改善, “市場價格” 又如何, 在顯卡發售之後我會繼續圍繞發文.

WebRTC IP 洩露漏洞

記得惡維事件嗎? 六扇門跨省追捕中學生然後把他們扔進監獄言行拷打一直電到陰毛燒焦為止.
據說有一些完全無辜的網友被攪進這件事情, 就是因為他們曾經瀏覽過或者編輯過惡維, 警方在惡維的數據庫裡查到了他們的 IP.

能上惡維一定是掛了 VPN 的啊? 啊對, WebRTC Leak 就是 Leak 了 VPN 背後的 IP, WebRTC Leak 的原理和 PoC 可以在這裡找到.

這是因為惡維“很走心”的在站點上掛了一個 JS, 利用了 WebRTC 漏洞從而繞過代理紀錄了瀏覽者的真實 IP.

惡俗掛掉了 (舊的), 但是誰都不能說什麼時候某個網站也會掛掉, 帶一大批網友下水 (品蔥, 比方說) . 畢竟正常人誰會注意網站加載了那個 JS, 有沒有用 WebRTC. 說不定 JS 還是加密的, 根本防不勝防.

你可以在 這個網站 檢測自己有沒有中招.

解決方案

手機端如果是使用 Chrome , 除了掛 V2 之類的代理其他根本就無解, Firefox 還可以自己更改設置, Chrome 已經不允許了

PC端的話可以使用插件, 可以改設置 ( 我推薦使用插件的啦 ), 比如 Firefox 就有這款插件.

當然, 電腦手機都可以使用 Tor 瀏覽器來規避這種風險; 我的建議是, 就不要使用手機瞎幾把瀏覽境外反動勢力集團網站.

如果手頭暫時沒有 Tor, 只是想要簡單的瀏覽網頁 ( 沒有登錄等需求 ), 可以使用網頁代理來訪問網站. 你也可以使用我手頭的這個 JSProxy 反向代理, 親測可以防止 WebRTC leak. ( 因為原作者太長時間沒有更新, 這個 JSProxy 好像不能 Pass Cloudflare CDN 保護, 訪問品蔥等網站會一直卡在 JS 詢問頁面上. 所以如果有 Tor 還是用 Tor 吧.

Docker 無縫切換鏡像

警告: 我只是一個正在學習 Docker 的中學生,
一切在生產環境嘗試本文所述技巧所導致的損失都是自作自受.

有的時候, Docker 鏡像更新了, 但是容器並沒有更新, 你想要用更新過後的鏡像來部署容器; 奈何你並沒有像 Portainer 這樣的 GUI 介面, 你早就不記得當初部署容器時執行的指令了, 碰到這種情況應該怎麼辦?

下文便以更新 Portainer 為例來演示簡單的無縫切換鏡像.

Pull 来的镜像

第一步當然是要先拉取更新的鏡像.

docker pull portainer/portainer-ce:latest

接著, 使用 rekcod 這個工具來獲取部署容器時輸入的命令.

$ docker run --rm -i -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod <container>

# 樹莓派玩家
# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod:3.0.0arm

# 為該命令設別名
# alias rekcod="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod:3.0.0arm"

短暫刪除舊的容器, 然後部署上新的.

$ docker stop <container>
$ docker rm <container>
$ <執行 rekcod 得到的結果>

至此, 新的容器就部署好了, 而當機時間不會超過幾秒鐘👌

最後別忘了刪除掉舊的鏡像喔.

自 Build 的鏡像

假設當初用來 Build 鏡像的 Dockerfile 已經遺失, 可以用 dfimage 這個神器來從鏡像中提取 Dockerfile 用於構建.

$ docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage  <image>

# 為該命令設別名
# alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage "

恢復出來後就可以愉快的繼續玩耍啦~ 但是要注意, 很多時候不是恢復出來就可以用的, 因為涉及到 Reverse Engineering, 恢復出來的文件基本是和原來的 Dockerfile 不一樣的. 因此還是建議好好保存 Dockerfile.

Chrome is bad! 切換到 Firefox

在我的 Macbook 上使用了幾個月 Chrome 下來, 發現使用期間電池損耗非常之快. 在 Google 上搜索之後, 結果幾乎清一色指向了 Keystone, 一個 Chrome 的更新程式. 根據 Chrome is bad, Keystone 將自己植入系統服務, 瘋狂吃資源, 一度讓 WindowServer CPU 佔用達到 80%. Google 聲稱 Keystone 是用來更新 Chrome 的, 我對此存疑. 更新一個程式需要吃 CPU 吃到 80%? 真當我腦癱啊?

然而要改變習慣也不是那麼容易, 我就很不習慣 Safari 和 Edge 的操作介面. 況且我習慣只有一套密碼, 要切換瀏覽器, 就得先把舊瀏覽器上的密碼通通刪除.

提醒: 如果你也想要轉移到 Firefox, 請不要著急著刪除 Chrome, 在轉移插件和密碼時它還用得到.

Chromium 使用報告

為了解決這個問題, 我先嘗試 Chrome 係的 Chromium ( 通過 Brew 安裝 ), 寄希望於它是一個開源軟件, 不會附帶垃圾代碼.

結果我徹徹底底的錯了. Chromium 一不支持 MacArm, ( 而 Chrome 則是支持的 ), 而來佔用比 Chrome 還要高三到五倍, 最離譜的是, 我用 Brew 卸載掉了它居然還在佔我 CPU. 這怎麼忍?

通過 Brew 卸載之後, Chromium 居然還佔用 將近 100% 的 CPU

除了高佔用以外, Chromium 還移除了大部分 Google API. 也就是說, 谷歌翻譯、密碼同步、谷歌帳號等功能全部無法使用. 從這點就可以看出來, 作為一個商業巨頭的 Google, 本質上就是一個財閥, 其第一要務就是盈利.

失望之餘, 我徹底刪除了 Chromium.

轉移並清除 Chrome 保存的資料

匯出密碼

要跳出 Chrome 的舒適圈, 將密碼轉移到 Firefox 上是一個好主意. 然而我現在正在使用 Keepass ( 一個開源密碼管理器 ), 絕大部分密碼並不儲存在瀏覽器裡. 因此我只要登錄到 Google 帳號, 刪除掉儲存在裡面的密碼就可以了.

要先匯出你的密碼, 或是關閉自動保存, 點擊這個鏈接, 登入 Google 帳戶, 點擊 “Export”.

Export 出來的東西可以導入 Keepass, 也可以導入 Firefox. 我個人偏向於前者.

匯出書籤

在 Chrome 中打開這個鏈接, 點擊右上角的三個點然後點擊 “匯出”.

我個人並沒有選擇從 Chrome 匯出書籤, 我覺得切換瀏覽器也是一個小小的新開始, 那些老的書籤大部分我一生都不會再看一次, 不如直接刪掉好了.

我沒有保留除了 Chrome 書籤欄裡的其他任何東西, 而且我其實也基本不使用書籤功能.

匯出插件

遺憾的是, Chrome 並沒有為插件提供一鍵匯出功能. 在 Chrome 種打開這個鏈接, 手動轉移插件吧. 一些插件提供了到匯出配置功能, 會讓整個操作簡單很多.

刪除 Chrome 相關的所有資料

之前的操作只是匯出了這些資料而已, 接下來要做的是完全刪除這些資料.
Chrome 官方提供了一個一鍵 GoodBye 的功能, 我個人感覺還是非常有良心的.

點擊這個鏈接, 確定你已經匯出了所有這些資料之後, 點擊刪除.

這會刪除你帳戶中關於 Chrome 的所有資料.

刪除帳戶活動

以上操作已經完全抹除了你和 Chrome 的關係了, 但是能不能再進一步呢?

瀏覽紀錄除了被儲存在 Chrome 裡面, 還儲存在 Google 活動裡面, 作為 Google 帳戶資料的一部分. 要完全清除, 我們還要執行下面的操作.

光刪除這些並沒有完全刪除你在 Google 留下的痕跡. 接下來需要轉到 Google – 我的活動 來刪除雲端的瀏覽紀錄.

請點擊這個鏈接, 點擊 刪除 – 不限時間 – 全部勾選 – 刪除.

如果以後都不想要 Google 紀錄你的活動, 可以如圖關閉這三個選項.

要刪除其他服務, 請點擊這個鏈接, 自行選擇並刪除.

我個人感覺, 在一一刪除這些資料時, 我處在一種擔憂與爽感並存的狀態. 然而, 在完全刪除之後, 又釋然了. 隱私與自由有的時後和大麻一樣, 都是一種一旦沾上就再也不想失去的東西, 只不過前者是完全無害的.

安裝 Firefox

Firefox 作為一個開源軟件, 而且有大名鼎鼎的 Mozilla 基金會為它背書. Firefox 的主題、插件市場都不下 Chrome AppStore, 也支持同步設置和密碼. 除了手機上的 Firefox 比較不堪以外 (近年來已經大大改善!) , 好像它一直都是 Chrome 的一個絕佳替代方案.

要安裝 Firefox, 可以使用內建的 Brew 包管理器. 順便一提, Firefox 已經支持 M1 晶片.

brew install --cask firefox

成功!

安裝完畢之後, 整個過程基本就完成了! 享受這個新的瀏覽器吧!

一鍵讓內容農場從搜索結果 Fuck Off

我相信每個網民或多或少都有過這樣的經歷: 你翻出來, 抱著探索更加優質互聯網的期望, 開始了第一次 Google 之旅.

但是很不幸的是, 你的 Google 搜索結果第一頁居然塞滿了比牆內還垃圾數倍的內容農場, 先不提一塌糊塗的格式, 除了標題整個文章和你要搜索的內容就沒有一點相干. 更加奇葩的是, 這個網站還有綠色的背景, 大號正楷做正文字體, 像是從 00 年穿越過來一樣, 簡直就是設計地獄.

圖為其中最流氓的 KKNews, 直接 Ban 掉了訪問

你完全不理解 Google 為什麼要將這些垃圾內容放在第一頁, 於是你離開了 Google, 對萬惡的資本主義徹底失望, 回到了百度的懷抱, 做回了幸福的小粉紅.

完.

完?

The ultimate solution

為了應對這個問題, Google 曾經開發過一款插件 “Personal Blocklist”, 但是因為某些資本主義因素, 又把它下架了. 不過這個概念已經有了, 就是用戶可以通過瀏覽器插件的方式修改搜索結果, 如果 url 符合匹配規則, 就讓他完全消失.

Meet the uBlackList!

Google 商店搜索 uBlackList 就可以搜到這款插件. 我們可以首先設置通配符來最大範圍殺傷那些不長腦子的內容農場:

*://*/so.php
*://*/so.php?s=*
*://*/cha.php?s=*
*://*/list.php?s=*
*://*/?s=*
*://*/so/*

然後請添加以下訂閱, 通過域名精準打擊漏網之魚.

https://git.io/ublacklist

上面這個訂閱基本是全網最全的訂閱, 通過腳本, 每週同步多個 List 的內容; 截至發文時, 它已經包含了超過七萬個採集站.

Android5 – Termux

我有一支舊手機, 華為 TAG-AL00; 目前閒置無事可幹, 於是我便動起歪腦筋想要將其改造成一台服務器.
如果你的手機已 root, 你大可以安裝 Linux Deploy, 通過 chroot 技術來部署 Linux, 安裝更快也運行更高效.

下載 Termux

首先不得不提的是, 作為有中國社會主義特色的流氓企業, 華為早就 Ban 掉了大部分手機刷機的渠道. 而華為自己的系統又太坑爹, 而且根本沒有系統更新, 導致我想給他刷一個 LineageOS 的嘗試直接打水漂. 所以接下來的一切都是在蛋疼的 Android5 上完成的.

Termux 早在 2020.01.01 就宣布不再支持 Android5/6. 因為是安卓5的緣故, 我們只能下載古老一點的版本. 經過我實測, 不僅是 20 年年初的版本無法安裝, 19 年年末的幾個版本 (如 0.75) 也裝不起來. 所以我只好選擇了更加古老的 Termux 0.70, 可以在這個鏈接下載到.

基礎配置

首先得配置好軟件源, 倒不是翻牆的問題, 而是這個版本 Termux 自帶的軟件源已經失效. 沒有軟件源其他一切都是扯淡. 複製以下命令到手機中執行:

( 如果執行完出錯, 請清除數據或重裝, 然後僅執行 apt update, 便可挑過此步. )

sed -i '[email protected]^\(deb.*stable main\)[email protected]#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable [email protected]' $PREFIX/etc/apt/sources.list
sed -i '[email protected]^\(deb.*games stable\)[email protected]#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games [email protected]' $PREFIX/etc/apt/sources.list.d/game.list
sed -i '[email protected]^\(deb.*science stable\)[email protected]#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science [email protected]' $PREFIX/etc/apt/sources.list.d/science.list
pkg update -y

接下來的問題就是我不想要再在巴掌大的玻璃上戳來戳去了. 配置 SSH.

# 在手機上執行
apt install openssh -y
sshd # 開放 8022 端口
vi ~/.ssh/authorized_keys # 複製公鑰進去
ipconfig -a # 查看 ip 信息

# 在電腦上執行
ssh 192.168.10.116 -p 8022

安裝 Debian

使用 Debian 主要的原因, 除了它比較人性化且持續被維護, 是它的佔用非常之小, 完全可以運行在 “嵌入式設備上”. 在這一個老舊的手機上運行完全沒問題. 另外一個類似的嵌入式系統 Alpine 我不熟, 因此不想安裝.

# 資源來自 AnLinux
cd ~
apt install wget openssl-tool proot -y && hash -r && wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/Debian/debian.sh
bash debian.sh

執行這個命令花費的時間不多, 所以不要被嚇到.
安裝完成之後, 只要輸入 ./debian-start.sh 便可以啟動 Debian 了!

定期批量刪除图片 EXIF

EXIF 元信息是一種圖片的附加信息, 一般在拍攝的時候就已經寫進圖片, 而圖片被上傳到 WordPress 之後也會留在裡面.我剛剛看完幾篇關於網絡安全的文章, 於是去查詢了一下維基百科看一看 EXIF 到底有沒有這麽恐怖. 很不幸, 確實有.

圖片可以暴露拍攝的時間和地點, 精確到 GPS 坐標

雖然我的網站並不是非常 Secure, 而我使用密碼的習慣也並不是非常 Solid, 但是修復已經注意到的漏洞, 減少攻擊面總是一件好事. 所以我就設置了一個 Cron, 定時刪除 WordPress 中儲存的所有圖片元信息.

怎麼做到

首先安裝 ExifTool, 一個以 Perl 寫成的開源圖片 EXIF 信息處理工具. 樹莓派是基於 Debian, 所以直接 apt 就可以了

apt update && apt install exiftool

然後定位到 /mnt/data/wordpress/ , 這裡是 WordPress 的根目錄. 我先執行一次清除試一下:

( 方法來自 這個討論串 )

$ find -type f -iname '*.jpg' -exec exiftool -all= {} \;

1 image files updated
1 image files updated
...

然而, 除了修改文件以外, 這個工具還產生了 *.jpg_original 格式的備份, 這些備份我並不需要.

find . -name "*.jpg_original" | xargs rm -rf   

寫進 Cron

明確了作法之後, 就可以將任務寫進 Cron 了.

touch /etc/cron.daily/rm_exif
cat > /etc/cron.daily/rm_exif <<EOF
#!/bin/sh
find /mnt/data/wordpress -type f -iname '*.jpg' -exec exiftool -all= {} \;
find /mnt/data/wordpress -name "*.jpg_original" | xargs rm -rf
find /mnt/data/wordpress -type f -iname '*.jpeg' -exec exiftool -all= {} \;
find /mnt/data/wordpress -name "*.jpeg_original" | xargs rm -rf
find /mnt/data/wordpress -type f -iname '*.png' -exec exiftool -all= {} \;
find /mnt/data/wordpress -name "*.png_original" | xargs rm -rf
find /mnt/data/wordpress -type f -iname '*.gif' -exec exiftool -all= {} \;
find /mnt/data/wordpress -name "*.gif_original" | xargs rm -rf
EOF
chmod +x /etc/cron.daily/rm_exif

完成了!

Cloudflare Tunnel Self WebHosting

由於不習慣用 Hugo 管理內容, 且文章漸漸多了起來, 我在家中的樹莓派上跑起了一個 WordPress. 一切都進行的很順利, 直到我發現發佈這個網站並不是我想像中的那麼容易.

這篇文章是一篇踩坑文, 就是說我會把我在設置中遇到的一切困難完整的紀錄在文章中, 因此你不應當將其當作教程來看. 如果需要教程的話, 我推薦 官方文檔 , 或者 土豆不好吃 的教程.

前言

失敗的嘗試

首先, 我的樹莓派跑在內網, 我需要在路由器上配置一個端口轉發. 借助 Openwrt 的圖像介面, 我輕鬆的完成了轉發.

其次, 我還需要一個公網 IP. 撥打了電信的電話, 我成功的要到了公網 IP.

因為 “維穩” 需求, 電信是封殺 80, 443, 等常見的端口的. 因此我將 443 端口轉發到了 2053 端口上. ( HTTPS 證書是 Cloudflare 的原站證書 ) 2053 端口確定可以訪問.

在然後, 每次撥號的時候 IP 都會改變, 我需要配置一個 DDNS. 為了解決這個問題, 我找到了一個 Cloudflare DDNS 腳本跑在 Openwrt 裡來動態更新我的 IP.

一個類似 ip.justin.education:2053 的地址為免有些太過不友好, 於是我使用 CF-Workers 反向代理網站到 proxy.justin-zhang.workers , 再將其 CNAME 到 justin.education.

如果是靜態頁面這個時候已經可以訪問了, 但是 WordPress 並不支持多個域名, 一直在執著的 301 重定向. 我不能配置其地址為 justin.education, 因為那樣我就沒辦法登錄後台: CF 反代不支持保存 Cookies.

我於是在 Openwrt 上用 Docker 跑了一個 Nginx 來反代網站, 放棄了簡單的端口轉發的方案. 這次成功了, 不過我遇到了一些圖片和CSS不能加載的問題. 安裝插件之後我配置了替換 Header 的規則, 總算是可以看了.

但是由於 CF Workers 的緣故, 評論還是不工作. 而且攻擊者只要知道了我的端口是 2053, 他可以全網搜索 ip.justin.education:2053 的證書來找到我的真是 ip; 這顯然太冒險.

這個方案失敗之後, 還剩下的就是使用 frp 內網穿透的方案. 然而我並不想用我的翻牆服務器來代理網站, 我經常換 ip, 而且不安全, 而且效率太低.

看起來我已經被逼到絕路了.

閱讀全文 Cloudflare Tunnel Self WebHosting

WordPress Enligher 插件適配主題

感覺博客缺少一個代碼高亮插件, 所以我就挑了一個免費的, 功能比較多的插件 Enligher 安裝到博客.

好用但是挺好用, 但是好像和當前的主題不太兼容, 具體症狀請見下圖:

可以看見, 不管是編輯器還是實際文章, 這個插件都有兼容性問題.

所以我馬上要做的事情, 就是找出問題並自己解決掉.

我沒有學過任何關於 CSS 或者 JS 的知識, 以下所有紀錄都來源於常識… 如果我有哪邊做錯, 歡迎在評論區指正😄

(下文所有的修改都會寫在文末的 patch 文件中)

編輯器部分

錯位修正

margin 的左右都是 0

這個比較簡單, 修改 enlighter/resources/gutenberg/enlighterjs.gutenberg.min.css , 如下所示:

div[data-type="enlighter/codeblock"] {
	border: 1px solid #cccbcb;
	border-radius: 5px;
	/* max-width: 100%; */
	padding: 15px
}

刪除/移動 干擾信息

右下角的提示 “EnligherJS Syntax Highlighter” 一直都在那裡, 非常佔空間而且還會產生打擾的效果, 所以我們不能讓它達到目的, 可以直接把它刪掉. 另外, 左上角的粗體字提示 Highlighting 種類未免有些太過喧賓奪主, 要是可以把它移到右下角的話豈不完美.

所以我就將 enlighter-footer 的部分刪掉, 然後將 enlighter-title 的部分移到 原來的 footer 的部分. 目前一切進行的都比較順利.

wp.element.createElement("div", {
                    className: "enlighter-header"
                },
                    /*wp.element.createElement("div", {
                        className: "enlighter-title"
                    }, (e = t.language, s()[e] || "Unknown language"))), wp.element.createElement(u, {
                        value: t.content,
                        onChange: function (e) {
                            return n({
                                content: e
                            })
                        },
                        placeholder: "Insert Sourcecode..",
                        "aria-label": "Code"
                    }),*/
                    /*wp.element.createElement("div", {
                        className: "enlighter-footer"
                    },
                        wp.element.createElement("div", {
                            className: "enlighter-footer-label"
                        },
                            wp.element.createElement("strong", null, "EnlighterJS"), " Syntax Highlighter"))*/
                    wp.element.createElement(u, {
                        value: t.content,
                        onChange: function (e) {
                            return n({
                                content: e
                            })
                        },
                        placeholder: "Insert Sourcecode..",
                        "aria-label": "Code"
                    }), wp.element.createElement("div", {
                        className: "enlighter-footer"
                    }, wp.element.createElement("div", {
                        className: "enlighter-footer-label",
                    }, (e = t.language, s()[e] || "Unknown language")))),

美化

到這一步, 編輯器 Enlighter 區塊的效果是這個樣子的:

不夠完美啊!

從使用的角度來說, 它已經夠用了.
但是右下角的那一行字總覺得有點不和諧.

所以我就把它往下移動了一點點, 並且加粗.

div[data-type="enlighter/codeblock"] {
	border: 1px solid #cccbcb;
	border-radius: 5px;
	padding: 15px;
	padding-block-end: 1px /* New */
}
div[data-type="enlighter/codeblock"] .enlighter-footer-label {
	text-align: right;
	font-size: 10px;
	font-family: Menlo,Consolas,monaco,monospace;
	color: #23282d;
	cursor: pointer;
	padding-top: 3px; /* New */
	font-weight: 800 /* New */
}

( 以上所有代碼全部由我目測得到, 且並不理解其含義, 均未考慮兼容性. 使用前請再三考慮 )

最終效果

現在感覺好多了 👌

網頁展示部分

EnlighterJS 官網按鈕倒不難去掉, 插件提供了開關可以直接把它關掉.

將 EnlighterJS website button 設為 Disable 就可以了

那麼接下來要做到就是適配暗黑模式.

適配暗黑模式的話… (撓頭) 要改的變量好像有點太多了, 暫時就不寫了吧.
本身 MDX 的暗黑模式就不太好看, 我的解決方法就是 徹 . 底 . 不 . 開 ! 這下不會有問題了吧?

Patch via Gist