From 115d67ed7ceeb497734e1a855e9e7c034c395b45 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Thu, 23 Oct 2025 22:01:47 +0800 Subject: [PATCH] Update table-bindings.js --- ui/table-bindings.js | 2038 +----------------------------------------- 1 file changed, 1 insertion(+), 2037 deletions(-) diff --git a/ui/table-bindings.js b/ui/table-bindings.js index 93ca875..0175bb9 100644 --- a/ui/table-bindings.js +++ b/ui/table-bindings.js @@ -1,2037 +1 @@ -import * as TableManager from '../core/table-system/manager.js'; -import { log } from '../core/table-system/logger.js'; -import { extension_settings, getContext } from '/scripts/extensions.js'; -import { extensionName } from '../utils/settings.js'; -import { updateOrInsertTableInChat } from './message-table-renderer.js'; -import { saveSettingsDebounced } from '/script.js'; -import { startBatchFilling } from '../core/table-system/batch-filler.js'; -import { showHtmlModal } from './page-window.js'; -import { DEFAULT_AI_RULE_TEMPLATE, DEFAULT_AI_FLOW_TEMPLATE } from '../core/table-system/settings.js'; -import { world_names, loadWorldInfo } from '/scripts/world-info.js'; -import { safeCharLorebooks, safeLorebookEntries } from '../core/tavernhelper-compatibility.js'; -import { characters, this_chid, eventSource, event_types } from "/script.js"; -import { fetchNccsModels, testNccsApiConnection } from '../core/api/NccsApi.js'; - -const isTouchDevice = () => window.matchMedia('(pointer: coarse)').matches; -const getAllTablesContainer = () => document.getElementById('all-tables-container'); - -let isResizing = false; - - -function toggleRowContextMenu(event) { - event.preventDefault(); - event.stopPropagation(); - - const targetTd = event.target.closest('td.index-col'); - if (!targetTd) return; - - const tableWrapper = targetTd.closest('.amily2-table-wrapper'); - if (!tableWrapper) return; - - const isActive = targetTd.classList.contains('amily2-menu-open'); - - // Close all other open menus (both row and column) - document.querySelectorAll('.amily2-menu-open').forEach(openEl => { - if (openEl !== targetTd) { - openEl.classList.remove('amily2-menu-open'); - const otherWrapper = openEl.closest('.amily2-table-wrapper'); - if (otherWrapper) { - otherWrapper.style.overflowX = 'auto'; - otherWrapper.style.zIndex = ''; - otherWrapper.style.position = ''; - } - } - }); - - // Toggle the class on the current cell - targetTd.classList.toggle('amily2-menu-open'); - - // Adjust the overflow property - if (targetTd.classList.contains('amily2-menu-open')) { - tableWrapper.style.overflowX = 'visible'; - tableWrapper.style.position = 'relative'; - tableWrapper.style.zIndex = '10'; - } else { - tableWrapper.style.overflowX = 'auto'; - tableWrapper.style.position = ''; - tableWrapper.style.zIndex = ''; - } - - const closeMenu = (e) => { - if (!targetTd.contains(e.target)) { - targetTd.classList.remove('amily2-menu-open'); - tableWrapper.style.overflowX = 'auto'; - tableWrapper.style.position = ''; - tableWrapper.style.zIndex = ''; - document.removeEventListener('click', closeMenu, true); - } - }; - - if (targetTd.classList.contains('amily2-menu-open')) { - setTimeout(() => { - document.addEventListener('click', closeMenu, true); - }, 0); - } -} - - -function toggleColumnContextMenu(event) { - if (isResizing || event.target.classList.contains('amily2-resizer')) { - return; - } - event.preventDefault(); - event.stopPropagation(); - - const targetTh = event.target.closest('th'); - if (!targetTh) return; - - const tableWrapper = targetTh.closest('.amily2-table-wrapper'); - if (!tableWrapper) return; - - const isActive = targetTh.classList.contains('amily2-menu-open'); - - // Close all other open menus and reset their wrappers' overflow - document.querySelectorAll('th.amily2-menu-open').forEach(openTh => { - if (openTh !== targetTh) { - openTh.classList.remove('amily2-menu-open'); - const otherWrapper = openTh.closest('.amily2-table-wrapper'); - if (otherWrapper) { - otherWrapper.style.overflowX = 'auto'; - otherWrapper.style.zIndex = ''; - otherWrapper.style.position = ''; - } - } - }); - - // Toggle the class on the current header - targetTh.classList.toggle('amily2-menu-open'); - - // Adjust the overflow property based on whether the menu is now open or closed - if (targetTh.classList.contains('amily2-menu-open')) { - tableWrapper.style.overflowX = 'visible'; - tableWrapper.style.position = 'relative'; // z-index only works on positioned elements - tableWrapper.style.zIndex = '10'; - } else { - tableWrapper.style.overflowX = 'auto'; - tableWrapper.style.position = ''; - tableWrapper.style.zIndex = ''; - } - - const closeMenu = (e) => { - // Check if the click is outside the th containing the menu - if (!targetTh.contains(e.target)) { - targetTh.classList.remove('amily2-menu-open'); - tableWrapper.style.overflowX = 'auto'; - tableWrapper.style.position = ''; - tableWrapper.style.zIndex = ''; - document.removeEventListener('click', closeMenu, true); - } - }; - - // If the menu was opened, set up the listener to close it - if (targetTh.classList.contains('amily2-menu-open')) { - setTimeout(() => { - document.addEventListener('click', closeMenu, true); - }, 0); - } -} - - -function toggleHeaderIndexContextMenu(event) { - event.preventDefault(); - event.stopPropagation(); - - const targetTh = event.target.closest('th.index-col'); - if (!targetTh) return; - - const menu = targetTh.querySelector('.amily2-context-menu'); - if (!menu) return; - - const isActive = menu.classList.contains('amily2-menu-active'); - - document.querySelectorAll('.amily2-context-menu.amily2-menu-active').forEach(activeMenu => { - activeMenu.classList.remove('amily2-menu-active'); - }); - - if (!isActive) { - menu.classList.add('amily2-menu-active'); - } - - const closeMenu = (e) => { - if (!menu.contains(e.target)) { - menu.classList.remove('amily2-menu-active'); - document.removeEventListener('click', closeMenu, true); - } - }; - - setTimeout(() => { - if (menu.classList.contains('amily2-menu-active')) { - document.addEventListener('click', closeMenu, true); - } - }, 0); -} - - -function showInputDialog({ title, label, currentValue, placeholder, onSave }) { - const dialogHtml = ` - - - `; - - const dialogElement = $(dialogHtml).appendTo('body'); - const input = dialogElement.find('#generic-input'); - - const closeDialog = () => { - dialogElement[0].close(); - dialogElement.remove(); - }; - - const save = () => { - const newValue = input.val().trim(); - if (newValue && newValue !== currentValue) { - onSave(newValue); - } else if (!newValue) { - toastr.warning('名称不能为空!'); - input.focus(); - return; - } - closeDialog(); - }; - - dialogElement.find('.popup-button-ok').on('click', save); - dialogElement.find('.popup-button-cancel').on('click', closeDialog); - input.on('keypress', (e) => { if (e.which === 13) save(); }); - input.on('keydown', (e) => { if (e.which === 27) closeDialog(); }); - - dialogElement[0].showModal(); - input.focus().select(); -} - - -function showColumnNameEditor(tableIndex, colIndex, currentName) { - showInputDialog({ - title: '编辑列名', - label: '列名:', - currentValue: currentName, - placeholder: '请输入列名...', - onSave: (newName) => { - TableManager.updateHeader(tableIndex, colIndex, newName); - renderTables(); - toastr.success(`列名已更新为 "${newName}"`); - } - }); -} - - -function showTableNameEditor(tableIndex, currentName) { - showInputDialog({ - title: '编辑表名', - label: '表名:', - currentValue: currentName, - placeholder: '请输入表名...', - onSave: (newName) => { - TableManager.renameTable(tableIndex, newName); - renderTables(); - toastr.success(`表名已更新为 "${newName}"`); - } - }); -} - - -function positionContextMenu(menu, trigger) { - menu.style.position = 'absolute'; - menu.style.zIndex = '10000'; - menu.style.left = '0'; - menu.style.right = 'auto'; - menu.style.marginTop = ''; - menu.style.marginBottom = ''; - menu.style.maxHeight = ''; - menu.style.overflowY = ''; - - const viewportHeight = window.innerHeight; - const triggerRect = trigger.getBoundingClientRect(); - const menuHeight = 200; - const scrollContainer = trigger.closest('.hly-scroll'); - const containerRect = scrollContainer ? scrollContainer.getBoundingClientRect() : { top: 0, bottom: viewportHeight }; - - const spaceBelow = Math.min(viewportHeight, containerRect.bottom) - triggerRect.bottom; - const spaceAbove = triggerRect.top - Math.max(0, containerRect.top); - - if (spaceBelow < menuHeight && spaceAbove > spaceBelow) { - menu.style.top = 'auto'; - menu.style.bottom = '100%'; - menu.style.marginBottom = '2px'; - } else { - menu.style.top = '100%'; - menu.style.bottom = 'auto'; - menu.style.marginTop = '2px'; - } - - const menuWidth = 160; - const table = trigger.closest('table'); - const tableWrapper = table ? table.closest('div[style*="overflowX"]') : null; - - if (tableWrapper) { - const wrapperRect = tableWrapper.getBoundingClientRect(); - const triggerLeftInWrapper = triggerRect.left - wrapperRect.left; - - if (triggerLeftInWrapper + menuWidth > wrapperRect.width - 20) { - menu.style.left = 'auto'; - menu.style.right = '0'; - } - } -} - - -export function renderTables() { - let tables = TableManager.getMemoryState(); - if (!tables) { - log('内存状态为空,从聊天记录加载作为后备。', 'warn'); - tables = TableManager.loadTables(); - } - - const container = getAllTablesContainer(); - - if (!tables || !container) { - console.error('[内存储司-工部] 缺少表格数据或容器,无法渲染。'); - return; - } - - const highlights = TableManager.getHighlights(); - const fragment = document.createDocumentFragment(); - - const placeholder = document.getElementById('add-table-placeholder'); - if (placeholder) { - placeholder.remove(); - } - - tables.forEach((tableData, tableIndex) => { - const header = document.createElement('div'); - header.style.display = 'flex'; - header.style.justifyContent = 'space-between'; - header.style.alignItems = 'center'; - const title = document.createElement('h3'); - title.innerHTML = ` ${tableData.name}`; - const controls = document.createElement('div'); - controls.className = 'table-controls'; - - const moveUpBtn = tableIndex > 0 ? `` : ''; - const moveDownBtn = tableIndex < tables.length - 1 ? `` : ''; - - controls.innerHTML = ` - ${moveUpBtn} - ${moveDownBtn} - - - `; - header.appendChild(title); - header.appendChild(controls); - fragment.appendChild(header); - - const tableWrapper = document.createElement('div'); - tableWrapper.className = 'amily2-table-wrapper'; - - const tableElement = document.createElement('table'); - tableElement.id = `amily2-table-${tableIndex}`; - tableElement.dataset.tableIndex = tableIndex; - - const colgroup = document.createElement('colgroup'); - const indexCol = document.createElement('col'); - indexCol.style.width = '40px'; - colgroup.appendChild(indexCol); - - if (tableData.headers) { - tableData.headers.forEach((_, colIndex) => { - const col = document.createElement('col'); - // Assign a default width of 120px if none is specified - const colWidth = (tableData.columnWidths && tableData.columnWidths[colIndex]) ? tableData.columnWidths[colIndex] : 90; - col.style.width = `${colWidth}px`; - colgroup.appendChild(col); - }); - } - tableElement.appendChild(colgroup); - - // Explicitly calculate and set the total table width to override CSS conflicts - let totalWidth = 0; - const cols = colgroup.querySelectorAll('col'); - cols.forEach(col => { - totalWidth += parseInt(col.style.width, 10); - }); - tableElement.style.width = `${totalWidth}px`; - - const thead = tableElement.createTHead(); - const headerRow = thead.insertRow(); - - const indexTh = document.createElement('th'); - indexTh.className = 'index-col'; - indexTh.textContent = '#'; - indexTh.style.cursor = 'pointer'; - indexTh.title = '点击添加第一行'; - - // 为表头的 # 号添加特殊的上下文菜单(仅在表格为空时显示) - if (!tableData.rows || tableData.rows.length === 0) { - const headerMenu = document.createElement('div'); - headerMenu.className = 'amily2-context-menu amily2-header-menu'; - headerMenu.style.display = 'none'; // 默认隐藏 - - const addRowButton = document.createElement('button'); - addRowButton.innerHTML = ' 创建第一行'; - addRowButton.className = 'menu_button small_button'; - addRowButton.addEventListener('click', (e) => { - e.stopPropagation(); - TableManager.addRow(tableIndex); - renderTables(); - }); - - headerMenu.appendChild(addRowButton); - indexTh.appendChild(headerMenu); - - // 为表头添加直接的点击事件监听器 - indexTh.addEventListener('click', (e) => { - e.preventDefault(); - e.stopPropagation(); - console.log('Header # clicked for table', tableIndex); - - // 直接执行添加行操作 - TableManager.addRow(tableIndex); - renderTables(); - toastr.success('已添加第一行'); - }); - } - - headerRow.appendChild(indexTh); - - tableData.headers.forEach((headerText, colIndex) => { - const th = document.createElement('th'); - th.dataset.colIndex = colIndex; - th.style.cursor = 'pointer'; - - const headerContent = document.createElement('span'); - headerContent.className = 'amily2-header-text'; - headerContent.textContent = headerText; - th.appendChild(headerContent); - - const menu = document.createElement('div'); - menu.className = 'amily2-context-menu'; - - const actions = [ - { label: '向左移动', action: 'move-left', icon: 'fa-arrow-left' }, - { label: '向右移动', action: 'move-right', icon: 'fa-arrow-right' }, - { label: '在左加列', action: 'add-left', icon: 'fa-plus-circle' }, - { label: '在右加列', action: 'add-right', icon: 'fa-plus-circle' }, - { label: '编辑列名', action: 'rename', icon: 'fa-pen' }, - { label: '删除该列', action: 'delete', icon: 'fa-trash-alt', isDanger: true } - ]; - - actions.forEach(({ label, action, icon, isDanger }) => { - const button = document.createElement('button'); - button.textContent = label; - button.className = 'menu_button small_button'; - if (isDanger) button.classList.add('danger'); - - button.addEventListener('click', (e) => { - e.stopPropagation(); - switch (action) { - case 'move-left': - TableManager.moveColumn(tableIndex, colIndex, 'left'); - break; - case 'move-right': - TableManager.moveColumn(tableIndex, colIndex, 'right'); - break; - case 'add-left': - TableManager.insertColumn(tableIndex, colIndex, 'left'); - break; - case 'add-right': - TableManager.insertColumn(tableIndex, colIndex, 'right'); - break; - case 'rename': - showColumnNameEditor(tableIndex, colIndex, headerText); - break; - case 'delete': - if (confirm(`您确定要删除 “${headerText}” 列吗?`)) { - TableManager.deleteColumn(tableIndex, colIndex); - } - break; - } - renderTables(); - }); - menu.appendChild(button); - }); - - th.appendChild(menu); - - const resizer = document.createElement('div'); - resizer.className = 'amily2-resizer'; - th.appendChild(resizer); - - const startResize = (startEvent) => { - startEvent.preventDefault(); - startEvent.stopPropagation(); - - isResizing = true; - - const table = startEvent.target.closest('table'); - const th = startEvent.target.parentElement; - const col = table.querySelector(`colgroup > col:nth-child(${th.cellIndex + 1})`); - - const isTouchEvent = startEvent.type.startsWith('touch'); - const startX = isTouchEvent ? startEvent.touches[0].clientX : startEvent.clientX; - const startWidth = th.offsetWidth; - - const onMove = (moveEvent) => { - const currentX = isTouchEvent ? moveEvent.touches[0].clientX : moveEvent.clientX; - const newWidth = startWidth + (currentX - startX); - if (newWidth > 50) { - col.style.width = `${newWidth}px`; - } - }; - - const onEnd = () => { - document.removeEventListener('mousemove', onMove); - document.removeEventListener('mouseup', onEnd); - document.removeEventListener('touchmove', onMove); - document.removeEventListener('touchend', onEnd); - - const finalWidth = parseInt(col.style.width, 10); - TableManager.updateColumnWidth(tableIndex, colIndex, finalWidth); - - setTimeout(() => { isResizing = false; }, 0); - }; - - if (isTouchEvent) { - document.addEventListener('touchmove', onMove, { passive: false }); - document.addEventListener('touchend', onEnd); - } else { - document.addEventListener('mousemove', onMove); - document.addEventListener('mouseup', onEnd); - } - }; - - resizer.addEventListener('mousedown', startResize); - resizer.addEventListener('touchstart', startResize, { passive: false }); - - headerRow.appendChild(th); - }); - - const tbody = tableElement.createTBody(); - if (tableData.rows && tableData.rows.length > 0) { - tableData.rows.forEach((rowData, rowIndex) => { - const row = tbody.insertRow(); - row.dataset.rowIndex = rowIndex; - - const indexCell = row.insertCell(); - indexCell.className = 'index-col'; - - const rowIndexSpan = document.createElement('span'); - rowIndexSpan.textContent = rowIndex + 1; - indexCell.appendChild(rowIndexSpan); - - const menu = document.createElement('div'); - menu.className = 'amily2-context-menu amily2-row-context-menu'; - - const actions = [ - { label: '向上移动', action: 'move-up', icon: 'fa-arrow-up' }, - { label: '向下移动', action: 'move-down', icon: 'fa-arrow-down' }, - { label: '在上加行', action: 'add-above', icon: 'fa-plus-circle' }, - { label: '在下加行', action: 'add-below', icon: 'fa-plus-circle' }, - { label: '删除该行', action: 'delete-row', icon: 'fa-trash-alt', isDanger: true } - ]; - - actions.forEach(({ label, action, icon, isDanger }) => { - const button = document.createElement('button'); - button.innerHTML = ` ${label}`; - button.className = 'menu_button small_button'; - if (isDanger) button.classList.add('danger'); - - button.addEventListener('click', (e) => { - e.stopPropagation(); - - switch (action) { - case 'move-up': - TableManager.moveRow(tableIndex, rowIndex, 'up'); - break; - case 'move-down': - TableManager.moveRow(tableIndex, rowIndex, 'down'); - break; - case 'add-above': - TableManager.insertRow(tableIndex, rowIndex, 'above'); - break; - case 'add-below': - TableManager.insertRow(tableIndex, rowIndex, 'below'); - break; - case 'delete-row': - if (confirm(`您确定要删除第 ${rowIndex + 1} 行吗?`)) { - TableManager.deleteRow(tableIndex, rowIndex); - } - break; - } - renderTables(); - }); - menu.appendChild(button); - }); - indexCell.appendChild(menu); - - rowData.forEach((cellData, colIndex) => { - const cell = row.insertCell(); - - const cellContent = document.createElement('div'); - cellContent.className = 'amily2-cell-content'; - cellContent.textContent = cellData; - cell.appendChild(cellContent); - - if (!isTouchDevice()) { - cell.setAttribute('contenteditable', 'true'); - } - cell.dataset.colIndex = colIndex; - cell.dataset.label = tableData.headers[colIndex] || ''; - - const highlightKey = `${tableIndex}-${rowIndex}-${colIndex}`; - if (highlights.has(highlightKey)) { - cell.classList.add('cell-highlight'); - } - }); - }); - } - tableWrapper.appendChild(tableElement); - fragment.appendChild(tableWrapper); - }); - - container.innerHTML = ''; - container.appendChild(fragment); - - if (placeholder) { - container.appendChild(placeholder); - } - - // Also update the in-chat table whenever the main tables are re-rendered - updateOrInsertTableInChat(); -} - - -function openTableRuleEditor() { - const settings = extension_settings[extensionName]; - const tags = settings.table_tags_to_extract || ''; - const exclusionRules = settings.table_exclusion_rules || []; - - const rulesHtml = exclusionRules.map((rule, index) => ` -
- - - - - -
- `).join(''); - - const modalHtml = ` -
-
- - - 仅提取指定XML标签的内容,例如填“content”,即提取...中的内容。 -
-
- -
${rulesHtml}
- - 移除所有被起始和结束标记包裹的内容(例如 OOC 部分)。 -
-
- `; - - const dialog = showHtmlModal('配置独立提取规则', modalHtml, { - onOk: () => { - const newTags = document.getElementById('table-tags-input').value; - updateAndSaveTableSetting('table_tags_to_extract', newTags); - - const newExclusionRules = []; - document.querySelectorAll('#exclusion-rules-list .exclusion-rule-item').forEach(item => { - const start = item.querySelector('.rule-start').value.trim(); - const end = item.querySelector('.rule-end').value.trim(); - if (start && end) { - newExclusionRules.push({ start, end }); - } - }); - updateAndSaveTableSetting('table_exclusion_rules', newExclusionRules); - toastr.success('独立提取规则已保存。'); - }, - onShow: (dialogElement) => { - const rulesList = dialogElement.find('#exclusion-rules-list'); - - dialogElement.find('#add-exclusion-rule-btn').on('click', () => { - const newIndex = rulesList.children().length; - const newItemHtml = ` -
- - - - - -
`; - rulesList.append(newItemHtml); - }); - - rulesList.on('click', '.remove-rule-btn', function() { - $(this).closest('.exclusion-rule-item').remove(); - }); - } - }); -} - -function openRuleEditor(tableIndex) { - const tables = TableManager.getMemoryState(); - if (!tables || !tables[tableIndex]) return; - const table = tables[tableIndex]; - - // 兼容旧数据结构 - if (table.charLimitRule && !table.charLimitRules) { - table.charLimitRules = {}; - if (table.charLimitRule.columnIndex !== -1) { - table.charLimitRules[table.charLimitRule.columnIndex] = table.charLimitRule.limit; - } - } - const charLimitRules = table.charLimitRules || {}; - - const renderCharLimitRules = (rules) => { - return Object.entries(rules).map(([colIndex, limit]) => { - const header = table.headers[colIndex] || `未知列 (${colIndex})`; - return ` -
- ${header}: 不超过 ${limit} 字 - -
- `; - }).join(''); - }; - - const getColumnOptions = (rules) => { - return table.headers.map((header, index) => { - // 如果该列已存在规则,则不应出现在下拉菜单中 - if (rules[index]) return ''; - return ``; - }).join(''); - }; - - const dialogHtml = ` - - - `; - - const dialogElement = $(dialogHtml).appendTo('body'); - - const closeDialog = () => { - dialogElement[0].close(); - dialogElement.remove(); - }; - - const refreshRuleUI = () => { - const currentRules = JSON.parse(dialogElement.find('#current-char-limit-rules').attr('data-rules') || '{}'); - dialogElement.find('#current-char-limit-rules').html(renderCharLimitRules(currentRules)); - dialogElement.find('#new-rule-column-select').html(`${getColumnOptions(currentRules)}`); - }; - - dialogElement.find('#current-char-limit-rules').attr('data-rules', JSON.stringify(charLimitRules)); - - dialogElement.on('click', '#add-char-limit-rule-btn', () => { - const selectedColumn = parseInt(dialogElement.find('#new-rule-column-select').val(), 10); - const limitValue = parseInt(dialogElement.find('#new-rule-limit-input').val(), 10); - - if (selectedColumn === -1) { - toastr.warning('请选择一个列。'); - return; - } - - // 允许输入0,但0意味着“无限制”,所以我们不添加规则。 - if (isNaN(limitValue) || limitValue < 0) { - toastr.warning('请输入一个有效的字数限制(大于等于0)。'); - return; - } - - const currentRules = JSON.parse(dialogElement.find('#current-char-limit-rules').attr('data-rules') || '{}'); - - if (limitValue > 0) { - // 只有当限制大于0时,才添加或更新规则 - currentRules[selectedColumn] = limitValue; - dialogElement.find('#current-char-limit-rules').attr('data-rules', JSON.stringify(currentRules)); - refreshRuleUI(); - } else { - // 如果用户输入0,则视为不设置规则 - toastr.info('字数限制为0表示不设置规则。'); - } - }); - - dialogElement.on('click', '.remove-char-limit-rule-btn', function() { - const colIndexToRemove = $(this).data('col-index'); - const currentRules = JSON.parse(dialogElement.find('#current-char-limit-rules').attr('data-rules') || '{}'); - delete currentRules[colIndexToRemove]; - dialogElement.find('#current-char-limit-rules').attr('data-rules', JSON.stringify(currentRules)); - refreshRuleUI(); - }); - - dialogElement.find('.popup-button-ok').on('click', () => { - const newCharLimitRules = JSON.parse(dialogElement.find('#current-char-limit-rules').attr('data-rules') || '{}'); - const rowLimitValue = parseInt(dialogElement.find('#rule-row-limit-value').val(), 10); - - const newRules = { - note: dialogElement.find('#rule-note').val(), - rule_add: dialogElement.find('#rule-add').val(), - rule_delete: dialogElement.find('#rule-delete').val(), - rule_update: dialogElement.find('#rule-update').val(), - charLimitRules: newCharLimitRules, - rowLimitRule: rowLimitValue, - }; - TableManager.updateTableRules(tableIndex, newRules); - closeDialog(); - }); - - dialogElement.find('.popup-button-cancel').on('click', closeDialog); - dialogElement[0].showModal(); -} - - -function bindInjectionSettings() { - const settings = extension_settings[extensionName]; - - const masterSwitchCheckbox = document.getElementById('table-system-master-switch'); - const enabledCheckbox = document.getElementById('table-injection-enabled'); - const positionSelect = document.getElementById('table-injection-position'); - const depthInput = document.getElementById('table-injection-depth'); - const roleRadioGroup = document.querySelectorAll('input[name="table-injection-role"]'); - - if (!masterSwitchCheckbox || !enabledCheckbox || !positionSelect || !depthInput || !roleRadioGroup.length) { - return; - } - - const updateInjectionUI = () => { - const position = positionSelect.value; - const masterEnabled = masterSwitchCheckbox.checked; - - const isChatInjection = position === '1'; - - enabledCheckbox.disabled = !masterEnabled; - positionSelect.disabled = !masterEnabled; - depthInput.disabled = !masterEnabled || !isChatInjection; - roleRadioGroup.forEach(radio => radio.disabled = !masterEnabled || !isChatInjection); - - const enabledOpacity = masterEnabled ? '1' : '0.5'; - enabledCheckbox.style.opacity = enabledOpacity; - if (enabledCheckbox.closest('.control-block-with-switch')) { - enabledCheckbox.closest('.control-block-with-switch').style.opacity = enabledOpacity; - } - - positionSelect.style.opacity = enabledOpacity; - if (positionSelect.previousElementSibling) { - positionSelect.previousElementSibling.style.opacity = enabledOpacity; - } - - const depthOpacity = masterEnabled && isChatInjection ? '1' : '0.5'; - depthInput.style.opacity = depthOpacity; - if (depthInput.previousElementSibling) { - depthInput.previousElementSibling.style.opacity = depthOpacity; - } - - const roleOpacity = masterEnabled && isChatInjection ? '1' : '0.5'; - const roleGroupContainer = document.getElementById('table-role-system')?.closest('.radio-group'); - if (roleGroupContainer) { - roleGroupContainer.style.opacity = roleOpacity; - if (roleGroupContainer.previousElementSibling) { - roleGroupContainer.previousElementSibling.style.opacity = roleOpacity; - } - } - - const fillingModeRadios = document.querySelectorAll('input[name="filling-mode"]'); - fillingModeRadios.forEach(radio => { - radio.disabled = !masterEnabled; - const label = radio.closest('label'); - if (label) { - label.style.opacity = masterEnabled ? '1' : '0.5'; - } - }); - - const fillButton = document.getElementById('fill-table-now-btn'); - if (fillButton) { - fillButton.disabled = !masterEnabled; - fillButton.style.opacity = masterEnabled ? '1' : '0.5'; - } - }; - - masterSwitchCheckbox.checked = settings.table_system_enabled !== false; - enabledCheckbox.checked = settings.table_injection_enabled; - positionSelect.value = settings.injection.position; - depthInput.value = settings.injection.depth; - roleRadioGroup.forEach(radio => { - if (parseInt(radio.value, 10) === settings.injection.role) { - radio.checked = true; - } - }); - - updateInjectionUI(); - - masterSwitchCheckbox.addEventListener('change', () => { - settings.table_system_enabled = masterSwitchCheckbox.checked; - saveSettingsDebounced(); - updateInjectionUI(); - - const statusText = masterSwitchCheckbox.checked ? '已启用' : '已禁用'; - toastr.info(`表格系统总开关${statusText}。`); - log(`表格系统总开关${statusText}。`, 'info'); - }); - - enabledCheckbox.addEventListener('change', () => { - settings.table_injection_enabled = enabledCheckbox.checked; - saveSettingsDebounced(); - }); - - positionSelect.addEventListener('change', () => { - settings.injection.position = parseInt(positionSelect.value, 10); - saveSettingsDebounced(); - - updateInjectionUI(); - }); - - depthInput.addEventListener('input', () => { - settings.injection.depth = parseInt(depthInput.value, 10); - saveSettingsDebounced(); - }); - - roleRadioGroup.forEach(radio => { - radio.addEventListener('change', () => { - if (radio.checked) { - settings.injection.role = parseInt(radio.value, 10); - saveSettingsDebounced(); - } - }); - }); - - log('表格注入设置已成功绑定。', 'success'); -} - - -function updateAndSaveTableSetting(key, value) { - if (!extension_settings[extensionName]) { - extension_settings[extensionName] = {}; - } - extension_settings[extensionName][key] = value; - saveSettingsDebounced(); -} - -function bindWorldBookSettings() { - const settings = extension_settings[extensionName]; - - if (settings.table_worldbook_enabled === undefined) settings.table_worldbook_enabled = false; - if (settings.table_worldbook_char_limit === undefined) settings.table_worldbook_char_limit = 30000; - if (settings.table_worldbook_source === undefined) settings.table_worldbook_source = 'character'; - if (settings.table_selected_worldbooks === undefined) settings.table_selected_worldbooks = []; - if (settings.table_selected_entries === undefined) settings.table_selected_entries = {}; - - const enabledCheckbox = document.getElementById('table_worldbook_enabled'); - const limitSlider = document.getElementById('table_worldbook_char_limit'); - const limitValueSpan = document.getElementById('table_worldbook_char_limit_value'); - const sourceRadios = document.querySelectorAll('input[name="table_worldbook_source"]'); - const manualSelectWrapper = document.getElementById('table_worldbook_select_wrapper'); - const refreshButton = document.getElementById('table_refresh_worldbooks'); - const bookListContainer = document.getElementById('table_worldbook_checkbox_list'); - const entryListContainer = document.getElementById('table_worldbook_entry_list'); - - if (!enabledCheckbox || !limitSlider || !limitValueSpan || !sourceRadios.length || !manualSelectWrapper || !refreshButton || !bookListContainer || !entryListContainer) { - log('无法找到世界书设置的相关UI元素,绑定失败。', 'warn'); - return; - } - - const saveSelectedEntries = () => { - const selected = {}; - entryListContainer.querySelectorAll('input[type="checkbox"]:checked').forEach(cb => { - const book = cb.dataset.book; - const uid = cb.dataset.uid; - if (!selected[book]) { - selected[book] = []; - } - selected[book].push(uid); - }); - settings.table_selected_entries = selected; - saveSettingsDebounced(); - }; - - const renderWorldBookEntries = async () => { - entryListContainer.innerHTML = '

加载条目中...

'; - const source = settings.table_worldbook_source || 'character'; - let bookNames = []; - - if (source === 'manual') { - bookNames = settings.table_selected_worldbooks || []; - } else { - if (this_chid !== undefined && this_chid >= 0 && characters[this_chid]) { - try { - const charLorebooks = await safeCharLorebooks({ type: 'all' }); - if (charLorebooks.primary) bookNames.push(charLorebooks.primary); - if (charLorebooks.additional?.length) bookNames.push(...charLorebooks.additional); - } catch (error) { - console.error(`[内存储司] 获取角色世界书失败:`, error); - entryListContainer.innerHTML = '

获取角色世界书失败。

'; - return; - } - } else { - entryListContainer.innerHTML = '

请先加载一个角色。

'; - return; - } - } - - if (bookNames.length === 0) { - entryListContainer.innerHTML = '

未选择或绑定世界书。

'; - return; - } - - try { - const allEntries = []; - for (const bookName of bookNames) { - const entries = await safeLorebookEntries(bookName); - entries.forEach(entry => allEntries.push({ ...entry, bookName })); - } - - entryListContainer.innerHTML = ''; - if (allEntries.length === 0) { - entryListContainer.innerHTML = '

所选世界书中没有条目。

'; - return; - } - - allEntries.forEach(entry => { - const div = document.createElement('div'); - div.className = 'checkbox-item'; - div.title = `世界书: ${entry.bookName}\nUID: ${entry.uid}`; - - const checkbox = document.createElement('input'); - checkbox.type = 'checkbox'; - checkbox.id = `wb-entry-check-${entry.bookName}-${entry.uid}`; - checkbox.dataset.book = entry.bookName; - checkbox.dataset.uid = entry.uid; - - const isChecked = settings.table_selected_entries[entry.bookName]?.includes(String(entry.uid)); - checkbox.checked = !!isChecked; - - const label = document.createElement('label'); - label.htmlFor = checkbox.id; - label.textContent = entry.comment || '无标题条目'; - - div.appendChild(checkbox); - div.appendChild(label); - entryListContainer.appendChild(div); - }); - } catch (error) { - console.error(`[内存储司] 加载世界书条目失败:`, error); - entryListContainer.innerHTML = '

加载条目失败。

'; - } - }; - - const renderWorldBookList = () => { - const worldBooks = world_names.map(name => ({ name: name.replace('.json', ''), file_name: name })); - bookListContainer.innerHTML = ''; - if (worldBooks && worldBooks.length > 0) { - worldBooks.forEach(book => { - const div = document.createElement('div'); - div.className = 'checkbox-item'; - div.title = book.name; - - const checkbox = document.createElement('input'); - checkbox.type = 'checkbox'; - checkbox.id = `wb-check-${book.file_name}`; - checkbox.value = book.file_name; - checkbox.checked = settings.table_selected_worldbooks.includes(book.file_name); - - checkbox.addEventListener('change', () => { - if (checkbox.checked) { - if (!settings.table_selected_worldbooks.includes(book.file_name)) { - settings.table_selected_worldbooks.push(book.file_name); - } - } else { - settings.table_selected_worldbooks = settings.table_selected_worldbooks.filter(name => name !== book.file_name); - } - saveSettingsDebounced(); - renderWorldBookEntries(); - }); - - const label = document.createElement('label'); - label.htmlFor = `wb-check-${book.file_name}`; - label.textContent = book.name; - - div.appendChild(checkbox); - div.appendChild(label); - bookListContainer.appendChild(div); - }); - } else { - bookListContainer.innerHTML = '

没有找到世界书。

'; - } - renderWorldBookEntries(); - }; - - const updateManualSelectVisibility = () => { - const isManual = settings.table_worldbook_source === 'manual'; - manualSelectWrapper.style.display = isManual ? 'block' : 'none'; - renderWorldBookEntries(); - if (isManual) { - renderWorldBookList(); - } - }; - - enabledCheckbox.checked = settings.table_worldbook_enabled; - limitSlider.value = settings.table_worldbook_char_limit; - limitValueSpan.textContent = settings.table_worldbook_char_limit; - sourceRadios.forEach(radio => { - radio.checked = radio.value === settings.table_worldbook_source; - }); - - updateManualSelectVisibility(); - - enabledCheckbox.addEventListener('change', () => { - settings.table_worldbook_enabled = enabledCheckbox.checked; - saveSettingsDebounced(); - }); - - limitSlider.addEventListener('input', () => { limitValueSpan.textContent = limitSlider.value; }); - limitSlider.addEventListener('change', () => { - settings.table_worldbook_char_limit = parseInt(limitSlider.value, 10); - saveSettingsDebounced(); - }); - - sourceRadios.forEach(radio => { - radio.addEventListener('change', () => { - if (radio.checked) { - settings.table_worldbook_source = radio.value; - updateManualSelectVisibility(); - saveSettingsDebounced(); - } - }); - }); - - refreshButton.addEventListener('click', renderWorldBookList); - entryListContainer.addEventListener('change', (event) => { - if (event.target.type === 'checkbox') { - saveSelectedEntries(); - } - }); - - log('世界书设置已成功绑定。', 'success'); -} - -export function bindTableEvents() { - const panel = document.getElementById('amily2_memorisation_forms_panel'); - if (!panel || panel.dataset.eventsBound) { - return; - } - log('开始为表格视图绑定交互事件...', 'info'); - const fillingModeRadios = panel.querySelectorAll('input[name="filling-mode"]'); - const contextSliderContainer = document.getElementById('context-reading-slider-container'); - const contextSlider = document.getElementById('context-reading-slider'); - const contextValueSpan = document.getElementById('context-reading-value'); - const independentRulesContainer = document.getElementById('table-independent-rules-container'); - const independentRulesToggle = document.getElementById('table-independent-rules-enabled'); - const configureRulesBtn = document.getElementById('table-configure-rules-btn'); - - const updateFillingModeUI = () => { - const currentMode = extension_settings[extensionName]?.filling_mode || 'main-api'; - fillingModeRadios.forEach(radio => { - radio.checked = (radio.value === currentMode); - }); - - const isSecondaryMode = currentMode === 'secondary-api'; - - if (contextSliderContainer) { - contextSliderContainer.style.display = isSecondaryMode ? 'block' : 'none'; - } - - if (independentRulesContainer) { - independentRulesContainer.style.display = 'flex'; - } - - if (independentRulesToggle && configureRulesBtn) { - configureRulesBtn.style.display = independentRulesToggle.checked ? 'block' : 'none'; - } - }; - - fillingModeRadios.forEach(radio => { - radio.addEventListener('change', function() { - const selectedMode = this.value; - updateAndSaveTableSetting('filling_mode', selectedMode); - - let modeName = '原始填表'; - if (selectedMode === 'secondary-api') modeName = '分步填表'; - if (selectedMode === 'optimized') modeName = '优化中填表'; - - toastr.info(`填表模式已切换为 ${modeName}。`); - updateFillingModeUI(); // 更新UI以确保状态同步 - }); - }); - - if (contextSlider && contextValueSpan) { - const contextReadingValue = extension_settings[extensionName]?.context_reading_level || 4; - contextSlider.value = contextReadingValue; - contextValueSpan.textContent = contextReadingValue; - - contextSlider.addEventListener('input', function() { - contextValueSpan.textContent = this.value; - }); - - contextSlider.addEventListener('change', function() { - updateAndSaveTableSetting('context_reading_level', parseInt(this.value, 10)); - toastr.info(`上下文读取级别已设置为 ${this.value}。`); - }); - } - - if (independentRulesToggle) { - independentRulesToggle.checked = extension_settings[extensionName]?.table_independent_rules_enabled ?? false; - independentRulesToggle.addEventListener('change', () => { - updateAndSaveTableSetting('table_independent_rules_enabled', independentRulesToggle.checked); - updateFillingModeUI(); - }); - } - - updateFillingModeUI(); - - if (configureRulesBtn) { - configureRulesBtn.addEventListener('click', openTableRuleEditor); - } - - const renderAll = () => { - renderTables(); - bindInjectionSettings(); - bindTemplateEditors(); - }; - - renderAll(); - bindWorldBookSettings(); - bindBatchFillButton(); // 【新增】绑定批量填表按钮 - bindFloorFillButtons(); // 【新增】绑定楼层填表按钮 - bindReorganizeButton(); // 【新增】绑定重新整理按钮 - bindTemplateEditors(); // 【新增】为新的指令模板编辑器绑定事件 - bindNccsApiEvents(); // 【新增】绑定Nccs API系统事件 - bindChatTableDisplaySetting(); // 【新增】绑定聊天内表格显示开关 - - const navDeck = document.querySelector('#amily2_memorisation_forms_panel .sinan-navigation-deck'); - if (navDeck) { - navDeck.addEventListener('click', (event) => { - const target = event.target.closest('.sinan-nav-item'); - if (!target) return; - - const tabName = target.dataset.tab; - if (!tabName) return; - - const container = target.closest('.settings-group'); - if (!container) return; - - container.querySelectorAll('.sinan-nav-item').forEach(btn => btn.classList.remove('active')); - target.classList.add('active'); - container.querySelectorAll('.sinan-tab-pane').forEach(pane => pane.classList.remove('active')); - const activePane = container.querySelector(`#sinan-${tabName}-tab`); - if (activePane) { - activePane.classList.add('active'); - } - }); - } - - const exportBtn = document.getElementById('amily2-export-preset-btn'); - const exportFullBtn = document.getElementById('amily2-export-preset-full-btn'); - const importBtn = document.getElementById('amily2-import-preset-btn'); - const importGlobalBtn = document.getElementById('amily2-import-global-preset-btn'); - const clearGlobalBtn = document.getElementById('amily2-clear-global-preset-btn'); - - if (exportBtn) { - exportBtn.addEventListener('click', () => TableManager.exportPreset()); - } - if (exportFullBtn) { - exportFullBtn.addEventListener('click', () => TableManager.exportPresetFull()); - } - if (importBtn) { - importBtn.addEventListener('click', () => TableManager.importPreset(renderAll)); - } - if (importGlobalBtn) { - importGlobalBtn.addEventListener('click', () => { - - const isEmpty = TableManager.isCurrentTablesEmpty(); - TableManager.importGlobalPreset(() => { - if (isEmpty) { - TableManager.loadTables(); - renderAll(); - } - }); - }); - } - if (clearGlobalBtn) { - clearGlobalBtn.addEventListener('click', () => { - const isEmpty = TableManager.isCurrentTablesEmpty(); - TableManager.clearGlobalPreset(); - if (isEmpty) { - TableManager.loadTables(); - renderAll(); - } - }); - } - - const clearAllBtn = document.getElementById('amily2-clear-all-tables-btn'); - if (clearAllBtn) { - clearAllBtn.addEventListener('click', () => { - if (confirm('【确认】您确定要清空所有表格的剧情内容吗?此操作将保留表格结构,但会删除所有已填写的行。')) { - TableManager.clearAllTables(); - renderAll(); - } - }); - } - - - const addTablePlaceholder = document.getElementById('add-table-placeholder'); - if (addTablePlaceholder) { - addTablePlaceholder.addEventListener('click', () => { - const newName = prompt('请输入新表格的名称:', '新表格'); - if (newName && newName.trim()) { - TableManager.addTable(newName.trim()); - renderAll(); - } - }); - } - - - const allTablesContainer = getAllTablesContainer(); - if (allTablesContainer) { - allTablesContainer.addEventListener('click', (event) => { - const th = event.target.closest('th'); - if (th && th.classList.contains('index-col')) { - // 处理表头 # 号的点击(用于空表格添加首行) - toggleHeaderIndexContextMenu(event); - return; - } - if (th && !th.classList.contains('index-col')) { - toggleColumnContextMenu(event); - return; - } - - const td = event.target.closest('td.index-col'); - if (td) { - toggleRowContextMenu(event); - return; - } - - const renameIcon = event.target.closest('.table-rename-icon'); - if (renameIcon) { - const tableIndex = parseInt(renameIcon.dataset.tableIndex, 10); - const tables = TableManager.getMemoryState(); - const currentName = tables[tableIndex]?.name || ''; - showTableNameEditor(tableIndex, currentName); - return; - } - - const target = event.target.closest('button'); - if (!target) return; - - const tableIndex = parseInt(target.dataset.tableIndex, 10); - - if (target.matches('.add-row-btn')) { - TableManager.addRow(tableIndex); - renderAll(); - } else if (target.matches('.add-col-btn')) { - TableManager.addColumn(tableIndex); - renderAll(); - } else if (target.matches('.move-table-up-btn') || target.matches('.move-table-down-btn')) { - const direction = target.classList.contains('move-table-up-btn') ? 'up' : 'down'; - TableManager.moveTable(tableIndex, direction); - renderAll(); - } else if (target.matches('.edit-rules-btn')) { - openRuleEditor(tableIndex); - } else if (target.matches('.delete-table-btn')) { - const tables = TableManager.getMemoryState(); - const tableName = tables[tableIndex]?.name || '未知表格'; - if (confirm(`【最终警告】您确定要永久废黜表格 “[${tableName}]” 吗?此操作不可逆!`)) { - TableManager.deleteTable(tableIndex); - renderAll(); - } - } - }); - - if (isTouchDevice()) { - let lastTap = 0; - let lastTapTarget = null; - allTablesContainer.addEventListener('touchstart', (event) => { - const target = event.target.closest('td'); - if (!target || target.dataset.colIndex === undefined) return; - - const currentTime = new Date().getTime(); - const tapLength = currentTime - lastTap; - if (tapLength < 300 && tapLength > 0 && lastTapTarget === target) { - event.preventDefault(); - if (target.getAttribute('contenteditable') !== 'true') { - target.setAttribute('contenteditable', 'true'); - setTimeout(() => target.focus(), 0); - } - } - lastTap = currentTime; - lastTapTarget = target; - }); - } - - allTablesContainer.addEventListener('blur', (event) => { - const target = event.target; - if (target.tagName !== 'TD' || target.getAttribute('contenteditable') !== 'true') return; - - if (isTouchDevice()) { - target.setAttribute('contenteditable', 'false'); - } - - const tableElement = target.closest('table'); - if (!tableElement) return; - - const tableIndex = parseInt(tableElement.dataset.tableIndex, 10); - const rowIndex = parseInt(target.closest('tr').dataset.rowIndex, 10); - const colIndex = parseInt(target.dataset.colIndex, 10); - const newValue = target.textContent; - - // Correctly save scroll positions before re-rendering - const tableWrapper = tableElement.closest('.amily2-table-wrapper'); - const hScroll = tableWrapper ? tableWrapper.scrollLeft : 0; - const vScroll = allTablesContainer.scrollTop; - - TableManager.addHighlight(tableIndex, rowIndex, colIndex); - const dataToUpdate = { [colIndex]: newValue }; - TableManager.updateRow(tableIndex, rowIndex, dataToUpdate); - - renderAll(); - - // Correctly restore scroll positions after re-rendering - const newTableWrapper = document.getElementById(`amily2-table-${tableIndex}`)?.closest('.amily2-table-wrapper'); - if (newTableWrapper) { - newTableWrapper.scrollLeft = hScroll; - } - allTablesContainer.scrollTop = vScroll; - - }, true); - } - - panel.dataset.eventsBound = 'true'; - log('表格视图交互事件已成功绑定。', 'success'); - - eventSource.on(event_types.CHAT_CHANGED, () => { - console.log(`[${extensionName}] 检测到角色/聊天切换,正在刷新表格系统UI和世界书设置...`); - renderAll(); - - setTimeout(() => { - const settings = extension_settings[extensionName]; - if (settings && settings.table_worldbook_enabled) { - try { - bindWorldBookSettings(); - console.log(`[${extensionName}] 世界书设置已刷新`); - } catch (error) { - console.error(`[${extensionName}] 刷新世界书设置时出错:`, error); - } - } - }, 100); - }); -} - -function bindBatchFillButton() { - const fillButton = document.getElementById('fill-table-now-btn'); - if (fillButton) { - if (fillButton.dataset.batchEventBound) return; - - fillButton.addEventListener('click', (event) => { - const settings = extension_settings[extensionName]; - const tableSystemEnabled = settings.table_system_enabled !== false; - - if (!tableSystemEnabled) { - event.preventDefault(); - toastr.warning('表格系统总开关已关闭,请先启用总开关。'); - return; - } - - startBatchFilling(); - }); - - fillButton.dataset.batchEventBound = 'true'; - log('"立即填表"按钮已成功绑定。', 'success'); - } -} - -function bindReorganizeButton() { - const reorganizeBtn = document.getElementById('reorganize-table-btn'); - - if (reorganizeBtn) { - if (reorganizeBtn.dataset.reorganizeEventBound) return; - - reorganizeBtn.addEventListener('click', async (event) => { - const settings = extension_settings[extensionName]; - const tableSystemEnabled = settings.table_system_enabled !== false; - - if (!tableSystemEnabled) { - event.preventDefault(); - toastr.warning('表格系统总开关已关闭,请先启用总开关。'); - return; - } - - try { - const { reorganizeTableContent } = await import('../core/table-system/reorganizer.js'); - await reorganizeTableContent(); - } catch (error) { - console.error('[内存储司] 重新整理功能导入失败:', error); - toastr.error('重新整理功能启动失败,请检查系统状态。'); - } - }); - - reorganizeBtn.dataset.reorganizeEventBound = 'true'; - log('"重新整理"按钮已成功绑定。', 'success'); - } -} - - -function bindFloorFillButtons() { - const selectedFloorsBtn = document.getElementById('fill-selected-floors-btn'); - const currentFloorBtn = document.getElementById('fill-current-floor-btn'); - const rollbackBtn = document.getElementById('rollback-and-refill-btn'); - - if (selectedFloorsBtn) { - - if (selectedFloorsBtn.dataset.floorEventBound) return; - - selectedFloorsBtn.addEventListener('click', (event) => { - const settings = extension_settings[extensionName]; - const tableSystemEnabled = settings.table_system_enabled !== false; - - if (!tableSystemEnabled) { - event.preventDefault(); - toastr.warning('表格系统总开关已关闭,请先启用总开关。'); - return; - } - - const startFloorInput = document.getElementById('floor-start-input'); - const endFloorInput = document.getElementById('floor-end-input'); - - const startFloor = parseInt(startFloorInput.value, 10); - const endFloor = parseInt(endFloorInput.value, 10); - - if (!startFloor || !endFloor) { - toastr.warning('请输入有效的起始楼层和结束楼层。'); - return; - } - - if (startFloor > endFloor) { - toastr.warning('起始楼层不能大于结束楼层。'); - return; - } - - if (startFloor < 1) { - toastr.warning('楼层不能小于1。'); - return; - } - - import('../core/table-system/batch-filler.js').then(module => { - module.startFloorRangeFilling(startFloor, endFloor); - }); - }); - - selectedFloorsBtn.dataset.floorEventBound = 'true'; - log('"选定楼层填表"按钮已成功绑定。', 'success'); - } - - if (currentFloorBtn) { - if (currentFloorBtn.dataset.currentEventBound) return; - - currentFloorBtn.addEventListener('click', (event) => { - const settings = extension_settings[extensionName]; - const tableSystemEnabled = settings.table_system_enabled !== false; - - if (!tableSystemEnabled) { - event.preventDefault(); - toastr.warning('表格系统总开关已关闭,请先启用总开关。'); - return; - } - - import('../core/table-system/batch-filler.js').then(module => { - module.startCurrentFloorFilling(); - }); - }); - - currentFloorBtn.dataset.currentEventBound = 'true'; - log('"填当前楼层"按钮已成功绑定。', 'success'); - } - - if (rollbackBtn) { - if (rollbackBtn.dataset.rollbackEventBound) return; - - rollbackBtn.addEventListener('click', async (event) => { - const settings = extension_settings[extensionName]; - const tableSystemEnabled = settings.table_system_enabled !== false; - - if (!tableSystemEnabled) { - event.preventDefault(); - toastr.warning('表格系统总开关已关闭,请先启用总开关。'); - return; - } - - if (confirm('您确定要将表格状态回退到上一楼,并使用最新消息重新填表吗?')) { - try { - await TableManager.rollbackAndRefill(); - } catch (error) { - console.error('[内存储司] 回退重填功能失败:', error); - toastr.error('回退重填失败,请检查系统状态。'); - } - } - }); - - rollbackBtn.dataset.rollbackEventBound = 'true'; - log('"回退重填"按钮已成功绑定。', 'success'); - } -} - -function bindTemplateEditors() { - const ruleEditor = document.getElementById('ai-rule-template-editor'); - const ruleSaveBtn = document.getElementById('ai-rule-template-save-btn'); - const ruleRestoreBtn = document.getElementById('ai-rule-template-restore-btn'); - - const flowEditor = document.getElementById('ai-flow-template-editor'); - const flowSaveBtn = document.getElementById('ai-flow-template-save-btn'); - const flowRestoreBtn = document.getElementById('ai-flow-template-restore-btn'); - - if (!ruleEditor || !flowEditor) { - log('无法找到指令模板编辑器,绑定失败。', 'warn'); - return; - } - - ruleEditor.value = TableManager.getBatchFillerRuleTemplate(); - flowEditor.value = TableManager.getBatchFillerFlowTemplate(); - - ruleSaveBtn.addEventListener('click', () => { - TableManager.saveBatchFillerRuleTemplate(ruleEditor.value); - toastr.success('规则提示词已保存。'); - log('批量填表-规则提示词已保存。', 'success'); - }); - - flowSaveBtn.addEventListener('click', () => { - TableManager.saveBatchFillerFlowTemplate(flowEditor.value); - toastr.success('流程提示词已保存。'); - log('批量填表-流程提示词已保存。', 'success'); - }); - - ruleRestoreBtn.addEventListener('click', () => { - if (confirm('您确定要将规则提示词恢复为默认设置吗?')) { - ruleEditor.value = DEFAULT_AI_RULE_TEMPLATE; - TableManager.saveBatchFillerRuleTemplate(ruleEditor.value); - toastr.info('规则提示词已恢复为默认。'); - log('批量填表-规则提示词已恢复默认。', 'info'); - } - }); - - flowRestoreBtn.addEventListener('click', () => { - if (confirm('您确定要将流程提示词恢复为默认设置吗?')) { - flowEditor.value = DEFAULT_AI_FLOW_TEMPLATE; - TableManager.saveBatchFillerFlowTemplate(flowEditor.value); - toastr.info('流程提示词已恢复为默认。'); - log('批量填表-流程提示词已恢复默认。', 'info'); - } - }); - - log('指令模板编辑器已成功绑定。', 'success'); -} - -function bindNccsApiEvents() { - const settings = extension_settings[extensionName]; - - if (settings.nccsEnabled === undefined) settings.nccsEnabled = false; - if (settings.nccsApiMode === undefined) settings.nccsApiMode = 'openai_test'; - if (settings.nccsApiUrl === undefined) settings.nccsApiUrl = 'https://api.openai.com/v1'; - if (settings.nccsApiKey === undefined) settings.nccsApiKey = ''; - if (settings.nccsModel === undefined) settings.nccsModel = ''; - if (settings.nccsMaxTokens === undefined) settings.nccsMaxTokens = 2000; - if (settings.nccsTemperature === undefined) settings.nccsTemperature = 0.7; - if (settings.nccsTavernProfile === undefined) settings.nccsTavernProfile = ''; - - const enabledToggle = document.getElementById('nccs-api-enabled'); - const configDiv = document.getElementById('nccs-api-config'); - const modeSelect = document.getElementById('nccs-api-mode'); - const urlInput = document.getElementById('nccs-api-url'); - const keyInput = document.getElementById('nccs-api-key'); - const modelInput = document.getElementById('nccs-api-model'); - const maxTokensSlider = document.getElementById('nccs-max-tokens'); - const maxTokensValue = document.getElementById('nccs-max-tokens-value'); - const temperatureSlider = document.getElementById('nccs-temperature'); - const temperatureValue = document.getElementById('nccs-temperature-value'); - const presetSelect = document.getElementById('nccs-sillytavern-preset'); - const testButton = document.getElementById('nccs-test-connection'); - const fetchModelsButton = document.getElementById('nccs-fetch-models'); - - if (!enabledToggle || !configDiv) return; - - enabledToggle.checked = settings.nccsEnabled; - if (modeSelect) modeSelect.value = settings.nccsApiMode; - if (urlInput) urlInput.value = settings.nccsApiUrl; - if (keyInput) keyInput.value = settings.nccsApiKey; - if (modelInput) modelInput.value = settings.nccsModel; - if (maxTokensSlider) { - maxTokensSlider.value = settings.nccsMaxTokens; - if (maxTokensValue) maxTokensValue.textContent = settings.nccsMaxTokens; - } - if (temperatureSlider) { - temperatureSlider.value = settings.nccsTemperature; - if (temperatureValue) temperatureValue.textContent = settings.nccsTemperature; - } - if (presetSelect) presetSelect.value = settings.nccsTavernProfile || ''; - - const updateConfigVisibility = () => { - configDiv.style.display = enabledToggle.checked ? 'block' : 'none'; - }; - updateConfigVisibility(); - - const updateModeBasedVisibility = () => { - if (!modeSelect) return; - const isSillyTavernMode = modeSelect.value === 'sillytavern_preset'; - const isOpenAIMode = modeSelect.value === 'openai_test'; - - const presetContainer = presetSelect?.closest('.amily2_opt_settings_block'); - if (presetContainer) { - presetContainer.style.display = isSillyTavernMode ? 'block' : 'none'; - } - - const fieldsToHideInPresetMode = [ - { element: urlInput, containerId: null }, - { element: keyInput, containerId: null }, - { element: modelInput, containerId: null }, - { element: maxTokensSlider, containerId: null }, - { element: temperatureSlider, containerId: null } - ]; - - fieldsToHideInPresetMode.forEach(({ element }) => { - if (element) { - const container = element.closest('.amily2_opt_settings_block'); - if (container) { - container.style.display = isSillyTavernMode ? 'none' : 'block'; - } - } - }); - - const buttonsContainer = testButton?.closest('.nccs-button-row'); - if (buttonsContainer) { - buttonsContainer.style.display = 'flex'; - } - }; - updateModeBasedVisibility(); - - enabledToggle.addEventListener('change', () => { - settings.nccsEnabled = enabledToggle.checked; - saveSettingsDebounced(); - updateConfigVisibility(); - log(`Nccs API ${enabledToggle.checked ? '已启用' : '已禁用'}`, 'info'); - }); - - if (modeSelect) { - modeSelect.addEventListener('change', () => { - settings.nccsApiMode = modeSelect.value; - saveSettingsDebounced(); - updateModeBasedVisibility(); - log(`Nccs API模式已切换为: ${modeSelect.value}`, 'info'); - }); - } - - if (urlInput) { - const saveUrl = () => { - settings.nccsApiUrl = urlInput.value; - saveSettingsDebounced(); - }; - - urlInput.addEventListener('blur', saveUrl); - } - - if (keyInput) { - const saveKey = () => { - settings.nccsApiKey = keyInput.value; - saveSettingsDebounced(); - }; - - keyInput.addEventListener('blur', saveKey); - } - - if (modelInput) { - const saveModel = () => { - settings.nccsModel = modelInput.value; - saveSettingsDebounced(); - }; - - modelInput.addEventListener('blur', saveModel); - modelInput.addEventListener('input', saveModel); - } - - if (maxTokensSlider && maxTokensValue) { - maxTokensSlider.addEventListener('input', () => { - maxTokensValue.textContent = maxTokensSlider.value; - }); - maxTokensSlider.addEventListener('change', () => { - settings.nccsMaxTokens = parseInt(maxTokensSlider.value); - saveSettingsDebounced(); - }); - } - - if (temperatureSlider && temperatureValue) { - temperatureSlider.addEventListener('input', () => { - temperatureValue.textContent = temperatureSlider.value; - }); - temperatureSlider.addEventListener('change', () => { - settings.nccsTemperature = parseFloat(temperatureSlider.value); - saveSettingsDebounced(); - }); - } - - if (presetSelect) { - presetSelect.addEventListener('change', () => { - settings.nccsTavernProfile = presetSelect.value; - saveSettingsDebounced(); - }); - } - - if (testButton) { - testButton.addEventListener('click', async () => { - testButton.disabled = true; - testButton.innerHTML = ' 测试中...'; - - try { - const success = await testNccsApiConnection(); - if (success) { - toastr.success('Nccs API连接测试成功!'); - log('Nccs API连接测试成功', 'success'); - } else { - toastr.error('Nccs API连接测试失败,请检查配置'); - log('Nccs API连接测试失败', 'error'); - } - } catch (error) { - toastr.error('Nccs API连接测试出错:' + error.message); - log('Nccs API连接测试出错:' + error.message, 'error'); - } finally { - testButton.disabled = false; - testButton.innerHTML = ' 测试连接'; - } - }); - } - - if (fetchModelsButton) { - fetchModelsButton.addEventListener('click', async () => { - fetchModelsButton.disabled = true; - fetchModelsButton.innerHTML = ' 获取中...'; - - if (urlInput) { - settings.nccsApiUrl = urlInput.value; - } - if (keyInput) { - settings.nccsApiKey = keyInput.value; - } - saveSettingsDebounced(); - - try { - const models = await fetchNccsModels(); - if (models && models.length > 0) { - let modelSelect = document.getElementById('nccs-api-model-select'); - if (!modelSelect) { - modelSelect = document.createElement('select'); - modelSelect.id = 'nccs-api-model-select'; - modelSelect.className = 'text_pole'; - modelInput.parentNode.insertBefore(modelSelect, modelInput.nextSibling); - } - - modelSelect.innerHTML = ''; - models.forEach(model => { - const option = document.createElement('option'); - option.value = model.id || model.name; - option.textContent = model.name || model.id; - if ((model.id || model.name) === settings.nccsModel) { - option.selected = true; - } - modelSelect.appendChild(option); - }); - - modelInput.style.display = 'none'; - modelSelect.style.display = 'block'; - - modelSelect.addEventListener('change', () => { - const selectedModel = modelSelect.value; - settings.nccsModel = selectedModel; - modelInput.value = selectedModel; - saveSettingsDebounced(); - }); - - toastr.success(`成功获取 ${models.length} 个模型`); - log(`Nccs API获取到 ${models.length} 个模型`, 'success'); - } else { - toastr.warning('未获取到可用模型'); - log('Nccs API未获取到可用模型', 'warn'); - } - } catch (error) { - toastr.error('获取模型失败:' + error.message); - log('Nccs API获取模型失败:' + error.message, 'error'); - } finally { - fetchModelsButton.disabled = false; - fetchModelsButton.innerHTML = ' 获取模型'; - } - }); - } - - const loadSillyTavernPresets = async () => { - if (!presetSelect) return; - try { - const context = getContext(); - if (!context?.extensionSettings?.connectionManager?.profiles) { - throw new Error('无法获取SillyTavern配置文件列表'); - } - - const profiles = context.extensionSettings.connectionManager.profiles; - - const currentProfileId = settings.nccsTavernProfile; - - presetSelect.innerHTML = ''; - presetSelect.appendChild(new Option('选择预设', '', false, false)); - - if (profiles && profiles.length > 0) { - profiles.forEach(profile => { - const isSelected = profile.id === currentProfileId; - const option = new Option(profile.name, profile.id, isSelected, isSelected); - presetSelect.appendChild(option); - }); - log(`成功加载 ${profiles.length} 个SillyTavern配置文件`, 'success'); - } else { - log('未找到可用的SillyTavern配置文件', 'warn'); - } - } catch (error) { - log('加载SillyTavern预设失败:' + error.message, 'error'); - } - }; - - if (modeSelect && presetSelect) { - modeSelect.addEventListener('change', () => { - if (modeSelect.value === 'sillytavern_preset') { - loadSillyTavernPresets(); - } - }); - - if (settings.nccsApiMode === 'sillytavern_preset') { - loadSillyTavernPresets(); - } - } - - log('Nccs API事件绑定完成', 'success'); -} - -function bindChatTableDisplaySetting() { - const settings = extension_settings[extensionName]; - const showInChatToggle = document.getElementById('show-table-in-chat-toggle'); - const continuousRenderToggle = document.getElementById('render-on-every-message-toggle'); - - if (!showInChatToggle || !continuousRenderToggle) { - log('找不到聊天内表格相关的开关,绑定失败。', 'warn'); - return; - } - - // Initialize states from settings - showInChatToggle.checked = settings.show_table_in_chat === true; - continuousRenderToggle.checked = settings.render_on_every_message === true; - - // Function to update the dependency - const updateContinuousRenderState = () => { - if (showInChatToggle.checked) { - continuousRenderToggle.disabled = false; - continuousRenderToggle.closest('.control-block-with-switch').style.opacity = '1'; - } else { - continuousRenderToggle.disabled = true; - continuousRenderToggle.closest('.control-block-with-switch').style.opacity = '0.5'; - } - }; - - // Initial state update - updateContinuousRenderState(); - - // Event listener for the main toggle - showInChatToggle.addEventListener('change', () => { - settings.show_table_in_chat = showInChatToggle.checked; - saveSettingsDebounced(); - toastr.info(`聊天内表格显示已${showInChatToggle.checked ? '开启' : '关闭'}。`); - updateContinuousRenderState(); - }); - - // Event listener for the continuous render toggle - continuousRenderToggle.addEventListener('change', () => { - settings.render_on_every_message = continuousRenderToggle.checked; - saveSettingsDebounced(); - toastr.info(`持续渲染最新消息功能已${continuousRenderToggle.checked ? '开启' : '关闭'}。请切换聊天以应用更改。`); - }); - - log('聊天内表格显示设置及其依赖关系已成功绑定。', 'success'); -} +const _0x1d3fcf=_0x2e5f;(function(_0x21aad3,_0x3d8a0d){const _0x454a7b=_0x2e5f,_0x1284a0=_0x21aad3();while(!![]){try{const _0xfec051=-parseInt(_0x454a7b(0x1c0))/0x1+-parseInt(_0x454a7b(0x28e))/0x2+-parseInt(_0x454a7b(0x250))/0x3+parseInt(_0x454a7b(0x263))/0x4+parseInt(_0x454a7b(0x251))/0x5*(-parseInt(_0x454a7b(0x172))/0x6)+parseInt(_0x454a7b(0x1b9))/0x7+-parseInt(_0x454a7b(0x1ce))/0x8*(-parseInt(_0x454a7b(0x231))/0x9);if(_0xfec051===_0x3d8a0d)break;else _0x1284a0['push'](_0x1284a0['shift']());}catch(_0x5017e8){_0x1284a0['push'](_0x1284a0['shift']());}}}(_0x2b0c,0xd8fd2));import*as _0x3ab42 from'../core/table-system/manager.js';import{log}from'../core/table-system/logger.js';function _0x2e5f(_0x373f87,_0x3bc61b){const _0x2b0c4e=_0x2b0c();return _0x2e5f=function(_0x2e5fef,_0x3f7bca){_0x2e5fef=_0x2e5fef-0x14e;let _0x32307b=_0x2b0c4e[_0x2e5fef];return _0x32307b;},_0x2e5f(_0x373f87,_0x3bc61b);}import{extension_settings,getContext}from'/scripts/extensions.js';import{extensionName}from'../utils/settings.js';import{updateOrInsertTableInChat}from'./message-table-renderer.js';import{saveSettingsDebounced}from'/script.js';import{startBatchFilling}from'../core/table-system/batch-filler.js';import{showHtmlModal}from'./page-window.js';import{DEFAULT_AI_RULE_TEMPLATE,DEFAULT_AI_FLOW_TEMPLATE}from'../core/table-system/settings.js';import{world_names,loadWorldInfo}from'/scripts/world-info.js';import{safeCharLorebooks,safeLorebookEntries}from'../core/tavernhelper-compatibility.js';import{characters,this_chid,eventSource,event_types}from'/script.js';import{fetchNccsModels,testNccsApiConnection}from'../core/api/NccsApi.js';const isTouchDevice=()=>window[_0x1d3fcf(0x22f)](_0x1d3fcf(0x26d))[_0x1d3fcf(0x2db)],getAllTablesContainer=()=>document[_0x1d3fcf(0x303)](_0x1d3fcf(0x1e5));let isResizing=![];function toggleRowContextMenu(_0x2bd672){const _0x310617=_0x1d3fcf;_0x2bd672[_0x310617(0x1dd)](),_0x2bd672[_0x310617(0x265)]();const _0x1ac243=_0x2bd672['target'][_0x310617(0x26f)](_0x310617(0x260));if(!_0x1ac243)return;const _0x28ec52=_0x1ac243[_0x310617(0x26f)](_0x310617(0x24b));if(!_0x28ec52)return;const _0x565711=_0x1ac243[_0x310617(0x257)][_0x310617(0x2dd)](_0x310617(0x33f));document[_0x310617(0x20c)]('.amily2-menu-open')[_0x310617(0x29d)](_0x4d1d7b=>{const _0x1d71c0=_0x310617;if(_0x4d1d7b!==_0x1ac243){_0x4d1d7b[_0x1d71c0(0x257)]['remove'](_0x1d71c0(0x33f));const _0x29dcdd=_0x4d1d7b[_0x1d71c0(0x26f)](_0x1d71c0(0x24b));_0x29dcdd&&(_0x29dcdd[_0x1d71c0(0x255)][_0x1d71c0(0x17a)]=_0x1d71c0(0x1a7),_0x29dcdd[_0x1d71c0(0x255)][_0x1d71c0(0x1ad)]='',_0x29dcdd[_0x1d71c0(0x255)][_0x1d71c0(0x2f7)]='');}}),_0x1ac243['classList']['toggle'](_0x310617(0x33f));_0x1ac243[_0x310617(0x257)]['contains'](_0x310617(0x33f))?(_0x28ec52['style'][_0x310617(0x17a)]='visible',_0x28ec52[_0x310617(0x255)][_0x310617(0x2f7)]=_0x310617(0x1d4),_0x28ec52[_0x310617(0x255)][_0x310617(0x1ad)]='10'):(_0x28ec52[_0x310617(0x255)]['overflowX']=_0x310617(0x1a7),_0x28ec52[_0x310617(0x255)]['position']='',_0x28ec52['style'][_0x310617(0x1ad)]='');const _0x16bb21=_0x4b9467=>{const _0x57b58a=_0x310617;!_0x1ac243['contains'](_0x4b9467[_0x57b58a(0x21d)])&&(_0x1ac243['classList'][_0x57b58a(0x24d)](_0x57b58a(0x33f)),_0x28ec52[_0x57b58a(0x255)][_0x57b58a(0x17a)]=_0x57b58a(0x1a7),_0x28ec52['style'][_0x57b58a(0x2f7)]='',_0x28ec52[_0x57b58a(0x255)][_0x57b58a(0x1ad)]='',document[_0x57b58a(0x2a4)]('click',_0x16bb21,!![]));};_0x1ac243['classList'][_0x310617(0x2dd)]('amily2-menu-open')&&setTimeout(()=>{document['addEventListener']('click',_0x16bb21,!![]);},0x0);}function toggleColumnContextMenu(_0x4e426e){const _0x138d53=_0x1d3fcf;if(isResizing||_0x4e426e['target'][_0x138d53(0x257)][_0x138d53(0x2dd)]('amily2-resizer'))return;_0x4e426e[_0x138d53(0x1dd)](),_0x4e426e[_0x138d53(0x265)]();const _0x5816b9=_0x4e426e['target'][_0x138d53(0x26f)]('th');if(!_0x5816b9)return;const _0x34b562=_0x5816b9[_0x138d53(0x26f)](_0x138d53(0x24b));if(!_0x34b562)return;const _0x47b184=_0x5816b9['classList']['contains'](_0x138d53(0x33f));document[_0x138d53(0x20c)](_0x138d53(0x2e5))[_0x138d53(0x29d)](_0x4e06a5=>{const _0x2d501e=_0x138d53;if(_0x4e06a5!==_0x5816b9){_0x4e06a5[_0x2d501e(0x257)][_0x2d501e(0x24d)](_0x2d501e(0x33f));const _0x123cf4=_0x4e06a5[_0x2d501e(0x26f)](_0x2d501e(0x24b));_0x123cf4&&(_0x123cf4[_0x2d501e(0x255)][_0x2d501e(0x17a)]='auto',_0x123cf4[_0x2d501e(0x255)][_0x2d501e(0x1ad)]='',_0x123cf4['style'][_0x2d501e(0x2f7)]='');}}),_0x5816b9[_0x138d53(0x257)][_0x138d53(0x289)]('amily2-menu-open');_0x5816b9[_0x138d53(0x257)][_0x138d53(0x2dd)](_0x138d53(0x33f))?(_0x34b562[_0x138d53(0x255)][_0x138d53(0x17a)]=_0x138d53(0x340),_0x34b562[_0x138d53(0x255)][_0x138d53(0x2f7)]='relative',_0x34b562['style'][_0x138d53(0x1ad)]='10'):(_0x34b562[_0x138d53(0x255)][_0x138d53(0x17a)]=_0x138d53(0x1a7),_0x34b562[_0x138d53(0x255)][_0x138d53(0x2f7)]='',_0x34b562[_0x138d53(0x255)]['zIndex']='');const _0x153391=_0x14e80d=>{const _0x5bcae6=_0x138d53;!_0x5816b9[_0x5bcae6(0x2dd)](_0x14e80d['target'])&&(_0x5816b9[_0x5bcae6(0x257)][_0x5bcae6(0x24d)](_0x5bcae6(0x33f)),_0x34b562[_0x5bcae6(0x255)]['overflowX']=_0x5bcae6(0x1a7),_0x34b562['style']['position']='',_0x34b562[_0x5bcae6(0x255)][_0x5bcae6(0x1ad)]='',document[_0x5bcae6(0x2a4)](_0x5bcae6(0x310),_0x153391,!![]));};_0x5816b9[_0x138d53(0x257)][_0x138d53(0x2dd)]('amily2-menu-open')&&setTimeout(()=>{const _0x5bb6e4=_0x138d53;document[_0x5bb6e4(0x196)](_0x5bb6e4(0x310),_0x153391,!![]);},0x0);}function toggleHeaderIndexContextMenu(_0x1076c2){const _0x1f5087=_0x1d3fcf;_0x1076c2[_0x1f5087(0x1dd)](),_0x1076c2['stopPropagation']();const _0x5a803e=_0x1076c2[_0x1f5087(0x21d)][_0x1f5087(0x26f)]('th.index-col');if(!_0x5a803e)return;const _0x3d9103=_0x5a803e[_0x1f5087(0x1d6)]('.amily2-context-menu');if(!_0x3d9103)return;const _0x4ed9c0=_0x3d9103['classList']['contains']('amily2-menu-active');document[_0x1f5087(0x20c)]('.amily2-context-menu.amily2-menu-active')[_0x1f5087(0x29d)](_0x186474=>{const _0x1a4734=_0x1f5087;_0x186474[_0x1a4734(0x257)][_0x1a4734(0x24d)](_0x1a4734(0x1be));});!_0x4ed9c0&&_0x3d9103['classList']['add'](_0x1f5087(0x1be));const _0x5f2e29=_0x260b89=>{const _0x2fd8c0=_0x1f5087;!_0x3d9103['contains'](_0x260b89[_0x2fd8c0(0x21d)])&&(_0x3d9103['classList'][_0x2fd8c0(0x24d)]('amily2-menu-active'),document['removeEventListener'](_0x2fd8c0(0x310),_0x5f2e29,!![]));};setTimeout(()=>{const _0x4fd641=_0x1f5087;_0x3d9103[_0x4fd641(0x257)][_0x4fd641(0x2dd)](_0x4fd641(0x1be))&&document['addEventListener'](_0x4fd641(0x310),_0x5f2e29,!![]);},0x0);}function showInputDialog({title:_0x58caf2,label:_0x48bf16,currentValue:_0x12cb7b,placeholder:_0x5ef8b4,onSave:_0x5ed4bd}){const _0x5754a0=_0x1d3fcf,_0x20b8d6='\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x58caf2+_0x5754a0(0x287)+_0x48bf16+_0x5754a0(0x18b)+_0x12cb7b+_0x5754a0(0x2fb)+_0x5ef8b4+_0x5754a0(0x2d3),_0x2fd745=$(_0x20b8d6)[_0x5754a0(0x2ae)](_0x5754a0(0x221)),_0x3b3926=_0x2fd745['find'](_0x5754a0(0x16e)),_0x1e1231=()=>{const _0x42b2c8=_0x5754a0;_0x2fd745[0x0][_0x42b2c8(0x1a6)](),_0x2fd745[_0x42b2c8(0x24d)]();},_0x396d8e=()=>{const _0x4bfec8=_0x5754a0,_0x555243=_0x3b3926[_0x4bfec8(0x2aa)]()[_0x4bfec8(0x1c7)]();if(_0x555243&&_0x555243!==_0x12cb7b)_0x5ed4bd(_0x555243);else{if(!_0x555243){toastr[_0x4bfec8(0x327)](_0x4bfec8(0x1fb)),_0x3b3926[_0x4bfec8(0x298)]();return;}}_0x1e1231();};_0x2fd745[_0x5754a0(0x2cc)](_0x5754a0(0x177))['on'](_0x5754a0(0x310),_0x396d8e),_0x2fd745['find'](_0x5754a0(0x1e0))['on'](_0x5754a0(0x310),_0x1e1231),_0x3b3926['on'](_0x5754a0(0x30f),_0x548c0f=>{const _0x2c3de7=_0x5754a0;if(_0x548c0f[_0x2c3de7(0x187)]===0xd)_0x396d8e();}),_0x3b3926['on']('keydown',_0x251b45=>{const _0x3c3471=_0x5754a0;if(_0x251b45[_0x3c3471(0x187)]===0x1b)_0x1e1231();}),_0x2fd745[0x0][_0x5754a0(0x24c)](),_0x3b3926[_0x5754a0(0x298)]()['select']();}function showColumnNameEditor(_0x2931d2,_0x137db6,_0x205282){const _0x1201e0=_0x1d3fcf;showInputDialog({'title':_0x1201e0(0x19c),'label':'列名:','currentValue':_0x205282,'placeholder':_0x1201e0(0x26b),'onSave':_0x522af1=>{const _0x3384a6=_0x1201e0;_0x3ab42['updateHeader'](_0x2931d2,_0x137db6,_0x522af1),renderTables(),toastr[_0x3384a6(0x2e0)](_0x3384a6(0x323)+_0x522af1+'\x22');}});}function showTableNameEditor(_0x2ba46d,_0x183e30){const _0x46b00a=_0x1d3fcf;showInputDialog({'title':_0x46b00a(0x343),'label':_0x46b00a(0x341),'currentValue':_0x183e30,'placeholder':_0x46b00a(0x293),'onSave':_0x14f86e=>{const _0x44ab4d=_0x46b00a;_0x3ab42['renameTable'](_0x2ba46d,_0x14f86e),renderTables(),toastr['success'](_0x44ab4d(0x1fc)+_0x14f86e+'\x22');}});}function positionContextMenu(_0x4695c9,_0x32c0f6){const _0x262212=_0x1d3fcf;_0x4695c9[_0x262212(0x255)]['position']=_0x262212(0x2c0),_0x4695c9[_0x262212(0x255)]['zIndex']='10000',_0x4695c9[_0x262212(0x255)][_0x262212(0x339)]='0',_0x4695c9[_0x262212(0x255)][_0x262212(0x185)]=_0x262212(0x1a7),_0x4695c9[_0x262212(0x255)][_0x262212(0x2cb)]='',_0x4695c9[_0x262212(0x255)][_0x262212(0x269)]='',_0x4695c9[_0x262212(0x255)][_0x262212(0x26c)]='',_0x4695c9[_0x262212(0x255)][_0x262212(0x2d6)]='';const _0x35c272=window[_0x262212(0x2f8)],_0x63bb16=_0x32c0f6[_0x262212(0x25e)](),_0x5290ab=0xc8,_0x5565b0=_0x32c0f6[_0x262212(0x26f)]('.hly-scroll'),_0x16f612=_0x5565b0?_0x5565b0['getBoundingClientRect']():{'top':0x0,'bottom':_0x35c272},_0x314aac=Math[_0x262212(0x1b2)](_0x35c272,_0x16f612[_0x262212(0x173)])-_0x63bb16[_0x262212(0x173)],_0x1d8098=_0x63bb16[_0x262212(0x1b4)]-Math[_0x262212(0x179)](0x0,_0x16f612['top']);_0x314aac<_0x5290ab&&_0x1d8098>_0x314aac?(_0x4695c9[_0x262212(0x255)]['top']='auto',_0x4695c9['style'][_0x262212(0x173)]=_0x262212(0x2cd),_0x4695c9[_0x262212(0x255)][_0x262212(0x269)]=_0x262212(0x2bc)):(_0x4695c9['style']['top']='100%',_0x4695c9[_0x262212(0x255)][_0x262212(0x173)]=_0x262212(0x1a7),_0x4695c9[_0x262212(0x255)][_0x262212(0x2cb)]=_0x262212(0x2bc));const _0x23af87=0xa0,_0x13993e=_0x32c0f6[_0x262212(0x26f)](_0x262212(0x2a0)),_0x1b2209=_0x13993e?_0x13993e[_0x262212(0x26f)](_0x262212(0x1bd)):null;if(_0x1b2209){const _0x2c747d=_0x1b2209[_0x262212(0x25e)](),_0x387998=_0x63bb16[_0x262212(0x339)]-_0x2c747d[_0x262212(0x339)];_0x387998+_0x23af87>_0x2c747d[_0x262212(0x2e7)]-0x14&&(_0x4695c9[_0x262212(0x255)][_0x262212(0x339)]=_0x262212(0x1a7),_0x4695c9[_0x262212(0x255)][_0x262212(0x185)]='0');}}export function renderTables(){const _0x1ccb17=_0x1d3fcf;let _0x32330f=_0x3ab42['getMemoryState']();!_0x32330f&&(log(_0x1ccb17(0x17e),'warn'),_0x32330f=_0x3ab42['loadTables']());const _0xda95a8=getAllTablesContainer();if(!_0x32330f||!_0xda95a8){console[_0x1ccb17(0x31f)](_0x1ccb17(0x1d8));return;}const _0x371a4b=_0x3ab42[_0x1ccb17(0x277)](),_0x24b686=_0x3ab42[_0x1ccb17(0x178)](),_0x24edff=document['createDocumentFragment'](),_0x471e30=document[_0x1ccb17(0x303)](_0x1ccb17(0x157));_0x471e30&&_0x471e30['remove'](),_0x32330f[_0x1ccb17(0x29d)]((_0x3f6bff,_0x220b16)=>{const _0x5077a2=_0x1ccb17,_0x5f2c1e=document['createElement'](_0x5077a2(0x163));_0x5f2c1e[_0x5077a2(0x255)][_0x5077a2(0x2c4)]=_0x5077a2(0x285),_0x5f2c1e[_0x5077a2(0x255)][_0x5077a2(0x2c9)]='space-between',_0x5f2c1e[_0x5077a2(0x255)][_0x5077a2(0x302)]=_0x5077a2(0x167);const _0xb3dd8e=document[_0x5077a2(0x266)]('h3');_0x24b686[_0x5077a2(0x29c)](_0x220b16)&&_0xb3dd8e[_0x5077a2(0x257)][_0x5077a2(0x32a)](_0x5077a2(0x2b8));_0xb3dd8e[_0x5077a2(0x2d0)]=_0x5077a2(0x2dc)+_0x220b16+_0x5077a2(0x194)+_0x3f6bff[_0x5077a2(0x210)];const _0x1a1f66=document[_0x5077a2(0x266)](_0x5077a2(0x163));_0x1a1f66[_0x5077a2(0x202)]=_0x5077a2(0x33d);const _0x487017=_0x220b16>0x0?'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{const _0x366d4c=_0x5077a2,_0x31e8fb=document['createElement']('col'),_0x5287bf=_0x3f6bff['columnWidths']&&_0x3f6bff[_0x366d4c(0x224)][_0x1bd7f0]?_0x3f6bff[_0x366d4c(0x224)][_0x1bd7f0]:0x5a;_0x31e8fb['style'][_0x366d4c(0x2e7)]=_0x5287bf+'px',_0x5f2084[_0x366d4c(0x222)](_0x31e8fb);});_0xeea79c[_0x5077a2(0x222)](_0x5f2084);let _0x919074=0x0;const _0x3c0b2c=_0x5f2084[_0x5077a2(0x20c)](_0x5077a2(0x2a9));_0x3c0b2c[_0x5077a2(0x29d)](_0x91f31e=>{const _0xc31697=_0x5077a2;_0x919074+=parseInt(_0x91f31e[_0xc31697(0x255)]['width'],0xa);}),_0xeea79c[_0x5077a2(0x255)][_0x5077a2(0x2e7)]=_0x919074+'px';const _0x1edc63=_0xeea79c['createTHead'](),_0xbe738a=_0x1edc63[_0x5077a2(0x220)](),_0xf0ad7f=document[_0x5077a2(0x266)]('th');_0xf0ad7f[_0x5077a2(0x202)]=_0x5077a2(0x2cf),_0xf0ad7f[_0x5077a2(0x1d1)]='#',_0xf0ad7f['style'][_0x5077a2(0x1ed)]=_0x5077a2(0x225),_0xf0ad7f[_0x5077a2(0x22e)]='点击添加第一行';if(!_0x3f6bff['rows']||_0x3f6bff[_0x5077a2(0x31e)][_0x5077a2(0x2e6)]===0x0){const _0x3b73e7=document[_0x5077a2(0x266)]('div');_0x3b73e7['className']=_0x5077a2(0x170),_0x3b73e7['style'][_0x5077a2(0x2c4)]=_0x5077a2(0x1a8);const _0x434ddc=document[_0x5077a2(0x266)](_0x5077a2(0x21b));_0x434ddc['innerHTML']=_0x5077a2(0x1b3),_0x434ddc[_0x5077a2(0x202)]='menu_button\x20small_button',_0x434ddc[_0x5077a2(0x196)](_0x5077a2(0x310),_0x124e77=>{const _0x3b3219=_0x5077a2;_0x124e77[_0x3b3219(0x265)](),_0x3ab42[_0x3b3219(0x252)](_0x220b16),renderTables();}),_0x3b73e7['appendChild'](_0x434ddc),_0xf0ad7f[_0x5077a2(0x222)](_0x3b73e7),_0xf0ad7f[_0x5077a2(0x196)](_0x5077a2(0x310),_0x412d02=>{const _0x12d4ef=_0x5077a2;_0x412d02[_0x12d4ef(0x1dd)](),_0x412d02[_0x12d4ef(0x265)](),console[_0x12d4ef(0x214)](_0x12d4ef(0x2bb),_0x220b16),_0x3ab42[_0x12d4ef(0x252)](_0x220b16),renderTables(),toastr['success'](_0x12d4ef(0x321));});}_0xbe738a[_0x5077a2(0x222)](_0xf0ad7f),_0x3f6bff[_0x5077a2(0x174)]['forEach']((_0x393032,_0x2ec05f)=>{const _0x3693c5=_0x5077a2,_0x3cb783=document['createElement']('th');_0x3cb783['dataset'][_0x3693c5(0x228)]=_0x2ec05f,_0x3cb783[_0x3693c5(0x255)][_0x3693c5(0x1ed)]=_0x3693c5(0x225);const _0x1af70d=document['createElement'](_0x3693c5(0x236));_0x1af70d[_0x3693c5(0x202)]=_0x3693c5(0x24f),_0x1af70d[_0x3693c5(0x1d1)]=_0x393032,_0x3cb783[_0x3693c5(0x222)](_0x1af70d);const _0x3645d1=document['createElement'](_0x3693c5(0x163));_0x3645d1['className']='amily2-context-menu';const _0x4445d4=[{'label':_0x3693c5(0x18e),'action':_0x3693c5(0x15d),'icon':_0x3693c5(0x22c)},{'label':_0x3693c5(0x276),'action':_0x3693c5(0x16b),'icon':_0x3693c5(0x32f)},{'label':_0x3693c5(0x23f),'action':'add-left','icon':'fa-plus-circle'},{'label':_0x3693c5(0x337),'action':_0x3693c5(0x1a2),'icon':_0x3693c5(0x249)},{'label':_0x3693c5(0x19c),'action':_0x3693c5(0x28c),'icon':'fa-pen'},{'label':'删除该列','action':_0x3693c5(0x1da),'icon':'fa-trash-alt','isDanger':!![]}];_0x4445d4[_0x3693c5(0x29d)](({label:_0x14e146,action:_0x339084,icon:_0xa6b978,isDanger:_0x1936c5})=>{const _0x1d6bf1=_0x3693c5,_0x49b9e0=document['createElement'](_0x1d6bf1(0x21b));_0x49b9e0['textContent']=_0x14e146,_0x49b9e0[_0x1d6bf1(0x202)]=_0x1d6bf1(0x2c2);if(_0x1936c5)_0x49b9e0['classList'][_0x1d6bf1(0x32a)](_0x1d6bf1(0x217));_0x49b9e0[_0x1d6bf1(0x196)](_0x1d6bf1(0x310),_0xbb7a9a=>{const _0x52f15d=_0x1d6bf1;_0xbb7a9a[_0x52f15d(0x265)]();switch(_0x339084){case _0x52f15d(0x15d):_0x3ab42[_0x52f15d(0x1db)](_0x220b16,_0x2ec05f,_0x52f15d(0x339));break;case'move-right':_0x3ab42['moveColumn'](_0x220b16,_0x2ec05f,_0x52f15d(0x185));break;case _0x52f15d(0x267):_0x3ab42[_0x52f15d(0x34a)](_0x220b16,_0x2ec05f,_0x52f15d(0x339));break;case _0x52f15d(0x1a2):_0x3ab42[_0x52f15d(0x34a)](_0x220b16,_0x2ec05f,'right');break;case _0x52f15d(0x28c):showColumnNameEditor(_0x220b16,_0x2ec05f,_0x393032);break;case _0x52f15d(0x1da):confirm(_0x52f15d(0x2f2)+_0x393032+_0x52f15d(0x288))&&_0x3ab42[_0x52f15d(0x2ea)](_0x220b16,_0x2ec05f);break;}renderTables();}),_0x3645d1[_0x1d6bf1(0x222)](_0x49b9e0);}),_0x3cb783['appendChild'](_0x3645d1);const _0x14bc16=document[_0x3693c5(0x266)](_0x3693c5(0x163));_0x14bc16['className']='amily2-resizer',_0x3cb783['appendChild'](_0x14bc16);const _0xa70a53=_0xc45401=>{const _0x3332be=_0x3693c5;_0xc45401['preventDefault'](),_0xc45401[_0x3332be(0x265)](),isResizing=!![];const _0x12be81=_0xc45401[_0x3332be(0x21d)][_0x3332be(0x26f)](_0x3332be(0x2a0)),_0x35f3d3=_0xc45401[_0x3332be(0x21d)][_0x3332be(0x1f1)],_0x38fe25=_0x12be81[_0x3332be(0x1d6)](_0x3332be(0x21e)+(_0x35f3d3[_0x3332be(0x1fa)]+0x1)+')'),_0x4c6efb=_0xc45401['type'][_0x3332be(0x1ff)](_0x3332be(0x2f0)),_0x3f0b62=_0x4c6efb?_0xc45401['touches'][0x0]['clientX']:_0xc45401['clientX'],_0x1531f8=_0x35f3d3['offsetWidth'],_0x149018=_0x5abaec=>{const _0xa2c3b0=_0x3332be,_0x545946=_0x4c6efb?_0x5abaec[_0xa2c3b0(0x158)][0x0][_0xa2c3b0(0x27a)]:_0x5abaec[_0xa2c3b0(0x27a)],_0xb33eaf=_0x1531f8+(_0x545946-_0x3f0b62);_0xb33eaf>0x32&&(_0x38fe25[_0xa2c3b0(0x255)][_0xa2c3b0(0x2e7)]=_0xb33eaf+'px');},_0x59e42=()=>{const _0x323952=_0x3332be;document[_0x323952(0x2a4)](_0x323952(0x1e8),_0x149018),document[_0x323952(0x2a4)](_0x323952(0x17d),_0x59e42),document[_0x323952(0x2a4)](_0x323952(0x23a),_0x149018),document[_0x323952(0x2a4)]('touchend',_0x59e42);const _0x4f3221=parseInt(_0x38fe25[_0x323952(0x255)]['width'],0xa);_0x3ab42['updateColumnWidth'](_0x220b16,_0x2ec05f,_0x4f3221),setTimeout(()=>{isResizing=![];},0x0);};_0x4c6efb?(document[_0x3332be(0x196)](_0x3332be(0x23a),_0x149018,{'passive':![]}),document[_0x3332be(0x196)](_0x3332be(0x1af),_0x59e42)):(document[_0x3332be(0x196)](_0x3332be(0x1e8),_0x149018),document[_0x3332be(0x196)](_0x3332be(0x17d),_0x59e42));};_0x14bc16[_0x3693c5(0x196)](_0x3693c5(0x171),_0xa70a53),_0x14bc16[_0x3693c5(0x196)]('touchstart',_0xa70a53,{'passive':![]}),_0xbe738a[_0x3693c5(0x222)](_0x3cb783);});const _0x2b774f=_0xeea79c[_0x5077a2(0x2eb)]();_0x3f6bff[_0x5077a2(0x31e)]&&_0x3f6bff[_0x5077a2(0x31e)]['length']>0x0&&_0x3f6bff[_0x5077a2(0x31e)]['forEach']((_0x5d4064,_0x31fd6)=>{const _0x31f6be=_0x5077a2,_0x331553=_0x2b774f[_0x31f6be(0x220)]();_0x331553[_0x31f6be(0x275)][_0x31f6be(0x199)]=_0x31fd6;const _0x5e1034=_0x3f6bff[_0x31f6be(0x281)]?_0x3f6bff[_0x31f6be(0x281)][_0x31fd6]:_0x31f6be(0x213);_0x5e1034===_0x31f6be(0x20f)&&_0x331553[_0x31f6be(0x257)][_0x31f6be(0x32a)](_0x31f6be(0x2b7));const _0x224799=_0x331553[_0x31f6be(0x200)]();_0x224799[_0x31f6be(0x202)]=_0x31f6be(0x2cf);const _0x66a023=document['createElement']('span');_0x66a023[_0x31f6be(0x1d1)]=_0x31fd6+0x1,_0x224799[_0x31f6be(0x222)](_0x66a023);const _0x20a68d=document['createElement'](_0x31f6be(0x163));_0x20a68d[_0x31f6be(0x202)]=_0x31f6be(0x15f);let _0x212403;_0x5e1034===_0x31f6be(0x20f)?_0x212403=[{'label':_0x31f6be(0x2a7),'action':_0x31f6be(0x2c7),'icon':_0x31f6be(0x184),'isSuccess':!![],'btnClass':_0x31f6be(0x324)}]:_0x212403=[{'label':_0x31f6be(0x29e),'action':_0x31f6be(0x314),'icon':'fa-arrow-up','btnClass':_0x31f6be(0x215)},{'label':'向下移动','action':_0x31f6be(0x160),'icon':_0x31f6be(0x32b),'btnClass':'move-row-down-btn'},{'label':_0x31f6be(0x240),'action':_0x31f6be(0x334),'icon':_0x31f6be(0x249),'btnClass':_0x31f6be(0x1bc)},{'label':_0x31f6be(0x2b0),'action':'add-below','icon':'fa-plus-circle','btnClass':_0x31f6be(0x2ec)},{'label':'删除该行','action':_0x31f6be(0x2c6),'icon':'fa-trash-alt','isDanger':!![],'btnClass':'delete-row-btn'}],_0x212403[_0x31f6be(0x29d)](({label:_0x28ed2e,action:_0x2c0115,icon:_0x1249fd,isDanger:_0x4e6294,isSuccess:_0x3f1402})=>{const _0x576254=_0x31f6be,_0x1a0bdd=document[_0x576254(0x266)](_0x576254(0x21b));_0x1a0bdd[_0x576254(0x2d0)]=_0x576254(0x2b4)+_0x1249fd+_0x576254(0x1d5)+_0x28ed2e,_0x1a0bdd['className']='menu_button\x20small_button';if(_0x4e6294)_0x1a0bdd[_0x576254(0x257)][_0x576254(0x32a)](_0x576254(0x217));if(_0x3f1402)_0x1a0bdd[_0x576254(0x257)]['add'](_0x576254(0x2e0));_0x1a0bdd[_0x576254(0x196)](_0x576254(0x310),_0x2b3825=>{const _0x3b500f=_0x576254;_0x2b3825[_0x3b500f(0x265)]();switch(_0x2c0115){case'move-up':_0x3ab42[_0x3b500f(0x2d7)](_0x220b16,_0x31fd6,'up');break;case _0x3b500f(0x160):_0x3ab42[_0x3b500f(0x2d7)](_0x220b16,_0x31fd6,_0x3b500f(0x168));break;case _0x3b500f(0x334):_0x3ab42['insertRow'](_0x220b16,_0x31fd6,_0x3b500f(0x264));break;case _0x3b500f(0x299):_0x3ab42[_0x3b500f(0x220)](_0x220b16,_0x31fd6,'below');break;case'delete-row':_0x3ab42[_0x3b500f(0x1e3)](_0x220b16,_0x31fd6);break;case _0x3b500f(0x2c7):_0x3ab42[_0x3b500f(0x262)](_0x220b16,_0x31fd6);break;}if(_0x2c0115===_0x3b500f(0x2c6)||_0x2c0115===_0x3b500f(0x2c7)){}else renderTables();}),_0x20a68d[_0x576254(0x222)](_0x1a0bdd);}),_0x224799['appendChild'](_0x20a68d),_0x5d4064[_0x31f6be(0x29d)]((_0x282887,_0x4a32c4)=>{const _0x13fa1f=_0x31f6be,_0x1c6678=_0x331553[_0x13fa1f(0x200)](),_0x31ce05=document[_0x13fa1f(0x266)](_0x13fa1f(0x163));_0x31ce05[_0x13fa1f(0x202)]=_0x13fa1f(0x2fd),_0x31ce05['textContent']=_0x282887,_0x1c6678[_0x13fa1f(0x222)](_0x31ce05);_0x5e1034!==_0x13fa1f(0x20f)&&!isTouchDevice()&&_0x1c6678['setAttribute']('contenteditable',_0x13fa1f(0x18c));_0x1c6678[_0x13fa1f(0x275)][_0x13fa1f(0x228)]=_0x4a32c4,_0x1c6678['dataset'][_0x13fa1f(0x33e)]=_0x3f6bff[_0x13fa1f(0x174)][_0x4a32c4]||'';const _0x2b8e1d=_0x220b16+'-'+_0x31fd6+'-'+_0x4a32c4;_0x371a4b[_0x13fa1f(0x29c)](_0x2b8e1d)&&_0x1c6678[_0x13fa1f(0x257)][_0x13fa1f(0x32a)](_0x13fa1f(0x307));});}),_0x2613d9[_0x5077a2(0x222)](_0xeea79c),_0x24edff[_0x5077a2(0x222)](_0x2613d9);}),_0xda95a8[_0x1ccb17(0x2d0)]='',_0xda95a8['appendChild'](_0x24edff),_0x471e30&&_0xda95a8['appendChild'](_0x471e30),updateOrInsertTableInChat();}function openTableRuleEditor(){const _0x311c25=_0x1d3fcf,_0xd6d7cd=extension_settings[extensionName],_0x60e0ee=_0xd6d7cd[_0x311c25(0x30d)]||'',_0x4c0de7=_0xd6d7cd[_0x311c25(0x256)]||[],_0xc90519=_0x4c0de7[_0x311c25(0x2b9)]((_0x1fe089,_0x346165)=>'\x0a\x20\x20\x20\x20\x20\x20\x20\x20{const _0x30747d=_0x311c25,_0xf7ede1=document[_0x30747d(0x303)](_0x30747d(0x239))['value'];updateAndSaveTableSetting(_0x30747d(0x30d),_0xf7ede1);const _0x2969f2=[];document['querySelectorAll'](_0x30747d(0x242))[_0x30747d(0x29d)](_0x48b065=>{const _0x2bc195=_0x30747d,_0x52dcb7=_0x48b065[_0x2bc195(0x1d6)]('.rule-start')[_0x2bc195(0x15a)][_0x2bc195(0x1c7)](),_0x3fd7c0=_0x48b065[_0x2bc195(0x1d6)](_0x2bc195(0x1b6))['value'][_0x2bc195(0x1c7)]();_0x52dcb7&&_0x3fd7c0&&_0x2969f2[_0x2bc195(0x32e)]({'start':_0x52dcb7,'end':_0x3fd7c0});}),updateAndSaveTableSetting('table_exclusion_rules',_0x2969f2),toastr[_0x30747d(0x2e0)](_0x30747d(0x25c));},'onShow':_0x1260a3=>{const _0x3a0e67=_0x311c25,_0x273eac=_0x1260a3[_0x3a0e67(0x2cc)]('#exclusion-rules-list');_0x1260a3[_0x3a0e67(0x2cc)](_0x3a0e67(0x2d9))['on']('click',()=>{const _0x37e41d=_0x3a0e67,_0xfdcca5=_0x273eac[_0x37e41d(0x16f)]()[_0x37e41d(0x2e6)],_0x4025e8=_0x37e41d(0x238)+_0xfdcca5+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20';_0x273eac[_0x37e41d(0x212)](_0x4025e8);}),_0x273eac['on'](_0x3a0e67(0x310),_0x3a0e67(0x2e9),function(){const _0x168c3c=_0x3a0e67;$(this)['closest'](_0x168c3c(0x1e7))['remove']();});}});}function openRuleEditor(_0x5be7ee){const _0x8c843a=_0x1d3fcf,_0x16e870=_0x3ab42[_0x8c843a(0x25b)]();if(!_0x16e870||!_0x16e870[_0x5be7ee])return;const _0x2aed84=_0x16e870[_0x5be7ee];_0x2aed84['charLimitRule']&&!_0x2aed84[_0x8c843a(0x318)]&&(_0x2aed84['charLimitRules']={},_0x2aed84[_0x8c843a(0x154)][_0x8c843a(0x2d2)]!==-0x1&&(_0x2aed84['charLimitRules'][_0x2aed84['charLimitRule'][_0x8c843a(0x2d2)]]=_0x2aed84[_0x8c843a(0x154)][_0x8c843a(0x2da)]));const _0x4c0b72=_0x2aed84[_0x8c843a(0x318)]||{},_0x2e8366=_0x29e3f9=>{const _0x3aea11=_0x8c843a;return Object[_0x3aea11(0x273)](_0x29e3f9)['map'](([_0x26ed39,_0x2dd070])=>{const _0x589347=_0x3aea11,_0x233a3f=_0x2aed84[_0x589347(0x174)][_0x26ed39]||_0x589347(0x1d2)+_0x26ed39+')';return _0x589347(0x30e)+_0x233a3f+_0x589347(0x162)+_0x2dd070+_0x589347(0x26a)+_0x26ed39+'\x22\x20title=\x22删除此规则\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20';})['join']('');},_0x1e75cc=_0x1ce088=>{return _0x2aed84['headers']['map']((_0x821d82,_0x578345)=>{const _0x38cdfe=_0x2e5f;if(_0x1ce088[_0x578345])return'';return _0x38cdfe(0x181)+_0x578345+'\x22>'+_0x821d82+_0x38cdfe(0x331);})['join']('');},_0x3e8d17='\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20编辑\x20“'+_0x2aed84[_0x8c843a(0x210)]+_0x8c843a(0x1b5)+_0x2e8366(_0x4c0b72)+_0x8c843a(0x30b)+_0x1e75cc(_0x4c0b72)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20添加\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20您可以为多个不同的列添加字符数限制规则。\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20表格行数限制\x20(0为禁用)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20【增加】:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x2aed84[_0x8c843a(0x25f)]||'')+_0x8c843a(0x347)+(_0x2aed84[_0x8c843a(0x27d)]||'')+_0x8c843a(0x22b)+(_0x2aed84[_0x8c843a(0x1a1)]||'')+_0x8c843a(0x206),_0x532a3c=$(_0x3e8d17)[_0x8c843a(0x2ae)](_0x8c843a(0x221)),_0x1c43dc=()=>{const _0x4289b9=_0x8c843a;_0x532a3c[0x0][_0x4289b9(0x1a6)](),_0x532a3c[_0x4289b9(0x24d)]();},_0x4e5b13=()=>{const _0x53078b=_0x8c843a,_0x226cd9=JSON['parse'](_0x532a3c[_0x53078b(0x2cc)]('#current-char-limit-rules')[_0x53078b(0x226)]('data-rules')||'{}');_0x532a3c[_0x53078b(0x2cc)]('#current-char-limit-rules')[_0x53078b(0x17f)](_0x2e8366(_0x226cd9)),_0x532a3c[_0x53078b(0x2cc)](_0x53078b(0x227))[_0x53078b(0x17f)]('--\x20选择要添加规则的列\x20--'+_0x1e75cc(_0x226cd9));};_0x532a3c[_0x8c843a(0x2cc)](_0x8c843a(0x1c2))['attr']('data-rules',JSON[_0x8c843a(0x164)](_0x4c0b72)),_0x532a3c['on'](_0x8c843a(0x310),_0x8c843a(0x1e2),()=>{const _0x100e0a=_0x8c843a,_0x3efc04=parseInt(_0x532a3c[_0x100e0a(0x2cc)]('#new-rule-column-select')[_0x100e0a(0x2aa)](),0xa),_0x31e462=parseInt(_0x532a3c['find']('#new-rule-limit-input')[_0x100e0a(0x2aa)](),0xa);if(_0x3efc04===-0x1){toastr[_0x100e0a(0x327)]('请选择一个列。');return;}if(isNaN(_0x31e462)||_0x31e462<0x0){toastr[_0x100e0a(0x327)](_0x100e0a(0x248));return;}const _0x2e383c=JSON[_0x100e0a(0x2a8)](_0x532a3c[_0x100e0a(0x2cc)]('#current-char-limit-rules')[_0x100e0a(0x226)](_0x100e0a(0x317))||'{}');_0x31e462>0x0?(_0x2e383c[_0x3efc04]=_0x31e462,_0x532a3c['find']('#current-char-limit-rules')['attr']('data-rules',JSON['stringify'](_0x2e383c)),_0x4e5b13()):toastr[_0x100e0a(0x234)](_0x100e0a(0x1d0));}),_0x532a3c['on'](_0x8c843a(0x310),_0x8c843a(0x1c3),function(){const _0x541d58=_0x8c843a,_0x390e70=$(this)[_0x541d58(0x1b1)](_0x541d58(0x2ee)),_0x4a45c1=JSON[_0x541d58(0x2a8)](_0x532a3c[_0x541d58(0x2cc)](_0x541d58(0x1c2))['attr'](_0x541d58(0x317))||'{}');delete _0x4a45c1[_0x390e70],_0x532a3c[_0x541d58(0x2cc)](_0x541d58(0x1c2))[_0x541d58(0x226)](_0x541d58(0x317),JSON[_0x541d58(0x164)](_0x4a45c1)),_0x4e5b13();}),_0x532a3c['find']('.popup-button-ok')['on'](_0x8c843a(0x310),()=>{const _0x2996a9=_0x8c843a,_0x2102aa=JSON[_0x2996a9(0x2a8)](_0x532a3c[_0x2996a9(0x2cc)](_0x2996a9(0x1c2))[_0x2996a9(0x226)](_0x2996a9(0x317))||'{}'),_0x3002c1=parseInt(_0x532a3c['find'](_0x2996a9(0x22a))[_0x2996a9(0x2aa)](),0xa),_0x18424b={'note':_0x532a3c[_0x2996a9(0x2cc)](_0x2996a9(0x223))[_0x2996a9(0x2aa)](),'rule_add':_0x532a3c[_0x2996a9(0x2cc)](_0x2996a9(0x282))[_0x2996a9(0x2aa)](),'rule_delete':_0x532a3c[_0x2996a9(0x2cc)](_0x2996a9(0x2ed))[_0x2996a9(0x2aa)](),'rule_update':_0x532a3c[_0x2996a9(0x2cc)](_0x2996a9(0x328))['val'](),'charLimitRules':_0x2102aa,'rowLimitRule':_0x3002c1};_0x3ab42['updateTableRules'](_0x5be7ee,_0x18424b),_0x1c43dc();}),_0x532a3c[_0x8c843a(0x2cc)](_0x8c843a(0x1e0))['on'](_0x8c843a(0x310),_0x1c43dc),_0x532a3c[0x0][_0x8c843a(0x24c)]();}function bindInjectionSettings(){const _0x2fd596=_0x1d3fcf,_0x111fd0=extension_settings[extensionName],_0x44c843=document[_0x2fd596(0x303)](_0x2fd596(0x1bf)),_0x49bf08=document[_0x2fd596(0x303)](_0x2fd596(0x2b1)),_0xe8c31d=document['getElementById']('table-injection-position'),_0x12e7fb=document['getElementById'](_0x2fd596(0x313)),_0x53c674=document['querySelectorAll'](_0x2fd596(0x335));if(!_0x44c843||!_0x49bf08||!_0xe8c31d||!_0x12e7fb||!_0x53c674['length'])return;const _0x230c89=()=>{const _0x29ecf6=_0x2fd596,_0x114a51=_0xe8c31d['value'],_0x5c5f4b=_0x44c843[_0x29ecf6(0x28d)],_0x364f6e=_0x114a51==='1';_0x49bf08['disabled']=!_0x5c5f4b,_0xe8c31d[_0x29ecf6(0x31d)]=!_0x5c5f4b,_0x12e7fb[_0x29ecf6(0x31d)]=!_0x5c5f4b||!_0x364f6e,_0x53c674[_0x29ecf6(0x29d)](_0xfb3210=>_0xfb3210[_0x29ecf6(0x31d)]=!_0x5c5f4b||!_0x364f6e);const _0x3bcad0=_0x5c5f4b?'1':_0x29ecf6(0x233);_0x49bf08[_0x29ecf6(0x255)]['opacity']=_0x3bcad0;_0x49bf08[_0x29ecf6(0x26f)](_0x29ecf6(0x1d3))&&(_0x49bf08[_0x29ecf6(0x26f)]('.control-block-with-switch')[_0x29ecf6(0x255)]['opacity']=_0x3bcad0);_0xe8c31d[_0x29ecf6(0x255)][_0x29ecf6(0x1d7)]=_0x3bcad0;_0xe8c31d[_0x29ecf6(0x344)]&&(_0xe8c31d[_0x29ecf6(0x344)]['style'][_0x29ecf6(0x1d7)]=_0x3bcad0);const _0x1d2d44=_0x5c5f4b&&_0x364f6e?'1':_0x29ecf6(0x233);_0x12e7fb[_0x29ecf6(0x255)][_0x29ecf6(0x1d7)]=_0x1d2d44;_0x12e7fb[_0x29ecf6(0x344)]&&(_0x12e7fb[_0x29ecf6(0x344)][_0x29ecf6(0x255)][_0x29ecf6(0x1d7)]=_0x1d2d44);const _0x5cb4a8=_0x5c5f4b&&_0x364f6e?'1':_0x29ecf6(0x233),_0x61d6c3=document[_0x29ecf6(0x303)](_0x29ecf6(0x2a5))?.[_0x29ecf6(0x26f)](_0x29ecf6(0x2af));_0x61d6c3&&(_0x61d6c3['style']['opacity']=_0x5cb4a8,_0x61d6c3[_0x29ecf6(0x344)]&&(_0x61d6c3[_0x29ecf6(0x344)][_0x29ecf6(0x255)][_0x29ecf6(0x1d7)]=_0x5cb4a8));const _0x1f0e07=document['querySelectorAll'](_0x29ecf6(0x295));_0x1f0e07[_0x29ecf6(0x29d)](_0x5134a7=>{const _0x2a4617=_0x29ecf6;_0x5134a7[_0x2a4617(0x31d)]=!_0x5c5f4b;const _0x24024a=_0x5134a7[_0x2a4617(0x26f)](_0x2a4617(0x33e));_0x24024a&&(_0x24024a['style'][_0x2a4617(0x1d7)]=_0x5c5f4b?'1':_0x2a4617(0x233));});const _0x60920b=document['getElementById'](_0x29ecf6(0x2df));_0x60920b&&(_0x60920b[_0x29ecf6(0x31d)]=!_0x5c5f4b,_0x60920b[_0x29ecf6(0x255)][_0x29ecf6(0x1d7)]=_0x5c5f4b?'1':_0x29ecf6(0x233));};_0x44c843[_0x2fd596(0x28d)]=_0x111fd0[_0x2fd596(0x348)]!==![],_0x49bf08[_0x2fd596(0x28d)]=_0x111fd0['table_injection_enabled'],_0xe8c31d[_0x2fd596(0x15a)]=_0x111fd0['injection'][_0x2fd596(0x2f7)],_0x12e7fb[_0x2fd596(0x15a)]=_0x111fd0[_0x2fd596(0x21f)]['depth'],_0x53c674['forEach'](_0xb8088b=>{const _0x32489d=_0x2fd596;parseInt(_0xb8088b['value'],0xa)===_0x111fd0['injection'][_0x32489d(0x1ea)]&&(_0xb8088b[_0x32489d(0x28d)]=!![]);}),_0x230c89(),_0x44c843[_0x2fd596(0x196)](_0x2fd596(0x26e),()=>{const _0x308e21=_0x2fd596;_0x111fd0['table_system_enabled']=_0x44c843[_0x308e21(0x28d)],saveSettingsDebounced(),_0x230c89();const _0x32bda3=_0x44c843[_0x308e21(0x28d)]?_0x308e21(0x159):_0x308e21(0x349);toastr['info'](_0x308e21(0x338)+_0x32bda3+'。'),log(_0x308e21(0x338)+_0x32bda3+'。',_0x308e21(0x234));}),_0x49bf08[_0x2fd596(0x196)](_0x2fd596(0x26e),()=>{const _0x1700bb=_0x2fd596;_0x111fd0[_0x1700bb(0x27c)]=_0x49bf08['checked'],saveSettingsDebounced();}),_0xe8c31d[_0x2fd596(0x196)](_0x2fd596(0x26e),()=>{const _0x504b14=_0x2fd596;_0x111fd0[_0x504b14(0x21f)][_0x504b14(0x2f7)]=parseInt(_0xe8c31d['value'],0xa),saveSettingsDebounced(),_0x230c89();}),_0x12e7fb[_0x2fd596(0x196)](_0x2fd596(0x25d),()=>{const _0x5de9b7=_0x2fd596;_0x111fd0[_0x5de9b7(0x21f)][_0x5de9b7(0x342)]=parseInt(_0x12e7fb['value'],0xa),saveSettingsDebounced();}),_0x53c674[_0x2fd596(0x29d)](_0x7aabf7=>{const _0x1c76b7=_0x2fd596;_0x7aabf7[_0x1c76b7(0x196)](_0x1c76b7(0x26e),()=>{const _0x4475d5=_0x1c76b7;_0x7aabf7[_0x4475d5(0x28d)]&&(_0x111fd0['injection'][_0x4475d5(0x1ea)]=parseInt(_0x7aabf7[_0x4475d5(0x15a)],0xa),saveSettingsDebounced());});}),log(_0x2fd596(0x16d),_0x2fd596(0x2e0));}function updateAndSaveTableSetting(_0x2ffee2,_0x21457e){!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName][_0x2ffee2]=_0x21457e,saveSettingsDebounced();}function bindWorldBookSettings(){const _0x1498a3=_0x1d3fcf,_0x22863b=extension_settings[extensionName];if(_0x22863b[_0x1498a3(0x180)]===undefined)_0x22863b[_0x1498a3(0x180)]=![];if(_0x22863b[_0x1498a3(0x259)]===undefined)_0x22863b[_0x1498a3(0x259)]=0x7530;if(_0x22863b[_0x1498a3(0x1a3)]===undefined)_0x22863b[_0x1498a3(0x1a3)]=_0x1498a3(0x261);if(_0x22863b[_0x1498a3(0x333)]===undefined)_0x22863b[_0x1498a3(0x333)]=[];if(_0x22863b['table_selected_entries']===undefined)_0x22863b['table_selected_entries']={};const _0x2e00cd=document[_0x1498a3(0x303)](_0x1498a3(0x180)),_0x5cb37d=document[_0x1498a3(0x303)](_0x1498a3(0x259)),_0x5e3c76=document[_0x1498a3(0x303)](_0x1498a3(0x320)),_0x2f7cbe=document[_0x1498a3(0x20c)]('input[name=\x22table_worldbook_source\x22]'),_0x288f46=document['getElementById'](_0x1498a3(0x306)),_0x395755=document[_0x1498a3(0x303)](_0x1498a3(0x2ce)),_0xef431f=document[_0x1498a3(0x303)](_0x1498a3(0x2a3)),_0x37ea83=document[_0x1498a3(0x303)](_0x1498a3(0x1c4));if(!_0x2e00cd||!_0x5cb37d||!_0x5e3c76||!_0x2f7cbe[_0x1498a3(0x2e6)]||!_0x288f46||!_0x395755||!_0xef431f||!_0x37ea83){log(_0x1498a3(0x2ac),_0x1498a3(0x2e1));return;}const _0x3bf7ad=()=>{const _0x3b0059=_0x1498a3,_0x2f8886={};_0x37ea83[_0x3b0059(0x20c)](_0x3b0059(0x296))[_0x3b0059(0x29d)](_0x3e7ed1=>{const _0xabf5db=_0x3b0059,_0x30d073=_0x3e7ed1[_0xabf5db(0x275)][_0xabf5db(0x1ac)],_0x2da4f9=_0x3e7ed1[_0xabf5db(0x275)][_0xabf5db(0x183)];!_0x2f8886[_0x30d073]&&(_0x2f8886[_0x30d073]=[]),_0x2f8886[_0x30d073]['push'](_0x2da4f9);}),_0x22863b[_0x3b0059(0x1f3)]=_0x2f8886,saveSettingsDebounced();},_0x46f366=async()=>{const _0x2dbcbf=_0x1498a3;_0x37ea83[_0x2dbcbf(0x2d0)]='

加载条目中...

';const _0x39b8e5=_0x22863b[_0x2dbcbf(0x1a3)]||'character';let _0x510857=[];if(_0x39b8e5==='manual')_0x510857=_0x22863b[_0x2dbcbf(0x333)]||[];else{if(this_chid!==undefined&&this_chid>=0x0&&characters[this_chid])try{const _0x30ec7e=await safeCharLorebooks({'type':_0x2dbcbf(0x15c)});if(_0x30ec7e[_0x2dbcbf(0x1b7)])_0x510857[_0x2dbcbf(0x32e)](_0x30ec7e[_0x2dbcbf(0x1b7)]);if(_0x30ec7e[_0x2dbcbf(0x23c)]?.[_0x2dbcbf(0x2e6)])_0x510857[_0x2dbcbf(0x32e)](..._0x30ec7e[_0x2dbcbf(0x23c)]);}catch(_0x1f266f){console[_0x2dbcbf(0x31f)]('[内存储司]\x20获取角色世界书失败:',_0x1f266f),_0x37ea83['innerHTML']=_0x2dbcbf(0x2e3);return;}else{_0x37ea83['innerHTML']=_0x2dbcbf(0x272);return;}}if(_0x510857['length']===0x0){_0x37ea83[_0x2dbcbf(0x2d0)]=_0x2dbcbf(0x316);return;}try{const _0x3c7695=[];for(const _0x22e8ec of _0x510857){const _0x17801e=await safeLorebookEntries(_0x22e8ec);_0x17801e['forEach'](_0x12f0ec=>_0x3c7695[_0x2dbcbf(0x32e)]({..._0x12f0ec,'bookName':_0x22e8ec}));}_0x37ea83['innerHTML']='';if(_0x3c7695[_0x2dbcbf(0x2e6)]===0x0){_0x37ea83['innerHTML']=_0x2dbcbf(0x2c3);return;}_0x3c7695['forEach'](_0x4c49e1=>{const _0x560963=_0x2dbcbf,_0x2c4ebe=document[_0x560963(0x266)](_0x560963(0x163));_0x2c4ebe[_0x560963(0x202)]=_0x560963(0x155),_0x2c4ebe[_0x560963(0x22e)]=_0x560963(0x2de)+_0x4c49e1[_0x560963(0x2ab)]+_0x560963(0x1ef)+_0x4c49e1[_0x560963(0x183)];const _0x6cf560=document[_0x560963(0x266)](_0x560963(0x25d));_0x6cf560['type']=_0x560963(0x182),_0x6cf560['id']=_0x560963(0x1aa)+_0x4c49e1[_0x560963(0x2ab)]+'-'+_0x4c49e1[_0x560963(0x183)],_0x6cf560['dataset'][_0x560963(0x1ac)]=_0x4c49e1[_0x560963(0x2ab)],_0x6cf560[_0x560963(0x275)][_0x560963(0x183)]=_0x4c49e1[_0x560963(0x183)];const _0x537387=_0x22863b[_0x560963(0x1f3)][_0x4c49e1[_0x560963(0x2ab)]]?.[_0x560963(0x2f5)](String(_0x4c49e1[_0x560963(0x183)]));_0x6cf560[_0x560963(0x28d)]=!!_0x537387;const _0x23135b=document[_0x560963(0x266)](_0x560963(0x33e));_0x23135b[_0x560963(0x278)]=_0x6cf560['id'],_0x23135b[_0x560963(0x1d1)]=_0x4c49e1['comment']||_0x560963(0x33c),_0x2c4ebe['appendChild'](_0x6cf560),_0x2c4ebe[_0x560963(0x222)](_0x23135b),_0x37ea83['appendChild'](_0x2c4ebe);});}catch(_0x491f11){console['error']('[内存储司]\x20加载世界书条目失败:',_0x491f11),_0x37ea83['innerHTML']=_0x2dbcbf(0x294);}},_0x251ecb=()=>{const _0x56fd95=_0x1498a3,_0xf846ec=world_names[_0x56fd95(0x2b9)](_0xd82dec=>({'name':_0xd82dec[_0x56fd95(0x301)](_0x56fd95(0x2d5),''),'file_name':_0xd82dec}));_0xef431f[_0x56fd95(0x2d0)]='',_0xf846ec&&_0xf846ec[_0x56fd95(0x2e6)]>0x0?_0xf846ec[_0x56fd95(0x29d)](_0x235612=>{const _0x3ad173=_0x56fd95,_0x253ad7=document['createElement'](_0x3ad173(0x163));_0x253ad7[_0x3ad173(0x202)]='checkbox-item',_0x253ad7[_0x3ad173(0x22e)]=_0x235612[_0x3ad173(0x210)];const _0x21b36f=document[_0x3ad173(0x266)](_0x3ad173(0x25d));_0x21b36f[_0x3ad173(0x24e)]=_0x3ad173(0x182),_0x21b36f['id']=_0x3ad173(0x1cd)+_0x235612[_0x3ad173(0x23d)],_0x21b36f['value']=_0x235612[_0x3ad173(0x23d)],_0x21b36f[_0x3ad173(0x28d)]=_0x22863b[_0x3ad173(0x333)]['includes'](_0x235612[_0x3ad173(0x23d)]),_0x21b36f[_0x3ad173(0x196)](_0x3ad173(0x26e),()=>{const _0x4e0b95=_0x3ad173;_0x21b36f[_0x4e0b95(0x28d)]?!_0x22863b[_0x4e0b95(0x333)][_0x4e0b95(0x2f5)](_0x235612[_0x4e0b95(0x23d)])&&_0x22863b[_0x4e0b95(0x333)][_0x4e0b95(0x32e)](_0x235612[_0x4e0b95(0x23d)]):_0x22863b[_0x4e0b95(0x333)]=_0x22863b['table_selected_worldbooks']['filter'](_0x5ef317=>_0x5ef317!==_0x235612['file_name']),saveSettingsDebounced(),_0x46f366();});const _0x442e8e=document[_0x3ad173(0x266)](_0x3ad173(0x33e));_0x442e8e['htmlFor']=_0x3ad173(0x1cd)+_0x235612['file_name'],_0x442e8e[_0x3ad173(0x1d1)]=_0x235612['name'],_0x253ad7[_0x3ad173(0x222)](_0x21b36f),_0x253ad7[_0x3ad173(0x222)](_0x442e8e),_0xef431f[_0x3ad173(0x222)](_0x253ad7);}):_0xef431f[_0x56fd95(0x2d0)]=_0x56fd95(0x280),_0x46f366();},_0x1d4f06=()=>{const _0x4f3931=_0x1498a3,_0x4f489d=_0x22863b[_0x4f3931(0x1a3)]===_0x4f3931(0x16a);_0x288f46['style'][_0x4f3931(0x2c4)]=_0x4f489d?_0x4f3931(0x2bd):'none',_0x46f366(),_0x4f489d&&_0x251ecb();};_0x2e00cd[_0x1498a3(0x28d)]=_0x22863b[_0x1498a3(0x180)],_0x5cb37d[_0x1498a3(0x15a)]=_0x22863b[_0x1498a3(0x259)],_0x5e3c76['textContent']=_0x22863b[_0x1498a3(0x259)],_0x2f7cbe['forEach'](_0x42a327=>{const _0x328585=_0x1498a3;_0x42a327[_0x328585(0x28d)]=_0x42a327[_0x328585(0x15a)]===_0x22863b['table_worldbook_source'];}),_0x1d4f06(),_0x2e00cd[_0x1498a3(0x196)](_0x1498a3(0x26e),()=>{_0x22863b['table_worldbook_enabled']=_0x2e00cd['checked'],saveSettingsDebounced();}),_0x5cb37d[_0x1498a3(0x196)]('input',()=>{const _0x3f69da=_0x1498a3;_0x5e3c76[_0x3f69da(0x1d1)]=_0x5cb37d[_0x3f69da(0x15a)];}),_0x5cb37d['addEventListener']('change',()=>{const _0x3157dd=_0x1498a3;_0x22863b[_0x3157dd(0x259)]=parseInt(_0x5cb37d[_0x3157dd(0x15a)],0xa),saveSettingsDebounced();}),_0x2f7cbe[_0x1498a3(0x29d)](_0x491077=>{const _0x30669b=_0x1498a3;_0x491077[_0x30669b(0x196)](_0x30669b(0x26e),()=>{const _0x169550=_0x30669b;_0x491077['checked']&&(_0x22863b['table_worldbook_source']=_0x491077[_0x169550(0x15a)],_0x1d4f06(),saveSettingsDebounced());});}),_0x395755['addEventListener'](_0x1498a3(0x310),_0x251ecb),_0x37ea83[_0x1498a3(0x196)](_0x1498a3(0x26e),_0x133875=>{const _0x23b72b=_0x1498a3;_0x133875[_0x23b72b(0x21d)]['type']===_0x23b72b(0x182)&&_0x3bf7ad();}),log(_0x1498a3(0x211),_0x1498a3(0x2e0));}export function bindTableEvents(){const _0x28d7ad=_0x1d3fcf,_0x339cd2=document['getElementById'](_0x28d7ad(0x18f));if(!_0x339cd2||_0x339cd2['dataset'][_0x28d7ad(0x20d)])return;log(_0x28d7ad(0x153),_0x28d7ad(0x234));const _0x31a715=_0x339cd2[_0x28d7ad(0x20c)]('input[name=\x22filling-mode\x22]'),_0x4d5b49=document['getElementById'](_0x28d7ad(0x270)),_0x38ce16=document[_0x28d7ad(0x303)](_0x28d7ad(0x2f3)),_0x4f9138=document[_0x28d7ad(0x303)]('context-reading-value'),_0x125ed3=document[_0x28d7ad(0x303)](_0x28d7ad(0x204)),_0x5677fa=document['getElementById'](_0x28d7ad(0x2b5)),_0x2be367=document[_0x28d7ad(0x303)](_0x28d7ad(0x322)),_0x1366da=()=>{const _0x122370=_0x28d7ad,_0x2f1bc7=extension_settings[extensionName]?.['filling_mode']||_0x122370(0x2c1);_0x31a715[_0x122370(0x29d)](_0x85f068=>{const _0x59490a=_0x122370;_0x85f068[_0x59490a(0x28d)]=_0x85f068['value']===_0x2f1bc7;});const _0x2f554a=_0x2f1bc7===_0x122370(0x2fe);_0x4d5b49&&(_0x4d5b49[_0x122370(0x255)]['display']=_0x2f554a?_0x122370(0x2bd):_0x122370(0x1a8)),_0x125ed3&&(_0x125ed3[_0x122370(0x255)][_0x122370(0x2c4)]=_0x122370(0x285)),_0x5677fa&&_0x2be367&&(_0x2be367[_0x122370(0x255)][_0x122370(0x2c4)]=_0x5677fa[_0x122370(0x28d)]?_0x122370(0x2bd):_0x122370(0x1a8));};_0x31a715[_0x28d7ad(0x29d)](_0x317fa2=>{const _0x84da22=_0x28d7ad;_0x317fa2['addEventListener'](_0x84da22(0x26e),function(){const _0x3e6737=_0x84da22,_0x1277ad=this['value'];updateAndSaveTableSetting(_0x3e6737(0x336),_0x1277ad);let _0xbd17e1=_0x3e6737(0x19f);if(_0x1277ad===_0x3e6737(0x2fe))_0xbd17e1=_0x3e6737(0x329);if(_0x1277ad===_0x3e6737(0x1fe))_0xbd17e1=_0x3e6737(0x198);toastr[_0x3e6737(0x234)](_0x3e6737(0x150)+_0xbd17e1+'。'),_0x1366da();});});if(_0x38ce16&&_0x4f9138){const _0x2812f1=extension_settings[extensionName]?.[_0x28d7ad(0x31c)]||0x4;_0x38ce16['value']=_0x2812f1,_0x4f9138[_0x28d7ad(0x1d1)]=_0x2812f1,_0x38ce16['addEventListener'](_0x28d7ad(0x25d),function(){const _0x5b7c1a=_0x28d7ad;_0x4f9138['textContent']=this[_0x5b7c1a(0x15a)];}),_0x38ce16[_0x28d7ad(0x196)](_0x28d7ad(0x26e),function(){const _0x55d3b1=_0x28d7ad;updateAndSaveTableSetting(_0x55d3b1(0x31c),parseInt(this[_0x55d3b1(0x15a)],0xa)),toastr['info']('上下文读取级别已设置为\x20'+this['value']+'。');});}_0x5677fa&&(_0x5677fa[_0x28d7ad(0x28d)]=extension_settings[extensionName]?.['table_independent_rules_enabled']??![],_0x5677fa[_0x28d7ad(0x196)](_0x28d7ad(0x26e),()=>{const _0x54d618=_0x28d7ad;updateAndSaveTableSetting(_0x54d618(0x20e),_0x5677fa[_0x54d618(0x28d)]),_0x1366da();}));_0x1366da();_0x2be367&&_0x2be367[_0x28d7ad(0x196)](_0x28d7ad(0x310),openTableRuleEditor);const _0x5acbe5=()=>{renderTables(),bindInjectionSettings(),bindTemplateEditors();};_0x5acbe5(),bindWorldBookSettings(),bindBatchFillButton(),bindFloorFillButtons(),bindReorganizeButton(),bindTemplateEditors(),bindNccsApiEvents(),bindChatTableDisplaySetting();const _0x38a1ad=document[_0x28d7ad(0x1d6)](_0x28d7ad(0x2c8));_0x38a1ad&&_0x38a1ad[_0x28d7ad(0x196)](_0x28d7ad(0x310),_0x2ac7ed=>{const _0x351786=_0x28d7ad,_0x327841=_0x2ac7ed[_0x351786(0x21d)][_0x351786(0x26f)]('.sinan-nav-item');if(!_0x327841)return;const _0xe74625=_0x327841['dataset']['tab'];if(!_0xe74625)return;const _0x1c154c=_0x327841['closest']('.settings-group');if(!_0x1c154c)return;_0x1c154c['querySelectorAll'](_0x351786(0x166))[_0x351786(0x29d)](_0x28b3bc=>_0x28b3bc[_0x351786(0x257)][_0x351786(0x24d)](_0x351786(0x14e))),_0x327841[_0x351786(0x257)][_0x351786(0x32a)](_0x351786(0x14e)),_0x1c154c[_0x351786(0x20c)](_0x351786(0x169))[_0x351786(0x29d)](_0x1d567b=>_0x1d567b[_0x351786(0x257)]['remove']('active'));const _0x4cf30b=_0x1c154c[_0x351786(0x1d6)]('#sinan-'+_0xe74625+_0x351786(0x1c1));_0x4cf30b&&_0x4cf30b[_0x351786(0x257)][_0x351786(0x32a)]('active');});const _0x33f30f=document[_0x28d7ad(0x303)](_0x28d7ad(0x235)),_0x536284=document['getElementById'](_0x28d7ad(0x243)),_0x2ff911=document[_0x28d7ad(0x303)](_0x28d7ad(0x2e2)),_0xb2a658=document[_0x28d7ad(0x303)](_0x28d7ad(0x308)),_0x3a2c08=document[_0x28d7ad(0x303)](_0x28d7ad(0x1d9));_0x33f30f&&_0x33f30f[_0x28d7ad(0x196)](_0x28d7ad(0x310),()=>_0x3ab42['exportPreset']());_0x536284&&_0x536284[_0x28d7ad(0x196)](_0x28d7ad(0x310),()=>_0x3ab42[_0x28d7ad(0x17b)]());_0x2ff911&&_0x2ff911[_0x28d7ad(0x196)]('click',()=>_0x3ab42['importPreset'](_0x5acbe5));_0xb2a658&&_0xb2a658[_0x28d7ad(0x196)](_0x28d7ad(0x310),()=>{const _0x30b3e4=_0x28d7ad,_0x3bd2f4=_0x3ab42['isCurrentTablesEmpty']();_0x3ab42[_0x30b3e4(0x29f)](()=>{_0x3bd2f4&&(_0x3ab42['loadTables'](),_0x5acbe5());});});_0x3a2c08&&_0x3a2c08[_0x28d7ad(0x196)](_0x28d7ad(0x310),()=>{const _0x4baea4=_0x28d7ad,_0x139ab1=_0x3ab42[_0x4baea4(0x253)]();_0x3ab42[_0x4baea4(0x28a)](),_0x139ab1&&(_0x3ab42['loadTables'](),_0x5acbe5());});const _0x30c6d6=document['getElementById'](_0x28d7ad(0x1e4));_0x30c6d6&&_0x30c6d6[_0x28d7ad(0x196)](_0x28d7ad(0x310),()=>{const _0x79bc1f=_0x28d7ad;confirm(_0x79bc1f(0x1c8))&&(_0x3ab42[_0x79bc1f(0x209)](),_0x5acbe5());});const _0x3671c3=document['getElementById'](_0x28d7ad(0x157));_0x3671c3&&_0x3671c3[_0x28d7ad(0x196)](_0x28d7ad(0x310),()=>{const _0x24d335=_0x28d7ad,_0x29c331=prompt(_0x24d335(0x305),'新表格');_0x29c331&&_0x29c331['trim']()&&(_0x3ab42[_0x24d335(0x188)](_0x29c331[_0x24d335(0x1c7)]()),_0x5acbe5());});const _0x49a16a=getAllTablesContainer();if(_0x49a16a){_0x49a16a['addEventListener'](_0x28d7ad(0x310),_0x2db4f4=>{const _0x3b5dcb=_0x28d7ad,_0x2dc244=_0x2db4f4[_0x3b5dcb(0x21d)][_0x3b5dcb(0x26f)]('th');if(_0x2dc244&&_0x2dc244[_0x3b5dcb(0x257)][_0x3b5dcb(0x2dd)](_0x3b5dcb(0x2cf))){toggleHeaderIndexContextMenu(_0x2db4f4);return;}if(_0x2dc244&&!_0x2dc244[_0x3b5dcb(0x257)]['contains'](_0x3b5dcb(0x2cf))){toggleColumnContextMenu(_0x2db4f4);return;}const _0x55f1ec=_0x2db4f4['target'][_0x3b5dcb(0x26f)](_0x3b5dcb(0x260));if(_0x55f1ec){toggleRowContextMenu(_0x2db4f4);return;}const _0x43e220=_0x2db4f4[_0x3b5dcb(0x21d)][_0x3b5dcb(0x26f)](_0x3b5dcb(0x1cf));if(_0x43e220){const _0x5a981b=parseInt(_0x43e220[_0x3b5dcb(0x275)][_0x3b5dcb(0x229)],0xa),_0x365fc1=_0x3ab42[_0x3b5dcb(0x25b)](),_0x2464c=_0x365fc1[_0x5a981b]?.['name']||'';showTableNameEditor(_0x5a981b,_0x2464c);return;}const _0x17db28=_0x2db4f4[_0x3b5dcb(0x21d)][_0x3b5dcb(0x26f)](_0x3b5dcb(0x21b));if(!_0x17db28)return;const _0x289365=parseInt(_0x17db28[_0x3b5dcb(0x275)][_0x3b5dcb(0x229)],0xa);if(_0x17db28['matches'](_0x3b5dcb(0x1ba)))_0x3ab42[_0x3b5dcb(0x252)](_0x289365),_0x5acbe5();else{if(_0x17db28[_0x3b5dcb(0x2db)]('.add-col-btn'))_0x3ab42[_0x3b5dcb(0x207)](_0x289365),_0x5acbe5();else{if(_0x17db28[_0x3b5dcb(0x2db)](_0x3b5dcb(0x1a5))||_0x17db28[_0x3b5dcb(0x2db)](_0x3b5dcb(0x2bf))){const _0x38d852=_0x17db28[_0x3b5dcb(0x257)][_0x3b5dcb(0x2dd)](_0x3b5dcb(0x1dc))?'up':_0x3b5dcb(0x168);_0x3ab42[_0x3b5dcb(0x17c)](_0x289365,_0x38d852),_0x5acbe5();}else{if(_0x17db28[_0x3b5dcb(0x2db)](_0x3b5dcb(0x1e1)))openRuleEditor(_0x289365);else{if(_0x17db28[_0x3b5dcb(0x2db)](_0x3b5dcb(0x30c))){const _0x2db85b=_0x3ab42[_0x3b5dcb(0x25b)](),_0x578074=_0x2db85b[_0x289365]?.[_0x3b5dcb(0x210)]||'未知表格';confirm(_0x3b5dcb(0x1f5)+_0x578074+_0x3b5dcb(0x315))&&(_0x3ab42['deleteTable'](_0x289365),_0x5acbe5());}}}}}});if(isTouchDevice()){let _0x1ea68c=0x0,_0x2fadc8=null;_0x49a16a[_0x28d7ad(0x196)]('touchstart',_0x432997=>{const _0x25e80b=_0x28d7ad,_0x205b23=_0x432997[_0x25e80b(0x21d)][_0x25e80b(0x26f)]('td');if(!_0x205b23||_0x205b23['dataset']['colIndex']===undefined)return;const _0x2ec73b=new Date()[_0x25e80b(0x27f)](),_0x31e24c=_0x2ec73b-_0x1ea68c;_0x31e24c<0x12c&&_0x31e24c>0x0&&_0x2fadc8===_0x205b23&&(_0x432997[_0x25e80b(0x1dd)](),_0x205b23[_0x25e80b(0x218)](_0x25e80b(0x1ee))!==_0x25e80b(0x18c)&&(_0x205b23[_0x25e80b(0x2f9)](_0x25e80b(0x1ee),'true'),setTimeout(()=>_0x205b23[_0x25e80b(0x298)](),0x0))),_0x1ea68c=_0x2ec73b,_0x2fadc8=_0x205b23;});}_0x49a16a[_0x28d7ad(0x196)](_0x28d7ad(0x345),_0x3dee6e=>{const _0x3b64d0=_0x28d7ad,_0x23786b=_0x3dee6e[_0x3b64d0(0x21d)];if(_0x23786b[_0x3b64d0(0x2ca)]!=='TD'||_0x23786b[_0x3b64d0(0x218)](_0x3b64d0(0x1ee))!==_0x3b64d0(0x18c))return;isTouchDevice()&&_0x23786b['setAttribute'](_0x3b64d0(0x1ee),'false');const _0xd9bbc7=_0x23786b[_0x3b64d0(0x26f)]('table');if(!_0xd9bbc7)return;const _0x5ac41a=parseInt(_0xd9bbc7['dataset']['tableIndex'],0xa),_0x45fb92=parseInt(_0x23786b['closest']('tr')[_0x3b64d0(0x275)]['rowIndex'],0xa),_0x110e29=parseInt(_0x23786b[_0x3b64d0(0x275)][_0x3b64d0(0x228)],0xa),_0x588854=_0x23786b[_0x3b64d0(0x1d1)],_0x26808f=_0xd9bbc7[_0x3b64d0(0x26f)](_0x3b64d0(0x24b)),_0x247815=_0x26808f?_0x26808f[_0x3b64d0(0x23e)]:0x0,_0x441df3=_0x49a16a['scrollTop'];_0x3ab42[_0x3b64d0(0x219)](_0x5ac41a,_0x45fb92,_0x110e29);const _0x34a586={[_0x110e29]:_0x588854};_0x3ab42['updateRow'](_0x5ac41a,_0x45fb92,_0x34a586),_0x5acbe5();const _0x4385b3=document['getElementById'](_0x3b64d0(0x1f8)+_0x5ac41a)?.[_0x3b64d0(0x26f)](_0x3b64d0(0x24b));_0x4385b3&&(_0x4385b3[_0x3b64d0(0x23e)]=_0x247815),_0x49a16a[_0x3b64d0(0x1f9)]=_0x441df3;},!![]);}_0x339cd2[_0x28d7ad(0x275)][_0x28d7ad(0x20d)]='true',log(_0x28d7ad(0x247),_0x28d7ad(0x2e0)),eventSource['on'](event_types[_0x28d7ad(0x2ff)],()=>{const _0x4269f7=_0x28d7ad;console[_0x4269f7(0x214)]('['+extensionName+_0x4269f7(0x30a)),_0x5acbe5(),setTimeout(()=>{const _0x515dec=_0x4269f7,_0x1116d6=extension_settings[extensionName];if(_0x1116d6&&_0x1116d6[_0x515dec(0x180)])try{bindWorldBookSettings(),console['log']('['+extensionName+_0x515dec(0x1a0));}catch(_0x3f8ddb){console['error']('['+extensionName+_0x515dec(0x15e),_0x3f8ddb);}},0x64);});}function bindBatchFillButton(){const _0x4ff377=_0x1d3fcf,_0x3a8cd3=document[_0x4ff377(0x303)](_0x4ff377(0x2df));if(_0x3a8cd3){if(_0x3a8cd3['dataset'][_0x4ff377(0x2ef)])return;_0x3a8cd3[_0x4ff377(0x196)](_0x4ff377(0x310),_0xc53e8e=>{const _0x70275c=_0x4ff377,_0x1c6953=extension_settings[extensionName],_0x434f50=_0x1c6953[_0x70275c(0x348)]!==![];if(!_0x434f50){_0xc53e8e['preventDefault'](),toastr[_0x70275c(0x327)](_0x70275c(0x1b8));return;}startBatchFilling();}),_0x3a8cd3[_0x4ff377(0x275)]['batchEventBound']='true',log(_0x4ff377(0x31a),'success');}}function bindReorganizeButton(){const _0x5662e1=_0x1d3fcf,_0x4e7e10=document[_0x5662e1(0x303)](_0x5662e1(0x2e4));if(_0x4e7e10){if(_0x4e7e10['dataset'][_0x5662e1(0x245)])return;_0x4e7e10[_0x5662e1(0x196)](_0x5662e1(0x310),async _0x3f127b=>{const _0x361d4e=_0x5662e1,_0x7d06e7=extension_settings[extensionName],_0x59aab2=_0x7d06e7[_0x361d4e(0x348)]!==![];if(!_0x59aab2){_0x3f127b[_0x361d4e(0x1dd)](),toastr[_0x361d4e(0x327)]('表格系统总开关已关闭,请先启用总开关。');return;}try{const {reorganizeTableContent:_0x2b91f8}=await import(_0x361d4e(0x311));await _0x2b91f8();}catch(_0x1c3ce2){console[_0x361d4e(0x31f)](_0x361d4e(0x191),_0x1c3ce2),toastr[_0x361d4e(0x31f)](_0x361d4e(0x2e8));}}),_0x4e7e10['dataset']['reorganizeEventBound']=_0x5662e1(0x18c),log(_0x5662e1(0x300),'success');}}function bindFloorFillButtons(){const _0x54a330=_0x1d3fcf,_0x7d423a=document[_0x54a330(0x303)](_0x54a330(0x156)),_0xcbd255=document[_0x54a330(0x303)](_0x54a330(0x1ab)),_0xd7d177=document[_0x54a330(0x303)](_0x54a330(0x27b));if(_0x7d423a){if(_0x7d423a[_0x54a330(0x275)][_0x54a330(0x28f)])return;_0x7d423a[_0x54a330(0x196)](_0x54a330(0x310),_0x1e3329=>{const _0x293e0c=_0x54a330,_0x215a03=extension_settings[extensionName],_0x3e68b6=_0x215a03[_0x293e0c(0x348)]!==![];if(!_0x3e68b6){_0x1e3329[_0x293e0c(0x1dd)](),toastr[_0x293e0c(0x327)](_0x293e0c(0x1b8));return;}const _0x52852b=document['getElementById'](_0x293e0c(0x32d)),_0x200b68=document[_0x293e0c(0x303)](_0x293e0c(0x18d)),_0x15c464=parseInt(_0x52852b[_0x293e0c(0x15a)],0xa),_0x5e6e44=parseInt(_0x200b68[_0x293e0c(0x15a)],0xa);if(!_0x15c464||!_0x5e6e44){toastr[_0x293e0c(0x327)](_0x293e0c(0x1f7));return;}if(_0x15c464>_0x5e6e44){toastr[_0x293e0c(0x327)](_0x293e0c(0x312));return;}if(_0x15c464<0x1){toastr['warning'](_0x293e0c(0x279));return;}import(_0x293e0c(0x2f4))['then'](_0x5cb63d=>{_0x5cb63d['startFloorRangeFilling'](_0x15c464,_0x5e6e44);});}),_0x7d423a[_0x54a330(0x275)]['floorEventBound']=_0x54a330(0x18c),log(_0x54a330(0x29a),_0x54a330(0x2e0));}if(_0xcbd255){if(_0xcbd255[_0x54a330(0x275)][_0x54a330(0x2a1)])return;_0xcbd255[_0x54a330(0x196)]('click',_0x1793d1=>{const _0x515510=_0x54a330,_0x218afa=extension_settings[extensionName],_0xe00a27=_0x218afa['table_system_enabled']!==![];if(!_0xe00a27){_0x1793d1[_0x515510(0x1dd)](),toastr['warning'](_0x515510(0x1b8));return;}import(_0x515510(0x2f4))['then'](_0x2ed051=>{const _0x495c61=_0x515510;_0x2ed051[_0x495c61(0x203)]();});}),_0xcbd255[_0x54a330(0x275)][_0x54a330(0x2a1)]=_0x54a330(0x18c),log('\x22填当前楼层\x22按钮已成功绑定。',_0x54a330(0x2e0));}if(_0xd7d177){if(_0xd7d177[_0x54a330(0x275)][_0x54a330(0x297)])return;_0xd7d177[_0x54a330(0x196)]('click',async _0x2dcb55=>{const _0x148de6=_0x54a330,_0x1ee5ce=extension_settings[extensionName],_0x3bed7c=_0x1ee5ce[_0x148de6(0x348)]!==![];if(!_0x3bed7c){_0x2dcb55[_0x148de6(0x1dd)](),toastr[_0x148de6(0x327)](_0x148de6(0x1b8));return;}if(confirm(_0x148de6(0x14f)))try{await _0x3ab42[_0x148de6(0x1fd)]();}catch(_0x4990e7){console[_0x148de6(0x31f)](_0x148de6(0x286),_0x4990e7),toastr[_0x148de6(0x31f)](_0x148de6(0x326));}}),_0xd7d177['dataset'][_0x54a330(0x297)]=_0x54a330(0x18c),log(_0x54a330(0x1f6),_0x54a330(0x2e0));}}function bindTemplateEditors(){const _0x91a511=_0x1d3fcf,_0x242c8b=document[_0x91a511(0x303)]('ai-rule-template-editor'),_0x17ed21=document[_0x91a511(0x303)](_0x91a511(0x1bb)),_0x10b8ec=document[_0x91a511(0x303)](_0x91a511(0x2d1)),_0x52668c=document[_0x91a511(0x303)]('ai-flow-template-editor'),_0x24d1bd=document[_0x91a511(0x303)](_0x91a511(0x283)),_0x12bd19=document[_0x91a511(0x303)]('ai-flow-template-restore-btn');if(!_0x242c8b||!_0x52668c){log(_0x91a511(0x2fa),_0x91a511(0x2e1));return;}_0x242c8b['value']=_0x3ab42[_0x91a511(0x20b)](),_0x52668c['value']=_0x3ab42[_0x91a511(0x1e6)](),_0x17ed21[_0x91a511(0x196)](_0x91a511(0x310),()=>{const _0x59bdef=_0x91a511;_0x3ab42[_0x59bdef(0x16c)](_0x242c8b['value']),toastr[_0x59bdef(0x2e0)](_0x59bdef(0x246)),log(_0x59bdef(0x19d),_0x59bdef(0x2e0));}),_0x24d1bd[_0x91a511(0x196)](_0x91a511(0x310),()=>{const _0x4bcf68=_0x91a511;_0x3ab42[_0x4bcf68(0x330)](_0x52668c[_0x4bcf68(0x15a)]),toastr[_0x4bcf68(0x2e0)](_0x4bcf68(0x1cc)),log(_0x4bcf68(0x291),_0x4bcf68(0x2e0));}),_0x10b8ec[_0x91a511(0x196)](_0x91a511(0x310),()=>{const _0x233aae=_0x91a511;confirm(_0x233aae(0x197))&&(_0x242c8b['value']=DEFAULT_AI_RULE_TEMPLATE,_0x3ab42[_0x233aae(0x16c)](_0x242c8b['value']),toastr[_0x233aae(0x234)](_0x233aae(0x237)),log(_0x233aae(0x193),_0x233aae(0x234)));}),_0x12bd19[_0x91a511(0x196)](_0x91a511(0x310),()=>{const _0x5a64b4=_0x91a511;confirm(_0x5a64b4(0x28b))&&(_0x52668c['value']=DEFAULT_AI_FLOW_TEMPLATE,_0x3ab42[_0x5a64b4(0x330)](_0x52668c['value']),toastr[_0x5a64b4(0x234)](_0x5a64b4(0x1f2)),log(_0x5a64b4(0x325),_0x5a64b4(0x234)));}),log('指令模板编辑器已成功绑定。',_0x91a511(0x2e0));}function bindNccsApiEvents(){const _0x374ef3=_0x1d3fcf,_0xa8c59f=extension_settings[extensionName];if(_0xa8c59f[_0x374ef3(0x176)]===undefined)_0xa8c59f[_0x374ef3(0x176)]=![];if(_0xa8c59f['nccsApiMode']===undefined)_0xa8c59f['nccsApiMode']=_0x374ef3(0x2b6);if(_0xa8c59f[_0x374ef3(0x186)]===undefined)_0xa8c59f[_0x374ef3(0x186)]=_0x374ef3(0x268);if(_0xa8c59f[_0x374ef3(0x21c)]===undefined)_0xa8c59f[_0x374ef3(0x21c)]='';if(_0xa8c59f[_0x374ef3(0x2ba)]===undefined)_0xa8c59f[_0x374ef3(0x2ba)]='';if(_0xa8c59f[_0x374ef3(0x33b)]===undefined)_0xa8c59f['nccsMaxTokens']=0x7d0;if(_0xa8c59f[_0x374ef3(0x151)]===undefined)_0xa8c59f[_0x374ef3(0x151)]=0.7;if(_0xa8c59f[_0x374ef3(0x1c6)]===undefined)_0xa8c59f[_0x374ef3(0x1c6)]='';const _0x46d7fa=document['getElementById'](_0x374ef3(0x258)),_0x139975=document[_0x374ef3(0x303)](_0x374ef3(0x19e)),_0x506a9c=document[_0x374ef3(0x303)](_0x374ef3(0x254)),_0x523d40=document[_0x374ef3(0x303)](_0x374ef3(0x2ad)),_0x39595d=document['getElementById'](_0x374ef3(0x208)),_0x3d9646=document[_0x374ef3(0x303)]('nccs-api-model'),_0x1a5429=document[_0x374ef3(0x303)]('nccs-max-tokens'),_0x2733b6=document[_0x374ef3(0x303)](_0x374ef3(0x2a2)),_0x5da5ea=document[_0x374ef3(0x303)](_0x374ef3(0x1ec)),_0x332108=document['getElementById'](_0x374ef3(0x2d8)),_0x39c6cf=document['getElementById'](_0x374ef3(0x290)),_0x2e5f07=document[_0x374ef3(0x303)](_0x374ef3(0x18a)),_0x507fe8=document[_0x374ef3(0x303)](_0x374ef3(0x1cb));if(!_0x46d7fa||!_0x139975)return;_0x46d7fa[_0x374ef3(0x28d)]=_0xa8c59f[_0x374ef3(0x176)];if(_0x506a9c)_0x506a9c['value']=_0xa8c59f[_0x374ef3(0x27e)];if(_0x523d40)_0x523d40[_0x374ef3(0x15a)]=_0xa8c59f['nccsApiUrl'];if(_0x39595d)_0x39595d[_0x374ef3(0x15a)]=_0xa8c59f[_0x374ef3(0x21c)];if(_0x3d9646)_0x3d9646['value']=_0xa8c59f[_0x374ef3(0x2ba)];if(_0x1a5429){_0x1a5429[_0x374ef3(0x15a)]=_0xa8c59f['nccsMaxTokens'];if(_0x2733b6)_0x2733b6[_0x374ef3(0x1d1)]=_0xa8c59f[_0x374ef3(0x33b)];}if(_0x5da5ea){_0x5da5ea[_0x374ef3(0x15a)]=_0xa8c59f[_0x374ef3(0x151)];if(_0x332108)_0x332108[_0x374ef3(0x1d1)]=_0xa8c59f[_0x374ef3(0x151)];}if(_0x39c6cf)_0x39c6cf['value']=_0xa8c59f[_0x374ef3(0x1c6)]||'';const _0x588af2=()=>{const _0xc3d96c=_0x374ef3;_0x139975[_0xc3d96c(0x255)][_0xc3d96c(0x2c4)]=_0x46d7fa[_0xc3d96c(0x28d)]?_0xc3d96c(0x2bd):_0xc3d96c(0x1a8);};_0x588af2();const _0x482d07=()=>{const _0x236688=_0x374ef3;if(!_0x506a9c)return;const _0x368c4a=_0x506a9c[_0x236688(0x15a)]===_0x236688(0x24a),_0x35ad6c=_0x506a9c['value']===_0x236688(0x2b6),_0xe44eb4=_0x39c6cf?.[_0x236688(0x26f)](_0x236688(0x190));_0xe44eb4&&(_0xe44eb4[_0x236688(0x255)][_0x236688(0x2c4)]=_0x368c4a?'block':'none');const _0x1b1790=[{'element':_0x523d40,'containerId':null},{'element':_0x39595d,'containerId':null},{'element':_0x3d9646,'containerId':null},{'element':_0x1a5429,'containerId':null},{'element':_0x5da5ea,'containerId':null}];_0x1b1790[_0x236688(0x29d)](({element:_0x1ce605})=>{const _0x4180cc=_0x236688;if(_0x1ce605){const _0x1663f9=_0x1ce605[_0x4180cc(0x26f)](_0x4180cc(0x190));_0x1663f9&&(_0x1663f9[_0x4180cc(0x255)]['display']=_0x368c4a?_0x4180cc(0x1a8):_0x4180cc(0x2bd));}});const _0x41a662=_0x2e5f07?.[_0x236688(0x26f)](_0x236688(0x1f0));_0x41a662&&(_0x41a662[_0x236688(0x255)][_0x236688(0x2c4)]=_0x236688(0x285));};_0x482d07(),_0x46d7fa[_0x374ef3(0x196)](_0x374ef3(0x26e),()=>{const _0x211aca=_0x374ef3;_0xa8c59f[_0x211aca(0x176)]=_0x46d7fa[_0x211aca(0x28d)],saveSettingsDebounced(),_0x588af2(),log(_0x211aca(0x241)+(_0x46d7fa[_0x211aca(0x28d)]?_0x211aca(0x159):'已禁用'),'info');});_0x506a9c&&_0x506a9c['addEventListener'](_0x374ef3(0x26e),()=>{const _0x38a92f=_0x374ef3;_0xa8c59f[_0x38a92f(0x27e)]=_0x506a9c['value'],saveSettingsDebounced(),_0x482d07(),log(_0x38a92f(0x1f4)+_0x506a9c[_0x38a92f(0x15a)],'info');});if(_0x523d40){const _0x229dfe=()=>{const _0x84ace1=_0x374ef3;_0xa8c59f[_0x84ace1(0x186)]=_0x523d40[_0x84ace1(0x15a)],saveSettingsDebounced();};_0x523d40['addEventListener'](_0x374ef3(0x345),_0x229dfe);}if(_0x39595d){const _0x14973a=()=>{const _0x4cefd5=_0x374ef3;_0xa8c59f['nccsApiKey']=_0x39595d[_0x4cefd5(0x15a)],saveSettingsDebounced();};_0x39595d[_0x374ef3(0x196)](_0x374ef3(0x345),_0x14973a);}if(_0x3d9646){const _0x207cc5=()=>{const _0x8e4d81=_0x374ef3;_0xa8c59f['nccsModel']=_0x3d9646[_0x8e4d81(0x15a)],saveSettingsDebounced();};_0x3d9646['addEventListener'](_0x374ef3(0x345),_0x207cc5),_0x3d9646[_0x374ef3(0x196)](_0x374ef3(0x25d),_0x207cc5);}_0x1a5429&&_0x2733b6&&(_0x1a5429[_0x374ef3(0x196)](_0x374ef3(0x25d),()=>{const _0x13d8aa=_0x374ef3;_0x2733b6[_0x13d8aa(0x1d1)]=_0x1a5429[_0x13d8aa(0x15a)];}),_0x1a5429[_0x374ef3(0x196)](_0x374ef3(0x26e),()=>{const _0x1e87d9=_0x374ef3;_0xa8c59f[_0x1e87d9(0x33b)]=parseInt(_0x1a5429['value']),saveSettingsDebounced();}));_0x5da5ea&&_0x332108&&(_0x5da5ea['addEventListener']('input',()=>{const _0x44e990=_0x374ef3;_0x332108[_0x44e990(0x1d1)]=_0x5da5ea[_0x44e990(0x15a)];}),_0x5da5ea[_0x374ef3(0x196)](_0x374ef3(0x26e),()=>{const _0x3d2f29=_0x374ef3;_0xa8c59f['nccsTemperature']=parseFloat(_0x5da5ea[_0x3d2f29(0x15a)]),saveSettingsDebounced();}));_0x39c6cf&&_0x39c6cf[_0x374ef3(0x196)](_0x374ef3(0x26e),()=>{const _0x5dde8c=_0x374ef3;_0xa8c59f[_0x5dde8c(0x1c6)]=_0x39c6cf[_0x5dde8c(0x15a)],saveSettingsDebounced();});_0x2e5f07&&_0x2e5f07[_0x374ef3(0x196)]('click',async()=>{const _0xbbcfff=_0x374ef3;_0x2e5f07[_0xbbcfff(0x31d)]=!![],_0x2e5f07[_0xbbcfff(0x2d0)]='\x20测试中...';try{const _0xafe5dc=await testNccsApiConnection();_0xafe5dc?(toastr[_0xbbcfff(0x2e0)](_0xbbcfff(0x19b)),log(_0xbbcfff(0x284),_0xbbcfff(0x2e0))):(toastr[_0xbbcfff(0x31f)](_0xbbcfff(0x292)),log(_0xbbcfff(0x175),_0xbbcfff(0x31f)));}catch(_0x4add87){toastr[_0xbbcfff(0x31f)](_0xbbcfff(0x21a)+_0x4add87['message']),log('Nccs\x20API连接测试出错:'+_0x4add87[_0xbbcfff(0x1de)],_0xbbcfff(0x31f));}finally{_0x2e5f07[_0xbbcfff(0x31d)]=![],_0x2e5f07[_0xbbcfff(0x2d0)]=_0xbbcfff(0x2f1);}});_0x507fe8&&_0x507fe8[_0x374ef3(0x196)]('click',async()=>{const _0x556539=_0x374ef3;_0x507fe8[_0x556539(0x31d)]=!![],_0x507fe8[_0x556539(0x2d0)]=_0x556539(0x271);_0x523d40&&(_0xa8c59f[_0x556539(0x186)]=_0x523d40[_0x556539(0x15a)]);_0x39595d&&(_0xa8c59f[_0x556539(0x21c)]=_0x39595d['value']);saveSettingsDebounced();try{const _0x58eed0=await fetchNccsModels();if(_0x58eed0&&_0x58eed0[_0x556539(0x2e6)]>0x0){let _0x585c6b=document[_0x556539(0x303)](_0x556539(0x1c5));!_0x585c6b&&(_0x585c6b=document[_0x556539(0x266)](_0x556539(0x23b)),_0x585c6b['id']=_0x556539(0x1c5),_0x585c6b['className']=_0x556539(0x230),_0x3d9646['parentNode']['insertBefore'](_0x585c6b,_0x3d9646['nextSibling'])),_0x585c6b['innerHTML']=_0x556539(0x2a6),_0x58eed0[_0x556539(0x29d)](_0x455396=>{const _0x30947e=_0x556539,_0x5cc609=document['createElement']('option');_0x5cc609[_0x30947e(0x15a)]=_0x455396['id']||_0x455396[_0x30947e(0x210)],_0x5cc609[_0x30947e(0x1d1)]=_0x455396['name']||_0x455396['id'],(_0x455396['id']||_0x455396[_0x30947e(0x210)])===_0xa8c59f[_0x30947e(0x2ba)]&&(_0x5cc609['selected']=!![]),_0x585c6b[_0x30947e(0x222)](_0x5cc609);}),_0x3d9646[_0x556539(0x255)][_0x556539(0x2c4)]=_0x556539(0x1a8),_0x585c6b['style']['display']=_0x556539(0x2bd),_0x585c6b[_0x556539(0x196)](_0x556539(0x26e),()=>{const _0x27818b=_0x556539,_0x42585d=_0x585c6b[_0x27818b(0x15a)];_0xa8c59f[_0x27818b(0x2ba)]=_0x42585d,_0x3d9646[_0x27818b(0x15a)]=_0x42585d,saveSettingsDebounced();}),toastr['success'](_0x556539(0x1ca)+_0x58eed0[_0x556539(0x2e6)]+_0x556539(0x25a)),log(_0x556539(0x201)+_0x58eed0['length']+_0x556539(0x25a),_0x556539(0x2e0));}else toastr[_0x556539(0x327)](_0x556539(0x192)),log('Nccs\x20API未获取到可用模型','warn');}catch(_0x2d005f){toastr[_0x556539(0x31f)](_0x556539(0x346)+_0x2d005f[_0x556539(0x1de)]),log(_0x556539(0x274)+_0x2d005f[_0x556539(0x1de)],_0x556539(0x31f));}finally{_0x507fe8[_0x556539(0x31d)]=![],_0x507fe8[_0x556539(0x2d0)]=_0x556539(0x31b);}});const _0x233d42=async()=>{const _0x5ce4fd=_0x374ef3;if(!_0x39c6cf)return;try{const _0x457fdb=getContext();if(!_0x457fdb?.[_0x5ce4fd(0x244)]?.[_0x5ce4fd(0x2fc)]?.['profiles'])throw new Error(_0x5ce4fd(0x189));const _0x2f5780=_0x457fdb[_0x5ce4fd(0x244)]['connectionManager'][_0x5ce4fd(0x216)],_0x3937f9=_0xa8c59f[_0x5ce4fd(0x1c6)];_0x39c6cf[_0x5ce4fd(0x2d0)]='',_0x39c6cf[_0x5ce4fd(0x222)](new Option(_0x5ce4fd(0x2c5),'',![],![])),_0x2f5780&&_0x2f5780[_0x5ce4fd(0x2e6)]>0x0?(_0x2f5780['forEach'](_0x160fda=>{const _0x5e9733=_0x5ce4fd,_0x3bd05c=_0x160fda['id']===_0x3937f9,_0x375436=new Option(_0x160fda[_0x5e9733(0x210)],_0x160fda['id'],_0x3bd05c,_0x3bd05c);_0x39c6cf['appendChild'](_0x375436);}),log(_0x5ce4fd(0x1eb)+_0x2f5780['length']+_0x5ce4fd(0x2f6),_0x5ce4fd(0x2e0))):log(_0x5ce4fd(0x1df),_0x5ce4fd(0x2e1));}catch(_0x3ff537){log(_0x5ce4fd(0x1c9)+_0x3ff537['message'],'error');}};_0x506a9c&&_0x39c6cf&&(_0x506a9c[_0x374ef3(0x196)]('change',()=>{const _0x747793=_0x374ef3;_0x506a9c[_0x747793(0x15a)]==='sillytavern_preset'&&_0x233d42();}),_0xa8c59f[_0x374ef3(0x27e)]===_0x374ef3(0x24a)&&_0x233d42()),log(_0x374ef3(0x33a),_0x374ef3(0x2e0));}function _0x2b0c(){const _0x48e847=['table-updated','map','nccsModel','Header\x20#\x20clicked\x20for\x20table','2px','block','所选世界书中没有条目。

','display','选择预设','delete-row','restore-row','#amily2_memorisation_forms_panel\x20.sinan-navigation-deck','justifyContent','tagName','marginTop','find','100%','table_refresh_worldbooks','index-col','innerHTML','ai-rule-template-restore-btn','columnIndex','\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20提示:输入内容将用于更新项目。\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20取消\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20确认\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','\x22\x20title=\x22废黜此表\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20','.json','overflowY','moveRow','nccs-temperature-value','#add-exclusion-rule-btn','limit','matches','获取角色世界书失败。

','reorganize-table-btn','th.amily2-menu-open','length','width','重新整理功能启动失败,请检查系统状态。','.remove-rule-btn','deleteColumn','createTBody','add-row-below-btn','#rule-delete','col-index','batchEventBound','touch','\x20测试连接','您确定要删除\x20“','context-reading-slider','../core/table-system/batch-filler.js','includes','\x20个SillyTavern配置文件','position','innerHeight','setAttribute','无法找到指令模板编辑器,绑定失败。','\x22\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22padding:\x2010px;\x20border-radius:\x206px;\x20border:\x201px\x20solid\x20rgba(255,255,255,0.3);\x20background:\x20rgba(0,0,0,0.2);\x20color:\x20#fff;\x20font-size:\x201em;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22','connectionManager','amily2-cell-content','secondary-api','CHAT_CHANGED','\x22重新整理\x22按钮已成功绑定。','replace','alignItems','getElementById','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20--\x20选择要添加规则的列\x20--\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','.delete-table-btn','table_tags_to_extract','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','keypress','click','../core/table-system/reorganizer.js','起始楼层不能大于结束楼层。','table-injection-depth','move-up',']”\x20吗?此操作不可逆!','未选择或绑定世界书。

','data-rules','charLimitRules','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20添加规则\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20移除所有被起始和结束标记包裹的内容(例如\x20OOC\x20部分)。\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','\x22立即填表\x22按钮已成功绑定。','\x20获取模型','context_reading_level','disabled','rows','error','table_worldbook_char_limit_value','已添加第一行','table-configure-rules-btn','列名已更新为\x20\x22','restore-row-btn','批量填表-流程提示词已恢复默认。','回退重填失败,请检查系统状态。','warning','#rule-update','分步填表','add','fa-arrow-down','rowLimitRule','floor-start-input','push','fa-arrow-right','saveBatchFillerFlowTemplate','','聊天内表格显示设置及其依赖关系已成功绑定。','table_selected_worldbooks','add-above','input[name=\x22table-injection-role\x22]','filling_mode','在右加列','表格系统总开关','left','Nccs\x20API事件绑定完成','nccsMaxTokens','无标题条目','table-controls','label','amily2-menu-open','visible','表名:','depth','编辑表名','previousElementSibling','blur','获取模型失败:','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20【删除】:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','table_system_enabled','已禁用','insertColumn','active','您确定要将表格状态回退到上一楼,并使用最新消息重新填表吗?','填表模式已切换为\x20','nccsTemperature','\x22\x20title=\x22上移\x22>','开始为表格视图绑定交互事件...','charLimitRule','checkbox-item','fill-selected-floors-btn','add-table-placeholder','touches','已启用','value','配置独立提取规则','all','move-left',']\x20刷新世界书设置时出错:','amily2-context-menu\x20amily2-row-context-menu','move-down','note','
:\x20不超过\x20','div','stringify','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20标签提取\x20(半角逗号分隔)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','\x22\x20placeholder=\x22例如:\x20content,game,time\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20仅提取指定XML标签的内容,例如填“content”,即提取...中的内容。\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','addEventListener','您确定要将规则提示词恢复为默认设置吗?','优化中填表','rowIndex','\x22\x20style=\x22width:\x20100px;\x20margin-top:\x2010px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20当表格总行数超过设定值时,将在表格底部显示警告。\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20【说明】:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Nccs\x20API连接测试成功!','编辑列名','批量填表-规则提示词已保存。','nccs-api-config','原始填表',']\x20世界书设置已刷新','rule_update','add-right','table_worldbook_source','持续渲染最新消息功能已','.move-table-up-btn','close','auto','none','。请切换聊天以应用更改。','wb-entry-check-','fill-current-floor-btn','book','zIndex','end','touchend','show-table-in-chat-toggle','data','min','\x20创建第一行','top','”\x20的规则\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20内容长度限制\x20(0为禁用)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','.rule-end','primary','表格系统总开关已关闭,请先启用总开关。','10585162sKJUue','.add-row-btn','ai-rule-template-save-btn','add-row-above-btn','div[style*=\x22overflowX\x22]','amily2-menu-active','table-system-master-switch','1194614dhYecy','-tab','#current-char-limit-rules','.remove-char-limit-rule-btn','table_worldbook_entry_list','nccs-api-model-select','nccsTavernProfile','trim','【确认】您确定要清空所有表格的剧情内容吗?此操作将保留表格结构,但会删除所有已填写的行。','加载SillyTavern预设失败:','成功获取\x20','nccs-fetch-models','流程提示词已保存。','wb-check-','20560bmPwhX','.table-rename-icon','字数限制为0表示不设置规则。','textContent','未知列\x20(','.control-block-with-switch','relative','\x22>\x20','querySelector','opacity','[内存储司-工部]\x20缺少表格数据或容器,无法渲染。','amily2-clear-global-preset-btn','delete','moveColumn','move-table-up-btn','preventDefault','message','未找到可用的SillyTavern配置文件','.popup-button-cancel','.edit-rules-btn','#add-char-limit-rule-btn','deleteRow','amily2-clear-all-tables-btn','all-tables-container','getBatchFillerFlowTemplate','.exclusion-rule-item','mousemove','join','role','成功加载\x20','nccs-temperature','cursor','contenteditable','\x0aUID:\x20','.nccs-button-row','parentElement','流程提示词已恢复为默认。','table_selected_entries','Nccs\x20API模式已切换为:\x20','【最终警告】您确定要永久废黜表格\x20“[','\x22回退重填\x22按钮已成功绑定。','请输入有效的起始楼层和结束楼层。','amily2-table-','scrollTop','cellIndex','名称不能为空!','表名已更新为\x20\x22','rollbackAndRefill','optimized','startsWith','insertCell','Nccs\x20API获取到\x20','className','startCurrentFloorFilling','table-independent-rules-container','show_table_in_chat','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20保存\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20取消\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','addColumn','nccs-api-key','clearAllTables','\x22\x20placeholder=\x22起始标记\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20col:nth-child(','injection','insertRow','body','appendChild','#rule-note','columnWidths','pointer','attr','#new-rule-column-select','colIndex','tableIndex','#rule-row-limit-value','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20【修改】:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','fa-arrow-left','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','title','matchMedia','text_pole','11358XHfzle','\x22\x20title=\x22下移\x22>','0.5','info','amily2-export-preset-btn','span','规则提示词已恢复为默认。','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20获取中...','请先加载一个角色。

