|
|
第31行: |
第31行: |
| //辅助工具ListEnhancer | | //辅助工具ListEnhancer |
| mw.loader.load("https://zh.moegirl.org.cn/index.php?title=User:BearBin/js/ListEnhancer.js&action=raw&ctype=text/javascript"); | | mw.loader.load("https://zh.moegirl.org.cn/index.php?title=User:BearBin/js/ListEnhancer.js&action=raw&ctype=text/javascript"); |
|
| |
| /* eslint-env browser, jquery */
| |
| /* global mw, OO, CodeMirror6 */
| |
| /**
| |
| * @name codemirror6 主编辑器支持
| |
| * @author -
| |
| */
| |
|
| |
| "use strict";
| |
|
| |
| (async function () {
| |
| if (!["edit", "submit"].includes(mw.config.get("wgAction"))) return
| |
|
| |
| await $.ready
| |
|
| |
| const TEXTAREA_SELECTOR = "#wpTextbox1"
| |
| const $textarea = $(TEXTAREA_SELECTOR)
| |
| if (!$textarea.length) return
| |
|
| |
| const CM_CDN = 'https://testingcf.jsdelivr.net/npm/@bhsd/codemirror-mediawiki@latest'
| |
| const localStorageKey = "codemirror6-enabled"
| |
| const namespace = mw.config.get("wgNamespaceNumber")
| |
| const pageName = mw.config.get("wgPageName")
| |
| let cmInstance = null
| |
|
| |
| const state = JSON.parse(localStorage.getItem(localStorageKey) || "true")
| |
|
| |
| /** 判断页面模式 */
| |
| function getPageMode(pageName, ns) {
| |
| const ext = pageName.split(".").pop().toLowerCase()
| |
| const isSubject = ns % 2 === 0
| |
|
| |
| if (ext === "css" && isSubject) return [2, 8, 2300].includes(ns) ? "css" : "sanitized-css"
| |
| if (ext === "js" && isSubject) return "javascript"
| |
| if (ext === "json" && isSubject) return "json"
| |
| if (ns === 828 && !pageName.endsWith("/doc")) return "lua"
| |
| if (ns === 274 && !pageName.endsWith("/doc")) return "html"
| |
| return "mediawiki"
| |
| }
| |
|
| |
| /** 加载 CodeMirror6 编辑器 */
| |
| async function initEditor() {
| |
| if (!window.CodeMirror6) {
| |
| await import(`${CM_CDN}/dist/mw.min.js`)
| |
| }
| |
| const mode = getPageMode(pageName, namespace)
| |
| cmInstance = await CodeMirror6.fromTextArea($textarea[0], mode, namespace)
| |
|
| |
| // mediawiki 模式需要修复 urlProtocols 可能的转义问题
| |
| if (mode === 'mediawiki') {
| |
| const config = mw.config.get('extCodeMirrorConfig')
| |
| if (config?.urlProtocols?.includes('\\:')) {
| |
| config.urlProtocols = config.urlProtocols.replace(/\\:/g, ':')
| |
| cmInstance.setLanguage('mediawiki', config)
| |
| }
| |
| }
| |
|
| |
| $(".group-codeeditor-main").hide()
| |
| }
| |
|
| |
| /** 初始化按钮 */
| |
| function addButtons() {
| |
| const btnSettings = new OO.ui.ButtonWidget({
| |
| classes: ["tool"],
| |
| icon: "settings",
| |
| framed: false,
| |
| title: "CodeMirror 设置"
| |
| }).on("click", () => {
| |
| $("#cm-settings").trigger("click")
| |
| })
| |
|
| |
| const btnToggle = new OO.ui.ButtonWidget({
| |
| classes: ["tool"],
| |
| icon: "highlight",
| |
| framed: false,
| |
| title: "切换 CodeMirror 编辑器"
| |
| }).on("click", async () => {
| |
| if (cmInstance) {
| |
| cmInstance.toggle()
| |
| $(".group-codeeditor-main").toggle()
| |
| btnSettings.$element.toggle()
| |
| } else {
| |
| await initEditor()
| |
| btnToggle.$element.after(btnSettings.$element)
| |
| }
| |
|
| |
| btnToggle.$element.toggleClass("tool-active")
| |
| const newState = !JSON.parse(localStorage.getItem(localStorageKey) || "true")
| |
| localStorage.setItem(localStorageKey, newState)
| |
| })
| |
|
| |
| $textarea.on("wikiEditor-toolbar-doneInitialSections", () => {
| |
| btnToggle.$element.appendTo("#wikiEditor-section-main > .group-insert")
| |
| })
| |
|
| |
| const $group = $("#wikiEditor-section-main > .group-insert")
| |
| if ($group.length && !$group[0].contains(btnToggle.$element[0])) {
| |
| btnToggle.$element.appendTo($group)
| |
| }
| |
|
| |
| return { btnToggle, btnSettings }
| |
| }
| |
|
| |
| // 加载 wikiEditor 和 UI 图标
| |
| await mw.loader.using(["ext.wikiEditor", "oojs-ui.styles.icons-interactions"])
| |
|
| |
| const { btnToggle, btnSettings } = addButtons()
| |
|
| |
| if (mw.config.get("wgPageContentModel") !== "wikitext" && mw.user.options.get("usecodeeditor")) {
| |
| // 非 wikitext 页面禁用
| |
| localStorage.setItem(localStorageKey, "false")
| |
| return
| |
| }
| |
|
| |
| if (state) {
| |
| await initEditor()
| |
| btnToggle.$element.addClass("tool-active")
| |
| btnToggle.$element.after(btnSettings.$element)
| |
| }
| |
| })()
| |
//IPE配置
/** InPageEdit Preferences */
;(window.InPageEdit = window.InPageEdit || {}).myPreference = {
"doNotCollectMyInfo": false,
"editMinor": true,
"editSummary": "$section ",
"lockToolBox": false,
"redLinkQuickEdit": false,
"outSideClose": false,
"watchList": "watch",
"noConfirmEdit": false,
"plugins": [
"toolbox.js",
"wiki-editor.js",
"code-mirror/cm6.js"
]
}
//IPE
mw.loader.load('https://cdn.jsdelivr.net/npm/mediawiki-inpageedit');
//批量编辑
mw.loader.load("/index.php?title=User:OctoberSama/MassEdit.js&action=raw&ctype=text/javascript");
//缓存清除
mw.loader.load("https://cdn.jsdelivr.net/gh/BearBin1215/MoegirlPedia@master/dist/gadgets/OneKeyPurge.min.js");
//高级搜索
mw.loader.load("https://cdn.jsdelivr.net/gh/BearBin1215/MoegirlPedia@master/dist/gadgets/AdvancedSearch.min.js");
//辅助工具ListEnhancer
mw.loader.load("https://zh.moegirl.org.cn/index.php?title=User:BearBin/js/ListEnhancer.js&action=raw&ctype=text/javascript");