(data)
| 1716 | } |
| 1717 | |
| 1718 | function renderFrequencyPanel(data) { |
| 1719 | if (!data) { |
| 1720 | data = parseFrequencyText(currentFrequency); |
| 1721 | } |
| 1722 | |
| 1723 | const panel = document.getElementById('frequency-panel'); |
| 1724 | |
| 1725 | // 辅助函数:根据关键词类型返回样式类 |
| 1726 | function getKeywordClass(keyword) { |
| 1727 | if (keyword.startsWith('+')) return 'bg-green-500'; |
| 1728 | if (keyword.startsWith('!')) return 'bg-red-500'; |
| 1729 | if (keyword.startsWith('@')) return 'bg-purple-500'; |
| 1730 | if (keyword.startsWith('/') || keyword.includes('=>')) return 'bg-indigo-500'; |
| 1731 | return 'bg-blue-500'; |
| 1732 | } |
| 1733 | |
| 1734 | // 辅助函数:为关键词添加标签 |
| 1735 | function getKeywordLabel(keyword) { |
| 1736 | if (keyword.startsWith('+')) return '必须'; |
| 1737 | if (keyword.startsWith('!')) return '排除'; |
| 1738 | if (keyword.startsWith('@')) return '限制'; |
| 1739 | if (keyword.startsWith('/')) return '正则'; |
| 1740 | if (keyword.includes('=>')) return '别名'; |
| 1741 | return ''; |
| 1742 | } |
| 1743 | |
| 1744 | // 渲染词组卡片 |
| 1745 | function renderGroupCard(group, idx) { |
| 1746 | const jumpIcon = `<i class="fa-solid fa-grip-vertical text-gray-400 text-xs mr-2" title="拖动调整顺序"></i>`; |
| 1747 | |
| 1748 | // 序号标记 |
| 1749 | const indexBadge = `<span class="text-xs bg-gray-700 text-white px-2.5 py-1 rounded-full font-bold mr-2" title="词组序号">#${idx + 1}</span>`; |
| 1750 | |
| 1751 | // 相关组标记 |
| 1752 | const relatedGroupBadge = group.isRelatedGroup |
| 1753 | ? `<span class="text-[10px] bg-gradient-to-r from-blue-500 to-indigo-500 text-white px-2 py-0.5 rounded font-bold ml-2" title="此组与相邻组相关(无空行分隔)"> |
| 1754 | <i class="fa-solid fa-link mr-1"></i>相关组 ${group.relatedGroupIndex + 1}/${group.relatedGroupTotal} |
| 1755 | </span>` |
| 1756 | : ''; |
| 1757 | |
| 1758 | // 相关组边框样式 |
| 1759 | const relatedGroupStyle = group.isRelatedGroup |
| 1760 | ? 'border-l-4 border-l-blue-500 shadow-lg' |
| 1761 | : ''; |
| 1762 | |
| 1763 | if (group.type === 'group-name') { |
| 1764 | // 组别名类型 |
| 1765 | return ` |
| 1766 | <div class="word-group-card border-2 border-orange-200 bg-orange-50 group ${relatedGroupStyle} cursor-move" data-group-index="${idx}" onclick="scrollToWordGroupInEditor(${idx})"> |
| 1767 | <div class="flex items-center justify-between mb-3"> |
| 1768 | <div class="flex items-center flex-1 gap-2"> |
| 1769 | ${jumpIcon} |
| 1770 | ${indexBadge} |
| 1771 | <span class="text-[10px] bg-orange-500 text-white px-2 py-0.5 rounded font-bold">组别名</span> |
| 1772 | ${relatedGroupBadge} |
| 1773 | <input type="text" value="${group.name || ''}" placeholder="组别名(如:东亚)" |
| 1774 | class="text-sm font-bold border-0 border-b-2 border-orange-300 focus:border-orange-500 outline-none px-2 py-1 flex-1 bg-transparent" |
| 1775 | onclick="event.stopPropagation()" |
no test coverage detected