Event.js:修订间差异
来自卡厄思梦境WIKI
创建页面,内容为“(function() { 'use strict'; // 等待页面加载完成 if (mw.config.get('wgPageName') !== 'MediaWiki:Event') { return; } var eventData = {}; var selectedEvent = null; // 地区和稀有度选项 var areaOptions = ['蓝壶', '双星之影', '雾之都市']; var rarityOptions = ['一般', '稀有', '传说']; // 创建主界面 function createInterface() { var container = document.getElementById('m…” |
无编辑摘要 |
||
| (未显示同一用户的1个中间版本) | |||
| 第1行: | 第1行: | ||
(function() { | (function() { | ||
'use strict'; | 'use strict'; | ||
// 加载CSS | |||
mw.loader.load('/index.php?title=MediaWiki:Event.css&action=raw&ctype=text/css', 'text/css'); | |||
// 等待页面加载完成 | // 等待页面加载完成 | ||
if (mw.config.get('wgPageName') !== 'MediaWiki:Event') { | if (mw.config.get('wgPageName') !== 'MediaWiki:Event') { | ||
| 第294行: | 第297行: | ||
} | } | ||
// | // 如果是编辑且名称改变了,删除原来的 | ||
if (originalName && originalName !== eventName) { | if (originalName && originalName !== eventName) { | ||
delete eventData[originalName]; | delete eventData[originalName]; | ||
| 第358行: | 第361行: | ||
try { | try { | ||
var regex = /event\["([^"]+)"\]\s*=\s*\{([^}]+\}[^}]+)\}/g; | var regex = /event\["([^"]+)"\]\s*=\s*\{([^}]+\}[^}]+)\}/g; | ||
var match; | var match; | ||
| 第367行: | 第369行: | ||
var content = match[2]; | var content = match[2]; | ||
alert('导入功能需要更复杂的Lua解析器实现'); | alert('导入功能需要更复杂的Lua解析器实现'); | ||
return; | return; | ||
| 第380行: | 第380行: | ||
} | } | ||
// | // 等待DOM加载完成后初始化 | ||
$(function() { | |||
createInterface(); | createInterface(); | ||
}); | }); | ||
})(); | })(); | ||
2025年10月18日 (六) 13:21的最新版本
(function() {
'use strict';
// 加载CSS
mw.loader.load('/index.php?title=MediaWiki:Event.css&action=raw&ctype=text/css', 'text/css');
// 等待页面加载完成
if (mw.config.get('wgPageName') !== 'MediaWiki:Event') {
return;
}
var eventData = {};
var selectedEvent = null;
// 地区和稀有度选项
var areaOptions = ['蓝壶', '双星之影', '雾之都市'];
var rarityOptions = ['一般', '稀有', '传说'];
// 创建主界面
function createInterface() {
var container = document.getElementById('mw-content-text');
if (!container) return;
container.innerHTML = '';
var html = '<div class="event-manager">' +
'<h2>事件管理器</h2>' +
'<div class="event-toolbar">' +
'<button id="btn-add-event">新增事件</button>' +
'<button id="btn-export">导出Lua代码</button>' +
'<button id="btn-import">导入数据</button>' +
'</div>' +
'<div class="event-list" id="event-list"></div>' +
'<div class="output-container" id="output-container" style="display:none;">' +
'<h3>导出的Lua代码</h3>' +
'<pre id="lua-output"></pre>' +
'<button class="copy-btn" id="btn-copy">复制代码</button>' +
'</div>' +
'</div>' +
'<div class="event-overlay" id="event-overlay"></div>' +
'<div class="event-form" id="event-form"></div>';
container.innerHTML = html;
// 绑定事件
document.getElementById('btn-add-event').addEventListener('click', function() {
showEventForm();
});
document.getElementById('btn-export').addEventListener('click', exportToLua);
document.getElementById('btn-import').addEventListener('click', importData);
document.getElementById('btn-copy').addEventListener('click', copyLuaCode);
document.getElementById('event-overlay').addEventListener('click', hideEventForm);
// 加载示例数据
loadSampleData();
renderEventList();
}
// 加载示例数据
function loadSampleData() {
eventData["小偷们 1"] = {
id: "uk_300_s02_01a",
area: "蓝壶",
tag: "战斗,获得信用点数",
rarity: "一般",
option: {
1: "购买匕首",
2: "偷走他们的箱子",
3: "赞扬这项技术"
},
effect: {
1: "待补充",
2: "遭遇战斗,获得{{文本|橙|120}}信用点数",
3: "待补充"
}
};
}
// 渲染事件列表
function renderEventList() {
var listContainer = document.getElementById('event-list');
listContainer.innerHTML = '';
for (var eventName in eventData) {
var event = eventData[eventName];
var itemDiv = document.createElement('div');
itemDiv.className = 'event-item';
itemDiv.dataset.eventName = eventName;
itemDiv.innerHTML = '<div class="event-item-header">' +
'<div class="event-item-title">' + eventName + '</div>' +
'<div>ID: ' + event.id + '</div>' +
'</div>' +
'<div class="event-item-meta">' +
'<span>地区: ' + event.area + '</span>' +
'<span>稀有度: ' + event.rarity + '</span>' +
'<span>标签: ' + event.tag + '</span>' +
'</div>';
itemDiv.addEventListener('click', function() {
var name = this.dataset.eventName;
showEventForm(name);
});
listContainer.appendChild(itemDiv);
}
}
// 显示事件表单
function showEventForm(eventName) {
var overlay = document.getElementById('event-overlay');
var form = document.getElementById('event-form');
overlay.className = 'event-overlay active';
form.className = 'event-form active';
var isEdit = !!eventName;
var event = isEdit ? eventData[eventName] : {
id: '',
area: '',
tag: '',
rarity: '一般',
option: {1: '', 2: '', 3: ''},
effect: {1: '', 2: '', 3: ''}
};
var formHtml = '<h3>' + (isEdit ? '编辑事件' : '新增事件') + '</h3>' +
'<div class="form-group">' +
'<label>事件名称</label>' +
'<input type="text" id="event-name" value="' + (eventName || '') + '">' +
'</div>' +
'<div class="form-group">' +
'<label>ID</label>' +
'<input type="text" id="event-id" value="' + event.id + '">' +
'</div>' +
'<div class="form-group">' +
'<label>地区(可多选)</label>' +
'<div class="checkbox-group">';
// 地区复选框
var selectedAreas = event.area ? event.area.split(',').map(function(s) { return s.trim(); }) : [];
areaOptions.forEach(function(area) {
var checked = selectedAreas.indexOf(area) !== -1 ? 'checked' : '';
formHtml += '<label><input type="checkbox" name="area" value="' + area + '" ' + checked + '> ' + area + '</label>';
});
formHtml += '</div></div>' +
'<div class="form-group">' +
'<label>标签(用逗号分隔)</label>' +
'<input type="text" id="event-tag" value="' + event.tag + '" placeholder="例如: 战斗,获得信用点数">' +
'</div>' +
'<div class="form-group">' +
'<label>稀有度</label>' +
'<select id="event-rarity">';
rarityOptions.forEach(function(rarity) {
var selected = event.rarity === rarity ? 'selected' : '';
formHtml += '<option value="' + rarity + '" ' + selected + '>' + rarity + '</option>';
});
formHtml += '</select></div>' +
'<div class="form-group">' +
'<label>选项</label>' +
'<div class="options-container">';
for (var i = 1; i <= 3; i++) {
formHtml += '<div class="option-item">' +
'<span class="option-number">' + i + '.</span>' +
'<input type="text" id="option-' + i + '" value="' + (event.option[i] || '') + '" placeholder="选项 ' + i + '">' +
'</div>';
}
formHtml += '</div></div>' +
'<div class="form-group">' +
'<label>效果</label>' +
'<div class="effects-container">';
for (var j = 1; j <= 3; j++) {
formHtml += '<div class="effect-item">' +
'<span class="option-number">' + j + '.</span>' +
'<div style="flex: 1;">' +
'<div class="effect-controls">' +
'<button class="text-format-btn" data-effect-id="' + j + '">橙色文本</button>' +
'</div>' +
'<textarea id="effect-' + j + '" placeholder="效果 ' + j + '">' + (event.effect[j] || '') + '</textarea>' +
'</div>' +
'</div>';
}
formHtml += '</div></div>' +
'<div class="form-buttons">';
if (isEdit) {
formHtml += '<button class="btn-delete" id="btn-delete">删除</button>';
}
formHtml += '<button class="btn-cancel" id="btn-cancel">取消</button>' +
'<button class="btn-save" id="btn-save">保存</button>' +
'</div>';
form.innerHTML = formHtml;
// 绑定表单事件
document.getElementById('btn-save').addEventListener('click', function() {
saveEvent(eventName);
});
document.getElementById('btn-cancel').addEventListener('click', hideEventForm);
if (isEdit) {
document.getElementById('btn-delete').addEventListener('click', function() {
if (confirm('确定要删除事件 "' + eventName + '" 吗?')) {
delete eventData[eventName];
renderEventList();
hideEventForm();
}
});
}
// 绑定橙色文本按钮
var formatBtns = document.querySelectorAll('.text-format-btn');
formatBtns.forEach(function(btn) {
btn.addEventListener('click', function(e) {
e.preventDefault();
var effectId = this.dataset.effectId;
insertOrangeText(effectId);
});
});
}
// 插入橙色文本模板
function insertOrangeText(effectId) {
var textarea = document.getElementById('effect-' + effectId);
var start = textarea.selectionStart;
var end = textarea.selectionEnd;
var selectedText = textarea.value.substring(start, end);
var insertText = selectedText ?
'{{文本|橙|' + selectedText + '}}' :
'{{文本|橙|}}';
var newValue = textarea.value.substring(0, start) +
insertText +
textarea.value.substring(end);
textarea.value = newValue;
// 设置光标位置
if (!selectedText) {
var cursorPos = start + 7; // {{文本|橙| 的长度
textarea.setSelectionRange(cursorPos, cursorPos);
}
textarea.focus();
}
// 隐藏表单
function hideEventForm() {
document.getElementById('event-overlay').className = 'event-overlay';
document.getElementById('event-form').className = 'event-form';
}
// 保存事件
function saveEvent(originalName) {
var eventName = document.getElementById('event-name').value.trim();
if (!eventName) {
alert('请输入事件名称');
return;
}
// 获取选中的地区
var areaCheckboxes = document.querySelectorAll('input[name="area"]:checked');
var areas = [];
areaCheckboxes.forEach(function(cb) {
areas.push(cb.value);
});
var newEvent = {
id: document.getElementById('event-id').value.trim(),
area: areas.join(','),
tag: document.getElementById('event-tag').value.trim(),
rarity: document.getElementById('event-rarity').value,
option: {},
effect: {}
};
for (var i = 1; i <= 3; i++) {
var optionValue = document.getElementById('option-' + i).value.trim();
var effectValue = document.getElementById('effect-' + i).value.trim();
if (optionValue) {
newEvent.option[i] = optionValue;
newEvent.effect[i] = effectValue || '待补充';
}
}
// 如果是编辑且名称改变了,删除原来的
if (originalName && originalName !== eventName) {
delete eventData[originalName];
}
eventData[eventName] = newEvent;
renderEventList();
hideEventForm();
}
// 导出为Lua代码
function exportToLua() {
var lua = 'local event = {}\n\n';
for (var eventName in eventData) {
var event = eventData[eventName];
lua += 'event["' + eventName + '"] = {\n';
lua += ' id = "' + event.id + '",\n';
lua += ' area = "' + event.area + '",\n';
lua += ' tag = "' + event.tag + '",\n';
lua += ' rarity = "' + event.rarity + '",\n';
lua += ' option = {\n';
for (var opt in event.option) {
lua += ' [' + opt + '] = "' + event.option[opt] + '",\n';
}
lua += ' },\n';
lua += ' effect = {\n';
for (var eff in event.effect) {
lua += ' [' + eff + '] = "' + event.effect[eff] + '",\n';
}
lua += ' }\n';
lua += '}\n\n';
}
lua += 'return event';
document.getElementById('lua-output').textContent = lua;
document.getElementById('output-container').style.display = 'block';
}
// 复制Lua代码
function copyLuaCode() {
var luaOutput = document.getElementById('lua-output').textContent;
var textarea = document.createElement('textarea');
textarea.value = luaOutput;
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
alert('代码已复制到剪贴板');
}
// 导入数据
function importData() {
var input = prompt('请粘贴Lua代码:');
if (!input) return;
try {
var regex = /event\["([^"]+)"\]\s*=\s*\{([^}]+\}[^}]+)\}/g;
var match;
var newData = {};
while ((match = regex.exec(input)) !== null) {
var name = match[1];
var content = match[2];
alert('导入功能需要更复杂的Lua解析器实现');
return;
}
eventData = newData;
renderEventList();
} catch (e) {
alert('导入失败: ' + e.message);
}
}
// 等待DOM加载完成后初始化
$(function() {
createInterface();
});
})();