PageSourceSearch

https://www.mycookrecetas.com/wp-content/cache/min/1/wp-content/pl…/vendor/fSelect/fSelect.js?ver=1790464827

js mycookrecetas.com collected 2026-09-29 06:55:03 UTC 8,715 bytes, 45 lines download raw bytes

1window.fSelect=(()=>{var build={};class fSelect{constructor(selector,options){let that=this;var defaults={placeholder:'Select some options',numDisplayed:3,overflowText:'{n} selected',searchText:'Search',noResultsText:'No results found',showSearch:!0,optionFormatter:!1};that.settings=Object.assign({},defaults,options);build={output:'',optgroup:0,idx:0};if('string'===typeof selector){var nodes=Array.from(document.querySelectorAll(selector))}else if(selector instanceof Node){var nodes=[selector]}else if(Array.isArray(selector)){var nodes=selector}else{var nodes=[]}
2if('undefined'===typeof window.fSelectInit){window.fSelectInit={searchCache:'',lastChoice:null,lastFocus:null,activeEl:null};that.bindEvents()}
3nodes.forEach((input)=>{if(typeof input.fselect==='object'){input.fselect.destroy()}
4that.settings.multiple=input.matches('[multiple]');input.fselect=that;that.input=input;that.create()})}
5create(){var that=this;var options=that.buildOptions();var label=that.getDropdownLabel();var mode=(that.settings.multiple)?'multiple':'single';var searchClass=(that.settings.showSearch)?'':' fs-hidden';var noResultsClass=(build.idx<2)?'':' fs-hidden';var html=`
6            <div class="fs-wrap ${mode}" tabindex="0">
7                <div class="fs-label-wrap">
8                    <div class="fs-label">${label}</div>
9                    <span class="fs-arrow"></span>
10                </div>
11                <div class="fs-dropdown fs-hidden">
12                    <div class="fs-search${searchClass}">
13                        <input type="text" placeholder="${that.settings.searchText}" />
14                    </div>
15                    <div class="fs-no-results${noResultsClass}">${that.settings.noResultsText}</div>
16                    <div class="fs-options">${options}</div>
17                </div>
18            </div>
19            `;var tpl=document.createElement('template');tpl.innerHTML=html;
19var wrap=tpl.content.querySelector('.fs-wrap');that.input.parentNode.insertBefore(wrap,that.input.nextSibling);that.input.classList.add('fs-hidden');that.input._rel=wrap;wrap._rel=that.input}
20destroy(){this.input._rel.remove();this.input.classList.remove('fs-hidden');delete this.input._rel}
21reload(){this.destroy();this.create()}
22open(){var wrap=this.input._rel;wrap.classList.add('fs-open');wrap.querySelector('.fs-dropdown').classList.remove('fs-hidden');if(!window.matchMedia("(pointer: coarse)").matches){wrap.querySelector('.fs-search input').focus()}
23window.fSelectInit.searchCache=wrap.querySelector('.fs-search input')
24window.fSelectInit.lastChoice=this.getSelectedOptions('value');window.fSelectInit.activeEl=wrap;this.trigger('fs:opened',wrap)}
25close(){this.input._rel.classList.remove('fs-open');this.input._rel.querySelector('.fs-dropdown').classList.add('fs-hidden');window.fSelectInit.searchCache='';window.fSelectInit.lastChoice=null;window.fSelectInit.lastFocus=null;window.fSelectInit.activeEl=null;this.trigger('fs:closed',this.input._rel)}
26buildOptions(parent){var that=this;var parent=parent||that.input;Array.from(parent.children).forEach((node)=>{if('optgroup'===node.nodeName.toLowerCase()){var opt=`<div class="fs-optgroup-label" data-group="${build.optgroup}">${node.label}</div>`;build.output+=opt;that.buildOptions(node);build.optgroup++}else{var val=node.value;if(0===build.idx&&''===val&&that.settings.multiple){build.idx++;return}
27var classes=['fs-option','g'+build.optgroup];node.className.split(' ').forEach((className)=>{if(''!==className){classes.push(className)}});if(node.matches('[disabled]'))classes.push('disabled');if(node.matches('[selected]'))classes.push('selected');classes=classes.join(' ');if('function'===typeof that.settings.optionFormatter){node.label=that.settings.optionFormatter(node.label,node)}
28var opt=`<div class="${classes}" data-value="${val}" data-idx="${build.idx}" tabindex="-1"><span class="fs-checkbox"><i></i></span><div class="fs-option-label">${node.label}</div></div>`;build.output+=opt;build.idx++}});return build.output}
29getSelectedOptions(field,context){var context=context||this.input;return Array.from(context.selectedOptions).map((opt)=>{return(field)?opt[field]:opt})}
30getAdjacentSibling(which){var that=this;var which=which||'next';var sibling=window.fSelectInit.lastFocus;var selector='.fs-option:not(.fs-hidden):not(.disabled)';if(sibling){sibling=sibling[which+'ElementSibling'];while(sibling){if(sibling.matches(selector))break;sibling=sibling[which+'ElementSibling']}
31return sibling}else if('next'==which){sibling=that.input._rel.querySelector(selector)}
32return sibling}
33getDropdownLabel(){var that=this;var labelText=that.getSelectedOptions('text');if(labelText.length<1){labelText=that.settings.placeholder}else if(labelText.length>that.settings.numDisplayed){labelText=that.settings.overflowText.replace('{n}',labelText.length)}else{labelText=labelText.join(', ')}
34return labelText}
35debounce(func,wait){var timeout;return(...args)=>{var boundFunc=func.bind(this,...args);clearTimeout(timeout);timeout=setTimeout(boundFunc,wait)}}
36trigger(eventName,...args){document.dispatchEvent(new CustomEvent(eventName,{detail:[...args]}))}
37on(eventName,elementSelector,handler){document.addEventListener(eventName,function(e){for(var target=e.target;target&&target!=this;target=target.parentNode){if(target.matches(elementSelector)){handler.call(target,e);break}}},!1)}
38bindEvents(){var that=this;var optionSelector='.fs-option:not(.fs-hidden):not(.disabled)';var unaccented=(str)=>str.normalize('NFD').replace(/[\u0300-\u036f]/g,'');that.on('keyup','.fs-search input',that.debounce(function(e){var wrap=e.target.closest('.fs-wrap');var options=wrap._rel.options;var matchOperators=/[|\\{}()[\]^$+*?.]/g;var keywords=e.target.value.replace(matchOperators,'\\$&');keywords=unaccented(keywords);if(0!==keywords.indexOf(window.fSelectInit.searchCache)){wrap.querySelectorAll('.fs-option, .fs-optgroup-label').forEach((node)=>node.classList.remove('fs-hidden'))}
39window.fSelectInit.searchCache=keywords;for(var i=0;i<options.length;i++){if(''===options[i].value)continue;var needle=new RegExp(keywords,'gi');var haystack=unaccented(options[i].text);
39if(null===haystack.match(needle)){wrap.querySelector('.fs-option[data-idx="'+i+'"]').classList.add('fs-hidden')}}
40wrap.querySelectorAll('.fs-optgroup-label').forEach((node)=>{var group=node.getAttribute('data-group');var container=node.closest('.fs-options');var count=container.querySelectorAll('.fs-option.g'+group+':not(.fs-hidden)').length;if(count<1){node.classList.add('fs-hidden')}});if(wrap.querySelectorAll('.fs-option:not(.fs-hidden)').length){wrap.querySelector('.fs-no-results').classList.add('fs-hidden')}else{wrap.querySelector('.fs-no-results').classList.remove('fs-hidden')}},100));that.on('click',optionSelector,function(e){var wrap=this.closest('.fs-wrap');var value=this.getAttribute('data-value');var input=wrap._rel;var isMultiple=wrap.classList.contains('multiple');if(!isMultiple){input.value=value;wrap.querySelectorAll('.fs-option.selected').forEach((node)=>node.classList.remove('selected'))}else{var idx=parseInt(this.getAttribute('data-idx'));input.options[idx].selected=!this.classList.contains('selected')}
41this.classList.toggle('selected');var label=input.fselect.getDropdownLabel();
41wrap.querySelector('.fs-label').innerHTML=label;input.dispatchEvent(new Event('change',{bubbles:!0}));input.fselect.trigger('fs:changed',wrap);if(!isMultiple){input.fselect.close()}
42e.stopImmediatePropagation()});that.on('keydown','*',function(e){var wrap=this.closest('.fs-wrap');if(!wrap)return;if(-1<[38,40,27].indexOf(e.which)){e.preventDefault()}
43if(32==e.which||13==e.which){if(e.target.closest('.fs-search')){}else if(e.target.matches(optionSelector)){e.target.click();e.preventDefault()}else{wrap.querySelector('.fs-label').click();e.preventDefault()}}else if(38==e.which){var sibling=wrap._rel.fselect.getAdjacentSibling('previous');window.fSelectInit.lastFocus=sibling;if(sibling){sibling.focus()}else{wrap.querySelector('.fs-search input').focus()}}else if(40==e.which){var sibling=wrap._rel.fselect.getAdjacentSibling('next');if(sibling){sibling.focus();window.fSelectInit.lastFocus=sibling}}else if(9==e.which||27==e.which){wrap._rel.fselect.close()}});that.on('click','*',function(e){var wrap=this.closest('.fs-wrap');var lastActive=window.fSelectInit.activeEl;if(wrap){var labelWrap=this.closest('.fs-label-wrap');if(labelWrap){if(lastActive){lastActive._rel.fselect.close()}
44if(wrap!==lastActive){wrap._rel.fselect.open()}}}else{if(lastActive){lastActive._rel.fselect.close()}}})}}
45var $=(selector,options)=>new fSelect(selector,options);return $})();if('undefined'!==typeof fUtil){fUtil.fn.fSelect=function(opts){this.each(function(){fSelect(this,opts)});return this}}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.