Changed around line 1
+ const editor = document.getElementById('editor');
+ const themeToggle = document.getElementById('themeToggle');
+ const lineWidth = document.getElementById('lineWidth');
+ const energyBar = document.querySelector('.energy-bar');
+ const settingsForm = document.getElementById('settingsForm');
+ const sessionTimer = document.getElementById('sessionTimer');
+ const wordCount = document.getElementById('wordCount');
+
+ let lastKeyTime = Date.now();
+ let sessionEndTime = 0;
+ let keystrokeInterval = 10;
+ let checkInterval;
+
+ // Load saved state
+ editor.value = localStorage.getItem('content') || '';
+ updateWordCount();
+
+ const savedTheme = localStorage.getItem('theme') || 'light';
+ document.documentElement.setAttribute('data-theme', savedTheme);
+ themeToggle.textContent = savedTheme === 'dark' ? '๐' : '๐';
+
+ lineWidth.value = localStorage.getItem('lineWidth') || 70;
+ document.documentElement.style.setProperty('--container', `${lineWidth.value}ch`);
+
+ // Theme toggle
+ themeToggle.addEventListener('click', () => {
+ const newTheme = document.documentElement.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
+ document.documentElement.setAttribute('data-theme', newTheme);
+ themeToggle.textContent = newTheme === 'dark' ? '๐' : '๐';
+ localStorage.setItem('theme', newTheme);
+ });
+
+ // Line width
+ lineWidth.addEventListener('input', (e) => {
+ document.documentElement.style.setProperty('--container', `${e.target.value}ch`);
+ localStorage.setItem('lineWidth', e.target.value);
+ });
+
+ // Fullscreen
+ document.getElementById('fullscreenBtn').addEventListener('click', () => {
+ if (!document.fullscreenElement) {
+ document.documentElement.requestFullscreen();
+ } else {
+ document.exitFullscreen();
+ }
+ });
+
+ // Auto-save
+ editor.addEventListener('input', () => {
+ localStorage.setItem('content', editor.value);
+ updateWordCount();
+ lastKeyTime = Date.now();
+ });
+
+ // Keystroke monitoring
+ document.addEventListener('keydown', () => lastKeyTime = Date.now());
+
+ // Energy bar system
+ function startMonitoring() {
+ checkInterval = setInterval(() => {
+ const timeSinceLastKey = (Date.now() - lastKeyTime) / 1000;
+ const warningThreshold = keystrokeInterval / 2;
+
+ if (timeSinceLastKey > warningThreshold) {
+ energyBar.classList.remove('hidden');
+ const progress = Math.min(100, (timeSinceLastKey - warningThreshold) / (keystrokeInterval / 2) * 100);
+ energyBar.style.width = `${100 - progress}%`;
+ } else {
+ energyBar.classList.add('hidden');
+ }
+ }, 100);
+ }
+
+ // Session timer
+ function updateSessionTimer() {
+ const remaining = Math.max(0, sessionEndTime - Date.now());
+ if (remaining > 0) {
+ const mins = Math.floor(remaining / 60000);
+ const secs = Math.floor((remaining % 60000) / 1000);
+ sessionTimer.textContent = `${mins}:${secs.toString().padStart(2, '0')} remaining`;
+ }
+ }
+
+ // Settings form
+ settingsForm.addEventListener('submit', (e) => {
+ e.preventDefault();
+ keystrokeInterval = parseInt(document.getElementById('keystrokeInterval').value);
+ const sessionMinutes = parseInt(document.getElementById('sessionTime').value);
+ sessionEndTime = Date.now() + sessionMinutes * 60000;
+ startMonitoring();
+ setInterval(updateSessionTimer, 1000);
+ document.querySelector('.settings-panel').classList.add('hidden');
+ });
+
+ // Toggle settings panel
+ document.getElementById('settingsBtn').addEventListener('click', () => {
+ document.querySelector('.settings-panel').classList.toggle('hidden');
+ });
+
+ // Word count
+ function updateWordCount() {
+ const count = editor.value.trim().split(/\s+/).filter(w => w).length;
+ wordCount.textContent = `${count} ${count === 1 ? 'word' : 'words'}`;
+ }
+
+ // Initialize
+ startMonitoring();