Mercurial Hosting > lang
changeset 42:1d9d9786d76f
textareas
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 11 Aug 2025 08:27:22 +0900 |
parents | 2a4c83ce3deb |
children | 5ecfdf43f72d |
files | src/chat.css src/chat.html.luan src/chat.js src/edit_course.html.luan src/site.js |
diffstat | 5 files changed, 20 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
diff -r 2a4c83ce3deb -r 1d9d9786d76f src/chat.css --- a/src/chat.css Mon Aug 11 07:58:32 2025 +0900 +++ b/src/chat.css Mon Aug 11 08:27:22 2025 +0900 @@ -22,7 +22,6 @@ display: block; width: 100%; margin-top: 36px; - resize: none; } [ai_container] div[buttons] { display: flex;
diff -r 2a4c83ce3deb -r 1d9d9786d76f src/chat.html.luan --- a/src/chat.html.luan Mon Aug 11 07:58:32 2025 +0900 +++ b/src/chat.html.luan Mon Aug 11 08:27:22 2025 +0900 @@ -58,7 +58,7 @@ </div> <% if is_owner then %> <div ask> - <textarea autofocus oninput="fixTextarea(event.target)" onkeydown="textareaKey(event)"><%= html_encode(init_text) %></textarea> + <textarea autofocus oninput="fixChatTextarea(event.target)" onkeydown="textareaKey(event)"><%= html_encode(init_text) %></textarea> <div buttons> <audio controls preload=none></audio> <button record onclick="toggleRecording()">Record</button>
diff -r 2a4c83ce3deb -r 1d9d9786d76f src/chat.js --- a/src/chat.js Mon Aug 11 07:58:32 2025 +0900 +++ b/src/chat.js Mon Aug 11 08:27:22 2025 +0900 @@ -95,9 +95,8 @@ let audio; -function fixTextarea(textarea) { - textarea.style.height = 'initial'; - textarea.style.height = (textarea.scrollHeight+2) + 'px'; +function fixChatTextarea(textarea) { + fixTextarea(textarea); textarea.parentNode.scrollIntoViewIfNeeded(false); if( !audio ) audio = document.querySelector('div[buttons] audio'); @@ -109,7 +108,7 @@ let url = `ai_ask.js?chat=${chat.id}&input=${encodeURIComponent(input.value)}`; ajax(url); input.value = ''; - fixTextarea(input); + fixChatTextarea(input); showWaitingAiIcon(); } @@ -117,7 +116,7 @@ function setText(text) { let textarea = document.querySelector('textarea'); textarea.value = text; - fixTextarea(textarea); + fixChatTextarea(textarea); } let recorder = null;
diff -r 2a4c83ce3deb -r 1d9d9786d76f src/edit_course.html.luan --- a/src/edit_course.html.luan Mon Aug 11 07:58:32 2025 +0900 +++ b/src/edit_course.html.luan Mon Aug 11 08:27:22 2025 +0900 @@ -67,10 +67,10 @@ <input type=text required name=name value="<%=html_encode(course.name)%>"> <h4>AI system prompt</h4> - <textarea required name=ai_system_prompt rows=10><%=html_encode(course.ai_system_prompt)%></textarea> + <textarea required name=ai_system_prompt oninput="fixTextarea(event.target)"><%=html_encode(course.ai_system_prompt)%></textarea> <h4>AI first message (optional)</h4> - <textarea name=ai_first_message><%=html_encode(course.ai_first_message or "")%></textarea> + <textarea name=ai_first_message oninput="fixTextarea(event.target)"><%=html_encode(course.ai_first_message or "")%></textarea> <input type=submit> @@ -78,6 +78,13 @@ <p>Text areas take <a href="/tools/markdown.html">Markdown</a>. AI generally recognizes Markdown.</p> </form> + <script> + 'use strict'; + let textareas = document.querySelectorAll('textarea'); + for( let textarea of textareas ) { + fixTextarea(textarea); + } + </script> </body> </html> <%
diff -r 2a4c83ce3deb -r 1d9d9786d76f src/site.js --- a/src/site.js Mon Aug 11 07:58:32 2025 +0900 +++ b/src/site.js Mon Aug 11 08:27:22 2025 +0900 @@ -119,6 +119,12 @@ window.scrollTo( 0, lastY ); } +function fixTextarea(textarea) { + textarea.style.height = 'initial'; + textarea.style.height = (textarea.scrollHeight+2) + 'px'; + textarea.scrollIntoViewIfNeeded(false); +} + // requires markdown-it