From d36eb24c1329e00398beefe43209867edbdd978b Mon Sep 17 00:00:00 2001 From: "Hahn Axel (hahn)" <axel.hahn@iml.unibe.ch> Date: Wed, 29 Jun 2022 17:45:33 +0200 Subject: [PATCH] update js --- public_html/javascript/functions.js | 78 +++++++++++++++-------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/public_html/javascript/functions.js b/public_html/javascript/functions.js index a2b55a0..666f1db 100644 --- a/public_html/javascript/functions.js +++ b/public_html/javascript/functions.js @@ -25,6 +25,7 @@ const OUT_ID_APPS='app-section'; const OUT_ID_TAGS='tag-section'; const ID_TAGINPUT='E_TAGS'; + // callback object after changing a tag filter const FILTER_CALLBACK="oUbdApps.update()"; @@ -34,6 +35,7 @@ const FILTER_CALLBACK="oUbdApps.update()"; var AM_TAGURL=false; var AM_PRETTYURL=false; +var AM_TAGLIST={}; // ---------------------------------------------------------------------- // FUNCTIONS @@ -104,44 +106,29 @@ function _2digits(i){ * callback function of a button with a tagname * @param {string} tagname */ -function tagToggle(tagname){ - var o=document.getElementById(ID_TAGINPUT); - var sLast=o.value; - var s=sLast; - var re = new RegExp(",*"+tagname); - var s2=s.replace(re, ""); - if(s2!==s) { - s=s.replace(re, "") - s=s.replace(/^,/, ""); - } else { - s+=(s ? "," : "" ) + tagname; + function cbTagToggle(bClear=false){ + var sReturn=''; + var sLast=document.getElementById(ID_TAGINPUT).value; + var aCB=document.querySelectorAll('#'+OUT_ID_TAGS+' input[type=checkbox]'); + for(var i=0; i<aCB.length; i++){ + if(aCB[i].checked && bClear==false){ + sReturn+=(sReturn ? ',' : '') + aCB[i].value; + } else { + aCB[i].checked=false; + } } - - if(s!==sLast){ - o.value=s; - // execute update of the app list + if(sLast!==sReturn){ + document.getElementById(ID_TAGINPUT).value=sReturn; eval(FILTER_CALLBACK); } } -/** - * clear all tags - * callback function of the [x] button - */ -function tagClear(){ - var o=document.getElementById(ID_TAGINPUT); - o.value=""; - - // execute update of the app list - eval(FILTER_CALLBACK); -} - /** * called from getTags * @param {object} aData JSON Response * @returns */ -function _getTaglist(aData){ +function _renderTaglist(aData){ var sReturn=''; var sTags=''; if(!aData['tags']){ @@ -149,17 +136,32 @@ function _getTaglist(aData){ } // sReturn+='<code>'+sData+'</code><br>'; - sReturn+='<input id="'+ID_TAGINPUT+'" type="text" size="20" value="'+AM_TAGS+'"' - +' onkeyup="eval(FILTER_CALLBACK)"' - +' onchange="eval(FILTER_CALLBACK)"' - +'>' - +'<button onclick="tagClear();return false;"> ❌ </button><br>' - ; + let _TAGLIST={}; + var sTags=''; for (var s in aData['tags']){ - sTags+=(sTags ? ",": "") + aData['tags'][s]; - sReturn+='<button onclick="tagToggle(\''+aData['tags'][s]+'\'); return false;">'+AM_ICONS['tag'] + ' ' + aData['tags'][s]+'</button>' + var sTag=aData['tags'][s]; + var sId='cb-tag-'+sTag; + var bEnabled=AM_TAGS.indexOf(sTag)>-1; + _TAGLIST[s]=bEnabled; + sReturn+='<input type="checkbox" id="'+sId+'" ' + +(_TAGLIST[s] ? 'checked="checked" ' : '') + +'onchange="cbTagToggle();" ' + +'value="'+aData['tags'][s] + +'">' + +'<label for="'+sId+'" >'+AM_ICONS['tag'] + ' ' + aData['tags'][s]+'</label> ' + ; + sTags+=(_TAGLIST[s] + ? (sTags ? ',' : '' ) + sTag + : '' + ); } + sReturn+='<button onclick="cbTagToggle(true);return false;"> ❌ </button>' + // sReturn+='<input id="'+ID_TAGINPUT+'" type="text" size="20" value="'+AM_TAGS+'"'+'>' + sReturn+='<input id="'+ID_TAGINPUT+'" type="hidden" size="20" value="'+AM_TAGS+'">' + AM_TAGLIST=_TAGLIST; + // cbTagToggle(); + return sReturn; } @@ -277,7 +279,7 @@ var oUbdTag=new ubd( 'domid': OUT_ID_TAGS, 'url': _getUrlForTags(), 'header': { "headers": oHeaders }, - 'renderer': _getTaglist, + 'renderer': _renderTaglist, 'ttl': 0, } ); @@ -295,7 +297,7 @@ var oUbdApps=new ubd( -// fill in initial values +// fill in initial values ... and update based on given ttl oUbdTag.update(); oUbdApps.update(); -- GitLab