User:OctoberSama/common.js:修订间差异
来自OTTOWiki
更多操作
![]() OctoberSama(留言 | 贡献) 小 |
![]() OctoberSama(留言 | 贡献) 小 |
||
第32行: | 第32行: | ||
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 */ | |||
const $textarea = $( | /** | ||
* @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 | if (!$textarea.length) return | ||
const | const CM_CDN = 'https://testingcf.jsdelivr.net/npm/@bhsd/codemirror-mediawiki@latest' | ||
const | 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`) | |||
if ( | |||
} | } | ||
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() | |||
const | } | ||
/** 初始化按钮 */ | |||
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 图标 | ||
mw. | 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) | |||
} | |||
})() |
2025年7月5日 (六) 13:36的版本
//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");
/* 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)
}
})()