|
|
(未显示同一用户的5个中间版本) |
第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"); |
|
| |
|
| (async function() {
| | //codemirror |
| // Constants
| | //mw.loader.load("/index.php?title=User:OctoberSama/codemirror6.js&action=raw&ctype=text/javascript"); |
| const CM_CDN = 'https://testingcf.jsdelivr.net/npm/@bhsd/codemirror-mediawiki';
| |
| | |
| // Function to load external scripts
| |
| function loadScript(url) {
| |
| return new Promise((resolve, reject) => {
| |
| const script = document.createElement('script');
| |
| script.src = url;
| |
| script.onload = resolve;
| |
| script.onerror = reject;
| |
| document.head.appendChild(script);
| |
| });
| |
| }
| |
| | |
| // LocalObjectStorage class for managing user preferences
| |
| class LocalObjectStorage {
| |
| constructor(prefix) {
| |
| this.prefix = prefix;
| |
| }
| |
| getItem(key, defaultValue) {
| |
| const value = localStorage.getItem(this.prefix + key);
| |
| return value !== null ? JSON.parse(value) : defaultValue;
| |
| }
| |
| setItem(key, value) {
| |
| localStorage.setItem(this.prefix + key, JSON.stringify(value));
| |
| }
| |
| }
| |
| | |
| // Determine the editing mode based on page namespace and extension
| |
| function getPageMode(page) {
| |
| const {namespace, title} = page;
| |
| const ext = page.getExtension()?.toLowerCase();
| |
| const isSubject = namespace % 2 === 0;
| |
| if (ext === 'css' && isSubject) {
| |
| return [2, 8, 2300].includes(namespace) ? 'css' : 'sanitized-css';
| |
| } else if (ext === 'js' && isSubject) {
| |
| return 'javascript';
| |
| } else if (ext === 'json' && isSubject) {
| |
| return 'json';
| |
| } else if (namespace === 828 && !title.endsWith('/doc')) {
| |
| return 'lua';
| |
| } else if (namespace === 274 && !title.endsWith('/doc')) {
| |
| return 'html';
| |
| }
| |
| return 'mediawiki';
| |
| }
| |
| | |
| // Render the CodeMirror6 editor
| |
| async function renderEditor(target, page) {
| |
| if (target.length) {
| |
| const mode = getPageMode(page);
| |
| const cm = await CodeMirror6.fromTextArea(target[0], mode);
| |
| return cm;
| |
| }
| |
| }
| |
| | |
| // Exit if not an edit or submit page
| |
| if (!["edit", "submit"].includes(mw.config.get("wgAction"))) {
| |
| return;
| |
| }
| |
| | |
| // Wait for the page to load
| |
| await $.ready;
| |
| | |
| // Load MediaWiki Title module
| |
| await mw.loader.using('mediawiki.Title');
| |
| | |
| // Load CodeMirror6 if not already present
| |
| if (!window.CodeMirror6) {
| |
| await loadScript(`${CM_CDN}/dist/mw.min.js`);
| |
| }
| |
| | |
| // Get page title and namespace
| |
| const pageTitle = mw.config.get("wgPageName");
| |
| const namespace = mw.config.get("wgNamespaceNumber");
| |
| const page = new mw.Title(pageTitle, namespace);
| |
| | |
| // Target the default text area
| |
| const $textarea = $("#wpTextbox1");
| |
| | |
| // Check if WikiEditor is enabled
| |
| const isAdvanced = ["loading", "loaded", "executing", "ready"].includes(mw.loader.getState("ext.wikiEditor"));
| |
| | |
| // Initialize local storage for user preferences
| |
| const localObjectStorage = new LocalObjectStorage("my-codemirror-");
| |
| let state = localObjectStorage.getItem("enabled", true);
| |
| | |
| // Create a toggle button
| |
| const $switchDiv = $('<div>').prependTo('#editform');
| |
| const $button = $('<button>').text('Toggle CodeMirror6').appendTo($switchDiv);
| |
| let cm = null;
| |
| | |
| // Toggle button click handler
| |
| $button.on('click', async function() {
| |
| state = !state;
| |
| localObjectStorage.setItem("enabled", state);
| |
| if (state) {
| |
| cm = await renderEditor($textarea, page);
| |
| if (isAdvanced) {
| |
| $('#wikiEditor-ui-toolbar').hide();
| |
| }
| |
| } else {
| |
| if (cm) {
| |
| cm.toTextArea(); // Note: Confirm this method exists in CodeMirror6
| |
| cm = null;
| |
| }
| |
| if (isAdvanced) {
| |
| $('#wikiEditor-ui-toolbar').show();
| |
| }
| |
| }
| |
| });
| |
| | |
| // Apply initial state
| |
| if (state) {
| |
| cm = await renderEditor($textarea, page);
| |
| if (isAdvanced) {
| |
| $('#wikiEditor-ui-toolbar').hide();
| |
| }
| |
| }
| |
| })();
| |
//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");
//codemirror
//mw.loader.load("/index.php?title=User:OctoberSama/codemirror6.js&action=raw&ctype=text/javascript");