slim_select_rails 0.1.1 → 1.2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 638934439413a5f7f580fb2cec6ae438a60f665d8270631454156ca9a73ba4d1
4
- data.tar.gz: 3f9649b92b80f5f63795966bffceae96cb7b35a58ebaad7af3179d5eac78ffbd
3
+ metadata.gz: a633c5a2de59bbb9a95f05ff6d15a23cdf6e812965e812b70068e8c6e05171a5
4
+ data.tar.gz: 25956411a7cc450ebdfc91816b6c778ab874c4261583d9287425c66f3be5d95e
5
5
  SHA512:
6
- metadata.gz: b9e4cf2432b71e1aef4887a84a88ed47aef0c55e3f59965fe924803905f14197769c4a1c78b34e0b85e2e400854dc10e8673c99d6b3f85c62c0e15692cb8db1c
7
- data.tar.gz: 452de5daffd4e816c176d9bbdca0dbeee7a3e1d14f5be681fde4a2ef02e1a844ba3d65188425a89ebbf147a8f533d98bc5268192edefd1486588ca9b6ee14869
6
+ metadata.gz: 0ba764455e39fbd4c49885ce9dbfc8a2d7f5d995b4856702306110ab7916f64aa5a4fbfa628e939efc5701bdb8a6fba08489bf6d7a414abdc38d518f147ec510
7
+ data.tar.gz: 1b4c06aab6e19eef1f2f04b4ffa635af93de22fc7344a566c16c83afd6024a50098917b64d08a47cc3876bc1839f36fdd66b2a23c0b53a25980ab5e59a2213b5
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SlimSelectRails
4
- VERSION = "0.1.1"
4
+ VERSION = "1.2.10.0"
5
5
  end
