Mercurial Hosting > lang
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 0:9845dcb9f5fc | 1:1c87f785eb42 |
|---|---|
| 1 'use strict'; | |
| 2 | |
| 3 function ajax(url,postData) { | |
| 4 let request = new XMLHttpRequest(); | |
| 5 let method = postData ? "POST" : "GET"; | |
| 6 request.open( method, url ); | |
| 7 if( typeof(postData)==='string' ) | |
| 8 request.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" ); | |
| 9 request.onload = function() { | |
| 10 if( request.status !== 200 ) { | |
| 11 let err = 'sr_ajax failed: ' + request.status; | |
| 12 if( request.responseText ) { | |
| 13 err += '\n' + request.responseText; | |
| 14 document.write('<pre>'+request.responseText+'</pre>'); | |
| 15 } | |
| 16 err += '\npage = ' + window.location; | |
| 17 ajax( '/error_log.js', 'err='+encodeURIComponent(err) ); | |
| 18 return; | |
| 19 } | |
| 20 try { | |
| 21 //console.log(request.responseText); | |
| 22 eval( request.responseText ); | |
| 23 } catch(e) { | |
| 24 window.sr_err = '\najax-url = ' + url; | |
| 25 //window.sr_err += '\n'+('ajax-response =\n' + request.responseText).trim(); | |
| 26 throw e; | |
| 27 } | |
| 28 }; | |
| 29 request.send(postData); | |
| 30 } | |
| 31 | |
| 32 function showWaitingAiIcon() { | |
| 33 document.querySelector('[waiting-ai-icon]').style.display = 'block'; | |
| 34 } | |
| 35 | |
| 36 const isMobile = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; | |
| 37 | |
| 38 function textareaKey(aiKey,event) { | |
| 39 if( event.keyCode===13 && !event.shiftKey && !event.ctrlKey && !isMobile ) { | |
| 40 event.preventDefault(); | |
| 41 askAi(aiKey); | |
| 42 } | |
| 43 } | |
| 44 | |
| 45 function fixTextarea(event) { | |
| 46 let textarea = event.target; | |
| 47 textarea.style.height = 'initial'; | |
| 48 textarea.style.height = (textarea.scrollHeight+2) + 'px'; | |
| 49 textarea.scrollIntoViewIfNeeded(false); | |
| 50 } | |
| 51 | |
| 52 function askAi(aiKey) { | |
| 53 let aiDiv = document.querySelector(`[ai_container="${aiKey}"]`); | |
| 54 let input = aiDiv.querySelector('textarea'); | |
| 55 let url = `ai_ask.js?key=${aiKey}&input=${encodeURIComponent(input.value)}`; | |
| 56 ajax(url); | |
| 57 input.value = ''; | |
| 58 showWaitingAiIcon(); | |
| 59 } |
