5
5
* https://github.com/CoCreate-app/Conditional_Logic/blob/master/LICENSE
6
6
*/
7
7
import observer from '@cocreate/observer'
8
- import { logger } from '@cocreate/utils' ;
8
+ import { logger } from '@cocreate/utils' ;
9
9
10
10
let console = logger ( 'off' ) ;
11
- initShowHideEles ( ) ;
11
+ init ( ) ;
12
12
13
13
document . addEventListener ( 'fetchedTemplate' , ( ) => {
14
- initShowHideEles ( ) ;
14
+ init ( ) ;
15
15
} )
16
16
17
17
//. 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 )
39
26
}
40
- // CoCreateInit.register('CoCreateConditionalLogic', window, window.initShowHideEles);
41
27
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' ,
44
42
observe : [ 'addedNodes' ] ,
45
- attributes : [ ' data-show' , ' data-hide' ] ,
43
+ target : '[ data-show], [ data-hide]' ,
46
44
callback : function ( mutation ) {
47
-
48
- initShowHideEles ( mutation . target )
45
+ initElement ( mutation . target )
49
46
}
50
47
} )
51
48
52
49
//. upgrade by jin (using document event)
53
- // function initShowHideEles () {
54
-
50
+ // function init () {
51
+
55
52
// const selector = "[data-show],[data-hide]";
56
53
// document.removeEventListener("change", function(event) {
57
54
// const target = event.target.closest(selector);
58
55
// if (target) {
59
56
// selectShowHideEle(event)
60
57
// }
61
58
// });
62
-
59
+
63
60
// document.removeEventListener("click", function(event) {
64
61
// const target = event.target.closest(selector);
65
62
// if (target) {
66
63
// clickShowHideEle(event)
67
64
// }
68
65
// });
69
-
66
+
70
67
// document.addEventListener("change", function(event) {
71
68
// const target = event.target.closest(selector);
72
69
// if (target) {
73
70
// selectShowHideEle(event)
74
71
// }
75
72
// });
76
-
73
+
77
74
// document.addEventListener("click", function(event) {
78
75
// const target = event.target.closest(selector);
79
76
// if (target) {
@@ -87,71 +84,72 @@ function selectShowHideEle(e) {
87
84
e . preventDefault ( )
88
85
var select = this ;
89
86
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
106
103
}
107
104
108
105
function clickShowHideEle ( e ) {
109
106
console . log ( this , 'click' ) ;
110
107
var show = this . dataset . show ;
111
108
var hide = this . dataset . hide ;
112
109
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' ) {
115
112
let name = this . getAttribute ( "name" )
116
- let radios = document . querySelectorAll ( tagName + '[name="' + name + '"]' ) ;
113
+ let radios = document . querySelectorAll ( tagName + '[name="' + name + '"]' ) ;
117
114
for ( let radio of radios ) {
118
-
115
+
119
116
show = radio . dataset . show ;
120
-
117
+
121
118
for ( let el of document . querySelectorAll ( show ) ) {
122
119
el . classList . add ( 'hidden' ) ;
123
120
}
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 ) )
127
124
el . classList . remove ( 'hidden' ) ;
128
125
}
129
126
}
130
-
131
- } else {
132
-
127
+
128
+ }
129
+ else {
130
+
133
131
let updated_els = [ ] ;
134
-
132
+
135
133
for ( let el of document . querySelectorAll ( show ) ) {
136
- if ( el . classList . contains ( 'hidden' ) ) {
134
+ if ( el . classList . contains ( 'hidden' ) ) {
137
135
el . classList . remove ( 'hidden' ) ;
138
136
updated_els . push ( el ) ;
139
137
}
140
138
}
141
-
139
+
142
140
for ( let el of document . querySelectorAll ( hide ) ) {
143
141
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 ) ) {
146
144
existEqual = true ;
147
145
break ;
148
- }
146
+ }
149
147
}
150
-
151
- if ( ! existEqual ) el . classList . add ( 'hidden' ) ;
148
+
149
+ if ( ! existEqual ) el . classList . add ( 'hidden' ) ;
152
150
}
153
151
}
154
152
}
155
153
156
- const CoCreateConditionalLogic = { initShowHideEles , selectShowHideEle, clickShowHideEle } ;
154
+ const CoCreateConditionalLogic = { initElements , selectShowHideEle, clickShowHideEle } ;
157
155
export default CoCreateConditionalLogic ;
0 commit comments