卡厄思
梦
境
菜单
首页
回到首页
WIKI工具
全站样式
全站JS
修改导航栏
测试
沙盒
可视化管理器
战斗员管理器
卡牌管理器
伙伴管理器
装备管理器
词典管理器
图鉴
战斗员
伙伴
装备
怪物卡牌
中立卡牌
词典
小工具
配队模拟器
节奏榜生成器
搜索
链入页面
相关更改
特殊页面
页面信息
最近更改
登录
MediaWiki
查看“︁Dictionary.js”︁的源代码
←
MediaWiki:Dictionary.js
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。 如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
(function() { 'use strict'; if (mw.config.get('wgPageName') !== 'MediaWiki:Dictionary') { return; } var API_URL = mw.util.wikiScript('api'); var dictionaryData = {}; // 加载词典数据 function loadDictionaryData() { $.ajax({ url: API_URL, data: { action: 'scribunto-console', title: 'Module:词典/data', question: 'return require("Module:词典/data").dictionary', format: 'json' }, dataType: 'json', success: function(response) { if (response && response.parse) { try { dictionaryData = JSON.parse(response.parse.text['*']); renderDictionary(); } catch(e) { console.error('解析数据失败:', e); } } }, error: function() { // 备用方案:直接从页面加载 loadFromModulePage(); } }); } // 从模块页面加载数据 function loadFromModulePage() { $.get(mw.util.getUrl('Module:词典/data', {action: 'raw'}), function(content) { try { dictionaryData = parseLuaTable(content); renderDictionary(); } catch(e) { console.error('解析Lua失败:', e); } }); } // 简单的Lua表解析器 function parseLuaTable(luaContent) { var result = {}; var dictMatch = luaContent.match(/data\.dictionary\s*=\s*\{([\s\S]*?)\}/); if (!dictMatch) return result; var content = dictMatch[1]; var entryRegex = /\["([^"]+)"\]\s*=\s*\{([\s\S]*?)\},?\s*(?=\["|$)/g; var match; while ((match = entryRegex.exec(content)) !== null) { var key = match[1]; var itemsContent = match[2]; result[key] = []; var itemRegex = /\{([^}]+)\}/g; var itemMatch; while ((itemMatch = itemRegex.exec(itemsContent)) !== null) { var item = {}; var props = itemMatch[1].split(','); props.forEach(function(prop) { var propMatch = prop.match(/\["([^"]+)"\]\s*=\s*"([^"]*)"/); if (propMatch) { item[propMatch[1]] = propMatch[2]; } }); result[key].push(item); } } return result; } // 渲染词典界面 function renderDictionary() { var container = $('#dictionary-editor'); if (!container.length) { container = $('<div>').attr('id', 'dictionary-editor').appendTo('#mw-content-text'); } container.empty(); // 添加标题和新建按钮 var header = $('<div>').addClass('dict-header').appendTo(container); $('<div>').addClass('dict-title').text('词典编辑器').appendTo(header); $('<div>').addClass('dict-btn dict-btn-primary').text('+ 新建词条').click(showAddEntryDialog).appendTo(header); // 渲染词条列表 var list = $('<div>').addClass('dict-list').appendTo(container); Object.keys(dictionaryData).sort().forEach(function(key) { var items = dictionaryData[key]; items.forEach(function(item, index) { var entry = $('<div>').addClass('dict-entry').appendTo(list); var entryHeader = $('<div>').addClass('dict-entry-header').appendTo(entry); $('<div>').addClass('dict-entry-name').text(key).appendTo(entryHeader); var actions = $('<div>').addClass('dict-entry-actions').appendTo(entryHeader); $('<div>').addClass('dict-btn dict-btn-small').text('编辑') .click(function() { showEditDialog(key, index); }).appendTo(actions); $('<div>').addClass('dict-btn dict-btn-small dict-btn-danger').text('删除') .click(function() { deleteEntry(key, index); }).appendTo(actions); var entryBody = $('<div>').addClass('dict-entry-body').appendTo(entry); var colorClass = 'dict-color-' + (item['颜色'] || 'white'); $('<div>').addClass('dict-field').html('<span class="dict-label">颜色:</span> <span class="' + colorClass + '">' + (item['颜色'] || '') + '</span>').appendTo(entryBody); $('<div>').addClass('dict-field').html('<span class="dict-label">类型:</span> ' + (item['类型'] || '')).appendTo(entryBody); $('<div>').addClass('dict-field').html('<span class="dict-label">图标:</span> ' + (item['icon'] || '')).appendTo(entryBody); $('<div>').addClass('dict-field').html('<span class="dict-label">描述:</span> ' + (item['描述'] || '')).appendTo(entryBody); }); }); } // 显示添加词条对话框 function showAddEntryDialog() { showDialog('新建词条', {}, function(data) { var name = data.name; delete data.name; if (!dictionaryData[name]) { dictionaryData[name] = []; } dictionaryData[name].push(data); saveDictionary(); }, true); } // 显示编辑对话框 function showEditDialog(key, index) { var item = dictionaryData[key]; var data = $.extend({name: key}, item[index]); showDialog('编辑词条', data, function(newData) { var newName = newData.name; delete newData.name; if (newName !== key) { // 名称改变,删除旧的 dictionaryData[key].splice(index, 1); if (dictionaryData[key].length === 0) { delete dictionaryData[key]; } if (!dictionaryData[newName]) { dictionaryData[newName] = []; } dictionaryData[newName].push(newData); } else { dictionaryData[key][index] = newData; } saveDictionary(); }, false); } // 显示对话框 function showDialog(title, data, callback, isNew) { var overlay = $('<div>').addClass('dict-overlay').appendTo('body'); var dialog = $('<div>').addClass('dict-dialog').appendTo(overlay); $('<div>').addClass('dict-dialog-title').text(title).appendTo(dialog); var form = $('<div>').addClass('dict-form').appendTo(dialog); // 名称字段 var nameField = createField('名称', 'text', data.name || '', isNew); form.append(nameField); // 类型字段(下拉) var typeField = createSelectField('类型', ['卡牌机制', '战斗员专属机制', 'buff', 'debuff'], data['类型'] || ''); form.append(typeField); // 颜色字段(下拉) var colorField = createSelectField('颜色', ['白', '蓝', '红', '橙', '彩'], data['颜色'] || ''); form.append(colorField); // 图标字段 var iconField = createField('图标', 'text', data['icon'] || '', true); form.append(iconField); // 描述字段 var descField = createField('描述', 'textarea', data['描述'] || '', true); form.append(descField); var actions = $('<div>').addClass('dict-dialog-actions').appendTo(dialog); $('<div>').addClass('dict-btn dict-btn-secondary').text('取消').click(function() { overlay.remove(); }).appendTo(actions); $('<div>').addClass('dict-btn dict-btn-primary').text('保存').click(function() { var formData = { name: nameField.find('input').val(), '类型': typeField.find('.dict-select').attr('data-value'), '颜色': colorField.find('.dict-select').attr('data-value'), 'icon': iconField.find('input').val(), '描述': descField.find('textarea').val() }; if (!formData.name) { alert('请输入名称'); return; } overlay.remove(); callback(formData); }).appendTo(actions); } // 创建表单字段 function createField(label, type, value, editable) { var field = $('<div>').addClass('dict-form-group'); $('<div>').addClass('dict-form-label').text(label + ':').appendTo(field); var input; if (type === 'textarea') { input = $('<textarea>').addClass('dict-input').val(value).attr('rows', 3); } else { input = $('<input>').addClass('dict-input').attr('type', type).val(value); } if (!editable) { input.attr('readonly', 'readonly'); } input.appendTo(field); return field; } // 创建下拉选择字段 function createSelectField(label, options, value) { var field = $('<div>').addClass('dict-form-group'); $('<div>').addClass('dict-form-label').text(label + ':').appendTo(field); var selectWrapper = $('<div>').addClass('dict-select-wrapper').appendTo(field); var selectDisplay = $('<div>').addClass('dict-select') .attr('data-value', value || options[0]) .text(value || options[0]) .appendTo(selectWrapper); var dropdown = $('<div>').addClass('dict-dropdown').appendTo(selectWrapper); options.forEach(function(opt) { $('<div>').addClass('dict-option').text(opt).click(function() { selectDisplay.text(opt).attr('data-value', opt); dropdown.hide(); }).appendTo(dropdown); }); selectDisplay.click(function(e) { e.stopPropagation(); $('.dict-dropdown').hide(); dropdown.toggle(); }); $(document).click(function() { dropdown.hide(); }); return field; } // 删除词条 function deleteEntry(key, index) { if (!confirm('确定要删除这个词条吗?')) { return; } dictionaryData[key].splice(index, 1); if (dictionaryData[key].length === 0) { delete dictionaryData[key]; } saveDictionary(); } // 保存词典到模块 function saveDictionary() { var luaCode = generateLuaCode(); $.post(API_URL, { action: 'edit', title: 'Module:词典/data', text: luaCode, summary: '通过词典编辑器更新', token: mw.user.tokens.get('csrfToken'), format: 'json' }).done(function(response) { if (response.edit && response.edit.result === 'Success') { mw.notify('保存成功!', {type: 'success'}); renderDictionary(); } else { mw.notify('保存失败:' + (response.error ? response.error.info : '未知错误'), {type: 'error'}); } }).fail(function() { mw.notify('保存失败:网络错误', {type: 'error'}); }); } // 生成Lua代码 function generateLuaCode() { var lines = ['local data = {}', '', 'data.dictionary = {']; var keys = Object.keys(dictionaryData).sort(); keys.forEach(function(key, keyIndex) { lines.push(' ["' + key + '"] = {'); dictionaryData[key].forEach(function(item, itemIndex) { lines.push(' {'); lines.push(' ["icon"] = "' + (item.icon || '') + '",'); lines.push(' ["类型"] = "' + (item['类型'] || '') + '",'); lines.push(' ["颜色"] = "' + (item['颜色'] || '') + '",'); lines.push(' ["描述"] = "' + (item['描述'] || '') + '",'); lines.push(' }' + (itemIndex < dictionaryData[key].length - 1 ? ',' : '')); }); lines.push(' }' + (keyIndex < keys.length - 1 ? ',' : '')); }); lines.push('}', '', 'return data', ''); return lines.join('\n'); } // 初始化 $(function() { loadDictionaryData(); }); })();
返回
MediaWiki:Dictionary.js
。