Mercurial Hosting > lang
diff src/site.js @ 1:1c87f785eb42
start chat
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 08 Jul 2025 14:18:25 -0600 |
parents | |
children | 78708fa556a0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/site.js Tue Jul 08 14:18:25 2025 -0600 @@ -0,0 +1,59 @@ +'use strict'; + +function ajax(url,postData) { + let request = new XMLHttpRequest(); + let method = postData ? "POST" : "GET"; + request.open( method, url ); + if( typeof(postData)==='string' ) + request.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" ); + request.onload = function() { + if( request.status !== 200 ) { + let err = 'sr_ajax failed: ' + request.status; + if( request.responseText ) { + err += '\n' + request.responseText; + document.write('<pre>'+request.responseText+'</pre>'); + } + err += '\npage = ' + window.location; + ajax( '/error_log.js', 'err='+encodeURIComponent(err) ); + return; + } + try { + //console.log(request.responseText); + eval( request.responseText ); + } catch(e) { + window.sr_err = '\najax-url = ' + url; + //window.sr_err += '\n'+('ajax-response =\n' + request.responseText).trim(); + throw e; + } + }; + request.send(postData); +} + +function showWaitingAiIcon() { + document.querySelector('[waiting-ai-icon]').style.display = 'block'; +} + +const isMobile = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; + +function textareaKey(aiKey,event) { + if( event.keyCode===13 && !event.shiftKey && !event.ctrlKey && !isMobile ) { + event.preventDefault(); + askAi(aiKey); + } +} + +function fixTextarea(event) { + let textarea = event.target; + textarea.style.height = 'initial'; + textarea.style.height = (textarea.scrollHeight+2) + 'px'; + textarea.scrollIntoViewIfNeeded(false); +} + +function askAi(aiKey) { + let aiDiv = document.querySelector(`[ai_container="${aiKey}"]`); + let input = aiDiv.querySelector('textarea'); + let url = `ai_ask.js?key=${aiKey}&input=${encodeURIComponent(input.value)}`; + ajax(url); + input.value = ''; + showWaitingAiIcon(); +}