卡厄思
梦
境
菜单
首页
回到首页
WIKI工具
全站样式
全站JS
修改导航栏
测试
沙盒
可视化管理器
战斗员管理器
卡牌管理器
伙伴管理器
装备管理器
词典管理器
图鉴
战斗员
伙伴
装备
怪物卡牌
中立卡牌
词典
小工具
配队模拟器
节奏榜生成器
搜索
链入页面
相关更改
特殊页面
页面信息
最近更改
登录
MediaWiki
查看“︁Card.js”︁的源代码
←
MediaWiki:Card.js
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。 如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
// MediaWiki:Card.js (function() { 'use strict'; // 检查是否在正确的页面 if (mw.config.get('wgPageName') !== 'MediaWiki:Card') { return; } var api = new mw.Api(); var cardData = {}; var currentCharacter = null; // 获取所有"模块:卡牌/角色名"页面 function loadAllCardModules() { api.get({ action: 'query', list: 'allpages', apprefix: '卡牌/', apnamespace: 828, // Module namespace aplimit: 'max' }).done(function(data) { var pages = data.query.allpages; var select = $('#character-select'); select.empty(); select.append('<option value="">选择角色</option>'); pages.forEach(function(page) { var characterName = page.title.replace('模块:卡牌/', ''); select.append($('<option>').val(characterName).text(characterName)); }); }); } // 加载指定角色的卡牌数据 function loadCharacterCards(characterName) { api.get({ action: 'query', prop: 'revisions', titles: '模块:卡牌/' + characterName, rvprop: 'content', rvslots: 'main' }).done(function(data) { var pages = data.query.pages; for (var pageId in pages) { if (pages[pageId].revisions) { var content = pages[pageId].revisions[0].slots.main['*']; parseModuleContent(content, characterName); } } }); } // 解析模块内容 function parseModuleContent(content, characterName) { try { // 提取card表和cardOrder数组 var cardMatch = content.match(/local\s+card\s*=\s*\{[\s\S]*?\n\}/); var orderMatch = content.match(/local\s+cardOrder\s*=\s*\{[\s\S]*?\n\}/); if (cardMatch && orderMatch) { // 转换Lua表格式为JavaScript对象 var cardDataStr = cardMatch[0] .replace(/local\s+card\s*=/, 'var cardData =') .replace(/\["([^"]+)"\]/g, '"$1"') .replace(/\[(\d+)\]/g, '$1') .replace(/nil/g, 'null'); var orderDataStr = orderMatch[0] .replace(/local\s+cardOrder\s*=/, 'var cardOrder =') .replace(/"/g, '"'); eval(cardDataStr); eval(orderDataStr); currentCharacter = characterName; displayCards(cardData, cardOrder); } } catch (e) { console.error('解析失败:', e); mw.notify('解析模块内容失败', { type: 'error' }); } } // 显示卡牌列表 function displayCards(cards, order) { var container = $('#cards-container'); container.empty(); // 按照顺序显示卡牌 (order || Object.keys(cards)).forEach(function(cardName) { if (cards[cardName]) { var cardDiv = createCardElement(cardName, cards[cardName]); container.append(cardDiv); } }); } // 创建卡牌元素 function createCardElement(cardName, variants) { var cardDiv = $('<div>').addClass('card-item'); var header = $('<h3>').text(cardName).click(function() { $(this).next('.card-variants').toggle(); }); cardDiv.append(header); var variantsDiv = $('<div>').addClass('card-variants'); variants.forEach(function(variant, index) { var variantDiv = createVariantElement(cardName, variant, index); variantsDiv.append(variantDiv); }); // 添加新变体按钮 var addButton = $('<button>').text('添加变体').click(function() { addCardVariant(cardName); }); variantsDiv.append(addButton); cardDiv.append(variantsDiv); return cardDiv; } // 创建变体元素 function createVariantElement(cardName, variant, index) { var variantDiv = $('<div>').addClass('card-variant'); var fields = [ { key: 'art', label: '图片', type: 'text' }, { key: '卡组', label: '卡组', type: 'select', options: ['起始卡牌', '独特卡牌', '衍生卡牌', '灵光一闪', '神光一闪'] }, { key: '属性', label: '属性', type: 'select', options: ['热情', '秩序', '正义', '本能', '虚无'] }, { key: '稀有度', label: '稀有度', type: 'select', options: ['白', '蓝', '橙', '彩'] }, { key: 'AP', label: 'AP', type: 'number' }, { key: '类型', label: '类型', type: 'select', options: ['攻击', '技能', '强化', '状态异常'] }, { key: '机制', label: '机制', type: 'text' }, { key: '描述', label: '描述', type: 'textarea' }, { key: '衍生卡牌', label: '衍生卡牌', type: 'text' } ]; fields.forEach(function(field) { var fieldDiv = $('<div>').addClass('field'); var label = $('<label>').text(field.label + ': '); var input; if (field.type === 'select') { input = $('<select>'); $('<option>').val('').text('--选择--').appendTo(input); field.options.forEach(function(opt) { $('<option>').val(opt).text(opt).appendTo(input); }); input.val(variant[field.key] || ''); } else if (field.type === 'textarea') { input = $('<textarea>').val(variant[field.key] || ''); } else { input = $('<input>').attr('type', field.type).val(variant[field.key] || ''); } input.attr('data-card', cardName) .attr('data-index', index) .attr('data-field', field.key); fieldDiv.append(label).append(input); variantDiv.append(fieldDiv); }); // 删除按钮 var deleteButton = $('<button>').text('删除').click(function() { deleteCardVariant(cardName, index); }); variantDiv.append(deleteButton); return variantDiv; } // 添加新卡牌 function addNewCard() { var cardName = prompt('输入新卡牌名称:'); if (!cardName) return; cardData[cardName] = [{ art: '', '卡组': '', '属性': '', '稀有度': '', 'AP': 1, '类型': '', '机制': '', '描述': '', '衍生卡牌': '' }]; displayCards(cardData, Object.keys(cardData)); } // 添加卡牌变体 function addCardVariant(cardName) { if (!cardData[cardName]) { cardData[cardName] = []; } cardData[cardName].push({ art: '', '卡组': '', '属性': '', '稀有度': '', 'AP': 1, '类型': '', '机制': '', '描述': '', '衍生卡牌': '' }); displayCards(cardData, Object.keys(cardData)); } // 删除卡牌变体 function deleteCardVariant(cardName, index) { if (confirm('确认删除这个变体?')) { cardData[cardName].splice(index, 1); if (cardData[cardName].length === 0) { delete cardData[cardName]; } displayCards(cardData, Object.keys(cardData)); } } // 保存数据 function saveCardData() { if (!currentCharacter) { mw.notify('请先选择角色', { type: 'warning' }); return; } // 收集表单数据更新cardData $('#cards-container input, #cards-container select, #cards-container textarea').each(function() { var $this = $(this); var cardName = $this.data('card'); var index = $this.data('index'); var field = $this.data('field'); var value = $this.val(); if (cardData[cardName] && cardData[cardName][index]) { if (field === 'AP') { value = parseInt(value) || 0; } if (value) { cardData[cardName][index][field] = value; } else { delete cardData[cardName][index][field]; } } }); var moduleContent = generateModuleContent(cardData); api.postWithToken('csrf', { action: 'edit', title: '模块:卡牌/' + currentCharacter, text: moduleContent, summary: '通过卡牌管理器更新' }).done(function() { mw.notify('保存成功!', { type: 'success' }); }).fail(function(code, data) { mw.notify('保存失败: ' + (data.error ? data.error.info : code), { type: 'error' }); }); } // 生成模块内容 function generateModuleContent(data) { var content = 'local p = {}\n\n'; // 生成cardOrder content += 'local cardOrder = {\n'; Object.keys(data).forEach(function(cardName) { content += ' "' + cardName + '",\n'; }); content += '}\n\n'; // 生成card表 content += 'local card = {\n'; Object.keys(data).forEach(function(cardName) { content += ' ["' + cardName + '"] = {\n'; data[cardName].forEach(function(variant) { content += ' {\n'; Object.keys(variant).forEach(function(key) { var value = variant[key]; if (value !== null && value !== undefined && value !== '') { if (key === 'AP' || !isNaN(value)) { content += ' ["' + key + '"] = ' + value + ',\n'; } else { content += ' ["' + key + '"] = "' + value.replace(/"/g, '\\"') + '",\n'; } } }); content += ' },\n'; }); content += ' },\n'; }); content += '}\n\n'; content += 'p.card = card\n'; content += 'p.cardOrder = cardOrder\n\n'; content += 'return p\n'; return content; } // 初始化页面 $(function() { loadAllCardModules(); // 绑定事件 $('#character-select').on('change', function() { var characterName = $(this).val(); if (characterName) { loadCharacterCards(characterName); } }); $('#add-card-btn').click(addNewCard); $('#save-btn').click(saveCardData); $('#refresh-btn').click(loadAllCardModules); }); })();
该页面使用的模板:
模板:图标
(
查看源代码
)
模板:描边
(
查看源代码
)
模板:描边/颜色
(
查看源代码
)
模板:文本
(
查看源代码
)
模板:词典
(
查看源代码
)
模块:文本
(
查看源代码
)
模块:词典
(
查看源代码
)
模块:词典/data
(
查看源代码
)
返回
MediaWiki:Card.js
。