@@ -45,6 +45,7 @@ var Backend = {}; // common variable used in all the files of the backend
4545
4646 ajaxrequest : function ( url , method , data , csrf , callback ) {
4747 var request = new XMLHttpRequest ( ) ;
48+ var loadingIcon = jQuery ( ".loading" ) ;
4849 if ( window . XMLHttpRequest ) {
4950 // code for modern browsers
5051 request = new XMLHttpRequest ( ) ;
@@ -53,6 +54,13 @@ var Backend = {}; // common variable used in all the files of the backend
5354 request = new ActiveXObject ( "Microsoft.XMLHTTP" ) ;
5455 }
5556 request . open ( method , url , true ) ;
57+
58+ request . onloadstart = function ( ) {
59+ loadingIcon . show ( ) ;
60+ } ;
61+ request . onloadend = function ( ) {
62+ loadingIcon . hide ( ) ;
63+ } ;
5664 request . setRequestHeader ( 'X-CSRF-TOKEN' , csrf ) ;
5765 request . setRequestHeader ( 'X-Requested-With' , 'XMLHttpRequest' ) ;
5866 if ( "post" === method . toLowerCase ( ) || "patch" === method . toLowerCase ( ) ) {
@@ -75,7 +83,6 @@ var Backend = {}; // common variable used in all the files of the backend
7583 jsontoformdata : function ( srcjson ) {
7684 if ( typeof srcjson !== "object" )
7785 if ( typeof console !== "undefined" ) {
78- console . log ( "\"srcjson\" is not a JSON object" ) ;
7986 return null ;
8087 }
8188 u = encodeURIComponent ;
@@ -377,6 +384,219 @@ var Backend = {}; // common variable used in all the files of the backend
377384 }
378385 } ,
379386
387+ Menu :
388+ {
389+ selectors : {
390+ menuItemContainer : jQuery ( "#menu-items" ) ,
391+ menuItemsData : jQuery ( ".menu-items-field" ) ,
392+ addCustomUrlButton : jQuery ( ".show-modal" ) ,
393+ modal : jQuery ( "#showMenuModal" ) ,
394+ document : jQuery ( "document" ) ,
395+ addCustomUrlForm : "#menu-add-custom-url" ,
396+ addModuleToMenuButton : ".add-module-to-menu" ,
397+ removeMenuItemButton : ".remove-menu-item" ,
398+ editMenuItemButton : ".edit-menu-item" ,
399+ formUrl : "" ,
400+ } ,
401+
402+ methods : {
403+ getNewId : function ( str ) {
404+ var arr = str . match ( / " i d " : [ 0 - 9 ] + / gi) ;
405+ if ( arr ) {
406+ $ . each ( arr , function ( index , item ) {
407+ arr [ index ] = parseInt ( item . replace ( '"id":' , '' ) ) ;
408+ } ) ;
409+ return Math . max . apply ( Math , arr ) + 1 ;
410+ }
411+ return 1 ;
412+ } ,
413+
414+ findItemById : function ( item , id ) {
415+ if ( item . id == id ) {
416+ return item ;
417+ }
418+ var found = false ;
419+ var foundItem ;
420+ if ( item . children ) {
421+ $ . each ( item . children , function ( index , childItem ) {
422+ foundItem = Backend . Menu . methods . findItemById ( childItem , id ) ;
423+ if ( foundItem )
424+ {
425+ found = true ;
426+ return false ;
427+ }
428+ } ) ;
429+ }
430+ if ( found )
431+ {
432+ return foundItem ;
433+ }
434+ return null ;
435+ } ,
436+
437+ addMenuItem : function ( obj ) {
438+ Backend . Menu . selectors . menuItemContainer . nestable ( 'add' , {
439+ "id" : Backend . Menu . methods . getNewId ( Backend . Menu . selectors . menuItemsData . val ( ) ) ,
440+ "content" : obj . name ,
441+ "name" : obj . name ,
442+ "url" : obj . url ,
443+ "url_type" : obj . url_type ,
444+ "open_in_new_tab" : obj . open_in_new_tab ,
445+ "icon" : obj . icon ,
446+ "view_permission_id" : obj . view_permission_id
447+ } ) ;
448+ Backend . Menu . selectors . menuItemsData . val (
449+ JSON . stringify (
450+ Backend . Menu . selectors . menuItemContainer . nestable ( 'serialise' )
451+ )
452+ ) ;
453+ } ,
454+
455+ editMenuItem : function ( obj ) {
456+ var newObject = {
457+ "id" : obj . id ,
458+ "content" : obj . name ,
459+ "name" : obj . name ,
460+ "url" : obj . url ,
461+ "url_type" : obj . url_type ,
462+ "open_in_new_tab" : obj . open_in_new_tab ,
463+ "icon" : obj . icon ,
464+ "view_permission_id" : obj . view_permission_id
465+ } ;
466+ var menuItems = Backend . Menu . selectors . menuItemContainer . nestable ( 'serialise' ) ;
467+ var itemData ;
468+ $ . each ( menuItems , function ( index , item ) {
469+ itemData = Backend . Menu . methods . findItemById ( item , id ) ;
470+ if ( itemData ) { return false ; }
471+ } ) ;
472+ if ( itemData . children ) {
473+ newObject . children = itemData . children ;
474+ }
475+
476+ Backend . Menu . selectors . menuItemContainer . nestable ( 'replace' , newObject ) ;
477+
478+ Backend . Menu . selectors . menuItemsData . val (
479+ JSON . stringify (
480+ Backend . Menu . selectors . menuItemContainer . nestable ( 'serialise' )
481+ )
482+ ) ;
483+ }
484+ } ,
485+
486+ init : function ( ) {
487+ this . addHandlers ( ) ;
488+ } ,
489+
490+ addHandlers : function ( ) {
491+ var context = this ;
492+ var formName = "_add_custom_url_form" ;
493+
494+ this . selectors . menuItemContainer . nestable ( {
495+ callback : function ( l , e ) {
496+ this . selectors . menuItemsData . val ( JSON . stringify ( $ ( l ) . nestable ( 'serialise' ) ) ) ;
497+ } ,
498+ json : this . selectors . menuItemsData . val ( ) ,
499+ includeContent :true ,
500+ scroll : false ,
501+ maxDepth : 10
502+ } ) ;
503+
504+ this . selectors . addCustomUrlButton . click ( function ( ) {
505+ var title = context . selectors . addCustomUrlButton . attr ( "data-header" ) ;
506+ context . selectors . modal . find ( ".modal-title" ) . html ( title ) ;
507+ context . selectors . modal . modal ( "show" ) ;
508+
509+ callback = {
510+ success : function ( request ) {
511+ if ( request . status >= 200 && request . status < 400 ) {
512+ // Success!
513+ context . selectors . modal . find ( ".modal-body" ) . html ( request . responseText ) ;
514+ // jQuery(document).find(context.selectors.modal).find(".view-permission-block").remove();
515+ jQuery ( document ) . find ( context . selectors . addCustomUrlForm ) . removeClass ( "hidden" ) ;
516+ }
517+ } ,
518+ error : function ( request ) {
519+ //Do Something
520+ }
521+ }
522+ Backend . Utils . ajaxrequest ( context . selectors . formUrl + "/" + formName , "get" , { } , Backend . Utils . csrf , callback ) ;
523+ } ) ;
524+
525+ jQuery ( document ) . on ( "submit" , context . selectors . addCustomUrlForm , function ( e ) {
526+ e . preventDefault ( ) ;
527+ var formData = jQuery ( this ) . serializeArray ( ) . reduce ( function ( obj , item ) {
528+ obj [ item . name ] = item . value ;
529+ return obj ;
530+ } , { } ) ;
531+ if ( formData . name . length > 0 ) {
532+ if ( formData . id . length > 0 ) {
533+ context . methods . editMenuItem ( formData ) ;
534+ } else {
535+ context . methods . addMenuItem ( formData ) ;
536+ }
537+ context . selectors . modal . modal ( "hide" ) ;
538+ }
539+ } ) ;
540+
541+ jQuery ( document ) . on ( "click" , context . selectors . addModuleToMenuButton , function ( ) {
542+ var dataObj = {
543+ id : $ ( this ) . attr ( "data-id" ) ,
544+ name : $ ( this ) . attr ( "data-name" ) ,
545+ url : $ ( this ) . attr ( "data-url" ) ,
546+ url_type : $ ( this ) . attr ( "data-url_type" ) ,
547+ open_in_new_tab : $ ( this ) . attr ( "data-open_in_new_tab" ) ,
548+ view_permission_id : $ ( this ) . attr ( "data-view_permission_id" ) ,
549+ }
550+ context . methods . addMenuItem ( dataObj ) ;
551+ } ) ;
552+
553+ jQuery ( document ) . on ( "click" , context . selectors . removeMenuItemButton , function ( ) {
554+ context . selectors . menuItemContainer . nestable ( 'remove' , jQuery ( this ) . parents ( ".dd-item" ) . first ( ) . attr ( "data-id" ) ) ;
555+ Backend . Menu . selectors . menuItemsData . val (
556+ JSON . stringify (
557+ Backend . Menu . selectors . menuItemContainer . nestable ( 'serialise' )
558+ )
559+ ) ;
560+ } ) ;
561+
562+ jQuery ( document ) . on ( "click" , context . selectors . editMenuItemButton , function ( ) {
563+ id = jQuery ( this ) . parents ( ".dd-item" ) . first ( ) . attr ( "data-id" ) ;
564+ var menuItems = context . selectors . menuItemContainer . nestable ( 'serialise' ) ;
565+ var itemData ;
566+ $ . each ( menuItems , function ( index , item ) {
567+ itemData = context . methods . findItemById ( item , id ) ;
568+ if ( itemData ) { return false ; }
569+ } ) ;
570+ if ( itemData . id != undefined && itemData . id == id )
571+ {
572+ callback = {
573+ success : function ( request ) {
574+ if ( request . status >= 200 && request . status < 400 ) {
575+ // Success!
576+ context . selectors . modal . find ( ".modal-body" ) . html ( request . responseText ) ;
577+ context . selectors . modal . find ( ".modal-dialog .modal-content .modal-header .modal-title" ) . html ( "Edit: " + itemData . name ) ;
578+ $ ( document ) . find ( context . selectors . modal ) . find ( ".mi-id" ) . val ( itemData . id ) ;
579+ $ ( document ) . find ( context . selectors . modal ) . find ( ".mi-name" ) . val ( itemData . name ) ;
580+ $ ( document ) . find ( context . selectors . modal ) . find ( ".mi-url" ) . val ( itemData . url ) ;
581+ $ ( document ) . find ( context . selectors . modal ) . find ( ".mi-url_type_" + itemData . url_type ) . prop ( "checked" , true ) ;
582+ if ( itemData . open_in_new_tab == 1 ) {
583+ $ ( document ) . find ( context . selectors . modal ) . find ( ".mi-open_in_new_tab" ) . prop ( "checked" , true ) ;
584+ }
585+ $ ( document ) . find ( context . selectors . modal ) . find ( ".mi-icon" ) . val ( itemData . icon ) ;
586+ $ ( document ) . find ( context . selectors . modal ) . find ( ".mi-view_permission_id" ) . val ( itemData . view_permission_id ) ;
587+ $ ( document ) . find ( "#menu-add-custom-url" ) . removeClass ( "hidden" ) ;
588+ context . selectors . modal . modal ( "show" ) ;
589+ }
590+ } ,
591+ error : function ( request ) {
592+ //Do Something
593+ }
594+ }
595+ Backend . Utils . ajaxrequest ( context . selectors . formUrl + "/" + formName , "get" , { } , Backend . Utils . csrf , callback ) ;
596+ }
597+ } ) ;
598+ }
599+ } ,
380600
381601 /**
382602 * Tiny MCE
0 commit comments