@total_onion/onion-library 2.0.232 → 2.0.234

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.
@@ -1,2 +1,20 @@
1
1
  loadmore-trigger {
2
+ grid-area: loadmore;
3
+ display: grid;
4
+ width: 100%;
5
+ place-items: center;
6
+ .loadmore-trigger__button {
7
+ background-color: black;
8
+ padding: 20px;
9
+ color: var(--theme-primary-text-colour, white);
10
+ width: max-content;
11
+ }
12
+ .loadmore-trigger__button:hover {
13
+ cursor: pointer;
14
+ background-color: greenyellow;
15
+ }
16
+ }
17
+ loadmore-trigger.hide {
18
+ opacity: 0.3;
19
+ pointer-events: none;
2
20
  }
@@ -1,2 +1,6 @@
1
- <loadmore-trigger id="loadmore-trigger" class="loadmore-trigger">
1
+ <loadmore-trigger
2
+ id="loadmore-trigger"
3
+ data-buttontext="Load More"
4
+ class="loadmore-trigger"
5
+ >
2
6
  </loadmore-trigger>
@@ -1,36 +1,57 @@
1
1
  post-filter-module {
2
+ grid-area: filter;
3
+ transform: translateX(-100%);
4
+ @starting-style {
5
+ transform: translateX(-100%);
6
+ }
2
7
  position: fixed;
3
8
  inset: 0;
4
9
  background-color: black;
5
10
  right: unset;
6
11
  display: block;
7
12
  width: 100vw;
8
- transform: translateX(-100%);
13
+ z-index: 99;
9
14
  max-width: 414px;
10
- z-index: 10;
11
15
  transition: transform ease-in-out 0.3s;
12
16
 
13
- @starting-style {
14
- transform: translateX(-100%);
17
+ &.active {
18
+ transform: translateX(0%);
15
19
  }
16
-
17
20
  @media (min-width: 768px) {
18
21
  max-width: unset;
19
22
  width: 475px;
20
23
  }
21
24
 
22
- .post-filter-module__grouping-category-button {
25
+ .post-filter-module__clear-filters-button {
26
+ border: none;
23
27
  }
24
28
 
29
+ .post-filter-module__grouping-category-button {
30
+ text-transform: uppercase;
31
+ border: none;
32
+ color: var(--theme-primary-text-colour);
33
+ font-family: var(--secondary-font-family);
34
+ font-size: 24;
35
+
36
+ &.active {
37
+ }
38
+ }
39
+ .post-filter-module__filter-category-container {
40
+ height: 0px;
41
+ overflow: hidden;
42
+ transition: height ease-out 0.3s;
43
+ }
25
44
  .post-filter-module__filter-category-button {
26
- appearance: none;
27
- color: var(--theme-primary-text-colour, white);
45
+ color: var(--theme-primary-text-colour);
46
+ font-family: var(--primary-font-family);
28
47
  border: 1px solid transparent;
29
- background-color: var(--theme-primary-background-colour, black);
48
+ font-size: 14;
30
49
  }
31
50
  .post-filter-module__filter-category-button.active-cat {
32
- color: gold;
33
- border: 1px solid gold;
51
+ color: var(--primary-gold-100);
52
+ }
53
+ .post-filter-module__clear-filters-button {
54
+ color: var(--theme-primary-text-colour);
34
55
  }
35
56
  }
36
57
  post-filter-module.active {
@@ -7,6 +7,7 @@
7
7
  data-postsperpagedesktop="8"
8
8
  data-postsperpagemobile="6"
9
9
  data-loadmoretriggerclass="loadmore-trigger"
10
+ data-textinputclass="text-input-trigger"
10
11
  class="post-filter-module"
11
12
  >
12
13
  </post-filter-module>
@@ -4,10 +4,12 @@ export default function postfiltermoduleJs(options = {}) {
4
4
  customElements.define(
5
5
  'post-filter-module',
6
6
  class extends HTMLElement {
7
+ static observedAttributes = ['data-devcontent'];
7
8
  constructor() {
8
9
  super();
9
- this.enableLogs = this.dataset.enablelogs;
10
+ this.enableLogs = true;
10
11
  this.filterState = {
12
+ enableLogs: false,
11
13
  allposts: [],
12
14
  filteredposts: [],
13
15
  activefilters: new Set(),
@@ -50,6 +52,40 @@ export default function postfiltermoduleJs(options = {}) {
50
52
  });
51
53
  });
52
54
 
55
+ this.textSearchTriggers = document.querySelectorAll(
56
+ `.${this.dataset.textinputclass}`
57
+ );
58
+
59
+ this.textSearchTriggers.forEach((trigger) => {
60
+ trigger.addEventListener('textinput', (e) => {
61
+ const inputText =
62
+ e.target.querySelector('input')?.value;
63
+
64
+ console.log(
65
+ '🚀 ~ constructor ~ inputEl:',
66
+ inputText
67
+ );
68
+ this.filterPosts();
69
+ const searchPosts =
70
+ this.filterState.filteredposts.filter(
71
+ (post) => {
72
+ if (
73
+ post.name
74
+ ?.toLowerCase()
75
+ .includes(
76
+ inputText.toLowerCase()
77
+ )
78
+ ) {
79
+ return post;
80
+ }
81
+ }
82
+ );
83
+
84
+ this.filterState.setFilteredPosts.bind(this)({
85
+ filteredposts: searchPosts
86
+ });
87
+ });
88
+ });
53
89
  const postFilterContainer =
54
90
  document.createElement('div');
55
91
  postFilterContainer.className =
@@ -84,31 +120,26 @@ export default function postfiltermoduleJs(options = {}) {
84
120
  this.clearFilters.bind(this)
85
121
  );
86
122
 
87
- this.devMode = this.dataset.dev;
88
123
  this.devModeContent = this.dataset.devcontent;
89
124
  }
90
125
  async connectedCallback() {
91
126
  console.log('Filter Module element added to page.');
92
127
  let data;
93
128
  if (
94
- this.devMode == 'true' ||
95
- this.classList.contains('dev-petz') //Easter Egg :D
129
+ this.dataset.dev === 'true' ||
130
+ this.dataset.devcontent === 'dev-petz' ||
131
+ this.classList.contains('dev-pets') //Easter Egg :D
96
132
  ) {
97
- const devdatalocation =
98
- this.dataset.devdatalocation;
99
- data = await import(
100
- `./dev-content/dev-content${devdatalocation}.js`
101
- );
102
- this.filterState.allposts = data[`devContentPets`];
103
-
104
- this.filterState.allcategories =
105
- data[`devContentCategories`];
133
+ await this.getDevContent();
106
134
  } else {
107
135
  data = globalThis[this.dataset.dataobjectid];
108
136
  this.enableLogs &&
109
137
  console.log('🚀 dataobject: ', data);
110
- this.filterState.allposts = data[`posts`];
111
- this.filterState.allcategories = data[`categories`];
138
+ if (data) {
139
+ this.filterState.allposts = data[`posts`];
140
+ this.filterState.allcategories =
141
+ data[`categories`];
142
+ }
112
143
  }
113
144
 
114
145
  if (this.filterState.allcategories.length > 0) {
@@ -251,15 +282,31 @@ export default function postfiltermoduleJs(options = {}) {
251
282
  }
252
283
  });
253
284
  });
254
- this.filterPosts();
255
285
 
286
+ this.filterPosts();
256
287
  this.classList.add('loaded');
257
288
  }
258
289
 
259
290
  attributeChangedCallback(name, oldValue, newValue) {
260
- // console.log(`Attribute ${name} has changed.`);
291
+ console.log(`Attribute ${name} has changed.`);
292
+ if (newValue) {
293
+ this.getDevContent();
294
+ }
295
+ }
296
+ async getDevContent() {
297
+ this.enableLogs && console.log('Getting dev content..');
298
+ const data = await import(
299
+ `./dev-content/dev-content${this.dataset.devdatalocation}.js`
300
+ );
301
+ this.filterState.allposts = data[`devContentPets`];
302
+ this.filterState.allcategories =
303
+ data[`devContentCategories`];
304
+ this.filterPosts();
261
305
  }
262
306
  filterPosts(event) {
307
+ if (this.filterState.allposts.length == 0) {
308
+ return;
309
+ }
263
310
  if (this.filterState.activefilters.size === 0) {
264
311
  const numberPosts =
265
312
  Number(this.filterState.postsperpagedesktop) *
@@ -270,9 +317,10 @@ export default function postfiltermoduleJs(options = {}) {
270
317
  numberPosts
271
318
  )
272
319
  });
320
+
273
321
  if (
274
- this.filterState.allposts.length ==
275
- this.filterState.filteredposts.length
322
+ this.filterState.filteredposts.length >=
323
+ this.filterState.allposts.length
276
324
  ) {
277
325
  this.loadMoreTriggers.forEach((trigger) => {
278
326
  trigger.classList.add('hide');
@@ -1,16 +1,37 @@
1
1
  post-grid-display-module {
2
+ grid-area: display;
2
3
  display: grid;
3
- background-color: hotpink;
4
+
4
5
  .post-grid-display-module__grid-container {
5
6
  place-self: stretch;
6
7
  display: grid;
7
8
  padding: 10px;
8
- gap: 10px;
9
- grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
9
+ gap: 30px;
10
+ grid-template-columns: repeat(auto-fit, minmax(330px, 1fr));
10
11
  }
11
- .post-grid-display-module__post-image {
12
- width: 100%;
13
- height: 100%;
14
- object-fit: cover;
12
+ .post-grid-display-module__post-container {
13
+ display: grid;
14
+ place-items: stretch;
15
+ grid-template-rows: max-content;
16
+ .post-grid-display-module__post-title {
17
+ color: white;
18
+ grid-row: 2;
19
+ text-box-edge: unset;
20
+ line-height: 120%;
21
+ text-transform: uppercase;
22
+ text-align: center;
23
+ font-size: 36px;
24
+ .font-secondary {
25
+ display: block;
26
+ }
27
+ }
28
+ .post-grid-display-module__post-image {
29
+ grid-row: 1;
30
+ width: 100%;
31
+ height: auto;
32
+ place-self: stretch;
33
+ object-fit: cover;
34
+ aspect-ratio: 9 / 11;
35
+ }
15
36
  }
16
37
  }
@@ -6,6 +6,8 @@
6
6
  <link rel="stylesheet" href="../../public/publicBundleBase.css" />
7
7
  <link rel="stylesheet" href="./ptfg-9000.css" />
8
8
  <link rel="stylesheet" href="../webc-toggle-trigger/toggle-trigger.css" />
9
+ <link rel="stylesheet" href="../webc-text-input-trigger/text-input-trigger.css" />
10
+ <link rel="stylesheet" href="../webc-loadmore-trigger/loadmore-trigger.css" />
9
11
  <link
10
12
  rel="stylesheet"
11
13
  href="../webc-post-filter-module/post-filter-module.css"
@@ -27,58 +29,30 @@
27
29
  data-dev="true"
28
30
  data-devdatalocation="local"
29
31
  class="post-filter-module__filter"
30
- > <toggle-trigger
31
- id="toggle-trigger"
32
- data-toggletext="Toggle Text"
33
- data-toggletarget="#filter-module"
34
- data-toggleclass="active"
35
- class="toggle-trigger"
36
- >
32
+ data-postsperpagedesktop="8"
33
+ data-postsperpagemobile="6"
34
+ data-loadmoretriggerclass="loadmore-trigger"
35
+ data-textinputclass="text-input-trigger"
36
+ >
37
+ <toggle-trigger
38
+ id="toggle-trigger"
39
+ data-toggletext="Toggle Text"
40
+ data-toggletarget="#filter-module"
41
+ data-toggleclass="active"
42
+ class="toggle-trigger"
43
+ >
37
44
  </post-filter-module>
38
- <toggle-trigger
39
- id="toggle-trigger"
40
- data-toggletext="Toggle Text"
41
- data-toggletarget="#filter-module"
42
- data-toggleclass="active"
43
- class="toggle-trigger"
44
- >
45
- </toggle-trigger>
45
+ <text-input-trigger id="text-input-trigger" class="text-input-trigger"></text-input-trigger>
46
+ <toggle-trigger id="toggle-trigger" data-toggletext="Filter" data-toggletarget="#filter-module" data-toggleclass="active" class="toggle-trigger"></toggle-trigger>
46
47
  <post-grid-display-module
47
48
  id="display-module"
48
49
  data-posts=""
49
50
  class="post-grid-display-module cmpl-block-padding cmpl-block-settings"
50
- >
51
- </post-grid-display-module>
51
+ ></post-grid-display-module>
52
+ <loadmore-trigger id="loadmore-trigger" data-buttontext="Load More" class="loadmore-trigger"></loadmore-trigger>
52
53
  </ptfg-9000>
53
54
 
54
55
  <script type="module">
55
- // Post filter module
56
- // const postfiltermoduletemplate = await fetch(
57
- // "../webc-post-filter-module/post-filter-module.html"
58
- // );
59
- // const postfiltermodulehtml = await postfiltermoduletemplate.text();
60
- // document
61
- // .querySelector("ptfg-9000")
62
- // .insertAdjacentHTML("beforeend", postfiltermodulehtml);
63
-
64
- //toggle trigger
65
- // const toggletrigger = await fetch(
66
- // "../webc-toggle-trigger/toggle-trigger.html"
67
- // );
68
- // const toggletriggerhtml = await toggletrigger.text();
69
- // document
70
- // .querySelector("ptfg-9000")
71
- // .insertAdjacentHTML("beforeend", toggletriggerhtml);
72
-
73
- //post grid display
74
- // const postgriddisplay = await fetch(
75
- // "../webc-post-grid-display-module/post-grid-display-module.html"
76
- // );
77
- // const postgriddisplayhtml = await postgriddisplay.text();
78
- // document
79
- // .querySelector("ptfg-9000")
80
- // .insertAdjacentHTML("beforeend", postgriddisplayhtml);
81
-
82
56
  //Run Component JS
83
57
  import blockfilterjs from "../webc-post-filter-module/post-filter-module.js";
84
58
  blockfilterjs();
@@ -86,6 +60,12 @@
86
60
  import toggletriggerjs from "../webc-toggle-trigger/toggle-trigger.js";
87
61
  toggletriggerjs();
88
62
 
63
+ import textInputTrigger from "../webc-text-input-trigger/text-input-trigger.js";
64
+ textInputTrigger();
65
+
66
+ import loadmoreTrigger from "../webc-loadmore-trigger/loadmore-trigger.js";
67
+ loadmoreTrigger();
68
+
89
69
  import blockgridjs from "../webc-post-grid-display-module/post-grid-display-module.js";
90
70
  blockgridjs();
91
71
 
@@ -94,3 +74,34 @@
94
74
  </script>
95
75
  </body>
96
76
  </html>
77
+
78
+
79
+ <!--
80
+ <script type="module">
81
+ // Post filter module
82
+ const postfiltermoduletemplate = await fetch(
83
+ "../webc-post-filter-module/post-filter-module.html"
84
+ );
85
+ const postfiltermodulehtml = await postfiltermoduletemplate.text();
86
+ document
87
+ .querySelector("ptfg-9000")
88
+ .insertAdjacentHTML("beforeend", postfiltermodulehtml);
89
+ // toggle trigger
90
+ const toggletrigger = await fetch(
91
+ "../webc-toggle-trigger/toggle-trigger.html"
92
+ );
93
+ const toggletriggerhtml = await toggletrigger.text();
94
+ document
95
+ .querySelector("ptfg-9000")
96
+ .insertAdjacentHTML("beforeend", toggletriggerhtml);
97
+
98
+ // post grid display
99
+ const postgriddisplay = await fetch(
100
+ "../webc-post-grid-display-module/post-grid-display-module.html"
101
+ );
102
+ const postgriddisplayhtml = await postgriddisplay.text();
103
+ document
104
+ .querySelector("ptfg-9000")
105
+ .insertAdjacentHTML("beforeend", postgriddisplayhtml);
106
+
107
+ </script> -->
@@ -1,6 +1,12 @@
1
1
  ptfg-9000 {
2
- display: block;
3
- background-color: rebeccapurple;
2
+ display: grid;
3
+ grid-template:
4
+ 'filter ..'
5
+ 'textinput toggleclass'
6
+ 'display display'
7
+ 'loadmore loadmore' / 1fr 1fr;
8
+ background-color: black;
9
+
4
10
  --padding-block-multiplier-mobile-top: 1;
5
11
  --padding-inline-multiplier-mobile-right: 1;
6
12
  --padding-block-multiplier-mobile-bottom: 1;
@@ -0,0 +1,30 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <link rel="stylesheet" href="../../public/publicBundleBase.css" />
7
+ <link rel="stylesheet" href="./text-input-trigger.css" />
8
+ <title>PTFG</title>
9
+ <style>
10
+ body {
11
+ background-color: #e7b8b8;
12
+ }
13
+ main {
14
+ max-width: 600px;
15
+ margin-inline: auto;
16
+ padding: 50px;
17
+ }
18
+ </style>
19
+ </head>
20
+ <body>
21
+ <main class="main-container"></main>
22
+ <script async type="module">
23
+ const template = await fetch("./text-input-trigger.html");
24
+ const html = await template.text();
25
+ document.querySelector(".main-container").innerHTML = html;
26
+ import blockjs from "./text-input-trigger.js";
27
+ blockjs();
28
+ </script>
29
+ </body>
30
+ </html>
@@ -0,0 +1,6 @@
1
+ text-input-trigger {
2
+ grid-area: textinput;
3
+ display: grid;
4
+ width: 100%;
5
+ place-items: center;
6
+ }
@@ -0,0 +1,4 @@
1
+ <text-input-trigger id="text-input-trigger" class="text-input-trigger">
2
+ {#
3
+ <input title="text-input" class="text-input-trigger__input" type="text" /> #}
4
+ </text-input-trigger>
@@ -0,0 +1,33 @@
1
+ export default function loadmoreTriggerJs(options = {}) {
2
+ try {
3
+ if (!customElements.get('text-input-trigger')) {
4
+ customElements.define(
5
+ 'text-input-trigger',
6
+ class extends HTMLElement {
7
+ constructor() {
8
+ super();
9
+ this.enableLogs = this.dataset.enablelogs;
10
+ this.textInput = document.createElement('input');
11
+ this.textInput.setAttribute('type', 'text');
12
+ this.textInput.className = 'text-input-trigger__input';
13
+ this.appendChild(this.textInput);
14
+ this.textInput.placeholder =
15
+ this.dataset.placeholdertext || 'Start typing...';
16
+ this.textInput.addEventListener('input', (e) => {
17
+ this.dispatchEvent(new CustomEvent('textinput'));
18
+ });
19
+ }
20
+ connectedCallback() {
21
+ console.log('text input module added to page.');
22
+ this.classList.add('loaded');
23
+ }
24
+ attributeChangedCallback(name, oldValue, newValue) {
25
+ // console.log(`Attribute ${name} has changed.`);
26
+ }
27
+ }
28
+ );
29
+ }
30
+ } catch (error) {
31
+ console.error(error);
32
+ }
33
+ }
@@ -1,5 +1,8 @@
1
1
  toggle-trigger {
2
- display: block;
2
+ grid-area: toggleclass;
3
+ display: grid;
4
+ width: 100%;
5
+ place-items: center;
3
6
  .toggle-trigger__button {
4
7
  display: block;
5
8
  appearance: none;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@total_onion/onion-library",
3
- "version": "2.0.232",
3
+ "version": "2.0.234",
4
4
  "description": "Component library",
5
5
  "main": "index.js",
6
6
  "scripts": {