1// è®°äºæ¬ç¶æ 2let isWordWrap = true; 3let savedContent = ''; 4 5// åå§åè®°äºæ¬ 6function initNotepad() { 7 const textarea = document.getElementById('notepad-textarea'); 8 textarea.classList.add('word-wrap'); 9 10 // 仿¬å°åå¨å è½½å 容 11 const savedText = localStorage.getItem('notepadContent'); 12 if (savedText) { 13 textarea.value = savedText; 14 savedContent = savedText; 15 updateWordCount(); 16 } 17 18 // æ·»å è¾å ¥äºä»¶çå¬å¨ 19 textarea.addEventListener('input', () => { 20 updateWordCount(); 21 updateCursorPosition(); 22 }); 23 24 // æ·»å å æ ä½ç½®æ´æ°äºä»¶ 25 textarea.addEventListener('click', updateCursorPosition); 26 textarea.addEventListener('keyup', updateCursorPosition); 27} 28 29// æ´æ°åæ°ç»è®¡ 30function updateWordCount() { 31 const textarea = document.getElementById('notepad-textarea'); 32 const text = textarea.value; 33 const wordCount = text.trim() ? text.length : 0; 34 35 const statusBar = document.querySelector('#notes-window .status-bar'); 36 statusBar.children[1].textContent = `忏ï¼${wordCount}`; 37} 38 39// æ´æ°å æ ä½ç½® 40function updateCursorPosition() { 41 const textarea = document.getElementById('notepad-textarea'); 42 const cursorPosition = textarea.selectionStart; 43 const text = textarea.value.substring(0, cursorPosition); 44 const lines = text.split('\n'); 45 const currentLine = lines.length; 46 const currentColumn = lines[lines.length - 1].length + 1; 47 48 const statusBar = document.querySelector('#notes-window .status-bar'); 49 statusBar.children[2].textContent = `Ln ${currentLine}, Col ${currentColumn}`; 50} 51 52// 忢èªå¨æ¢è¡ 53function toggleWordWrap() { 54 const textarea = document.getElementById('notepad-textarea'); 55 isWordWrap = !isWordWrap; 56 57 if (isWordWrap) { 58 textarea.classList.remove('no-wrap'); 59 textarea.classList.add('word-wrap'); 60 } else { 61 textarea.classList.remove('word-wrap'); 62 textarea.classList.add('no-wrap'); 63 } 64} 65 66// æ¾ç¤ºæ¸ ç©ºç¡®è®¤å¼¹çª 67function clearNotepad() { 68 const confirmDialog = document.getElementById('notepad-clear-confirm'); 69 const modalOverlay = document.getElementById('notepad-modal-overlay'); 70 71 // æ¾ç¤ºé®ç½©åå¼¹çª 72 modalOverlay.style.display = 'block'; 73 confirmDialog.style.display = 'block'; 74 75 // ç¡®ä¿å¼¹çªå¨æä¸å± 76 modalOverlay.style.zIndex = '99999'; 77 confirmDialog.style.zIndex = '100000'; 78 79 // ç¦ç¨å ¶ä»çªå£çæå¨ 80 const windows = document.querySelectorAll('.window'); 81 windows.forEach(win => { 82 if (win.id !== 'notepad-clear-confirm') { 83 win.style.pointerEvents = 'none'; 84 } 85 }); 86} 87 88// ç¡®è®¤æ¸ ç©ºå 容 89function confirmClearNotepad() { 90 const textarea = document.getElementById('notepad-textarea'); 91 textarea.value = ''; 92 updateWordCount(); 93 updateCursorPosition(); 94 95 // å ³éæ¨¡æå¼¹çª 96 closeNotepadModal(); 97} 98 99// åæ¶æ¸ ç©ºæä½ 100function cancelClearNotepad() { 101 closeNotepadModal(); 102} 103 104// å ³éæ¨¡æå¼¹çª 105function closeNotepadModal() { 106 const confirmDialog = document.getElementById('notepad-clear-confirm'); 107 const modalOverlay = document.getElementById('notepad-modal-overlay'); 108 109 // éèé®ç½©åå¼¹çª 110 modalOverlay.style.display = 'none'; 111 confirmDialog.style.display = 'none'; 112 113 // éç½® z-index 114 modalOverlay.style.zIndex = ''; 115 confirmDialog.style.zIndex = ''; 116 117 // æ¢å¤å ¶ä»çªå£çæå¨ 118 const windows = document.querySelectorAll('.window'); 119 windows.forEach(win => { 120 win.style.pointerEvents = 'auto'; 121 }); 122} 123 124// ä¿åå 容 125function saveNotepad() { 126 const textarea = document.getElementById('notepad-textarea'); 127 const content = textarea.value; 128 129 // ä¿åå°æ¬å°åå¨ 130 localStorage.setItem('notepadContent', content); 131 savedContent = content; 132 133 // æ´æ°ç¶ææ 134 const statusBar = document.querySelector('#notes-window .status-bar'); 135 statusBar.children[0].textContent = 'å·²ä¿å'; 136 137 // 2ç§åæ¢å¤ç¶ææ 138 setTimeout(() => { 139 statusBar.children[0].textContent = 'å°±ç·'; 140 }, 2000); 141} 142 143// å¨çªå£å è½½æ¶åå§åè®°äºæ¬ 144window.addEventListener('load', () => { 145 initNotepad(); 146});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.