{"id":395,"date":"2026-07-08T08:59:26","date_gmt":"2026-07-08T08:59:26","guid":{"rendered":"https:\/\/www.nartugan.com.tr\/?page_id=395"},"modified":"2026-07-08T09:02:19","modified_gmt":"2026-07-08T09:02:19","slug":"prompter","status":"publish","type":"page","link":"https:\/\/www.nartugan.com.tr\/index.php\/prompter\/","title":{"rendered":"PROMPTER"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\n&lt;html lang=\"tr\">\n&lt;head>\n    &lt;meta charset=\"UTF-8\">\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    &lt;title>G\u00fcltekin Prompter v3&lt;\/title>\n    &lt;style>\n        body, html {\n            margin: 0; padding: 0;\n            background-color: #000;\n            color: #fff;\n            font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n            height: 100%;\n            overflow: hidden;\n        }\n\n        \/* Edit\u00f6r Ekran\u0131 *\/\n        #editor-screen {\n            display: flex;\n            flex-direction: column;\n            height: 100vh;\n            padding: 20px;\n            box-sizing: border-box;\n            gap: 15px;\n        }\n\n        \/* \u00dcst Dosya &amp; Haf\u0131za Y\u00f6netim Paneli *\/\n        #file-controls {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 10px;\n            background-color: #111;\n            padding: 15px;\n            border-radius: 10px;\n            border: 1px solid #333;\n            align-items: center;\n        }\n        .file-btn {\n            background-color: #333;\n            color: #fff;\n            border: none;\n            padding: 12px 16px;\n            border-radius: 8px;\n            font-size: 16px;\n            font-weight: bold;\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            gap: 5px;\n        }\n        .file-btn:active { background-color: #555; }\n        .btn-save { background-color: #28a745; }\n        .btn-import { background-color: #17a2b8; }\n        .btn-export { background-color: #6c757d; }\n        .btn-delete { background-color: #dc3545; padding: 12px; }\n\n        #saved-scripts {\n            flex-grow: 1;\n            background-color: #222;\n            color: #fff;\n            border: 1px solid #444;\n            padding: 12px;\n            border-radius: 8px;\n            font-size: 16px;\n            min-width: 150px;\n        }\n\n        textarea {\n            flex-grow: 1;\n            background-color: #1a1a1a;\n            color: #fff;\n            font-size: 24px;\n            padding: 20px;\n            border: 2px solid #333;\n            border-radius: 10px;\n            resize: none;\n            outline: none;\n        }\n        .start-btn {\n            background-color: #007bff;\n            color: white;\n            font-size: 24px;\n            font-weight: bold;\n            padding: 20px;\n            border: none;\n            border-radius: 10px;\n            cursor: pointer;\n        }\n\n        \/* Prompter Ekran\u0131 *\/\n        #prompter-screen {\n            display: none;\n            height: 100vh;\n            overflow-y: hidden;\n            position: relative;\n        }\n        #text-container {\n            padding: 60px 40px 300px 40px;\n            font-size: 70px;\n            font-weight: bold;\n            line-height: 1.4;\n            text-align: center;\n            white-space: pre-wrap;\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n        }\n        .mirrored {\n            transform: scaleX(-1);\n        }\n\n        \/* Kontrol Paneli *\/\n        #controls {\n            position: fixed;\n            bottom: 20px;\n            left: 50%;\n            transform: translateX(-50%);\n            background-color: rgba(30, 30, 30, 0.95);\n            padding: 15px 25px;\n            border-radius: 20px;\n            display: flex;\n            gap: 12px;\n            z-index: 100;\n            box-shadow: 0px 4px 15px rgba(0,0,0,0.5);\n            align-items: center;\n        }\n        .ctrl-btn {\n            background-color: #444;\n            color: white;\n            border: none;\n            border-radius: 8px;\n            padding: 15px 18px;\n            font-size: 18px;\n            font-weight: bold;\n            cursor: pointer;\n            min-width: 70px;\n            white-space: nowrap;\n        }\n        .ctrl-btn:active { background-color: #666; }\n        #play-btn { background-color: #007bff; min-width: 110px; font-size: 20px; }\n        #play-btn.playing { background-color: #dc3545; }\n        #edit-btn { background-color: #ffc107; color: black; }\n        #fullscreen-btn { background-color: #6c757d; min-width: 130px; }\n        .nav-btn { background-color: #17a2b8; } \n        \n        .marker {\n            position: fixed;\n            top: 50%;\n            width: 20px;\n            height: 4px;\n            background-color: rgba(255, 0, 0, 0.5);\n            z-index: 50;\n        }\n        .marker-left { left: 0; }\n        .marker-right { right: 0; }\n    &lt;\/style>\n&lt;\/head>\n&lt;body>\n\n    &lt;div id=\"editor-screen\">\n        \n        &lt;div id=\"file-controls\">\n            &lt;button class=\"file-btn btn-save\" onclick=\"saveToMemory()\">\ud83d\udcbe Haf\u0131zaya Kaydet&lt;\/button>\n            &lt;select id=\"saved-scripts\" onchange=\"loadFromMemory()\">\n                &lt;option value=\"\">-- Haf\u0131zadan Metin Se\u00e7 \/ A\u00e7 --&lt;\/option>\n            &lt;\/select>\n            &lt;button class=\"file-btn btn-delete\" onclick=\"deleteFromMemory()\" title=\"Se\u00e7ili metni haf\u0131zadan sil\">\ud83d\uddd1\ufe0f&lt;\/button>\n            \n            &lt;div style=\"width: 1px; height: 30px; background-color: #444; margin: 0 5px;\">&lt;\/div>\n\n            &lt;button class=\"file-btn btn-import\" onclick=\"document.getElementById('file-input').click()\">\ud83d\udce5 .txt \u0130\u00e7e Aktar&lt;\/button>\n            &lt;input type=\"file\" id=\"file-input\" accept=\".txt\" style=\"display: none;\" onchange=\"importFromFile(event)\">\n            \n            &lt;button class=\"file-btn btn-export\" onclick=\"exportToFile()\">\ud83d\udce4 .txt \u0130ndir&lt;\/button>\n        &lt;\/div>\n\n        &lt;textarea id=\"text-input\" placeholder=\"Prompter metnini buraya yap\u0131\u015ft\u0131r veya \u00fcstten bir dosya \/ kay\u0131tl\u0131 metin a\u00e7...\">&lt;\/textarea>\n        &lt;button class=\"start-btn\" onclick=\"startPrompter()\">PROMPTER'A GE\u00c7&lt;\/button>\n    &lt;\/div>\n\n    &lt;div id=\"prompter-screen\">\n        &lt;div class=\"marker marker-left\">&lt;\/div>\n        &lt;div class=\"marker marker-right\">&lt;\/div>\n        \n        &lt;div id=\"text-container\">&lt;\/div>\n\n        &lt;div id=\"controls\">\n            &lt;button class=\"ctrl-btn\" id=\"edit-btn\" onclick=\"goToEditor()\">\u270e D\u00fczenle&lt;\/button>\n            &lt;button class=\"ctrl-btn\" onclick=\"changeFont(-5)\">A-&lt;\/button>\n            &lt;button class=\"ctrl-btn\" onclick=\"changeFont(5)\">A+&lt;\/button>\n            \n            &lt;button class=\"ctrl-btn nav-btn\" onclick=\"manualScroll(50)\">\u25b2 Yukar\u0131&lt;\/button>\n            &lt;button class=\"ctrl-btn nav-btn\" onclick=\"manualScroll(-50)\">\u25bc A\u015fa\u011f\u0131&lt;\/button>\n\n            &lt;button class=\"ctrl-btn\" onclick=\"changeSpeed(-0.5)\">Yava\u015f&lt;\/button>\n            &lt;button class=\"ctrl-btn\" id=\"play-btn\" onclick=\"togglePlay()\">Start&lt;\/button>\n            &lt;button class=\"ctrl-btn\" onclick=\"changeSpeed(0.5)\">H\u0131zl\u0131&lt;\/button>\n            \n            &lt;button class=\"ctrl-btn\" onclick=\"toggleMirror()\">Ayna&lt;\/button>\n            &lt;button class=\"ctrl-btn\" id=\"fullscreen-btn\" onclick=\"toggleFullscreen()\">\u26f6 Tam Ekran&lt;\/button>\n        &lt;\/div>\n    &lt;\/div>\n\n    &lt;script>\n        let isPlaying = false;\n        let speed = 1.5; \n        let fontSize = 70; \n        let scrollPosition = 0;\n        let animationFrameId;\n\n        const textContainer = document.getElementById('text-container');\n        const prompterScreen = document.getElementById('prompter-screen');\n        const fullscreenBtn = document.getElementById('fullscreen-btn');\n        const textInput = document.getElementById('text-input');\n        const savedScriptsSelect = document.getElementById('saved-scripts');\n\n        \/\/ Sayfa y\u00fcklendi\u011finde haf\u0131zadaki metinleri listeye \u00e7ek\n        window.onload = function() {\n            updateSavedScriptsList();\n        };\n\n        \/\/ --- HAFIZA (LOCALSTORAGE) \u0130\u015eLEMLER\u0130 ---\n        function saveToMemory() {\n            const text = textInput.value.trim();\n            if (!text) {\n                alert(\"Kaydetmek i\u00e7in \u00f6nce bir metin yazmal\u0131s\u0131n\u0131z!\");\n                return;\n            }\n            const name = prompt(\"Bu metin i\u00e7in k\u0131sa bir isim girin (\u00d6rn: Sahne 1, R\u00f6portaj vb.):\");\n            if (!name) return;\n\n            let saved = JSON.parse(localStorage.getItem('gultekin_prompter_scripts') || '{}');\n            saved&#91;name] = text;\n            localStorage.setItem('gultekin_prompter_scripts', JSON.stringify(saved));\n            \n            updateSavedScriptsList();\n            savedScriptsSelect.value = name;\n            alert(`\"${name}\" ba\u015far\u0131yla haf\u0131zaya kaydedildi!`);\n        }\n\n        function loadFromMemory() {\n            const selectedName = savedScriptsSelect.value;\n            if (!selectedName) return;\n\n            let saved = JSON.parse(localStorage.getItem('gultekin_prompter_scripts') || '{}');\n            if (saved&#91;selectedName]) {\n                textInput.value = saved&#91;selectedName];\n            }\n        }\n\n        function deleteFromMemory() {\n            const selectedName = savedScriptsSelect.value;\n            if (!selectedName) {\n                alert(\"L\u00fctfen \u00f6nce silmek istedi\u011finiz metni listeden se\u00e7in.\");\n                return;\n            }\n            if (confirm(`\"${selectedName}\" haf\u0131zadan silinecek. Emin misiniz?`)) {\n                let saved = JSON.parse(localStorage.getItem('gultekin_prompter_scripts') || '{}');\n                delete saved&#91;selectedName];\n                localStorage.setItem('gultekin_prompter_scripts', JSON.stringify(saved));\n                updateSavedScriptsList();\n                textInput.value = \"\";\n            }\n        }\n\n        function updateSavedScriptsList() {\n            let saved = JSON.parse(localStorage.getItem('gultekin_prompter_scripts') || '{}');\n            savedScriptsSelect.innerHTML = '&lt;option value=\"\">-- Haf\u0131zadan Metin Se\u00e7 \/ A\u00e7 --&lt;\/option>';\n            for (let name in saved) {\n                let option = document.createElement('option');\n                option.value = name;\n                option.textContent = \"\ud83d\udcd1 \" + name;\n                savedScriptsSelect.appendChild(option);\n            }\n        }\n\n        \/\/ --- DOSYA (TXT) \u0130\u00c7E &amp; DI\u015eA AKTARMA \u0130\u015eLEMLER\u0130 ---\n        function importFromFile(event) {\n            const file = event.target.files&#91;0];\n            if (!file) return;\n\n            const reader = new FileReader();\n            reader.onload = function(e) {\n                textInput.value = e.target.result;\n            };\n            reader.readAsText(file);\n        }\n\n        function exportToFile() {\n            const text = textInput.value.trim();\n            if (!text) {\n                alert(\"\u0130ndirilecek bir metin bulunamad\u0131!\");\n                return;\n            }\n            const blob = new Blob(&#91;text], { type: 'text\/plain;charset=utf-8' });\n            const url = URL.createObjectURL(blob);\n            const a = document.createElement('a');\n            a.href = url;\n            a.download = 'prompter-metni.txt';\n            document.body.appendChild(a);\n            a.click();\n            document.body.removeChild(a);\n            URL.revokeObjectURL(url);\n        }\n\n        \/\/ --- PROMPTER KONTROL \u0130\u015eLEMLER\u0130 ---\n        function startPrompter() {\n            const text = textInput.value;\n            if (!text.trim()) {\n                alert(\"L\u00fctfen \u00f6nce bir metin girin veya haf\u0131zadan a\u00e7\u0131n!\");\n                return;\n            }\n            \n            document.getElementById('editor-screen').style.display = 'none';\n            prompterScreen.style.display = 'block';\n            textContainer.innerText = text;\n            \n            scrollPosition = window.innerHeight * 0.7;\n            textContainer.style.top = scrollPosition + 'px';\n        }\n\n        function goToEditor() {\n            if(isPlaying) togglePlay(); \n            document.getElementById('editor-screen').style.display = 'flex';\n            prompterScreen.style.display = 'none';\n        }\n\n        function scrollText() {\n            if (isPlaying) {\n                scrollPosition -= speed;\n                textContainer.style.top = scrollPosition + 'px';\n                animationFrameId = requestAnimationFrame(scrollText);\n            }\n        }\n\n        function togglePlay() {\n            const playBtn = document.getElementById('play-btn');\n            isPlaying = !isPlaying;\n            \n            if (isPlaying) {\n                playBtn.innerText = \"Stop\";\n                playBtn.classList.add(\"playing\");\n                scrollText();\n            } else {\n                playBtn.innerText = \"Start\";\n                playBtn.classList.remove(\"playing\");\n                cancelAnimationFrame(animationFrameId);\n            }\n        }\n\n        function manualScroll(amount) {\n            if (isPlaying) {\n                togglePlay();\n            }\n            scrollPosition += amount;\n            textContainer.style.top = scrollPosition + 'px';\n        }\n\n        function changeSpeed(amount) {\n            speed += amount;\n            if (speed &lt; 0.5) speed = 0.5;\n            if (speed > 10) speed = 10;\n            \n            const playBtn = document.getElementById('play-btn');\n            let oldText = playBtn.innerText;\n            playBtn.innerText = \"H\u0131z: \" + speed.toFixed(1);\n            setTimeout(() => { playBtn.innerText = oldText; }, 1000);\n        }\n\n        function changeFont(amount) {\n            fontSize += amount;\n            if (fontSize &lt; 30) fontSize = 30;\n            if (fontSize > 150) fontSize = 150;\n            textContainer.style.fontSize = fontSize + 'px';\n        }\n\n        function toggleMirror() {\n            textContainer.classList.toggle('mirrored');\n        }\n\n        function toggleFullscreen() {\n            if (!document.fullscreenElement) {\n                document.documentElement.requestFullscreen().then(() => {\n                    fullscreenBtn.innerText = \"\ud83d\uddd7 \u00c7\u0131k\u0131\u015f\";\n                }).catch(err => {\n                    alert(`Tam ekrana ge\u00e7ilemedi: ${err.message}`);\n                });\n            } else {\n                document.exitFullscreen().then(() => {\n                    fullscreenBtn.innerText = \"\u26f6 Tam Ekran\";\n                });\n            }\n        }\n\n        document.addEventListener('fullscreenchange', () => {\n            if (!document.fullscreenElement) {\n                fullscreenBtn.innerText = \"\u26f6 Tam Ekran\";\n            } else {\n                fullscreenBtn.innerText = \"\ud83d\uddd7 \u00c7\u0131k\u0131\u015f\";\n            }\n        });\n    &lt;\/script>\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-395","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.nartugan.com.tr\/index.php\/wp-json\/wp\/v2\/pages\/395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nartugan.com.tr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.nartugan.com.tr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.nartugan.com.tr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nartugan.com.tr\/index.php\/wp-json\/wp\/v2\/comments?post=395"}],"version-history":[{"count":2,"href":"https:\/\/www.nartugan.com.tr\/index.php\/wp-json\/wp\/v2\/pages\/395\/revisions"}],"predecessor-version":[{"id":398,"href":"https:\/\/www.nartugan.com.tr\/index.php\/wp-json\/wp\/v2\/pages\/395\/revisions\/398"}],"wp:attachment":[{"href":"https:\/\/www.nartugan.com.tr\/index.php\/wp-json\/wp\/v2\/media?parent=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}