@@ -76,7 +76,7 @@ class ComponentDot {
76
76
this . name = name ;
77
77
this . DOM = document . getElementById ( name ) ;
78
78
this . make ( selected , select ) ;
79
- this . selected_data = Object . keys ( selected ) ;
79
+ this . selected_data = selected ;
80
80
this . select_data = this . selected_data . map ( ( x ) => x ) ;
81
81
this . insert_data = [ ] ;
82
82
this . delete_data = [ ] ;
@@ -94,7 +94,7 @@ class ComponentDot {
94
94
let selected_dom = '' ;
95
95
let select_dom = '' ;
96
96
for ( let i in select ) {
97
- if ( selected [ i ] ) {
97
+ if ( selected . indexOf ( parseInt ( i ) ) != - 1 ) {
98
98
selected_dom += `<div class='dlp dlp-text dlp-label' data-id='${ i } ' title="${ select [ i ] } ">${ select [ i ] } </div>` ;
99
99
continue ;
100
100
}
@@ -181,12 +181,17 @@ class ComponentDot {
181
181
}
182
182
183
183
class ComponentCascadeDot {
184
- constructor ( name , selected , select , options ) {
184
+ constructor ( name , selected , select , options ) {
185
185
this . name = name ;
186
186
this . DOM = document . getElementById ( name ) ;
187
- this . selected_data = selected ;
188
- this . select_data = select ;
189
- this . make ( ) . makeSelect ( ) ;
187
+ this . OPTIONS = Object . assign ( {
188
+ select_dimensional : [ ]
189
+ } , options ) ;
190
+ this . selected_data = Object . keys ( selected ) ;
191
+ this . select_data = this . selected_data . map ( ( x ) => x ) ;
192
+ this . insert_data = [ ] ;
193
+ this . delete_data = [ ] ;
194
+ this . make ( ) . makeSelect ( select ) ;
190
195
}
191
196
192
197
make ( ) {
@@ -201,24 +206,30 @@ class ComponentCascadeDot {
201
206
return this ;
202
207
}
203
208
204
- makeSelect ( ) {
209
+ makeSelect ( select ) {
205
210
this . dimensional_data = [ ] ;
206
- this . makeDimensional ( this . select_data ) ;
211
+ this . makeDimensional ( select ) ;
207
212
for ( let stack in this . dimensional_data ) {
213
+ stack = parseInt ( stack ) ;
208
214
let data = this . dimensional_data [ stack ] ;
209
215
let stackDom = document . createElement ( 'div' ) ;
210
216
stackDom . className = 'dot-cascade-stack dlp-scroll' ;
217
+ var allowSelect = true ;
218
+ if ( this . OPTIONS . select_dimensional . length > 0 && ( this . OPTIONS . select_dimensional . indexOf ( stack ) == - 1 ) ) {
219
+ allowSelect = false ;
220
+ }
211
221
data . forEach ( ( v ) => {
212
222
let div = document . createElement ( 'div' ) ;
213
223
div . className = 'dlp dlp-text dlp-label' ;
214
224
div . setAttribute ( 'data-id' , v . key ) ;
225
+ div . setAttribute ( 'allow-select' , allowSelect ) ;
215
226
div . textContent = v . val ;
216
227
if ( v . hasOwnProperty ( 'nodes' ) ) {
217
228
let nodes = v . nodes . map ( ( n ) => n . key ) ;
218
229
div . setAttribute ( 'data-nodes-id' , JSON . stringify ( nodes ) ) ;
219
230
}
220
231
div . setAttribute ( 'data-parent-nodes-id' , JSON . stringify ( v . parentNodes ) ) ;
221
- div . addEventListener ( 'click' , this . select . bind ( this , div , parseInt ( stack ) ) ) ;
232
+ div . addEventListener ( 'click' , this . select . bind ( this , div , stack ) ) ;
222
233
stackDom . append ( div ) ;
223
234
} ) ;
224
235
this . CONTENT_DOM . append ( stackDom ) ;
@@ -257,79 +268,131 @@ class ComponentCascadeDot {
257
268
let nodes = JSON . parse ( element . getAttribute ( 'data-nodes-id' ) ) ;
258
269
this . selectToChildren ( stack + 1 , nodes ) ;
259
270
/*current stack*/
271
+ this . selectActive ( stack , element ) ;
272
+ /*parent nodes*/
273
+ let parent_nodes = JSON . parse ( element . getAttribute ( 'data-parent-nodes-id' ) ) ;
274
+ if ( Array . isArray ( parent_nodes ) ) {
275
+ for ( let stack in parent_nodes ) {
276
+ this . selectToParent ( parent_nodes [ stack ] , stack , parent_nodes [ stack - 1 ] ) ;
277
+ }
278
+ }
279
+ }
280
+
281
+ selectActive ( stack , element ) {
260
282
let currentStackDocuments = this . STACKS [ stack ] . childNodes ;
261
283
let parentNode = JSON . parse ( element . getAttribute ( 'data-parent-nodes-id' ) ) . pop ( ) ;
262
284
currentStackDocuments . forEach ( ( D , index ) => {
263
285
currentStackDocuments [ index ] . classList . remove ( 'dlp-label-active' ) ;
264
286
currentStackDocuments [ index ] . classList . remove ( 'dlp-label-silence' ) ;
265
287
let parents = JSON . parse ( D . getAttribute ( 'data-parent-nodes-id' ) ) ;
266
- if ( parents [ stack - 1 ] != parentNode ) {
288
+ if ( parents [ stack - 1 ] != parentNode ) {
267
289
currentStackDocuments [ index ] . classList . add ( 'dlp-label-silence' ) ;
268
290
}
269
291
} ) ;
270
292
element . classList . add ( 'dlp-label-active' ) ;
271
- /*parent nodes*/
272
- let parent_nodes = JSON . parse ( element . getAttribute ( 'data-parent-nodes-id' ) ) ;
273
- if ( Array . isArray ( parent_nodes ) ) {
274
- for ( let stack in parent_nodes ) {
275
- this . selectToParent ( parent_nodes [ stack ] , stack , parent_nodes [ stack - 1 ] ) ;
276
- }
293
+ if ( element . getAttribute ( 'allow-select' ) == 'true' ) {
294
+ element . setAttribute ( 'allow-select' , 'false' ) ;
295
+ let div = document . createElement ( 'div' ) ;
296
+ div . className = 'dlp dlp-text dlp-label' ;
297
+ div . setAttribute ( 'data-id' , element . getAttribute ( 'data-id' ) ) ;
298
+ div . setAttribute ( 'stack' , stack ) ;
299
+ div . textContent = element . textContent ;
300
+ div . addEventListener ( 'click' , function ( ) {
301
+ element . setAttribute ( 'allow-select' , 'true' ) ;
302
+ this . remove ( ) ;
303
+ } ) ;
304
+ this . SELECTED_DOM . append ( div ) ;
277
305
}
278
306
}
279
307
280
- selectToParent ( node , stack , parent_node ) {
308
+ selectToParent ( node , stack , parent_node ) {
281
309
let currentStackDocuments = this . STACKS [ stack ] . childNodes ;
282
310
currentStackDocuments . forEach ( ( D , index ) => {
283
311
let parents = JSON . parse ( D . getAttribute ( 'data-parent-nodes-id' ) ) ;
284
312
currentStackDocuments [ index ] . classList . remove ( 'dlp-label-silence' ) ;
285
- if ( parents . length > 0 && ( parents [ stack - 1 ] != parent_node ) ) {
313
+ if ( parents . length > 0 && ( parents [ stack - 1 ] != parent_node ) ) {
286
314
currentStackDocuments [ index ] . classList . add ( 'dlp-label-silence' ) ;
287
315
}
288
316
currentStackDocuments [ index ] . classList . remove ( 'dlp-label-active' ) ;
289
- if ( node == parseInt ( D . getAttribute ( 'data-id' ) ) ) {
317
+ if ( node == parseInt ( D . getAttribute ( 'data-id' ) ) ) {
290
318
currentStackDocuments [ index ] . classList . add ( 'dlp-label-active' ) ;
291
319
currentStackDocuments [ index ] . classList . remove ( 'dlp-label-silence' ) ;
292
320
}
293
321
} ) ;
294
322
}
295
323
296
324
selectToChildren ( stack , nodes ) {
297
- if ( stack > ( this . dimensional_data . length - 1 ) ) return ;
325
+ if ( stack > ( this . dimensional_data . length - 1 ) ) return ;
298
326
let currentStackDocuments = this . STACKS [ stack ] . childNodes ;
299
327
let children = [ ] ;
300
- if ( ! Array . isArray ( nodes ) || ( nodes . length == 0 ) ) {
328
+ if ( ! Array . isArray ( nodes ) || ( nodes . length == 0 ) ) {
301
329
currentStackDocuments . forEach ( ( D ) => {
302
330
D . classList . remove ( 'dlp-label-active' ) ;
303
331
D . classList . add ( 'dlp-label-silence' ) ;
304
332
let child = JSON . parse ( D . getAttribute ( 'data-nodes-id' ) ) ;
305
- if ( Array . isArray ( child ) ) {
306
- child . forEach ( ( c ) => {
307
- if ( children . indexOf ( child ) == - 1 ) {
333
+ if ( Array . isArray ( child ) ) {
334
+ child . forEach ( ( c ) => {
335
+ if ( children . indexOf ( child ) == - 1 ) {
308
336
children . push ( c ) ;
309
337
}
310
338
} ) ;
311
339
}
312
340
} ) ;
313
- this . selectToChildren ( stack + 1 , nodes ) ;
341
+ this . selectToChildren ( stack + 1 , nodes ) ;
314
342
return ;
315
343
}
316
344
317
- currentStackDocuments . forEach ( ( D ) => {
318
- if ( nodes . indexOf ( parseInt ( D . getAttribute ( 'data-id' ) ) ) != - 1 ) {
345
+ currentStackDocuments . forEach ( ( D ) => {
346
+ if ( nodes . indexOf ( parseInt ( D . getAttribute ( 'data-id' ) ) ) != - 1 ) {
319
347
D . classList . remove ( 'dlp-label-silence' ) ;
320
348
let child = JSON . parse ( D . getAttribute ( 'data-nodes-id' ) ) ;
321
- if ( Array . isArray ( child ) ) {
322
- child . forEach ( ( c ) => {
323
- if ( children . indexOf ( child ) == - 1 ) {
349
+ if ( Array . isArray ( child ) ) {
350
+ child . forEach ( ( c ) => {
351
+ if ( children . indexOf ( child ) == - 1 ) {
324
352
children . push ( c ) ;
325
353
}
326
354
} ) ;
327
355
}
328
- } else {
356
+ } else {
329
357
D . classList . add ( 'dlp-label-silence' ) ;
330
358
}
331
359
} ) ;
332
- this . selectToChildren ( stack + 1 , children ) ;
360
+ this . selectToChildren ( stack + 1 , children ) ;
361
+ }
362
+
363
+ tagCal ( id , operate ) {
364
+ if ( operate == 'insert' ) {
365
+ if ( this . select_data . indexOf ( id ) == - 1 ) {
366
+ this . select_data . push ( id ) ;
367
+ this . selectInputDOM . value = JSON . stringify ( this . select_data ) ;
368
+ }
369
+ if ( this . selected_data . indexOf ( id ) == - 1 && this . insert_data . indexOf ( id ) == - 1 ) {
370
+ this . insert_data . push ( id ) ;
371
+ this . insertInputDOM . value = JSON . stringify ( this . insert_data ) ;
372
+ }
373
+ let index = this . delete_data . indexOf ( id ) ;
374
+ if ( index != - 1 ) {
375
+ this . delete_data . splice ( index , 1 ) ;
376
+ this . deleteInputDOM . value = JSON . stringify ( this . delete_data ) ;
377
+ }
378
+ return ;
379
+ }
380
+ if ( operate == 'delete' ) {
381
+ let index = this . select_data . indexOf ( id ) ;
382
+ if ( index != - 1 ) {
383
+ this . select_data . splice ( index , 1 ) ;
384
+ this . selectInputDOM . value = JSON . stringify ( this . select_data ) ;
385
+ }
386
+ if ( this . selected_data . indexOf ( id ) != - 1 && this . delete_data . indexOf ( id ) == - 1 ) {
387
+ this . delete_data . push ( id ) ;
388
+ this . deleteInputDOM . value = JSON . stringify ( this . delete_data ) ;
389
+ }
390
+ index = this . insert_data . indexOf ( id ) ;
391
+ if ( index != - 1 ) {
392
+ this . insert_data . splice ( index , 1 ) ;
393
+ this . insertInputDOM . value = JSON . stringify ( this . insert_data ) ;
394
+ }
395
+ }
333
396
}
334
397
}
335
398
0 commit comments