File without changes
@@ -1,5 +1,2 @@
1
- // slim-select@2.9.2 downloaded from https://ga.jspm.io/npm:slim-select@2.9.2/dist/slimselect.js
2
-
3
- var e={};(function(t,s){e=s()})(0,(function(){class CssClasses{constructor(e){e||(e={});this.main=e.main||"ss-main";this.placeholder=e.placeholder||"ss-placeholder";this.values=e.values||"ss-values";this.single=e.single||"ss-single";this.max=e.max||"ss-max";this.value=e.value||"ss-value";this.valueText=e.valueText||"ss-value-text";this.valueDelete=e.valueDelete||"ss-value-delete";this.valueOut=e.valueOut||"ss-value-out";this.deselect=e.deselect||"ss-deselect";this.deselectPath=e.deselectPath||"M10,10 L90,90 M10,90 L90,10";this.arrow=e.arrow||"ss-arrow";this.arrowClose=e.arrowClose||"M10,30 L50,70 L90,30";this.arrowOpen=e.arrowOpen||"M10,70 L50,30 L90,70";this.content=e.content||"ss-content";this.openAbove=e.openAbove||"ss-open-above";this.openBelow=e.openBelow||"ss-open-below";this.search=e.search||"ss-search";this.searchHighlighter=e.searchHighlighter||"ss-search-highlight";this.searching=e.searching||"ss-searching";this.addable=e.addable||"ss-addable";this.addablePath=e.addablePath||"M50,10 L50,90 M10,50 L90,50";this.list=e.list||"ss-list";this.optgroup=e.optgroup||"ss-optgroup";this.optgroupLabel=e.optgroupLabel||"ss-optgroup-label";this.optgroupLabelText=e.optgroupLabelText||"ss-optgroup-label-text";this.optgroupActions=e.optgroupActions||"ss-optgroup-actions";this.optgroupSelectAll=e.optgroupSelectAll||"ss-selectall";this.optgroupSelectAllBox=e.optgroupSelectAllBox||"M60,10 L10,10 L10,90 L90,90 L90,50";this.optgroupSelectAllCheck=e.optgroupSelectAllCheck||"M30,45 L50,70 L90,10";this.optgroupClosable=e.optgroupClosable||"ss-closable";this.option=e.option||"ss-option";this.optionDelete=e.optionDelete||"M10,10 L90,90 M10,90 L90,10";this.highlighted=e.highlighted||"ss-highlighted";this.open=e.open||"ss-open";this.close=e.close||"ss-close";this.selected=e.selected||"ss-selected";this.error=e.error||"ss-error";this.disabled=e.disabled||"ss-disabled";this.hide=e.hide||"ss-hide"}}function generateID(){return Math.random().toString(36).substring(2,10)}function hasClassInTree(e,t){function hasClass(e,s){return s&&e&&e.classList&&e.classList.contains(s)||s&&e&&e.dataset&&e.dataset.id&&e.dataset.id===t?e:null}function parentByClass(e,t){return e&&e!==document?hasClass(e,t)?e:parentByClass(e.parentNode,t):null}return hasClass(e,t)||parentByClass(e,t)}function debounce(e,t=50,s=false){let i;return function(...n){const a=self;const later=()=>{i=null;s||e.apply(a,n)};const l=s&&!i;clearTimeout(i);i=setTimeout(later,t);l&&e.apply(a,n)}}function isEqual(e,t){return JSON.stringify(e)===JSON.stringify(t)}function kebabCase(e){const t=e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(e=>"-"+e.toLowerCase()));return e[0]===e[0].toUpperCase()?t.substring(1):t}class Optgroup{constructor(e){this.id=e.id&&e.id!==""?e.id:generateID();this.label=e.label||"";this.selectAll=e.selectAll!==void 0&&e.selectAll;this.selectAllText=e.selectAllText||"Select All";this.closable=e.closable||"off";this.options=[];if(e.options)for(const t of e.options)this.options.push(new Option(t))}}class Option{constructor(e){this.id=e.id&&e.id!==""?e.id:generateID();this.value=e.value===void 0?e.text:e.value;this.text=e.text||"";this.html=e.html||"";this.selected=e.selected!==void 0&&e.selected;this.display=e.display===void 0||e.display;this.disabled=e.disabled!==void 0&&e.disabled;this.mandatory=e.mandatory!==void 0&&e.mandatory;this.placeholder=e.placeholder!==void 0&&e.placeholder;this.class=e.class||"";this.style=e.style||"";this.data=e.data||{}}}class Store{constructor(e,t){this.selectType="single";this.data=[];this.selectedOrder=[];this.selectType=e;this.setData(t)}validateDataArray(e){if(!Array.isArray(e))return new Error("Data must be an array");for(let t of e)if(t instanceof Optgroup||"label"in t){if(!("label"in t))return new Error("Optgroup must have a label");if("options"in t&&t.options)for(let e of t.options){const t=this.validateOption(e);if(t)return t}}else{if(!(t instanceof Option||"text"in t))return new Error("Data object must be a valid optgroup or option");{const e=this.validateOption(t);if(e)return e}}return null}validateOption(e){return"text"in e?null:new Error("Option must have a text")}partialToFullData(e){let t=[];e.forEach((e=>{if(e instanceof Optgroup||"label"in e){let s=[];"options"in e&&e.options&&e.options.forEach((e=>{s.push(new Option(e))}));s.length>0&&t.push(new Optgroup(e))}(e instanceof Option||"text"in e)&&t.push(new Option(e))}));return t}setData(e){this.data=this.partialToFullData(e);this.selectType==="single"&&this.setSelectedBy("id",this.getSelected())}getData(){return this.filter(null,true)}getDataOptions(){return this.filter(null,false)}addOption(e,t=false){if(t){let t=[new Option(e)];this.setData(t.concat(this.getData()))}else this.setData(this.getData().concat(new Option(e)))}setSelectedBy(e,t){let s=null;let i=false;const n=[];for(let a of this.data){if(a instanceof Optgroup)for(let l of a.options){s||(s=l);l.selected=!i&&t.includes(l[e]);if(l.selected){n.push(l);this.selectType==="single"&&(i=true)}}if(a instanceof Option){s||(s=a);a.selected=!i&&t.includes(a[e]);if(a.selected){n.push(a);this.selectType==="single"&&(i=true)}}}if(this.selectType==="single"&&s&&!i){s.selected=true;n.push(s)}const a=t.map((t=>{var s;return((s=n.find((s=>s[e]===t)))===null||s===void 0?void 0:s.id)||""}));this.selectedOrder=a}getSelected(){return this.getSelectedOptions().map((e=>e.id))}getSelectedValues(){return this.getSelectedOptions().map((e=>e.value))}getSelectedOptions(){return this.filter((e=>e.selected),false)}getOptgroupByID(e){for(let t of this.data)if(t instanceof Optgroup&&t.id===e)return t;return null}getOptionByID(e){let t=this.filter((t=>t.id===e),false);return t.length?t[0]:null}getSelectType(){return this.selectType}getFirstOption(){let e=null;for(let t of this.data){t instanceof Optgroup?e=t.options[0]:t instanceof Option&&(e=t);if(e)break}return e}search(e,t){e=e.trim();return e===""?this.getData():this.filter((s=>t(s,e)),true)}filter(e,t){const s=[];this.data.forEach((i=>{if(i instanceof Optgroup){let n=[];i.options.forEach((i=>{e&&!e(i)||(t?n.push(new Option(i)):s.push(new Option(i)))}));if(n.length>0){let e=new Optgroup(i);e.options=n;s.push(e)}}i instanceof Option&&(e&&!e(i)||s.push(new Option(i)))}));return s}selectedOrderOptions(e){const t=[];this.selectedOrder.forEach((s=>{const i=e.find((e=>e.id===s));i&&t.push(i)}));e.forEach((e=>{let s=false;t.forEach((t=>{e.id!==t.id||(s=true)}));s||t.push(e)}));return t}}class Render{constructor(e,t,s,i){this.store=s;this.settings=e;this.classes=t;this.callbacks=i;this.main=this.mainDiv();this.content=this.contentDiv();this.updateClassStyles();this.updateAriaAttributes();this.settings.contentLocation&&this.settings.contentLocation.appendChild(this.content.main)}enable(){this.main.main.classList.remove(this.classes.disabled);this.content.search.input.disabled=false}disable(){this.main.main.classList.add(this.classes.disabled);this.content.search.input.disabled=true}open(){this.main.arrow.path.setAttribute("d",this.classes.arrowOpen);this.main.main.classList.add(this.settings.openPosition==="up"?this.classes.openAbove:this.classes.openBelow);this.main.main.setAttribute("aria-expanded","true");this.moveContent();const e=this.store.getSelectedOptions();if(e.length){const t=e[e.length-1].id;const s=this.content.list.querySelector('[data-id="'+t+'"]');s&&this.ensureElementInView(this.content.list,s)}}close(){this.main.main.classList.remove(this.classes.openAbove);this.main.main.classList.remove(this.classes.openBelow);this.main.main.setAttribute("aria-expanded","false");this.content.main.classList.remove(this.classes.openAbove);this.content.main.classList.remove(this.classes.openBelow);this.main.arrow.path.setAttribute("d",this.classes.arrowClose)}updateClassStyles(){this.main.main.className="";this.main.main.removeAttribute("style");this.content.main.className="";this.content.main.removeAttribute("style");this.main.main.classList.add(this.classes.main);this.content.main.classList.add(this.classes.content);if(this.settings.style!==""){this.main.main.style.cssText=this.settings.style;this.content.main.style.cssText=this.settings.style}if(this.settings.class.length)for(const e of this.settings.class)if(e.trim()!==""){this.main.main.classList.add(e.trim());this.content.main.classList.add(e.trim())}this.settings.contentPosition==="relative"&&this.content.main.classList.add("ss-"+this.settings.contentPosition)}updateAriaAttributes(){this.main.main.role="combobox";this.main.main.setAttribute("aria-haspopup","listbox");this.main.main.setAttribute("aria-controls",this.content.main.id);this.main.main.setAttribute("aria-expanded","false");this.content.main.setAttribute("role","listbox")}mainDiv(){var e;const t=document.createElement("div");t.dataset.id=this.settings.id;t.setAttribute("aria-label",this.settings.ariaLabel);t.tabIndex=0;t.onkeydown=e=>{switch(e.key){case"ArrowUp":case"ArrowDown":this.callbacks.open();e.key==="ArrowDown"?this.highlight("down"):this.highlight("up");return false;case"Tab":this.callbacks.close();return true;case"Enter":case" ":this.callbacks.open();const t=this.content.list.querySelector("."+this.classes.highlighted);t&&t.click();return false;case"Escape":this.callbacks.close();return false}return true};t.onclick=e=>{this.settings.disabled||(this.settings.isOpen?this.callbacks.close():this.callbacks.open())};const s=document.createElement("div");s.classList.add(this.classes.values);t.appendChild(s);const i=document.createElement("div");i.classList.add(this.classes.deselect);const n=(e=this.store)===null||e===void 0?void 0:e.getSelectedOptions();!this.settings.allowDeselect||this.settings.isMultiple&&n&&n.length<=0?i.classList.add(this.classes.hide):i.classList.remove(this.classes.hide);i.onclick=e=>{e.stopPropagation();if(this.settings.disabled)return;let t=true;const s=this.store.getSelectedOptions();const i=[];this.callbacks.beforeChange&&(t=this.callbacks.beforeChange(i,s)===true);if(t){if(this.settings.isMultiple){this.callbacks.setSelected([],false);this.updateDeselectAll()}else{const e=this.store.getFirstOption();const t=e?e.id:"";this.callbacks.setSelected(t,false)}this.settings.closeOnSelect&&this.callbacks.close();this.callbacks.afterChange&&this.callbacks.afterChange(this.store.getSelectedOptions())}};const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100");const l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",this.classes.deselectPath);a.appendChild(l);i.appendChild(a);t.appendChild(i);const o=document.createElementNS("http://www.w3.org/2000/svg","svg");o.classList.add(this.classes.arrow);o.setAttribute("viewBox","0 0 100 100");const c=document.createElementNS("http://www.w3.org/2000/svg","path");c.setAttribute("d",this.classes.arrowClose);this.settings.alwaysOpen&&o.classList.add(this.classes.hide);o.appendChild(c);t.appendChild(o);return{main:t,values:s,deselect:{main:i,svg:a,path:l},arrow:{main:o,path:c}}}mainFocus(e){e!=="click"&&this.main.main.focus({preventScroll:true})}placeholder(){const e=this.store.filter((e=>e.placeholder),false);let t=this.settings.placeholderText;e.length&&(e[0].html!==""?t=e[0].html:e[0].text!==""&&(t=e[0].text));const s=document.createElement("div");s.classList.add(this.classes.placeholder);s.innerHTML=t;return s}renderValues(){if(this.settings.isMultiple){this.renderMultipleValues();this.updateDeselectAll()}else this.renderSingleValue()}renderSingleValue(){const e=this.store.filter((e=>e.selected&&!e.placeholder),false);const t=e.length>0?e[0]:null;if(t){const e=document.createElement("div");e.classList.add(this.classes.single);t.html?e.innerHTML=t.html:e.innerText=t.text;this.main.values.innerHTML=e.outerHTML}else this.main.values.innerHTML=this.placeholder().outerHTML;this.settings.allowDeselect&&e.length?this.main.deselect.main.classList.remove(this.classes.hide):this.main.deselect.main.classList.add(this.classes.hide)}renderMultipleValues(){let e=this.main.values.childNodes;let t=this.store.filter((e=>e.selected&&e.display),false);if(t.length===0){this.main.values.innerHTML=this.placeholder().outerHTML;return}{const e=this.main.values.querySelector("."+this.classes.placeholder);e&&e.remove()}if(t.length>this.settings.maxValuesShown){const e=document.createElement("div");e.classList.add(this.classes.max);e.textContent=this.settings.maxValuesMessage.replace("{number}",t.length.toString());this.main.values.innerHTML=e.outerHTML;return}{const e=this.main.values.querySelector("."+this.classes.max);e&&e.remove()}this.settings.keepOrder&&(t=this.store.selectedOrderOptions(t));let s=[];for(let i=0;i<e.length;i++){const n=e[i];const a=n.getAttribute("data-id");if(a){const e=t.filter((e=>e.id===a),false);e.length||s.push(n)}}for(const e of s){e.classList.add(this.classes.valueOut);setTimeout((()=>{this.main.values.hasChildNodes()&&this.main.values.contains(e)&&this.main.values.removeChild(e)}),100)}e=this.main.values.childNodes;for(let s=0;s<t.length;s++){let i=true;for(let n=0;n<e.length;n++)t[s].id===String(e[n].dataset.id)&&(i=false);i&&(this.settings.keepOrder||e.length===0?this.main.values.appendChild(this.multipleValue(t[s])):s===0?this.main.values.insertBefore(this.multipleValue(t[s]),e[s]):e[s-1].insertAdjacentElement("afterend",this.multipleValue(t[s])))}}multipleValue(e){const t=document.createElement("div");t.classList.add(this.classes.value);t.dataset.id=e.id;const s=document.createElement("div");s.classList.add(this.classes.valueText);s.textContent=e.text;t.appendChild(s);if(!e.mandatory){const s=document.createElement("div");s.classList.add(this.classes.valueDelete);s.onclick=t=>{t.preventDefault();t.stopPropagation();if(this.settings.disabled)return;let s=true;const i=this.store.getSelectedOptions();const n=i.filter((t=>t.selected&&t.id!==e.id),true);if(!(this.settings.minSelected&&n.length<this.settings.minSelected)){this.callbacks.beforeChange&&(s=this.callbacks.beforeChange(n,i)===true);if(s){let e=[];for(const t of n){if(t instanceof Optgroup)for(const s of t.options)e.push(s.id);t instanceof Option&&e.push(t.id)}this.callbacks.setSelected(e,false);this.settings.closeOnSelect&&this.callbacks.close();this.callbacks.afterChange&&this.callbacks.afterChange(n);this.updateDeselectAll()}}};const i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttribute("viewBox","0 0 100 100");const n=document.createElementNS("http://www.w3.org/2000/svg","path");n.setAttribute("d",this.classes.optionDelete);i.appendChild(n);s.appendChild(i);t.appendChild(s)}return t}contentDiv(){const e=document.createElement("div");e.dataset.id=this.settings.id;const t=this.searchDiv();e.appendChild(t.main);const s=this.listDiv();e.appendChild(s);return{main:e,search:t,list:s}}moveContent(){this.settings.contentPosition!=="relative"&&this.settings.openPosition!=="down"?this.settings.openPosition!=="up"?this.putContent()==="up"?this.moveContentAbove():this.moveContentBelow():this.moveContentAbove():this.moveContentBelow()}searchDiv(){const e=document.createElement("div");const t=document.createElement("input");const s=document.createElement("div");e.classList.add(this.classes.search);const i={main:e,input:t};if(!this.settings.showSearch){e.classList.add(this.classes.hide);t.readOnly=true}t.type="search";t.placeholder=this.settings.searchPlaceholder;t.tabIndex=-1;t.setAttribute("aria-label",this.settings.searchPlaceholder);t.setAttribute("autocapitalize","off");t.setAttribute("autocomplete","off");t.setAttribute("autocorrect","off");t.oninput=debounce((e=>{this.callbacks.search(e.target.value)}),100);t.onkeydown=e=>{switch(e.key){case"ArrowUp":case"ArrowDown":e.key==="ArrowDown"?this.highlight("down"):this.highlight("up");return false;case"Tab":this.callbacks.close();return true;case"Escape":this.callbacks.close();return false;case" ":const t=this.content.list.querySelector("."+this.classes.highlighted);if(t){t.click();return false}return true;case"Enter":if(this.callbacks.addable){s.click();return false}{const e=this.content.list.querySelector("."+this.classes.highlighted);if(e){e.click();return false}}return true}return true};e.appendChild(t);if(this.callbacks.addable){s.classList.add(this.classes.addable);const t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("viewBox","0 0 100 100");const n=document.createElementNS("http://www.w3.org/2000/svg","path");n.setAttribute("d",this.classes.addablePath);t.appendChild(n);s.appendChild(t);s.onclick=e=>{e.preventDefault();e.stopPropagation();if(!this.callbacks.addable)return;const t=this.content.search.input.value.trim();if(t===""){this.content.search.input.focus();return}const runFinish=e=>{let t=new Option(e);this.callbacks.addOption(t);if(this.settings.isMultiple){let e=this.store.getSelected();e.push(t.id);this.callbacks.setSelected(e,true)}else this.callbacks.setSelected([t.id],true);this.callbacks.search("");this.settings.closeOnSelect&&setTimeout((()=>{this.callbacks.close()}),100)};const s=this.callbacks.addable(t);s!==false&&s!==void 0&&s!==null&&(s instanceof Promise?s.then((e=>{typeof e==="string"?runFinish({text:e,value:e}):s instanceof Error?this.renderError(s.message):runFinish(e)})):typeof s==="string"?runFinish({text:s,value:s}):s instanceof Error?this.renderError(s.message):runFinish(s))};e.appendChild(s);i.addable={main:s,svg:t,path:n}}return i}searchFocus(){this.content.search.input.focus()}getOptions(e=false,t=false,s=false){let i="."+this.classes.option;e&&(i+=":not(."+this.classes.placeholder+")");t&&(i+=":not(."+this.classes.disabled+")");s&&(i+=":not(."+this.classes.hide+")");return Array.from(this.content.list.querySelectorAll(i))}highlight(e){const t=this.getOptions(true,true,true);if(t.length===0)return;if(t.length===1&&!t[0].classList.contains(this.classes.highlighted)){t[0].classList.add(this.classes.highlighted);return}let s=false;for(const e of t)e.classList.contains(this.classes.highlighted)&&(s=true);if(!s)for(const e of t)if(e.classList.contains(this.classes.selected)){e.classList.add(this.classes.highlighted);break}for(let s=0;s<t.length;s++)if(t[s].classList.contains(this.classes.highlighted)){const i=t[s];i.classList.remove(this.classes.highlighted);const n=i.parentElement;if(n&&n.classList.contains(this.classes.open)){const e=n.querySelector("."+this.classes.optgroupLabel);e&&e.click()}let a=t[e==="down"?s+1<t.length?s+1:0:s-1>=0?s-1:t.length-1];a.classList.add(this.classes.highlighted);this.ensureElementInView(this.content.list,a);const l=a.parentElement;if(l&&l.classList.contains(this.classes.close)){const e=l.querySelector("."+this.classes.optgroupLabel);e&&e.click()}return}t[e==="down"?0:t.length-1].classList.add(this.classes.highlighted);this.ensureElementInView(this.content.list,t[e==="down"?0:t.length-1])}listDiv(){const e=document.createElement("div");e.classList.add(this.classes.list);return e}renderError(e){this.content.list.innerHTML="";const t=document.createElement("div");t.classList.add(this.classes.error);t.textContent=e;this.content.list.appendChild(t)}renderSearching(){this.content.list.innerHTML="";const e=document.createElement("div");e.classList.add(this.classes.searching);e.textContent=this.settings.searchingText;this.content.list.appendChild(e)}renderOptions(e){this.content.list.innerHTML="";if(e.length!==0){if(this.settings.allowDeselect&&!this.settings.isMultiple){const e=this.store.filter((e=>e.placeholder),false);e.length||this.store.addOption(new Option({text:"",value:"",selected:false,placeholder:true}),true)}for(const t of e){if(t instanceof Optgroup){const e=document.createElement("div");e.classList.add(this.classes.optgroup);const s=document.createElement("div");s.classList.add(this.classes.optgroupLabel);e.appendChild(s);const i=document.createElement("div");i.classList.add(this.classes.optgroupLabelText);i.textContent=t.label;s.appendChild(i);const n=document.createElement("div");n.classList.add(this.classes.optgroupActions);s.appendChild(n);if(this.settings.isMultiple&&t.selectAll){const e=document.createElement("div");e.classList.add(this.classes.optgroupSelectAll);let s=true;for(const e of t.options)if(!e.selected){s=false;break}s&&e.classList.add(this.classes.selected);const i=document.createElement("span");i.textContent=t.selectAllText;e.appendChild(i);const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100");e.appendChild(a);const l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",this.classes.optgroupSelectAllBox);a.appendChild(l);const o=document.createElementNS("http://www.w3.org/2000/svg","path");o.setAttribute("d",this.classes.optgroupSelectAllCheck);a.appendChild(o);e.addEventListener("click",(e=>{e.preventDefault();e.stopPropagation();const i=this.store.getSelected();if(s){const e=i.filter((e=>{for(const s of t.options)if(e===s.id)return false;return true}));this.callbacks.setSelected(e,true)}else{const e=i.concat(t.options.map((e=>e.id)));for(const e of t.options)this.store.getOptionByID(e.id)||this.callbacks.addOption(e);this.callbacks.setSelected(e,true)}}));n.appendChild(e)}if(t.closable!=="off"){const i=document.createElement("div");i.classList.add(this.classes.optgroupClosable);const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100");a.classList.add(this.classes.arrow);i.appendChild(a);const l=document.createElementNS("http://www.w3.org/2000/svg","path");a.appendChild(l);if(t.options.some((e=>e.selected))||this.content.search.input.value.trim()!==""){i.classList.add(this.classes.open);l.setAttribute("d",this.classes.arrowOpen)}else if(t.closable==="open"){e.classList.add(this.classes.open);l.setAttribute("d",this.classes.arrowOpen)}else if(t.closable==="close"){e.classList.add(this.classes.close);l.setAttribute("d",this.classes.arrowClose)}s.addEventListener("click",(t=>{t.preventDefault();t.stopPropagation();if(e.classList.contains(this.classes.close)){e.classList.remove(this.classes.close);e.classList.add(this.classes.open);l.setAttribute("d",this.classes.arrowOpen)}else{e.classList.remove(this.classes.open);e.classList.add(this.classes.close);l.setAttribute("d",this.classes.arrowClose)}}));n.appendChild(i)}e.appendChild(s);for(const s of t.options)e.appendChild(this.option(s));this.content.list.appendChild(e)}t instanceof Option&&this.content.list.appendChild(this.option(t))}}else{const e=document.createElement("div");e.classList.add(this.classes.search);this.callbacks.addable?e.innerHTML=this.settings.addableText.replace("{value}",this.content.search.input.value):e.innerHTML=this.settings.searchText;this.content.list.appendChild(e)}}option(e){if(e.placeholder){const e=document.createElement("div");e.classList.add(this.classes.option);e.classList.add(this.classes.hide);return e}const t=document.createElement("div");t.dataset.id=e.id;t.id=e.id;t.classList.add(this.classes.option);t.setAttribute("role","option");e.class&&e.class.split(" ").forEach((e=>{t.classList.add(e)}));e.style&&(t.style.cssText=e.style);this.settings.searchHighlight&&this.content.search.input.value.trim()!==""?t.innerHTML=this.highlightText(e.html!==""?e.html:e.text,this.content.search.input.value,this.classes.searchHighlighter):e.html!==""?t.innerHTML=e.html:t.textContent=e.text;this.settings.showOptionTooltips&&t.textContent&&t.setAttribute("title",t.textContent);e.display||t.classList.add(this.classes.hide);e.disabled&&t.classList.add(this.classes.disabled);e.selected&&this.settings.hideSelected&&t.classList.add(this.classes.hide);if(e.selected){t.classList.add(this.classes.selected);t.setAttribute("aria-selected","true");this.main.main.setAttribute("aria-activedescendant",t.id)}else{t.classList.remove(this.classes.selected);t.setAttribute("aria-selected","false")}t.addEventListener("click",(t=>{t.preventDefault();t.stopPropagation();const s=this.store.getSelected();const i=t.currentTarget;const n=String(i.dataset.id);if(e.disabled||e.selected&&!this.settings.allowDeselect)return;if(this.settings.isMultiple&&this.settings.maxSelected<=s.length&&!e.selected||this.settings.isMultiple&&this.settings.minSelected>=s.length&&e.selected)return;let a=false;const l=this.store.getSelectedOptions();let o=[];this.settings.isMultiple&&(o=e.selected?l.filter((e=>e.id!==n)):l.concat(e));this.settings.isMultiple||(o=e.selected?[]:[e]);this.callbacks.beforeChange||(a=true);this.callbacks.beforeChange&&(a=this.callbacks.beforeChange(o,l)!==false);if(a){this.store.getOptionByID(n)||this.callbacks.addOption(e);this.callbacks.setSelected(o.map((e=>e.id)),false);this.settings.closeOnSelect&&this.callbacks.close();this.callbacks.afterChange&&this.callbacks.afterChange(o)}}));return t}destroy(){this.main.main.remove();this.content.main.remove()}highlightText(e,t,s){let i=e;const n=new RegExp("(?![^<]*>)("+t.trim()+")(?![^<]*>[^<>]*</)","i");if(!e.match(n))return e;const a=e.match(n).index;const l=a+e.match(n)[0].toString().length;const o=e.substring(a,l);i=i.replace(n,`<mark class="${s}">${o}</mark>`);return i}moveContentAbove(){const e=this.main.main.offsetHeight;const t=this.content.main.offsetHeight;this.main.main.classList.remove(this.classes.openBelow);this.main.main.classList.add(this.classes.openAbove);this.content.main.classList.remove(this.classes.openBelow);this.content.main.classList.add(this.classes.openAbove);const s=this.main.main.getBoundingClientRect();this.content.main.style.margin="-"+(e+t-1)+"px 0px 0px 0px";this.content.main.style.top=s.top+s.height+window.scrollY+"px";this.content.main.style.left=s.left+window.scrollX+"px";this.content.main.style.width=s.width+"px"}moveContentBelow(){this.main.main.classList.remove(this.classes.openAbove);this.main.main.classList.add(this.classes.openBelow);this.content.main.classList.remove(this.classes.openAbove);this.content.main.classList.add(this.classes.openBelow);const e=this.main.main.getBoundingClientRect();this.content.main.style.margin="-1px 0px 0px 0px";if(this.settings.contentPosition!=="relative"){this.content.main.style.top=e.top+e.height+window.scrollY+"px";this.content.main.style.left=e.left+window.scrollX+"px";this.content.main.style.width=e.width+"px"}}ensureElementInView(e,t){const s=e.scrollTop+e.offsetTop;const i=s+e.clientHeight;const n=t.offsetTop;const a=n+t.clientHeight;n<s?e.scrollTop-=s-n:a>i&&(e.scrollTop+=a-i)}putContent(){const e=this.main.main.offsetHeight;const t=this.main.main.getBoundingClientRect();const s=this.content.main.offsetHeight;const i=window.innerHeight-(t.top+e);return i<=s&&t.top>s?"up":"down"}updateDeselectAll(){if(!this.store||!this.settings)return;const e=this.store.getSelectedOptions();const t=e&&e.length>0;const s=this.settings.isMultiple;const i=this.settings.allowDeselect;const n=this.main.deselect.main;const a=this.classes.hide;!i||s&&!t?n.classList.add(a):n.classList.remove(a)}}class Select{constructor(e){this.listen=false;this.observer=null;this.select=e;this.valueChange=this.valueChange.bind(this);this.select.addEventListener("change",this.valueChange,{passive:true});this.observer=new MutationObserver(this.observeCall.bind(this));this.changeListen(true)}enable(){this.select.disabled=false}disable(){this.select.disabled=true}hideUI(){this.select.tabIndex=-1;this.select.style.display="none";this.select.setAttribute("aria-hidden","true")}showUI(){this.select.removeAttribute("tabindex");this.select.style.display="";this.select.removeAttribute("aria-hidden")}changeListen(e){this.listen=e;e&&this.observer&&this.observer.observe(this.select,{subtree:true,childList:true,attributes:true});e||this.observer&&this.observer.disconnect()}valueChange(e){this.listen&&this.onValueChange&&this.onValueChange(this.getSelectedOptions());return true}observeCall(e){if(!this.listen)return;let t=false;let s=false;let i=false;for(const n of e){if(n.target===this.select){n.attributeName==="disabled"&&(s=true);n.attributeName==="class"&&(t=true);if(n.type==="childList"){for(const e of n.addedNodes)if(e.nodeName==="OPTION"&&e.value===this.select.value){this.select.dispatchEvent(new Event("change"));break}i=true}}n.target.nodeName!=="OPTGROUP"&&n.target.nodeName!=="OPTION"||(i=true)}t&&this.onClassChange&&this.onClassChange(this.select.className.split(" "));if(s&&this.onDisabledChange){this.changeListen(false);this.onDisabledChange(this.select.disabled);this.changeListen(true)}if(i&&this.onOptionsChange){this.changeListen(false);this.onOptionsChange(this.getData());this.changeListen(true)}}getData(){let e=[];const t=this.select.childNodes;for(const s of t){s.nodeName==="OPTGROUP"&&e.push(this.getDataFromOptgroup(s));s.nodeName==="OPTION"&&e.push(this.getDataFromOption(s))}return e}getDataFromOptgroup(e){let t={id:e.id,label:e.label,selectAll:!!e.dataset&&e.dataset.selectall==="true",selectAllText:e.dataset?e.dataset.selectalltext:"Select all",closable:e.dataset?e.dataset.closable:"off",options:[]};const s=e.childNodes;for(const e of s)e.nodeName==="OPTION"&&t.options.push(this.getDataFromOption(e));return t}getDataFromOption(e){return{id:e.id,value:e.value,text:e.text,html:e.dataset&&e.dataset.html?e.dataset.html:"",selected:e.selected,display:e.style.display!=="none",disabled:e.disabled,mandatory:!!e.dataset&&e.dataset.mandatory==="true",placeholder:e.dataset.placeholder==="true",class:e.className,style:e.style.cssText,data:e.dataset}}getSelectedOptions(){let e=[];const t=this.select.childNodes;for(const s of t){if(s.nodeName==="OPTGROUP"){const t=s.childNodes;for(const s of t)if(s.nodeName==="OPTION"){const t=s;t.selected&&e.push(this.getDataFromOption(t))}}if(s.nodeName==="OPTION"){const t=s;t.selected&&e.push(this.getDataFromOption(t))}}return e}getSelectedValues(){return this.getSelectedOptions().map((e=>e.value))}setSelected(e){this.changeListen(false);const t=this.select.childNodes;for(const s of t){if(s.nodeName==="OPTGROUP"){const t=s;const i=t.childNodes;for(const t of i)if(t.nodeName==="OPTION"){const s=t;s.selected=e.includes(s.id)}}if(s.nodeName==="OPTION"){const t=s;t.selected=e.includes(t.id)}}this.changeListen(true)}setSelectedByValue(e){this.changeListen(false);const t=this.select.childNodes;for(const s of t){if(s.nodeName==="OPTGROUP"){const t=s;const i=t.childNodes;for(const t of i)if(t.nodeName==="OPTION"){const s=t;s.selected=e.includes(s.value)}}if(s.nodeName==="OPTION"){const t=s;t.selected=e.includes(t.value)}}this.changeListen(true)}updateSelect(e,t,s){this.changeListen(false);e&&(this.select.dataset.id=e);t&&(this.select.style.cssText=t);if(s){this.select.className="";s.forEach((e=>{e.trim()!==""&&this.select.classList.add(e.trim())}))}this.changeListen(true)}updateOptions(e){this.changeListen(false);this.select.innerHTML="";for(const t of e){t instanceof Optgroup&&this.select.appendChild(this.createOptgroup(t));t instanceof Option&&this.select.appendChild(this.createOption(t))}this.select.dispatchEvent(new Event("change",{bubbles:true}));this.changeListen(true)}createOptgroup(e){const t=document.createElement("optgroup");t.id=e.id;t.label=e.label;e.selectAll&&(t.dataset.selectAll="true");e.closable!=="off"&&(t.dataset.closable=e.closable);if(e.options)for(const s of e.options)t.appendChild(this.createOption(s));return t}createOption(e){const t=document.createElement("option");t.id=e.id;t.value=e.value;t.textContent=e.text;e.html!==""&&t.setAttribute("data-html",e.html);e.selected&&(t.selected=e.selected);e.disabled&&(t.disabled=true);e.display||(t.style.display="none");e.placeholder&&t.setAttribute("data-placeholder","true");e.mandatory&&t.setAttribute("data-mandatory","true");e.class&&e.class.split(" ").forEach((e=>{t.classList.add(e)}));e.data&&typeof e.data==="object"&&Object.keys(e.data).forEach((s=>{t.setAttribute("data-"+kebabCase(s),e.data[s])}));return t}destroy(){this.changeListen(false);this.select.removeEventListener("change",this.valueChange);if(this.observer){this.observer.disconnect();this.observer=null}delete this.select.dataset.id;this.showUI()}}class Settings{constructor(e){this.id="";this.style="";this.class=[];this.isMultiple=false;this.isOpen=false;this.isFullOpen=false;this.intervalMove=null;e||(e={});this.id="ss-"+generateID();this.style=e.style||"";this.class=e.class||[];this.disabled=e.disabled!==void 0&&e.disabled;this.alwaysOpen=e.alwaysOpen!==void 0&&e.alwaysOpen;this.showSearch=e.showSearch===void 0||e.showSearch;this.focusSearch=e.focusSearch===void 0||e.focusSearch;this.ariaLabel=e.ariaLabel||"Combobox";this.searchPlaceholder=e.searchPlaceholder||"Search";this.searchText=e.searchText||"No Results";this.searchingText=e.searchingText||"Searching...";this.searchHighlight=e.searchHighlight!==void 0&&e.searchHighlight;this.closeOnSelect=e.closeOnSelect===void 0||e.closeOnSelect;this.contentLocation=e.contentLocation||document.body;this.contentPosition=e.contentPosition||"absolute";this.openPosition=e.openPosition||"auto";this.placeholderText=e.placeholderText!==void 0?e.placeholderText:"Select Value";this.allowDeselect=e.allowDeselect!==void 0&&e.allowDeselect;this.hideSelected=e.hideSelected!==void 0&&e.hideSelected;this.keepOrder=e.keepOrder!==void 0&&e.keepOrder;this.showOptionTooltips=e.showOptionTooltips!==void 0&&e.showOptionTooltips;this.minSelected=e.minSelected||0;this.maxSelected=e.maxSelected||1e3;this.timeoutDelay=e.timeoutDelay||200;this.maxValuesShown=e.maxValuesShown||20;this.maxValuesMessage=e.maxValuesMessage||"{number} selected";this.addableText=e.addableText||'Press "Enter" to add {value}'}}class SlimSelect{constructor(e){var t;this.events={search:void 0,searchFilter:(e,t)=>e.text.toLowerCase().indexOf(t.toLowerCase())!==-1,addable:void 0,beforeChange:void 0,afterChange:void 0,beforeOpen:void 0,afterOpen:void 0,beforeClose:void 0,afterClose:void 0};this.windowResize=debounce((()=>{(this.settings.isOpen||this.settings.isFullOpen)&&this.render.moveContent()}));this.windowScroll=debounce((()=>{(this.settings.isOpen||this.settings.isFullOpen)&&this.render.moveContent()}));this.documentClick=e=>{this.settings.isOpen&&e.target&&!hasClassInTree(e.target,this.settings.id)&&this.close(e.type)};this.windowVisibilityChange=()=>{document.hidden&&this.close()};this.selectEl=typeof e.select==="string"?document.querySelector(e.select):e.select;if(!this.selectEl){e.events&&e.events.error&&e.events.error(new Error("Could not find select element"));return}if(this.selectEl.tagName!=="SELECT"){e.events&&e.events.error&&e.events.error(new Error("Element isnt of type select"));return}this.selectEl.dataset.ssid&&this.destroy();this.settings=new Settings(e.settings);this.cssClasses=new CssClasses(e.cssClasses);const s=["afterChange","beforeOpen","afterOpen","beforeClose","afterClose"];for(const t in e.events)e.events.hasOwnProperty(t)&&(s.indexOf(t)!==-1?this.events[t]=debounce(e.events[t],100):this.events[t]=e.events[t]);this.settings.disabled=((t=e.settings)===null||t===void 0?void 0:t.disabled)?e.settings.disabled:this.selectEl.disabled;this.settings.isMultiple=this.selectEl.multiple;this.settings.style=this.selectEl.style.cssText;this.settings.class=this.selectEl.className.split(" ");this.select=new Select(this.selectEl);this.select.updateSelect(this.settings.id,this.settings.style,this.settings.class);this.select.hideUI();this.select.onValueChange=e=>{this.setSelected(e.map((e=>e.id)))};this.select.onClassChange=e=>{this.settings.class=e;this.render.updateClassStyles()};this.select.onDisabledChange=e=>{e?this.disable():this.enable()};this.select.onOptionsChange=e=>{this.setData(e)};this.store=new Store(this.settings.isMultiple?"multiple":"single",e.data?e.data:this.select.getData());e.data&&this.select.updateOptions(this.store.getData());const i={open:this.open.bind(this),close:this.close.bind(this),addable:this.events.addable?this.events.addable:void 0,setSelected:this.setSelected.bind(this),addOption:this.addOption.bind(this),search:this.search.bind(this),beforeChange:this.events.beforeChange,afterChange:this.events.afterChange};this.render=new Render(this.settings,this.cssClasses,this.store,i);this.render.renderValues();this.render.renderOptions(this.store.getData());const n=this.selectEl.getAttribute("aria-label");const a=this.selectEl.getAttribute("aria-labelledby");n?this.render.main.main.setAttribute("aria-label",n):a&&this.render.main.main.setAttribute("aria-labelledby",a);this.selectEl.parentNode&&this.selectEl.parentNode.insertBefore(this.render.main.main,this.selectEl.nextSibling);window.addEventListener("resize",this.windowResize,false);this.settings.openPosition==="auto"&&window.addEventListener("scroll",this.windowScroll,false);document.addEventListener("visibilitychange",this.windowVisibilityChange);this.settings.disabled&&this.disable();this.settings.alwaysOpen&&this.open();this.selectEl.slim=this}enable(){this.settings.disabled=false;this.select.enable();this.render.enable()}disable(){this.settings.disabled=true;this.select.disable();this.render.disable()}getData(){return this.store.getData()}setData(e){const t=this.store.getSelected();const s=this.store.validateDataArray(e);if(s){this.events.error&&this.events.error(s);return}this.store.setData(e);const i=this.store.getData();this.select.updateOptions(i);this.render.renderValues();this.render.renderOptions(i);this.events.afterChange&&!isEqual(t,this.store.getSelected())&&this.events.afterChange(this.store.getSelectedOptions())}getSelected(){let e=this.store.getSelectedOptions();this.settings.keepOrder&&(e=this.store.selectedOrderOptions(e));return e.map((e=>e.value))}setSelected(e,t=true){const s=this.store.getSelected();const i=this.store.getDataOptions();e=Array.isArray(e)?e:[e];const n=[];for(const t of e)if(i.find((e=>e.id==t)))n.push(t);else for(const e of i.filter((e=>e.value==t)))n.push(e.id);this.store.setSelectedBy("id",n);const a=this.store.getData();this.select.updateOptions(a);this.render.renderValues();this.render.content.search.input.value!==""?this.search(this.render.content.search.input.value):this.render.renderOptions(a);t&&this.events.afterChange&&!isEqual(s,this.store.getSelected())&&this.events.afterChange(this.store.getSelectedOptions())}addOption(e){const t=this.store.getSelected();this.store.getDataOptions().some((t=>{var s;return t.value===((s=e.value)!==null&&s!==void 0?s:e.text)}))||this.store.addOption(e);const s=this.store.getData();this.select.updateOptions(s);this.render.renderValues();this.render.renderOptions(s);this.events.afterChange&&!isEqual(t,this.store.getSelected())&&this.events.afterChange(this.store.getSelectedOptions())}open(){if(!this.settings.disabled&&!this.settings.isOpen){this.events.beforeOpen&&this.events.beforeOpen();this.render.open();this.settings.showSearch&&this.settings.focusSearch&&this.render.searchFocus();this.settings.isOpen=true;setTimeout((()=>{this.events.afterOpen&&this.events.afterOpen();this.settings.isOpen&&(this.settings.isFullOpen=true);document.addEventListener("click",this.documentClick)}),this.settings.timeoutDelay);if(this.settings.contentPosition==="absolute"){this.settings.intervalMove&&clearInterval(this.settings.intervalMove);this.settings.intervalMove=setInterval(this.render.moveContent.bind(this.render),500)}}}close(e=null){if(this.settings.isOpen&&!this.settings.alwaysOpen){this.events.beforeClose&&this.events.beforeClose();this.render.close();this.render.content.search.input.value!==""&&this.search("");this.render.mainFocus(e);this.settings.isOpen=false;this.settings.isFullOpen=false;setTimeout((()=>{this.events.afterClose&&this.events.afterClose();document.removeEventListener("click",this.documentClick)}),this.settings.timeoutDelay);this.settings.intervalMove&&clearInterval(this.settings.intervalMove)}}search(e){this.render.content.search.input.value!==e&&(this.render.content.search.input.value=e);if(!this.events.search){this.render.renderOptions(e===""?this.store.getData():this.store.search(e,this.events.searchFilter));return}this.render.renderSearching();const t=this.events.search(e,this.store.getSelectedOptions());t instanceof Promise?t.then((e=>{this.render.renderOptions(this.store.partialToFullData(e))})).catch((e=>{this.render.renderError(typeof e==="string"?e:e.message)})):Array.isArray(t)?this.render.renderOptions(this.store.partialToFullData(t)):this.render.renderError("Search event must return a promise or an array of data")}destroy(){document.removeEventListener("click",this.documentClick);window.removeEventListener("resize",this.windowResize,false);this.settings.openPosition==="auto"&&window.removeEventListener("scroll",this.windowScroll,false);document.removeEventListener("visibilitychange",this.windowVisibilityChange);this.store.setData([]);this.render.destroy();this.select.destroy()}}return SlimSelect}));var t=e;export{t as default};
4
-
5
-
1
+ <!doctype html>
2
+ <p>Not Found.</p>
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slim_select_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.2.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trevor Vallender
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-10 00:00:00.000000000 Z
11
+ date: 2024-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -24,7 +24,7 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 7.0.0
27
- description:
27
+ description:
28
28
  email:
29
29
  - t@tsvallender.co.uk
30
30
  executables: []
@@ -39,8 +39,9 @@ files:
39
39
  - lib/slim_select_rails/engine.rb
40
40
  - lib/slim_select_rails/version.rb
41
41
  - lib/tasks/install.rake
42
- - slim_select_rails-0.1.0.gem
42
+ - vendor/assets/javascript/.keep
43
43
  - vendor/assets/javascript/slimselect.min.js
44
+ - vendor/assets/stylesheets/.keep
44
45
  - vendor/assets/stylesheets/slimselect.css
45
46
  homepage: https://github.com/tsvallender/slim_select_rails
46
47
  licenses:
@@ -49,7 +50,7 @@ metadata:
49
50
  homepage_uri: https://github.com/tsvallender/slim_select_rails
50
51
  source_code_uri: https://github.com/tsvallender/slim_select_rails
51
52
  changelog_uri: https://raw.githubusercontent.com/tsvallender/slim_select_rails/refs/heads/main/CHANGELOG.md
52
- post_install_message:
53
+ post_install_message:
53
54
  rdoc_options: []
54
55
  require_paths:
55
56
  - lib
@@ -64,8 +65,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
65
  - !ruby/object:Gem::Version
65
66
  version: '0'
66
67
  requirements: []
67
- rubygems_version: 3.5.11
68
- signing_key:
68
+ rubygems_version: 3.5.22
69
+ signing_key:
69
70
  specification_version: 4
70
71
  summary: Packages Slim Select for easy use with Rails
71
72
  test_files: []
Binary file