@@ -21,6 +21,10 @@ C22.32,8.481,24.301,9.057,26.013,10.047z"><animateTransform attributeType="xml"a
21
21
type="rotate"from="0 20 20"to="360 20 20"dur="0.5s"repeatCount="indefinite"/></path></svg>` ,
22
22
'check' : `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-check-circle-fill" viewBox="0 0 16 16">
23
23
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/>
24
+ </svg>` ,
25
+ 'check_circle' :`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-check-circle" viewBox="0 0 16 16">
26
+ <path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>
27
+ <path d="M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z"/>
24
28
</svg>`
25
29
} ;
26
30
@@ -72,14 +76,15 @@ function _componentAlert(message, time = 1, callback = function () {
72
76
}
73
77
74
78
class ComponentDot {
75
- MODE = {
76
- insert :'insert' ,
77
- delete :'delete'
79
+ MODE = {
80
+ insert : 'insert' ,
81
+ delete : 'delete'
78
82
} ;
83
+
79
84
constructor ( name , selected , select ) {
80
85
this . name = name ;
81
86
this . DOM = document . getElementById ( name ) ;
82
- if ( ! Array . isArray ( selected ) ) {
87
+ if ( ! Array . isArray ( selected ) ) {
83
88
console . error ( 'Dot param selected is not array!' ) ;
84
89
return ;
85
90
}
@@ -189,17 +194,18 @@ class ComponentDot {
189
194
}
190
195
191
196
class ComponentCascadeDot {
192
- MODE = {
193
- insert :'insert' ,
194
- delete :'delete'
197
+ MODE = {
198
+ insert : 'insert' ,
199
+ delete : 'delete'
195
200
} ;
201
+
196
202
constructor ( name , selected , select , options ) {
197
203
this . name = name ;
198
204
this . DOM = document . getElementById ( name ) ;
199
205
this . OPTIONS = Object . assign ( {
200
206
select_dimensional : [ ]
201
207
} , options ) ;
202
- if ( ! Array . isArray ( selected ) ) {
208
+ if ( ! Array . isArray ( selected ) ) {
203
209
console . error ( 'CascadeDot param selected is not array!' ) ;
204
210
return ;
205
211
}
@@ -208,6 +214,7 @@ class ComponentCascadeDot {
208
214
this . insert_data = [ ] ;
209
215
this . delete_data = [ ] ;
210
216
this . make ( ) . makeSelect ( select ) ;
217
+ this . selectInputDOM . value = JSON . stringify ( this . select_data ) ;
211
218
}
212
219
213
220
make ( ) {
@@ -239,6 +246,7 @@ class ComponentCascadeDot {
239
246
div . className = 'dlp dlp-text dlp-label' ;
240
247
div . setAttribute ( 'data-id' , v . key ) ;
241
248
div . setAttribute ( 'allow-select' , allowSelect ) ;
249
+ div . setAttribute ( 'checked' , 'false' ) ;
242
250
div . textContent = v . val ;
243
251
if ( v . hasOwnProperty ( 'nodes' ) ) {
244
252
let nodes = v . nodes . map ( ( n ) => n . key ) ;
@@ -247,10 +255,20 @@ class ComponentCascadeDot {
247
255
div . setAttribute ( 'data-parent-nodes-id' , JSON . stringify ( v . parentNodes ) ) ;
248
256
div . addEventListener ( 'click' , this . select . bind ( this , div , stack ) ) ;
249
257
stackDom . append ( div ) ;
258
+ /*selected append*/
259
+ let index = this . selected_data . indexOf ( parseInt ( v . key ) ) ;
260
+ if ( ( index !== - 1 ) && allowSelect == false ) {
261
+ this . selected_data . splice ( index , 1 ) ;
262
+ this . select_data = this . selected_data . slice ( 0 ) ;
263
+ } else if ( ( index !== - 1 ) && allowSelect == true ) {
264
+ this . selectToSelected ( div , stack ) ;
265
+ div . insertAdjacentHTML ( 'beforeend' , `<i>${ _componentSvg . check } </i>` ) ;
266
+ }
250
267
} ) ;
251
268
this . CONTENT_DOM . append ( stackDom ) ;
252
269
}
253
270
this . STACKS = this . CONTENT_DOM . childNodes ;
271
+ return this ;
254
272
}
255
273
256
274
makeDimensional ( data , dimension = 0 , parentNodes = [ ] ) {
@@ -284,7 +302,11 @@ class ComponentCascadeDot {
284
302
let nodes = JSON . parse ( element . getAttribute ( 'data-nodes-id' ) ) ;
285
303
this . selectToChildren ( stack + 1 , nodes ) ;
286
304
/*current stack*/
287
- this . selectActive ( stack , element ) ;
305
+ if ( element . getAttribute ( 'checked' ) == 'false' ) {
306
+ this . selectActive ( stack , element ) ;
307
+ } else {
308
+ this . selectInactive ( stack , element ) ;
309
+ }
288
310
/*parent nodes*/
289
311
let parent_nodes = JSON . parse ( element . getAttribute ( 'data-parent-nodes-id' ) ) ;
290
312
if ( Array . isArray ( parent_nodes ) ) {
@@ -294,34 +316,55 @@ class ComponentCascadeDot {
294
316
}
295
317
}
296
318
297
- selectActive ( stack , element ) {
298
- this . tagCal ( parseInt ( element . getAttribute ( 'data-id' ) ) , this . MODE . insert ) ;
319
+ selectActive ( stack , element ) {
320
+ if ( element . getAttribute ( 'allow-select' ) == 'false' ) return ;
321
+ if ( element . getAttribute ( 'checked' ) == 'true' ) return ;
322
+ this . selectToSelected ( element , stack ) ;
323
+ this . tagCal ( parseInt ( element . getAttribute ( 'data-id' ) ) , this . MODE . insert ) ;
299
324
let currentStackDocuments = this . STACKS [ stack ] . childNodes ;
300
325
let parentNode = JSON . parse ( element . getAttribute ( 'data-parent-nodes-id' ) ) . pop ( ) ;
301
326
currentStackDocuments . forEach ( ( D , index ) => {
302
- currentStackDocuments [ index ] . classList . remove ( 'dlp-label-active' ) ;
303
327
currentStackDocuments [ index ] . classList . remove ( 'dlp-label-silence' ) ;
304
328
let parents = JSON . parse ( D . getAttribute ( 'data-parent-nodes-id' ) ) ;
305
329
if ( parents [ stack - 1 ] != parentNode ) {
306
330
currentStackDocuments [ index ] . classList . add ( 'dlp-label-silence' ) ;
307
331
}
308
332
} ) ;
309
- element . classList . add ( 'dlp-label-active' ) ;
310
- if ( element . getAttribute ( 'allow-select' ) == 'true' ) {
311
- element . setAttribute ( 'allow-select' , 'false' ) ;
312
- let div = document . createElement ( 'div' ) ;
313
- div . className = 'dlp dlp-text dlp-label' ;
314
- div . setAttribute ( 'data-id' , element . getAttribute ( 'data-id' ) ) ;
315
- div . setAttribute ( 'stack' , stack ) ;
316
- div . textContent = element . textContent ;
317
- div . addEventListener ( 'click' , function ( ) {
318
- element . setAttribute ( 'allow-select' , 'true' ) ;
319
- this . remove ( ) ;
320
- } ) ;
321
- this . SELECTED_DOM . append ( div ) ;
333
+ element . insertAdjacentHTML ( 'beforeend' , `<i>${ _componentSvg . check } </i>` ) ;
334
+ }
335
+
336
+ selectInactive ( stack , element ) {
337
+ if ( element . getAttribute ( 'allow-select' ) == 'false' ) return ;
338
+ if ( element . getAttribute ( 'checked' ) == 'false' ) return ;
339
+ element . setAttribute ( 'checked' , 'false' ) ;
340
+ let id = element . getAttribute ( 'data-id' ) ;
341
+ this . tagCal ( parseInt ( id ) , this . MODE . delete ) ;
342
+ element . removeChild ( element . querySelector ( 'i' ) ) ;
343
+ for ( let index in this . SELECTED_DOM . childNodes ) {
344
+ let D = this . SELECTED_DOM . childNodes [ index ] ;
345
+ if ( ( D instanceof HTMLElement ) && ( D . getAttribute ( 'data-id' ) == id ) ) {
346
+ this . tagCal ( parseInt ( id ) , this . MODE . delete ) ;
347
+ D . remove ( ) ;
348
+ break ;
349
+ }
322
350
}
323
351
}
324
352
353
+ selectToSelected ( element , stack ) {
354
+ element . setAttribute ( 'checked' , 'true' ) ;
355
+ let div = document . createElement ( 'div' ) ;
356
+ div . className = 'dlp dlp-text dlp-label' ;
357
+ let id = element . getAttribute ( 'data-id' ) ;
358
+ div . setAttribute ( 'data-id' , id ) ;
359
+ div . setAttribute ( 'stack' , stack ) ;
360
+ div . textContent = element . textContent ;
361
+ var object = this ;
362
+ div . addEventListener ( 'click' , function ( ) {
363
+ object . selectInactive ( stack , element ) ;
364
+ } ) ;
365
+ this . SELECTED_DOM . append ( div ) ;
366
+ }
367
+
325
368
selectToParent ( node , stack , parent_node ) {
326
369
let currentStackDocuments = this . STACKS [ stack ] . childNodes ;
327
370
currentStackDocuments . forEach ( ( D , index ) => {
@@ -330,9 +373,7 @@ class ComponentCascadeDot {
330
373
if ( parents . length > 0 && ( parents [ stack - 1 ] != parent_node ) ) {
331
374
currentStackDocuments [ index ] . classList . add ( 'dlp-label-silence' ) ;
332
375
}
333
- currentStackDocuments [ index ] . classList . remove ( 'dlp-label-active' ) ;
334
376
if ( node == parseInt ( D . getAttribute ( 'data-id' ) ) ) {
335
- currentStackDocuments [ index ] . classList . add ( 'dlp-label-active' ) ;
336
377
currentStackDocuments [ index ] . classList . remove ( 'dlp-label-silence' ) ;
337
378
}
338
379
} ) ;
@@ -344,7 +385,6 @@ class ComponentCascadeDot {
344
385
let children = [ ] ;
345
386
if ( ! Array . isArray ( nodes ) || ( nodes . length == 0 ) ) {
346
387
currentStackDocuments . forEach ( ( D ) => {
347
- D . classList . remove ( 'dlp-label-active' ) ;
348
388
D . classList . add ( 'dlp-label-silence' ) ;
349
389
let child = JSON . parse ( D . getAttribute ( 'data-nodes-id' ) ) ;
350
390
if ( Array . isArray ( child ) ) {
0 commit comments