342e188223ed7869383cf696984501d38a0ff0d1
max
  Fri Oct 21 02:04:47 2022 -0700
adding a more generic way to add javascript events to DOM elements, no redmine

diff --git src/lib/cheapcgi.c src/lib/cheapcgi.c
index 0d9acab..e4f43f4 100644
--- src/lib/cheapcgi.c
+++ src/lib/cheapcgi.c
@@ -193,30 +193,38 @@
 }
 
 void jsAddEventForId(char *eventName, char *idText, char *jsText)
 {
 checkValidEvent(eventName);
 jsInlineF("document.getElementById('%s').addEventListener('%s', %s);\n", idText, eventName, jsText);
 }
 
 void jsOnEventById(char *eventName, char *idText, char *jsText)
 /* Add js mapping for inline event */
 {
 checkValidEvent(eventName);
 jsInlineF("document.getElementById('%s').on%s = function(event) {if (!event) {event=window.event}; %s};\n", idText, eventName, jsText);
 }
 
+void jsOnEventBySelector(char *eventName, char *query, char *jsText)
+/* Add js mapping for inline event given a query selector, e.g. '.className' */
+{
+checkValidEvent(eventName);
+jsInlineF("document.querySelector('%s').addEventListener( '%s', function(event) { %s };\n", eventName, query, jsText);
+}
+
+
 void jsOnEventByIdF(char *eventName, char *idText, char *format, ...)
 /* Add js mapping for inline event with printf formatting */
 {
 checkValidEvent(eventName);
 jsInlineF("document.getElementById('%s').on%s = function(event) {if (!event) {event=window.event}; ", idText, eventName);
 va_list args;
 va_start(args, format);
 dyStringVaPrintf(jsInlineLines, format, args);
 va_end(args);
 jsInlineF("};\n");
 }
 
 
 //============ END of javascript inline-separation routines ===============