@@ -90,7 +90,7 @@ define([
9090let menu = $ ( this ) . data ( 'menu' ) ;
9191switch ( menu ) {
9292case 'new' :
93- that . createNewNote ( ) ;
93+ that . createNewNoteWithChecking ( ) ;
9494break ;
9595case 'open' :
9696that . openNote ( ) ;
@@ -111,7 +111,7 @@ define([
111111that . exportCode ( ) ;
112112break ;
113113case 'clear' :
114- that . clearBoard ( ) ;
114+ that . clearBoardWithChecking ( ) ;
115115break ;
116116}
117117} ) ;
@@ -429,9 +429,51 @@ define([
429429//========================================================================
430430// Note control
431431//========================================================================
432- createNewNote ( ) {
433- // TODO: alert before closing
432+ /**
433+ * Check if note has changes to save
434+ */
435+ checkNote ( ) {
436+ if ( this . blockList . length > 0 ) {
437+ return true ;
438+ }
439+ return false ;
440+ }
441+ createNewNoteWithChecking ( ) {
442+ // alert before closing
443+ let that = this ;
444+ if ( this . checkNote ( ) ) {
445+ // render update modal
446+ com_util . renderModal ( {
447+ title :'Save changes' ,
448+ message :'Do you want to save changes?' ,
449+ buttons :[ 'Cancel' , "No" , 'Save' ] ,
450+ defaultButtonIdx :0 ,
451+ buttonClass :[ 'cancel' , '' , 'activated' ] ,
452+ finish :function ( clickedBtnIdx ) {
453+ switch ( clickedBtnIdx ) {
454+ case 0 :
455+ // cancel - do nothing
456+ return ;
457+ case 1 :
458+ // don't save
459+ that . createNewNote ( ) ;
460+ break ;
461+ case 2 :
462+ // save
463+ that . saveAsNote ( function ( ) {
464+ that . createNewNote ( ) ;
465+ } ) ;
466+ break ;
467+ }
468+ }
469+ } ) ;
434470
471+ return ;
472+ }
473+
474+ this . createNewNote ( ) ;
475+ }
476+ createNewNote ( ) {
435477// clear board before create new note
436478this . clearBoard ( ) ;
437479
@@ -502,7 +544,7 @@ define([
502544
503545this . saveAsNote ( ) ;
504546}
505- saveAsNote ( ) {
547+ saveAsNote ( callback ) {
506548let that = this ;
507549// save file navigation
508550let fileNavi = new FileNavigation ( {
@@ -525,6 +567,8 @@ define([
525567that . tmpState . boardTitle = boardTitle ;
526568that . tmpState . boardPath = boardPath ;
527569$ ( '#vp_boardTitle' ) . val ( boardTitle ) ;
570+
571+ callback ( ) ;
528572}
529573} ) ;
530574fileNavi . open ( ) ;
@@ -625,6 +669,41 @@ define([
625669// // reloadBlockList
626670// this.reloadBlockList();
627671// }
672+ clearBoardWithChecking ( ) {
673+ // alert before closing
674+ let that = this ;
675+ if ( this . checkNote ( ) ) {
676+ // render update modal
677+ com_util . renderModal ( {
678+ title :'Save changes' ,
679+ message :'Do you want to save changes?' ,
680+ buttons :[ 'Cancel' , "No" , 'Save' ] ,
681+ defaultButtonIdx :0 ,
682+ buttonClass :[ 'cancel' , '' , 'activated' ] ,
683+ finish :function ( clickedBtnIdx ) {
684+ switch ( clickedBtnIdx ) {
685+ case 0 :
686+ // cancel - do nothing
687+ return ;
688+ case 1 :
689+ // don't save
690+ that . clearBoard ( ) ;
691+ break ;
692+ case 2 :
693+ // save
694+ that . saveAsNote ( function ( ) {
695+ that . clearBoard ( ) ;
696+ } ) ;
697+ break ;
698+ }
699+ }
700+ } ) ;
701+
702+ return ;
703+ }
704+
705+ this . clearBoard ( ) ;
706+ }
628707clearBoard ( ) {
629708// TODO: alert before clearing
630709let that = this ;