','entries','Nccs\x20API获取模型失败:','dataset','向右移动','getHighlights','htmlFor','楼层不能小于1。','clientX','rollback-and-refill-btn','table_injection_enabled','rule_delete','nccsApiMode','getTime','没有找到世界书。

','rowStatuses','#rule-add','ai-flow-template-save-btn','Nccs\x20API连接测试成功','flex','[内存储司]\x20回退重填功能失败:','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','”\x20列吗?','toggle','clearGlobalPreset','您确定要将流程提示词恢复为默认设置吗?','rename','checked','3322814ftyQdj','floorEventBound','nccs-sillytavern-preset','批量填表-流程提示词已保存。','Nccs\x20API连接测试失败,请检查配置','请输入表名...','加载条目失败。

','input[name=\x22filling-mode\x22]','input[type=\x22checkbox\x22]:checked','rollbackEventBound','focus','add-below','\x22选定楼层填表\x22按钮已成功绑定。','render_on_every_message','has','forEach','向上移动','importGlobalPreset','table','currentEventBound','nccs-max-tokens-value','table_worldbook_checkbox_list','removeEventListener','table-role-system','--\x20请选择模型\x20--','恢复该行','parse','col','val','bookName','无法找到世界书设置的相关UI元素,绑定失败。','nccs-api-url','appendTo','.radio-group','在下加行','table-injection-enabled','amily2-table-wrapper','\x22\x20placeholder=\x22结束标记\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','{const _0x411de5=_0x3dd8be;_0x5e5786[_0x411de5(0x28d)]?(_0x54a5d0['disabled']=![],_0x54a5d0[_0x411de5(0x26f)]('.control-block-with-switch')['style']['opacity']='1'):(_0x54a5d0[_0x411de5(0x31d)]=!![],_0x54a5d0['closest'](_0x411de5(0x1d3))[_0x411de5(0x255)][_0x411de5(0x1d7)]=_0x411de5(0x233));};_0x1b9627(),_0x5e5786[_0x3dd8be(0x196)](_0x3dd8be(0x26e),()=>{const _0x4f65b2=_0x3dd8be;_0x3dbb40['show_table_in_chat']=_0x5e5786[_0x4f65b2(0x28d)],saveSettingsDebounced(),toastr['info']('聊天内表格显示已'+(_0x5e5786['checked']?'开启':'关闭')+'。'),_0x1b9627();}),_0x54a5d0[_0x3dd8be(0x196)](_0x3dd8be(0x26e),()=>{const _0x331027=_0x3dd8be;_0x3dbb40[_0x331027(0x29b)]=_0x54a5d0['checked'],saveSettingsDebounced(),toastr[_0x331027(0x234)](_0x331027(0x1a4)+(_0x54a5d0[_0x331027(0x28d)]?'开启':'关闭')+_0x331027(0x1a9));}),log(_0x3dd8be(0x332),_0x3dd8be(0x2e0));}