@@ -81,6 +81,9 @@ define([
81
81
this . importedList = [ ] ;
82
82
this . title_no = 0 ;
83
83
84
+ // double click setter
85
+ this . clicked = 0 ;
86
+
84
87
// file navigation : state 데이터 목록
85
88
this . state = {
86
89
paramData :{
@@ -138,22 +141,22 @@ define([
138
141
var that = this ;
139
142
140
143
// toggle item codebox
141
- $ ( document ) . on ( 'click' , this . wrapSelector ( '.vp-sn-item-header .vp-sn-indicator' ) , function ( ) {
142
- var parent = $ ( this ) . parent ( ) ;
143
- var hasOpen = $ ( this ) . hasClass ( 'open' ) ;
144
- // hide all codebox
145
- $ ( that . wrapSelector ( '.vp-sn-indicator' ) ) . removeClass ( 'open' ) ;
146
- $ ( that . wrapSelector ( '.vp-sn-item-code' ) ) . hide ( ) ;
144
+ // $(document).on('click', this.wrapSelector('.vp-sn-item-header .vp-sn-indicator'), function() {
145
+ // var parent = $(this).parent();
146
+ // var hasOpen = $(this).hasClass('open');
147
+ // // hide all codebox
148
+ // $(that.wrapSelector('.vp-sn-indicator')).removeClass('open');
149
+ // $(that.wrapSelector('.vp-sn-item-code')).hide();
147
150
148
- if ( ! hasOpen ) {
149
- // show code
150
- $ ( this ) . addClass ( 'open' ) ;
151
- $ ( parent ) . parent ( ) . find ( '.vp-sn-item-code' ) . show ( ) ;
152
- } else {
153
- // hide code
154
- $ ( parent ) . parent ( ) . find ( '.vp-sn-item-code' ) . hide ( ) ;
155
- }
156
- } ) ;
151
+ // if (!hasOpen) {
152
+ // // show code
153
+ // $(this).addClass('open');
154
+ // $(parent).parent().find('.vp-sn-item-code').show();
155
+ // } else {
156
+ // // hide code
157
+ // $(parent).parent().find('.vp-sn-item-code').hide();
158
+ // }
159
+ // });
157
160
158
161
// menu popup
159
162
$ ( document ) . on ( 'click' , this . wrapSelector ( '.vp-sn-menu' ) , function ( evt ) {
@@ -285,27 +288,91 @@ define([
285
288
that . title_no += 1 ;
286
289
} ) ;
287
290
291
+ // item header click (toggle & select item) & double click (edit title)
292
+ $ ( document ) . on ( 'click' , this . wrapSelector ( '.vp-sn-item-header' ) , function ( evt ) {
293
+ var thisHeader = this ;
294
+ that . clicked ++ ;
295
+ if ( that . clicked == 1 ) {
296
+ setTimeout ( function ( ) {
297
+ if ( that . clicked > 1 ) {
298
+ // double click
299
+ // enable input
300
+ $ ( thisHeader ) . find ( '.vp-sn-item-title' ) . prop ( 'disabled' , false ) ;
301
+ $ ( thisHeader ) . find ( '.vp-sn-item-title' ) . focus ( ) ;
302
+
303
+ }
304
+ // single click
305
+ // select item
306
+ // remove selection
307
+ $ ( that . wrapSelector ( '.vp-sn-item-header' ) ) . removeClass ( 'selected' ) ;
308
+ // select item
309
+ $ ( thisHeader ) . addClass ( 'selected' ) ;
310
+
311
+ // toggle item
312
+ var parent = $ ( thisHeader ) . parent ( ) ;
313
+ var indicator = $ ( thisHeader ) . find ( '.vp-sn-indicator' ) ;
314
+ var hasOpen = $ ( indicator ) . hasClass ( 'open' ) ;
315
+ // hide all codebox
316
+ $ ( that . wrapSelector ( '.vp-sn-indicator' ) ) . removeClass ( 'open' ) ;
317
+ $ ( that . wrapSelector ( '.vp-sn-item-code' ) ) . hide ( ) ;
318
+
319
+ if ( that . clicked > 1 || ! hasOpen ) {
320
+ // show code
321
+ $ ( indicator ) . addClass ( 'open' ) ;
322
+ $ ( parent ) . find ( '.vp-sn-item-code' ) . show ( ) ;
323
+ } else {
324
+ // hide code
325
+ $ ( parent ) . find ( '.vp-sn-item-code' ) . hide ( ) ;
326
+ }
327
+ that . clicked = 0 ;
328
+ } , 200 ) ;
329
+ }
330
+ evt . stopPropagation ( ) ;
331
+ } ) ;
332
+
333
+ // prevent occuring header click event by clicking input
334
+ $ ( document ) . on ( 'click' , this . wrapSelector ( '.vp-sn-item-title' ) , function ( evt ) {
335
+ evt . stopPropagation ( ) ;
336
+ } ) ;
337
+
288
338
// item title save
289
- $ ( document ) . on ( 'change ' , this . wrapSelector ( '.vp-sn-item-title' ) , function ( evt ) {
339
+ $ ( document ) . on ( 'blur ' , this . wrapSelector ( '.vp-sn-item-title' ) , function ( evt ) {
290
340
var prevTitle = $ ( this ) . closest ( '.vp-sn-item' ) . data ( 'title' ) ;
291
- var newTitle = $ ( this ) . val ( ) ;
341
+ var inputTitle = $ ( this ) . val ( ) ;
292
342
293
- that . codemirrorList [ prevTitle ] . save ( ) ;
294
- var code = that . codemirrorList [ prevTitle ] . getValue ( ) ;
295
- // 기존 title 제거
296
- vpSetting . removeUserDefinedCode ( prevTitle ) ;
297
-
298
- // 새 title로 저장
299
- // save udf
300
- var newTimestamp = new Date ( ) . getTime ( ) ;
301
- var newSnippet = { [ newTitle ] : { code : code , timestamp : newTimestamp } } ;
302
- vpSetting . saveUserDefinedCode ( newSnippet ) ;
343
+ if ( prevTitle == inputTitle ) {
344
+ ;
345
+ } else {
346
+ // check duplicated
347
+ var titleList = Object . keys ( that . codemirrorList ) ;
348
+ var newTitle = inputTitle ;
349
+ var dupNo = 0
350
+ while ( titleList . includes ( newTitle ) ) {
351
+ dupNo += 1 ;
352
+ newTitle = inputTitle + '_' + dupNo ;
353
+ }
354
+
355
+ that . codemirrorList [ prevTitle ] . save ( ) ;
356
+ var code = that . codemirrorList [ prevTitle ] . getValue ( ) ;
357
+ // 기존 title 제거
358
+ vpSetting . removeUserDefinedCode ( prevTitle ) ;
359
+
360
+ // 새 title로 저장
361
+ // save udf
362
+ var newTimestamp = new Date ( ) . getTime ( ) ;
363
+ var newSnippet = { [ newTitle ] : { code : code , timestamp : newTimestamp } } ;
364
+ vpSetting . saveUserDefinedCode ( newSnippet ) ;
365
+
366
+ // update title & codemirror
367
+ $ ( this ) . closest ( '.vp-sn-item-title' ) . val ( newTitle ) ;
368
+ $ ( this ) . closest ( '.vp-sn-item' ) . data ( 'title' , newTitle ) ;
369
+ // update codemirror
370
+ that . codemirrorList [ newTitle ] = that . codemirrorList [ prevTitle ] ;
371
+ delete that . codemirrorList [ prevTitle ] ;
372
+ }
303
373
304
- // update title & codemirror
305
- $ ( this ) . closest ( '.vp-sn-item' ) . data ( 'title' , newTitle ) ;
306
- // update codemirror
307
- that . codemirrorList [ newTitle ] = that . codemirrorList [ prevTitle ] ;
308
- delete that . codemirrorList [ prevTitle ] ;
374
+ // disable
375
+ $ ( this ) . prop ( 'disabled' , true ) ;
309
376
} ) ;
310
377
311
378
// item menu click
@@ -489,7 +556,7 @@ define([
489
556
item . appendFormatLine ( '<div class="{0}" data-title="{1}" data-timestamp="{2}">' , 'vp-sn-item' , title , timestamp ) ;
490
557
item . appendFormatLine ( '<div class="{0}">' , 'vp-sn-item-header' ) ;
491
558
item . appendFormatLine ( '<div class="{0}"></div>' , 'vp-sn-indicator' ) ;
492
- item . appendFormatLine ( '<input type="text" class="{0}" value="{1}" />' , 'vp-sn-item-title' , title ) ;
559
+ item . appendFormatLine ( '<input type="text" class="{0}" value="{1}" disabled />' , 'vp-sn-item-title' , title ) ;
493
560
if ( hasImported ) {
494
561
item . appendFormatLine ( '<i class="{0}"></i>' , 'fa fa-circle vp-sn-imported-item' ) ;
495
562
}
0 commit comments