eleventy-plugin-filter-page 0.1.0 → 0.1.2

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.
package/README.md CHANGED
@@ -154,8 +154,3 @@ collections:
154
154
  widget: string
155
155
  hint: "Placeholder for text input"
156
156
  ```
157
-
158
- ## TODO
159
- - NPM publish .gitlab-ci script
160
- - example website .gitlab-ci script
161
- - more filter types (number range)
@@ -1 +1 @@
1
- if(typeof ecfData==='undefined'){alert('"ecfData" variable must be defined');throw Error('Global `ecfData` must be defined before this script runs.')}if(typeof filterConfig==='undefined'){alert('"filterConfig" variable must be defined');throw Error('Global `filterConfig` must be defined before this script runs.')}function a(b,B){for(const[C,_b] of B.entries())b.append(C,_b);return b}function $(_a){let q;return (q=document.querySelectorAll(_a)).length==1?q[0]:q}var c='ecf-filters',d=filterConfig.filter(D=>D.form).map(f=>f.form).concat([c]).map(_A=>document.getElementById(_A)),A=d.every(E=>(E!=null&&E!=void 0&&E.tagName.toLowerCase()==='form'));!A&&alert('Improperly configured template. All <form> elements with IDs from the filter configuration file must exist in the layout.');var _=new Map;for(const aA of $('[data-search-id]'))_.set(aA.getAttribute('data-search-id'),aA);function g(){var aB=d.reduce((aC,aD)=>a(aC,new FormData(aD)),new FormData),_B={};for(const[aE,aF] of aB.entries())if(aE.slice(0,5)=='ecf-c'){let l=aE.split(' ');!_B[l[1]]&&(_B[l[1]]=[]);aF=='on'&&_B[l[1]].push(l[2])}else if(aE.slice(0,5)=='ecf-t'){let l=aE.split(' ');aF.length>0&&(_B[l[1]]=aF)}else _B[aE]=aF;return _B}function h(aG){return ecfData.filter(aH=>filterConfig.map(aI=>{var aJ=aG[aI.field]||!1;if(!aJ)return!0;switch(aI.type) {case 'radio':return aH[aI.field]===aJ;case 'checkbox':return aJ.every(aK=>aH[aI.field].includes(aK));case 'text':return aH[aI.field].toLowerCase().indexOf(aJ)!==-1;default:return!1}}).every(el=>(el)))}function i(aL){for(const aM of _.values())aM.style.display='none';for(const aN of aL)_.get(aN._id).style.display=''}function j(){g().then(h).then(i)}globalThis.selectAllFilterGroup=function aP(aO){var _c=filterConfig.find(aQ=>aQ.field==aO);_c.type!='checkbox'&&alert('Misconfiguration of Filters. Select All button must only be present on checkbox filters.');for(const aR of d)for(const aS of aR.querySelectorAll(`input[type="checkbox"][name^="ecf-c ${aO}"]`))aS.checked=!0;j()};globalThis.clearFilterGroup=function aU(aT){var _C=filterConfig.find(aV=>aV.field==aT);_C.type=='radio';_C.type=='checkbox';j()};for(const aW of d){aW.addEventListener('input',j);aW.addEventListener('onchange',j);aW.addEventListener('submit',e=>e.preventDefault())}
1
+ if(globalThis.ecfData,"undefined"==typeof ecfData)throw alert('"ecfData" variable must be defined'),new Error("Global `ecfData` must be defined before this script runs.");if("undefined"==typeof filterConfig)throw alert('"filterConfig" variable must be defined'),new Error("Global `filterConfig` must be defined before this script runs.");function mergeFormData(e,t){for(var[r,n]of t.entries())e.append(r,n);return e}function $(e){return 1==(e=document.querySelectorAll(e)).length?e[0]:e}let defaultFormId="ecf-filters",ecfForms=filterConfig.filter(e=>e.form).map(e=>e.form).concat([defaultFormId]).map(e=>document.getElementById(e)),formTemplateValidation=ecfForms.every(e=>null!=e&&"form"===e.tagName.toLowerCase()),idToElementMap=(formTemplateValidation||alert("Improperly configured template. All <form> elements with IDs from the filter configuration file must exist in the layout."),new Map);async function preProcessFilters(){var e,t,r,n={};for([e,t]of ecfForms.reduce((e,t)=>mergeFormData(e,new FormData(t)),new FormData).entries())"ecf-c"==e.slice(0,5)?(n[(r=e.split(" "))[1]]||(n[r[1]]=[]),"on"==t&&n[r[1]].push(r[2])):"ecf-t"==e.slice(0,5)?(r=e.split(" "),0<t.length&&(n[r[1]]=t)):n[e]=t;return n}async function applyFilterValues(n){return ecfData.filter(function(r){return filterConfig.map(t=>{var e=n[t.field]||!1;if(!e)return!0;switch(t.type){case"radio":return r[t.field]===e;case"checkbox":return e.every(e=>r[t.field].includes(e));case"text":return-1!==r[t.field].toLowerCase().indexOf(e);default:return!1}}).every(e=>e)})}async function hideFilteredData(e){idToElementMap.values().forEach(e=>e.style.display="none"),e.forEach(e=>{idToElementMap.get(e._id).style.display=""})}function handleFilterInput(){preProcessFilters().then(applyFilterValues).then(hideFilteredData)}$("[data-search-id]").forEach(e=>{idToElementMap.set(e.getAttribute("data-search-id"),e)}),globalThis.selectAllFilterGroup=function(t){"checkbox"!=filterConfig.find(e=>e.field==t).type&&alert("Misconfiguration of Filters. Select All button must only be present on checkbox filters."),ecfForms.forEach(e=>{e.querySelectorAll('input[type="checkbox"][name^="ecf-c '+t+'"]').forEach(e=>{e.checked=!0})}),handleFilterInput()},globalThis.clearFilterGroup=function(t){var e=filterConfig.find(e=>e.field==t);"radio"==e.type&&ecfForms.forEach(e=>{e.querySelectorAll('input[type="radio"][name="'+t+'"]').forEach(e=>{e.checked=!1})}),"checkbox"==e.type&&ecfForms.forEach(e=>{e.querySelectorAll('input[type="checkbox"][name^="ecf-c '+t+'"]').forEach(e=>{e.checked=!1})}),handleFilterInput()},ecfForms.forEach(e=>{e.addEventListener("input",handleFilterInput),e.addEventListener("onchange",handleFilterInput),e.addEventListener("submit",e=>{e.preventDefault()})});
@@ -64,14 +64,18 @@ function ecfPlugin(eleventyConfig, pluginConfig = null) {
64
64
  switch (filter.type) {
65
65
  case "radio": {
66
66
  let value = entry.data[filter.field];
67
- let strValue = typeof value !== 'string' ? value.toString() : value;
68
- filter.values.add(strValue);
67
+ if (value) {
68
+ let strValue = typeof value !== 'string' ? value.toString() : value;
69
+ filter.values.add(strValue);
70
+ }
69
71
  break;
70
72
  }
71
73
  case "checkbox": {
72
74
  entry.data[filter.field]?.forEach(value => {
73
- let strValue = typeof value !== 'string' ? value.toString() : value;
74
- filter.values?.add(strValue)
75
+ if (value) {
76
+ let strValue = typeof value !== 'string' ? value.toString() : value;
77
+ filter.values?.add(strValue)
78
+ }
75
79
  });
76
80
  break;
77
81
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eleventy-plugin-filter-page",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "11ty plugin to create collection filter pages",
5
5
  "main": "dist/ecf.plugin.js",
6
6
  "files": [
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "scripts": {
19
19
  "lint": "eslint",
20
- "build": "rm -rf dist && mkdir -p dist && cp -R src/. dist/ && minify dist/ecf.filter.js > dist/ecf.filter.min.js",
20
+ "build": "rm -rf dist && mkdir -p dist && cp -R src/. dist/ && uglifyjs dist/ecf.filter.js -c -m -o dist/ecf.filter.min.js",
21
21
  "prepublishOnly": "npm run build"
22
22
  },
23
23
  "homepage": "https://gitlab.com/excitedfellas/eleventy-plugin-filter-page",
@@ -33,6 +33,6 @@
33
33
  "@eslint/js": "^9.39.2",
34
34
  "eslint": "^9.39.2",
35
35
  "globals": "^17.0.0",
36
- "minify": "^11.0.0"
36
+ "uglify-js": "^3.19.3"
37
37
  }
38
38
  }