/* * Copyright (c) Codiad, distributed * as-is and without warranty under the MIT License. See * [root]/license.txt for more. This information must remain intact. */ (function(global, $) { $(function() { codiad.settings.init(); }); codiad.settings = { controller: 'components/settings/controller.php', init: function() { var _this = this; /* * Storage Event: * Note: Event fires only if change was made in different window and not in this one * Details: http://dev.w3.org/html5/webstorage/#dom-localstorage * * Workaround for Storage-Event: */ $( 'body' ).append( '' ); //Load Settings this.load(); }, get_option: async function( option ) { let result; try { result = await $.ajax({ url: this.controller + '?action=get_option', type: "POST", dataType: 'html', data: { option: option }, }); return result; } catch (error) { console.log(error); throw error; } }, ////////////////////////////////////////////////////////////////// // Save Settings ////////////////////////////////////////////////////////////////// save: function( settings ) { var systemRegex = /^codiad/; var pluginRegex = /^codiad.plugin/; $.ajax({ type: 'POST', url: this.controller + '?action=save', data: {settings: JSON.stringify( settings )}, success: function( data ) { data = data.replace(/},/gi, ",").split(","); length = data.length; for( i = 0;i < length; i++ ) { parsed = codiad.jsend.parse( data ); } codiad.modal.unload(); }, }); /* Notify listeners */ amplify.publish( 'settings.save', {} ); }, ////////////////////////////////////////////////////////////////// // Load Settings ////////////////////////////////////////////////////////////////// load: function() { codiad.editor.getSettings(); amplify.publish( 'settings.loaded', null ); }, ////////////////////////////////////////////////////////////////// // // Show Settings Dialog // // Parameter // // data_file - {String} - Location of settings file based on BASE_URL // ////////////////////////////////////////////////////////////////// show: function( data_file ) { var _this = this; codiad.modal.load( 800, 'components/settings/dialog.php?action=settings' ); codiad.modal.hideOverlay(); codiad.modal.load_process.done( function() { if ( typeof( data_file ) == 'string' ) { codiad.settings._showTab( data_file ); } else { _this._loadTabValues( 'components/settings/settings.editor.php' ); } /* Notify listeners */ amplify.publish( 'settings.dialog.show', {} ); }); }, update_option: function( option, value ) { if( option == undefined || value == undefined ) { return false; } jQuery.ajax({ url: this.controller + '?action=update_option', type: "POST", dataType: 'html', data: { option: option, value: value }, }); }, ////////////////////////////////////////////////////////////////// // // {Private} Show Specific Tab // // Parameter // // data_file - {String} - Location of settings file based on BASE_URL // ////////////////////////////////////////////////////////////////// _showTab: function( data_file ) { var _this = this; if ( typeof( data_file ) != 'string' ) { return false; } $( '.settings-view .config-menu .active' ).removeClass( 'active' ); $( '.settings-view .config-menu li[data-file="' + data_file + '"]' ).addClass( 'active' ); $( '.settings-view .panels .active' ).hide().removeClass( 'active' ); //Load panel if( $( '.settings-view .panel[data-file="' + data_file + '"]' ).length === 0 ) { $( '.settings-view .panels' ).append( '
' ); $( '.settings-view .panel[data-file="' + data_file + '"]' ).load( data_file, function() { //TODO Show and hide loading information /* Notify listeners */ var name = $( '.settings-view .config-menu li[data-file="' + data_file + '"]' ).attr( 'data-name' ); amplify.publish( 'settings.dialog.tab_loaded', name ); _this._loadTabValues( data_file ); }); } else { $( '.settings-view .panel[data-file="' + data_file + '"]' ).show().addClass( 'active' ); } }, ////////////////////////////////////////////////////////////////// // // {Private} Load Settings of Specific Tab // // Parameter // // data_file - {String} - Location of settings file based on BASE_URL // ////////////////////////////////////////////////////////////////// _loadTabValues: function( data_file ) { //Load settings $( '.settings-view .panel[data-file="' + data_file + '"] .setting').each( async function( i, item ) { let key = await $( item ).attr( 'data-setting' ); let value = await codiad.settings.get_option( key ); //console.log( key, value, i, $( item ).attr( 'data-setting' ) ); if ( value != null && value != undefined ) { $( item ).val( value ); } }); } }; })(this, jQuery);