1- 'use strict'
1+ 'use strict' ;
22
3- const InitializeCMSSelect = ( ) => {
4-
5- const selectElements = document . querySelectorAll ( '[wt-cmsselect-element^="select-"], [wt-cmsselect-element="select"]' ) ;
6-
7- if ( ! selectElements || selectElements . length === 0 ) return ;
3+ class CMSSelect {
4+ constructor ( selectElement ) {
5+ try {
6+ this . selectElement = selectElement ;
7+ this . attributeValue = this . selectElement . getAttribute ( 'wt-cmsselect-element' ) ;
8+ this . index = this . attributeValue . replace ( 'select' , '' ) ;
9+
10+ // Fetch the corresponding options
11+ this . options = document . querySelectorAll ( `[wt-cmsselect-element="target${ this . index } "]` ) ;
12+ if ( ! this . options || this . options . length === 0 ) throw new Error ( `No options found for select ${ this . index } ` ) ;
813
9- for ( let select of selectElements ) {
10- const _sel = select . getAttribute ( 'wt-cmsselect-element' ) ;
11- let index = _sel . replace ( 'select' , '' ) ;
12- let _opts = document . querySelectorAll ( `[wt-cmsselect-element="target${ index } "]` ) ;
14+ // Populate the select element
15+ this . populateSelect ( ) ;
16+ } catch ( err ) {
17+ console . error ( `Error initializing CMSSelect: ${ err . message } ` ) ;
18+ }
19+ }
1320
14- for ( let opt of _opts ) {
15- let val = opt . getAttribute ( 'wt-cmsselect-value' ) ;
16- let text = opt . innerText ;
17-
18- if ( text && text !== "" )
19- select . add ( new Option ( text , ( val ? val : text ) ) )
21+ populateSelect ( ) {
22+ try {
23+ this . options . forEach ( opt => {
24+ const value = opt . getAttribute ( 'wt-cmsselect-value' ) ;
25+ const text = opt . innerText ;
26+
27+ if ( text && text . trim ( ) !== "" ) {
28+ const option = new Option ( text , value || text ) ;
29+ this . selectElement . add ( option ) ;
30+ }
31+ } ) ;
32+ } catch ( err ) {
33+ console . error ( `Error populating select: ${ err . message } ` ) ;
2034 }
2135 }
2236}
2337
24- window . addEventListener ( 'DOMContentLoaded' , InitializeCMSSelect ( ) ) ;
38+ const InitializeCMSSelect = ( ) => {
39+ try {
40+ window . trickeries = window . trickeries || [ ] ;
41+ const selectElements = document . querySelectorAll ( '[wt-cmsselect-element^="select-"], [wt-cmsselect-element="select"]' ) ;
42+
43+ if ( ! selectElements || selectElements . length === 0 ) throw new Error ( "No select elements found." ) ;
44+
45+ selectElements . forEach ( selectElement => {
46+ const instance = new CMSSelect ( selectElement ) ;
47+ window . trickeries . push ( { 'CMSSelect' : instance } ) ;
48+ } ) ;
49+ } catch ( err ) {
50+ console . error ( `Error during CMSSelect initialization: ${ err . message } ` ) ;
51+ }
52+ } ;
53+
54+ // Ensure the script runs when the DOM is fully loaded
55+ if ( / c o m p l e t e | i n t e r a c t i v e | l o a d e d / . test ( document . readyState ) ) {
56+ InitializeCMSSelect ( ) ;
57+ } else {
58+ window . addEventListener ( 'DOMContentLoaded' , InitializeCMSSelect ) ;
59+ }
0 commit comments