Seditio Source
Root |
./othercms/xenForo 2.2.8/js/xf/filter.min.js
'use strict';!function(e,q,r,t){XF.Filter=XF.Element.newHandler({options:{inputEl:"| .js-filterInput",prefixEl:"| .js-filterPrefix",clearEl:"| .js-filterClear",countEl:".js-filterCount",totalsEl:".js-displayTotals",searchTarget:null,searchRow:null,searchRowGroup:null,searchLimit:"",key:"",ajax:null,noResultsFormat:'<div class="js-filterNoResults">%s</div>'},storageContainer:"filter",storageCutOff:3600,storageKey:null,$input:null,$prefix:null,$clear:null,$count:null,$displayTotals:null,$search:null,
$noResults:null,$ajaxRows:null,updateTimer:null,xhr:null,xhrFilter:null,init:function(){var a=this.$target;this.options.searchTarget&&(this.$search=XF.findRelativeIf(this.options.searchTarget,a));this.$search&&this.$search.length||(this.$search=a.next());this.$search&&this.$search.length||(this.$search=a.findExtended("< .block | .dataList"));this.$search.is(".dataList")&&!this.options.searchRow&&(this.options.searchRow=".dataList-row:not(.dataList-row--header):not(.dataList-row--subSection):not(.dataList-row--footer)",
this.options.searchRowGroup=".dataList-rowGroup",this.options.searchLimit=".dataList-cell:not(.dataList-cell--action):not(.dataList-cell--noSearch)",this.options.noResultsFormat='<tbody><tr class="js-filterNoResults dataList-row dataList-row--note dataList-row--noHover is-hidden"><td class="dataList-cell" colspan="50">%s</td></tr></tbody>');this.$input=XF.findRelativeIf(this.options.inputEl,a);this.$prefix=XF.findRelativeIf(this.options.prefixEl,a);this.$clear=XF.findRelativeIf(this.options.clearEl,
a);this.$count=XF.findRelativeIf(this.options.countEl,a.closest("form, .block"));this.$displayTotals=XF.findRelativeIf(this.options.totalsEl,a.closest("form",".block"));this.$input.on({keyup:XF.proxy(this,"onKeyUp"),keypress:XF.proxy(this,"onKeyPress"),paste:XF.proxy(this,"onPaste")});this.$prefix.on("change",XF.proxy(this,"onPrefixChange"));this.$clear.on("click",XF.proxy(this,"onClearFilter"));this.storageKey=this.options.key;this.storageKey.length||(a=a.closest("form"),a.length&&(this.storageKey=
a.attr("action")));if(a=this._getStoredValue())this.$input.val(a.filter),this.$prefix.prop("checked",a.prefix);this.$input.val().length&&this.update();this._cleanUpStorage()},onKeyUp:function(a){if(!a.ctrlKey&&!a.metaKey){switch(a.key){case "Tab":case "Enter":case "Shift":case "Control":case "Alt":break;default:this.planUpdate()}"Enter"!=a.key&&this.planUpdate()}},onKeyPress:function(a){"Enter"==a.key&&(a.preventDefault(),this.update())},onPaste:function(a){this.planUpdate()},onPrefixChange:function(a){this.update()},
onClearFilter:function(a){this.$clear.is(".is-disabled")||(this.$input.val(""),this.$prefix.prop("checked",!1),this.update())},planUpdate:function(){this.updateTimer&&clearTimeout(this.updateTimer);this.updateTimer=setTimeout(XF.proxy(this,"update"),250)},update:function(){this.updateTimer&&clearTimeout(this.updateTimer);this.filter(this.$input.val(),this.$prefix.is(":checked")?!0:!1)},_getSearchRows:function(a){a||(a=this.$search);a=a.find(this.options.searchRow);this.$noResults&&(a=a.not(this.$noResults));
return a},filter:function(a,b){this._updateStoredValue(a,b);this._toggleFilterHide(0<a.length);this.options.ajax?this._filterAjax(a,b):(a=this._applyFilter(this._getSearchRows(),a,b),this._toggleNoResults(0==a))},_filterAjax:function(a,b){this.xhr&&(this.xhr.abort(),this.xhr=null);if(a.length){var c={_xfFilter:{text:a,prefix:b?1:0}};this.xhrFilter={text:a,prefix:b};this.xhr=XF.ajax("GET",this.options.ajax,c,XF.proxy(this,"_filterAjaxResponse"))}else this._clearAjaxRows(),a=this._applyFilter(this._getSearchRows(),
a,b),this._toggleNoResults(0==a)},_filterAjaxResponse:function(a){this.xhr=null;this._clearAjaxRows();a=e(e.parseHTML(a.html.content)).find(this.options.searchRow);var b=this.xhrFilter;this._getSearchRows().addClass("is-hidden");this._applyRowGroupLimit();this._toggleNoResults(0==a.length);a.length?(this._appendRows(a),XF.activate(a),this.$ajaxRows=a,this._applyFilter(a,b.text,b.prefix)):XF.layoutChange();this.xhrFilter=null},_applyFilter:function(a,b,c){var d=this.options.searchLimit,f=0,n=this;
if(b.length){var h=new RegExp((c?"^":"")+"("+XF.regexQuote(b)+")","i");var l=new RegExp((c?"^":"")+"("+XF.regexQuote(XF.htmlspecialchars(b))+")","ig")}else l=h=!1;a.each(function(){var g=e(this),k=!1,m=d?g.find(d):g;m.find(".is-match").each(function(){var p=this.parentNode;e(this).replaceWith(this.childNodes);p.normalize()});!h||g.hasClass("js-filterForceShow")?k=!0:m.each(function(){n._searchFilter(this,h,l)&&(k=!0)});k?(g.removeClass("is-hidden"),g.hasClass("js-filterForceShow")||f++):g.addClass("is-hidden")});
this._applyRowGroupLimit(0==b.length);this.updateDisplayTotals(f);XF.layoutChange();return f},_applyRowGroupLimit:function(a){var b=this.options.searchRowGroup,c=this.options.searchRow;b&&this.$search.find(b).each(function(){var d=e(this),f=d.find(c).filter(":not(.is-hidden)");a||f.length?d.removeClass("is-hidden"):d.addClass("is-hidden")})},_searchFilter:function(a,b,c){var d=!1;if(3==a.nodeType)b.test(a.data)&&(d=!0,b=XF.htmlspecialchars(a.data).replace(c,'<span class="is-match">$1</span>'),e(a).replaceWith(e.parseHTML(b)));
else{a=a.childNodes;for(var f=a.length-1;0<=f;f--)this._searchFilter(a[f],b,c)&&(d=!0)}return d},_clearAjaxRows:function(){this.$ajaxRows&&(this.$ajaxRows.remove(),this.$ajaxRows=null)},_toggleFilterHide:function(a){this.$clear.toggleClass("is-disabled",!a);e(".js-filterHide").css("display",a?"none":"")},_toggleNoResults:function(a){a?(this.getNoResultsRow().removeClass("is-hidden"),this.updateDisplayTotals(0)):this.$noResults&&this.$noResults.addClass("is-hidden")},updateDisplayTotals:function(a){this.$count.text(a);
if(this.$displayTotals.length){this.$displayTotals.data("count",a);var b=this.$displayTotals.data("total");this.$displayTotals.text(XF.stringTranslate(1>a?XF.phrases.no_items_to_display:a==b?XF.phrases.showing_all_items:XF.phrases.showing_x_of_y_items,{"{count}":a.toLocaleString(),"{total}":b.toLocaleString()}))}},getNoResultsRow:function(){if(this.$noResults)return this.$noResults;var a=this.options.noResultsFormat.replace("%s",XF.phrase("no_items_matched_your_filter"));a=this.$noResults=e(e.parseHTML(a));
this._appendRows(a);a.is(".js-filterNoResults")?this.$noResults=a:this.$noResults=a.find(".js-filterNoResults");return this.$noResults},_appendRows:function(a){var b=this.$search.find(this.options.searchRow).last(),c=null,d=this.options.searchRowGroup;b.closest(this.options.searchRowGroup+", tbody");d&&(c=b.closest(d),c.length||(c=null));!c&&b.is("tr")&&(c=b.closest("tbody"),c.length||(c=null));c||(c=b);c.length?a.insertAfter(c):a.appendTo(this.$search)},_getStoredValue:function(){if(!this.storageKey)return null;
var a=this._readFromStorage();if(a[this.storageKey]){a=a[this.storageKey];var b=a.saved||0,c=Math.floor((new Date).getTime()/1E3);if(b+this.storageCutOff>=c)return{filter:a.filter||"",prefix:a.prefix||!1}}return null},_updateStoredValue:function(a,b){if(this.storageKey){var c=this._readFromStorage();a.length?c[this.storageKey]={filter:a,prefix:b?!0:!1,saved:Math.floor((new Date).getTime()/1E3)}:c[this.storageKey]&&delete c[this.storageKey];this._writeToStorage(c)}},_cleanUpStorage:function(){if(this.storageKey){var a=
this._readFromStorage(),b=!1,c=Math.floor((new Date).getTime()/1E3)-this.storageCutOff,d;for(d in a)a.hasOwnProperty(d)&&(a[d].saved||0)<c&&(delete a[d],b=!0);b&&this._writeToStorage(a)}},_readFromStorage:function(){return XF.LocalStorage.getJson(this.storageContainer)},_writeToStorage:function(a){e.isEmptyObject(a)?XF.LocalStorage.remove(this.storageContainer):XF.LocalStorage.setJson(this.storageContainer,a,!0)}});XF.PrefixGrabber=XF.Event.newHandler({eventNameSpace:"XFPrefixGrabberClick",options:{filterElement:"[data-xf-init~=filter]"},
filterHandler:null,init:function(){this.filterHandler=XF.Element.getHandler(e(this.options.filterElement),"filter");if(!this.filterHandler instanceof XF.Filter)return console.warn("PrefixGrabber did not find an element with an XF.Filter handler"),!1},click:function(a){if(this.filterHandler.$prefix.is(":checked")&&(a=this.filterHandler.$input.val(),a.length)){var b=this.$target.attr("href");b=b+(-1==b.indexOf("?")?"?":"&")+"prefix="+a;this.$target.attr("href",b)}}});XF.Element.register("filter","XF.Filter");
XF.Event.register("click","prefix-grabber","XF.PrefixGrabber")}(jQuery,window,document);