55 * https://github.com/CoCreate-app/Conditional_Logic/blob/master/LICENSE
66 */
77import observer from '@cocreate/observer'
8- import { logger } from '@cocreate/utils' ;
8+ import { logger } from '@cocreate/utils' ;
99
1010let console = logger ( 'off' ) ;
11- initShowHideEles ( ) ;
11+ init ( ) ;
1212
1313document . addEventListener ( 'fetchedTemplate' , ( ) => {
14- initShowHideEles ( ) ;
14+ init ( ) ;
1515} )
1616
1717//. cocreate init section
18- function initShowHideEles ( container ) {
19- let mainContainer = container || document ;
20- if ( ! mainContainer . querySelectorAll ) {
21- return ;
22- }
23- let elements = mainContainer . querySelectorAll ( `[data-show],[data-hide]` ) ;
24- if ( elements . length === 0 && mainContainer != document &&
25- ( mainContainer . hasAttribute ( `[data-show]` ) || mainContainer . hasAttributes ( "[data-hide" ) ) ) {
26- elements = [ mainContainer ] ;
27- }
28- for ( let el of elements ) {
29-
30- if ( el . tagName . toLowerCase ( ) == "option" )
31- el = el . closest ( 'select' ) ;
32-
33- el . removeEventListener ( 'change' , selectShowHideEle ) ;
34- el . removeEventListener ( "click" , clickShowHideEle ) ;
35-
36- el . addEventListener ( "change" , selectShowHideEle ) ;
37- el . addEventListener ( "click" , clickShowHideEle ) ;
38- }
18+ function init ( ) {
19+ let elements = document . querySelectorAll ( `[data-show],[data-hide]` ) ;
20+ initElements ( elements )
21+ }
22+
23+ function initElements ( elements ) {
24+ for ( let el of elements )
25+ initElement ( el )
3926}
40- // CoCreateInit.register('CoCreateConditionalLogic', window, window.initShowHideEles);
4127
42- observer . init ( {
43- name : 'CoCreateConditionalLogic' ,
28+ function initElement ( el ) {
29+ if ( el . tagName . toLowerCase ( ) == "option" )
30+ el = el . closest ( 'select' ) ;
31+
32+ el . removeEventListener ( 'change' , selectShowHideEle ) ;
33+ el . removeEventListener ( "click" , clickShowHideEle ) ;
34+
35+ el . addEventListener ( "change" , selectShowHideEle ) ;
36+ el . addEventListener ( "click" , clickShowHideEle ) ;
37+ }
38+ // CoCreateInit.register('CoCreateConditionalLogic', window, window.init);
39+
40+ observer . init ( {
41+ name : 'CoCreateConditionalLogic' ,
4442 observe : [ 'addedNodes' ] ,
45- attributes : [ ' data-show' , ' data-hide' ] ,
43+ target : '[ data-show], [ data-hide]' ,
4644 callback : function ( mutation ) {
47-
48- initShowHideEles ( mutation . target )
45+ initElement ( mutation . target )
4946 }
5047} )
5148
5249//. upgrade by jin (using document event)
53- // function initShowHideEles () {
54-
50+ // function init () {
51+
5552// const selector = "[data-show],[data-hide]";
5653// document.removeEventListener("change", function(event) {
5754// const target = event.target.closest(selector);
5855// if (target) {
5956// selectShowHideEle(event)
6057// }
6158// });
62-
59+
6360// document.removeEventListener("click", function(event) {
6461// const target = event.target.closest(selector);
6562// if (target) {
6663// clickShowHideEle(event)
6764// }
6865// });
69-
66+
7067// document.addEventListener("change", function(event) {
7168// const target = event.target.closest(selector);
7269// if (target) {
7370// selectShowHideEle(event)
7471// }
7572// });
76-
73+
7774// document.addEventListener("click", function(event) {
7875// const target = event.target.closest(selector);
7976// if (target) {
@@ -87,71 +84,72 @@ function selectShowHideEle(e) {
8784 e . preventDefault ( )
8885 var select = this ;
8986 if ( typeof select . options != 'undefined' )
90- for ( var i = 0 , len = select . options . length ; i < len ; i ++ ) {
91- var opt = select . options [ i ] ;
92- var value = opt . value
93- if ( value != '' ) {
94- var show = opt . dataset . show
95- // var show_class = opt.dataset.showClass
96- if ( typeof show != 'undefined' ) {
97- for ( let el of document . querySelectorAll ( show ) )
98- el . classList . add ( 'hidden' ) ;
99- if ( opt . selected === true ) {
100- for ( let el of document . querySelectorAll ( show ) )
101- el . classList . remove ( 'hidden' ) ;
102- }
103- }
104- } //end value is not empty
105- } //end for
87+ for ( var i = 0 , len = select . options . length ; i < len ; i ++ ) {
88+ var opt = select . options [ i ] ;
89+ var value = opt . value
90+ if ( value != '' ) {
91+ var show = opt . dataset . show
92+ // var show_class = opt.dataset.showClass
93+ if ( typeof show != 'undefined' ) {
94+ for ( let el of document . querySelectorAll ( show ) )
95+ el . classList . add ( 'hidden' ) ;
96+ if ( opt . selected === true ) {
97+ for ( let el of document . querySelectorAll ( show ) )
98+ el . classList . remove ( 'hidden' ) ;
99+ }
100+ }
101+ } //end value is not empty
102+ } //end for
106103}
107104
108105function clickShowHideEle ( e ) {
109106 console . log ( this , 'click' ) ;
110107 var show = this . dataset . show ;
111108 var hide = this . dataset . hide ;
112109 let tagName = this . tagName . toLowerCase ( ) ;
113-
114- if ( tagName == 'input' && this . getAttribute ( "type" ) . toLowerCase ( ) == 'radio' ) {
110+
111+ if ( tagName == 'input' && this . getAttribute ( "type" ) . toLowerCase ( ) == 'radio' ) {
115112 let name = this . getAttribute ( "name" )
116- let radios = document . querySelectorAll ( tagName + '[name="' + name + '"]' ) ;
113+ let radios = document . querySelectorAll ( tagName + '[name="' + name + '"]' ) ;
117114 for ( let radio of radios ) {
118-
115+
119116 show = radio . dataset . show ;
120-
117+
121118 for ( let el of document . querySelectorAll ( show ) ) {
122119 el . classList . add ( 'hidden' ) ;
123120 }
124-
125- if ( radio . checked ) {
126- for ( let el of document . querySelectorAll ( show ) )
121+
122+ if ( radio . checked ) {
123+ for ( let el of document . querySelectorAll ( show ) )
127124 el . classList . remove ( 'hidden' ) ;
128125 }
129126 }
130-
131- } else {
132-
127+
128+ }
129+ else {
130+
133131 let updated_els = [ ] ;
134-
132+
135133 for ( let el of document . querySelectorAll ( show ) ) {
136- if ( el . classList . contains ( 'hidden' ) ) {
134+ if ( el . classList . contains ( 'hidden' ) ) {
137135 el . classList . remove ( 'hidden' ) ;
138136 updated_els . push ( el ) ;
139137 }
140138 }
141-
139+
142140 for ( let el of document . querySelectorAll ( hide ) ) {
143141 let existEqual = false ;
144- for ( let uel of updated_els ) {
145- if ( el . isEqualNode ( uel ) ) {
142+ for ( let uel of updated_els ) {
143+ if ( el . isEqualNode ( uel ) ) {
146144 existEqual = true ;
147145 break ;
148- }
146+ }
149147 }
150-
151- if ( ! existEqual ) el . classList . add ( 'hidden' ) ;
148+
149+ if ( ! existEqual ) el . classList . add ( 'hidden' ) ;
152150 }
153151 }
154152}
155153
156- const CoCreateConditionalLogic = { initShowHideEles , selectShowHideEle, clickShowHideEle } ;
154+ const CoCreateConditionalLogic = { initElements , selectShowHideEle, clickShowHideEle } ;
157155export default CoCreateConditionalLogic ;
0 commit comments