diff src/site.js @ 2:78708fa556a0

add login
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 08 Jul 2025 15:55:34 -0600
parents 1c87f785eb42
children b1adec083e44
line wrap: on
line diff
--- a/src/site.js	Tue Jul 08 14:18:25 2025 -0600
+++ b/src/site.js	Tue Jul 08 15:55:34 2025 -0600
@@ -29,6 +29,47 @@
 	request.send(postData);
 }
 
+window.onerror = function(msg, url, line, col, error) {
+	if( !url )
+		return;
+	let err = msg;
+	err += '\nurl = ' + url;
+	if( url != window.location )
+		err += '\npage = ' + window.location;
+	err += '\nline = '+line;
+	if( col )
+		err += '\ncolumn = ' + col;
+	if( error ) {
+		if( error.stack )
+			err += '\nstack = ' + error.stack;
+		if( error.cause )
+			err += '\ncause= ' + error.cause;
+		if( error.fileName )
+			err += '\nfileName= ' + error.fileName;
+	}
+	if( window.err ) {
+		err += window.err;
+		window.err = null;
+	}
+	ajax( '/error_log.js', 'err='+encodeURIComponent(err) );
+};
+
+function ajaxForm(url,form) {
+	let post = '';
+	for( let i=0; i<form.length; i++ ) {
+		let input = form[i];
+		let name = input.name;
+		if( name === '' )
+			continue;
+		let type = input.type;
+		if( (type==='radio' || type==='checkbox') && !input.checked )
+			continue;
+		post += name + '=' + encodeURIComponent(input.value) + '&';
+	}
+	ajax(url,post,{form:form});
+}
+
+
 function showWaitingAiIcon() {
 	document.querySelector('[waiting-ai-icon]').style.display = 'block';
 }