function CATC(asGlobals) { self = this; this.consts = asGlobals.consts; this.consts.hash_sep = '-'; this.consts.default_page = 'workshops'; this.consts.title = 'CATC'; this.consts.root = location.protocol+'//'+location.host+location.pathname; this.init = function() { //Variables & constants from php self.vars('tmp', 'object'); self.vars('page', 'string'); self.vars('template', 'boolean'); self.updateVars(asGlobals.vars); //page elem self.elem = {}; self.elem.$Container = $('#container'); //on window resize $(window).resize(self.onResize).resize(); //Hash management self.resetTmpFunctions(); $(window) .bind('hashchange', self.onHashChange) .trigger('hashchange'); }; this.updateVars = function(asVars) { $.each(asVars, function(sKey, oValue){self.vars(sKey, oValue)}); }; /* Scrollbar */ /*this.scrollbar = function(sPos) { var $Cv = $('#main'); if(!self.vars('mobile')) { if(typeof self.vars('scrollbar') === 'undefined') { $Cv.tinyscrollbar({axis:'y', thumbSizeMin:'20', thumbSize:'20'}); self.vars('scrollbar', $Cv.data("plugin_tinyscrollbar")); } else self.vars('scrollbar').update(sPos); } else $Cv.unbind("tinyscrollbar"); }*/ /* Menu */ this.initMenu = function() { //Search - Input Autocomplete self.refreshDefs(); self.elem.$Menu.find('#search') .autocomplete({ autoFocus: true, delay: 0, minLength: 2, classes:{'ui-autocomplete':'list-group'}, source: function(oRequest, fResponse) { var sTerm = removeDiacritics(oRequest.term); var rMatcher = new RegExp($.ui.autocomplete.escapeRegex(sTerm), 'i'); var asResults = []; $.each(self.vars('lov-defs'), function(iDefId, oItem) { var oTitleMatch = oItem.safe_title.match(rMatcher); var oLabelMatch = oItem.safe_label.match(rMatcher); var oMatch = {}; oItem.field = ''; if(oTitleMatch) { oMatch = oTitleMatch; oItem.field = 'title'; } else if(oLabelMatch) { oMatch = oLabelMatch; oItem.field = 'label'; } if(oItem.field != '') { oItem.index = parseInt(oMatch.index, 10); oItem.size = oMatch[0].length; asResults.push(oItem); } oItem.id = iDefId; }); self.elem.$Menu.find('#add_def') .toggleClass('btn-outline-primary', (asResults.length > 0)) .toggleClass('btn-primary', (asResults.length == 0)); fResponse(asResults); }, select: function(event, ui) { return false; //Do not update input value } }) .data("ui-autocomplete")._renderItem = function(ul, item) { var fGetHighLightedContent = function(sContent, iIndex, iSize){ return $('') .append(sContent.substr(0, iIndex)) .append($('', {'class':'highlight text-secondary'}).text(sContent.substr(iIndex, iSize))) .append(sContent.substr(iIndex + iSize)); }; var $Title = $('
', {'class':'title text-break text-capitalize font-weight-bold text-primary'}); var $Desc = $('
', {'class':'desc text-break'}); if(item.field=='title') { $Title.append(fGetHighLightedContent(item.title, item.index, item.size)); $Desc.text(item.label); } else { $Title.text(item.title); $Desc.append(fGetHighLightedContent(item.label, item.index, item.size)); } return $('
  • ', {'class':'list-group-item shadow'}) .css('width', $('#search').outerWidth()) .data("item.autocomplete", item) .append($('
    ', {'class':'row'}) .append($('
    ', {'class':'col'}) .append($Title) .append($Desc) ) .append($('
    ', {'class':'col-auto d-flex align-items-center'}).append($('