diff --git a/changelog.txt b/changelog.txt index b51f1659..49e4627d 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,6 +3,7 @@ ### 1.0.8 * Fix - LSX tabs working integrated with TO tabs (dashboard settings) * Fix - Fixed admin styles (help and add-on pages) +* Fix - UIX framework saving all tabs ### 1.0.7 * Dev - Added .editorconfig file to help developers to maintain consistent coding styles between different editors and IDEs diff --git a/classes/class-lsx-to-admin.php b/classes/class-lsx-to-admin.php index 61450b22..6e8cf7ec 100644 --- a/classes/class-lsx-to-admin.php +++ b/classes/class-lsx-to-admin.php @@ -95,7 +95,7 @@ public function enqueue_admin_stylescripts( $hook ) { } wp_enqueue_media(); - wp_enqueue_script( 'tour-operator-admin-script', LSX_TO_URL . 'assets/js/admin' . $min . '.js', array( 'jquery' ), LSX_TO_VER, true ); + wp_enqueue_script( 'tour-operator-admin-script', LSX_TO_URL . 'assets/js/admin.min.js', array( 'jquery' ), LSX_TO_VER, true ); wp_enqueue_style( 'tour-operator-admin-style', LSX_TO_URL . 'assets/css/admin.css', array(), LSX_TO_VER ); wp_style_add_data( 'tour-operator-admin-style', 'rtl', 'replace' ); diff --git a/readme.txt b/readme.txt index 9af4c2e9..cc4597df 100644 --- a/readme.txt +++ b/readme.txt @@ -67,6 +67,7 @@ Yes you can! Join in on our [GitHub repository](https://github.com/lightspeeddev = 1.0.8 = * Fix - LSX tabs working integrated with TO tabs (dashboard settings) * Fix - Fixed admin styles (help and add-on pages) +* Fix - UIX framework saving all tabs = 1.0.7 = * Dev - Added .editorconfig file to help developers to maintain consistent coding styles between different editors and IDEs diff --git a/vendor/uix/assets/css/admin.css b/vendor/uix/assets/css/admin.css index 5f1e73f4..a644e909 100644 --- a/vendor/uix/assets/css/admin.css +++ b/vendor/uix/assets/css/admin.css @@ -1,6 +1,6 @@ .uix-tab-canvas { padding: 0 20px; - + display: none; } .uix-field-wrapper{ min-height: 100px; diff --git a/vendor/uix/assets/css/admin.min.css b/vendor/uix/assets/css/admin.min.css index 8030233a..ef03121e 100644 --- a/vendor/uix/assets/css/admin.min.css +++ b/vendor/uix/assets/css/admin.min.css @@ -1 +1 @@ -.uix-tab-canvas{padding:0 20px}.uix-field-wrapper{min-height:100px}.spinner.uix-save-spinner{float:none;margin:-2px 4px 0 5px;visibility:visible;display:none}.ui-tab-nav{margin:0 0 8px}.page-title-action.button-primary{margin:20px}.save-confirm{color:#10af10;display:none}.save-confirm .dashicons{font-size:30px}.uix-footer-bar{padding:0 19px} \ No newline at end of file +.uix-tab-canvas{padding:0 20px;display:none}.uix-field-wrapper{min-height:100px}.spinner.uix-save-spinner{float:none;margin:-2px 4px 0 5px;visibility:visible;display:none}.ui-tab-nav{margin:0 0 8px}.page-title-action.button-primary{margin:20px}.save-confirm{color:#10af10;display:none}.save-confirm .dashicons{font-size:30px}.uix-footer-bar{padding:0 19px} \ No newline at end of file diff --git a/vendor/uix/assets/js/uix-core.js b/vendor/uix/assets/js/uix-core.js new file mode 100644 index 00000000..b56a1a58 --- /dev/null +++ b/vendor/uix/assets/js/uix-core.js @@ -0,0 +1,601 @@ +/*! + This is a prototype of conduit. It still needs a full refactoring. + This is simply to get the concepts into working order. So ye, I need to work on this still. + */ +var conduitApp = {}, + coduitTemplates = {}, + conduitRegisterApps, + conduitModal, + conduitModalSave, + conduitGenID, + conduitSaveObject, + conduitGetData; + +!( jQuery( function($){ + + + var currentAjaxProcess = null; + + conduitException = function( message ){ + this.message = message; + this.name = "ConduitException"; + } + + $.fn.conduitTrigger = function( obj ){ + var defaults = { + method : 'GET', + url : ajaxurl + }; + + $.extend(true, defaults, obj); + + $.ajax( defaults ).success( function(){ + //console.log( arguments ); + } ); + + + return this; + } + + $.fn.getObject = function( forex ){ + var element = $(this); + + var fields = element.find('[name]'), + obj = {}, + arraynames = {}; + for( var v = 0; v < fields.length; v++){ + var field = $( fields[v] ), + name = field.prop('name').replace(/\]/gi,'').split('['), + value = field.val(), + lineconf = {}; + + if( forex ){ + if( name.indexOf('_id') >= 0 || name.indexOf('_node_point') >= 0 ){ + continue; + } + } + + if( field.is(':radio') || field.is(':checkbox') ){ + if( !field.is(':checked') ){ + continue; + } + } + if( field.prop('required') && ! field.val().length ){ + field.focus(); + throw new conduitException('requiredfield'); + } + for(var i = name.length-1; i >= 0; i--){ + var nestname = name[i]; + if( typeof nestname === 'undefined' ){ + nestname = ''; + } + if(nestname.length === 0){ + lineconf = []; + if( typeof arraynames[name[i-1]] === 'undefined'){ + arraynames[name[i-1]] = 0; + }else{ + arraynames[name[i-1]] += 1; + } + nestname = arraynames[name[i-1]]; + } + if(i === name.length-1){ + if( value ){ + if( value === 'true' ){ + value = true; + }else if( value === 'false' ){ + value = false; + }else if( !isNaN( parseFloat( value ) ) && parseFloat( value ).toString() === value ){ + value = parseFloat( value ); + }else if( typeof value === 'string' && ( value.substr(0,1) === '{' || value.substr(0,1) === '[' ) ){ + try { + value = JSON.parse( value ); + + } catch (e) { + + } + } + } + lineconf[nestname] = value; + }else{ + var newobj = lineconf; + lineconf = {}; + lineconf[nestname] = newobj; + } + } + $.extend(true, obj, lineconf); + }; + + return obj; + } + conduitGeneralBaldrick = function(){ + // initialise general triggers + $('.wp-trigger').conduitTrigger({ + method : 'POST', + before : function( el ){ + var trigger = $( el ), + app = trigger.closest('[data-app]'); + if( app.length ){ + trigger.data('data', JSON.stringify( conduitBuildData( app.data('app') ) ) ); + }else{ + if( trigger.data('data') ){ + trigger.data('data', JSON.stringify( conduitBuildData( trigger.data('data') ) ) ); + } + } + } + }); + } + conduitSaveObject = function( app ){ + var obj; + if( true === app ){ + obj = conduitPrepObject(); + }else{ + obj = conduitPrepObject( app ); + } + var data = { + action : uix.slug + "_save_config", + uix_setup : $('#uix_setup').val(), + page_slug : uix.page_slug, + config : JSON.stringify( obj ), + autosave : true + }; + if( uix.save_params ){ + data.params = uix.save_params; + } + + $( window ).trigger('uix.saving'); + if( currentAjaxProcess ){ + currentAjaxProcess.abort(); + } + currentAjaxProcess = $.post( ajaxurl, data, function(response) { + $( window ).trigger('uix.saved'); + currentAjaxProcess = null; + }); + } + conduitPrepObject = function(){ + var obj = {}; + for( var app in conduitApp ){ + if( conduitApp[ app ].app ){ + if( conduitApp[ app ].app.is(':visible') ){ + // capture current changes + obj[ app ] = conduitBuildData( app ); + }else{ + // changes should have been captured already + obj[ app ] = conduitApp[ app ].data; + } + } + if( obj[ app ]._tab ){ + delete obj[ app ]._tab; + } + } + return obj; + } + + conduitModalFooter = function( opts ){ + var buttons = opts.buttons ? opts.buttons.split(' ') : ["save"], + points = opts.modal.split('.'), + app = opts.app ? opts.app : opts.trigger.closest('[data-app]').data('app'), + data = { "__node_path" : points.join('.') }, + template_str = '', + template; + + data.__app = app; + if( opts.trigger.data('before') ){ + data.__before = opts.trigger.data('before'); + } + if( opts.trigger.data('callback') ){ + data.__callback = opts.trigger.data('callback'); + } + + for( var i = 0; i < buttons.length; i ++){ + template_str += $( '#__partial_' + buttons[ i ] ).length ? $( '#__partial_' + buttons[ i ] ).html() : ''; + } + + template = Handlebars.compile( template_str, { data : true } ); + + return template( data ); + } + + conduitModal = function( opts, modal ){ + var points = opts.modal.split('.'), + app = opts.app ? opts.app : opts.trigger.closest('[data-app]').data('app'), + hasDefault = opts.default ? opts.default : null, + template = Handlebars.compile( "
{{> " + opts.template + "}}
", { data : true } ); + data = {}; + + // fetch latest data object + conduitBuildData( app ); + + if( conduitApp[ app ] ){ + var tmp = conduitApp[ app ].data; + if( hasDefault !== null ){ + data = hasDefault; + }else{ + for( var i = 0; i < points.length; i++ ){ + if( tmp[ points[ i ] ] ){ + tmp = tmp[ points[ i ] ]; + }else{ + tmp = {}; + } + } + data = tmp; + } + } + + data.__node_path = opts.points; + data.__app = app; + + conduitApp[ opts.template ] = { + app : modal.content, + data : data + }; + coduitTemplates[ opts.template ] = template; + + return template( data ); + + } + + conduitGetData = function( tr ){ + + var id = tr.trigger.data('app'), + data = {}; + + if( conduitApp[ id ] && conduitApp[ id ].data ){ + return conduitApp[ id ].data; + } + return data; + } + + conduitBuildData = function( app ){ + if( conduitApp[ app ] && conduitApp[ app ].app ){ + try{ + conduitApp[ app ].data = conduitApp[ app ].app.getObject(); + }catch (e){ + return false; + } + + } + if( conduitApp[ app ].data._tab ){ + delete conduitApp[ app ].data._tab; + } + return conduitApp[ app ].data; + } + + + conduitSyncData = function( app ){ + conduitBuildData( app ); + //conduitBuildUI( app ); + } + + conduitRegisterApps = function(){ + + var apps = $('[data-app]').not('._bound_app'); + if( ! apps.length ){return;} + + apps.each( function(){ + + var appWrapper = $( this ), + app = appWrapper.data('app'); + + conduitApp[ app ] = { + app : appWrapper, + data : ( uix.config[ app ] ? uix.config[ app ] : {} ) + }; + + appWrapper.addClass('_bound_app'); + conduitBuildUI( app ); + }) + + if( uix.tabs ){ + for( var tab in uix.tabs ){ + if( uix.tabs[ tab ].default ){ + $('[data-tab="' + tab + '"]').trigger('click'); + break; + } + } + } + } + + conduitBuildUI = function( app ){ + if( conduitApp[ app ] ){ + var data = conduitApp[ app ].data; + data._tab = {}; + for( var sub_app in conduitApp ){ + if( sub_app === app ){ continue; } + data._tab[ sub_app ] = conduitApp[ sub_app ].data; + } + conduitApp[ app ].app.html( coduitTemplates[ app ]( data ) ); + } + + // sortables + if( $('.uix-sortable').length ){ + $('.uix-sortable').each( function(){ + var sort = $(this), + options = { + forcePlaceholderSize : true, + placeholder: "uix-sortable-placeholder" + }; + + options = $.extend({}, options, sort.data() ); + $(this).sortable( options ); + }); + } + + $(window).trigger('uix.init'); + $(window).trigger('modal.init'); + } + + conduitSetNode = function( node, app, data ){ + var nodes = node.split('.'); + + var node_string = '{ "' + nodes.join( '": { "') + '" : ' + JSON.stringify( data ); + for( var cls = 0; cls < nodes.length; cls++){ + node_string += '}'; + } + var new_nodes = JSON.parse( node_string ); + $.extend( true, conduitApp[ app ].data, new_nodes ); + conduitBuildUI( app ); + } + conduitGenID = function(){ + var d = new Date().getTime(); + var id = 'ndxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (d + Math.random()*16)%16 | 0; + d = Math.floor(d/16); + return (c=='x' ? r : (r&0x3|0x8)).toString(16); + }); + return id; + } + conduitAddNode = function( node, app, data ){ + + var id = conduitGenID(), + newnode = { "_id" : id }, + nodes = node.data ? node.data('addNode').split('.') : node.split('.'), + node_default = data ? data : node.data('nodeDefault'), + node_point_record = nodes.join('.') + '.' + id, + node_defaults = JSON.parse( '{ "_id" : "' + id + '", "_node_point" : "' + node_point_record + '" }' ) + node_point_wrappers = $('[data-node-point="' + nodes.join('.') + '"]'); + + if( node_default && typeof node_default === 'object' ){ + $.extend( true, node_defaults, node_default ); + } + var node_string = '{ "' + nodes.join( '": { "') + '" : { "' + id + '" : ' + JSON.stringify( node_defaults ); + for( var cls = 0; cls <= nodes.length; cls++){ + node_string += '}'; + } + var new_nodes = JSON.parse( node_string ); + + conduitBuildData( app ); + + $.extend( true, conduitApp[ app ].data, new_nodes ); + + if( node_point_wrappers.length && node_point_wrappers.data('template') ){ + node_point_wrappers.each( function(){ + var wrapper = $(this), + template = wrapper.data('template'); + if( template && coduitTemplates[ '__partial_' + template ] ){ + wrapper.append( coduitTemplates[ '__partial_' + template ]( node_defaults ) ); + } + }); + + }else{ + // rebuild all + conduitBuildUI( app ); + } + }; + + + // bind slugs + $(document).on('keyup change', '[data-format="slug"]', function(e){ + + var input = $(this); + + if( input.data('master') && input.prop('required') && this.value.length <= 0 && e.type === "change" ){ + this.value = $(input.data('master')).val().replace(/[^a-z0-9]/gi, '_').toLowerCase(); + if( this.value.length ){ + input.trigger('change'); + } + return; + } + + this.value = this.value.replace(/[^a-z0-9]/gi, '_').toLowerCase(); + }); + + // bind label update + $(document).on('keyup change', '[data-sync]', function(){ + var input = $(this), + syncs = $(input.data('sync')); + + syncs.each(function(){ + var sync = $(this); + + if( sync.is('input') ){ + sync.val( input.val() ).trigger('change'); + }else{ + sync.text(input.val()); + } + }); + }); + + // add node + $(document).on('click', '[data-add-node]', function(e){ + var click = $( this ), + app = click.closest('[data-app]').data('app'); + if( app && typeof conduitApp[ app ] === 'object' ){ + e.preventDefault(); + conduitAddNode( click, app ); + } + }); + // row remover global neeto + $(document).on('click', '[data-remove-element]', function(e){ + var click = $(this), + app = click.closest('[data-app]').data('app'), + elements = $(click.data('removeElement')); + if( click.data('confirm') ){ + if( !confirm(click.data('confirm')) ){ + return; + } + } + elements.remove(); + conduitSyncData( app ); + }); + + $(document).on('click', '[data-save-object]', function(e){ + e.preventDefault(); + var clicked = $( this ), + app = $( this ).data('saveObject'), + spinner = $('.uix-save-spinner'), + confirm = $('.save-confirm'), + sub_nav = $('.uix-sub-nav'), + obj; + + //$('.uix-notice .notice-dismiss').trigger('click'); + + if( true === app ){ + obj = conduitPrepObject(); + }else{ + obj = conduitPrepObject( app ); + } + + clicked.addClass('saving'); + confirm.hide(); + spinner.css({ visibility: "visible", opacity:1, display : "inline-block"}); + var data = { + action : uix.slug + "_save_config", + uix_setup : $('#uix_setup').val(), + page_slug : uix.page_slug, + config : JSON.stringify( obj ), + }; + if( uix.save_params ){ + data.params = uix.save_params; + } + $.post( ajaxurl, data, function(response) { + + spinner.css({ visibility: '', opacity:0, display: 'none'}); + confirm.fadeIn(); + setTimeout( function(){ confirm.fadeOut( 800 );}, 2000 ); + clicked.removeClass('saving'); + //var notice = $( coduitTemplates.__notice( response ) ); + //notice.hide().insertAfter( sub_nav ).slideDown( 200 ); + + $( window ).trigger('uix.saved'); + }); + + }); + + // initialize live sync rebuild + $(document).on('change', '[data-live-sync]', function(e){ + var app = $(this).closest('[data-app]').data('app'); + conduitSyncData( app ); + }); + $(document).on('click', 'button[data-live-sync]', function(e){ + var app = $(this).closest('[data-app]').data('app'); + conduitSyncData( app ); + }); + $(document).on('click', '.uix-notice .notice-dismiss', function(){ + var parent = $( this ).closest( '.uix-notice' ); + parent.slideUp(200, function(){ + parent.remove(); + }); + }); + + $(document).on( 'click', '[data-tab]', function( e ){ + + e.preventDefault(); + + var clicked = $( this ), + tab = clicked.data('tab'), + active = $('.current[data-tab]').data('tab') + + if( active ){ + conduitBuildData( active ); + if( active === tab ){ + return; + } + $('[data-app="' + active + '"]').empty().hide(); + } + + $('[data-tab]').removeClass('current'); + $('[data-app="' + tab + '"]').show(); + clicked.addClass('current'); + conduitBuildUI( tab ); + } ); + + $('script[data-template]').each( function(){ + + var element = $(this), + app = element.data('template'); + + coduitTemplates[ app ] = Handlebars.compile( element.html(), { data : true } ); + }); + // init partials + $('script[data-handlebars-partial]').each( function(){ + var partial = $( this ); + Handlebars.registerPartial( partial.data('handlebarsPartial'), partial.html() ); + coduitTemplates[ '__partial_' + partial.data('handlebarsPartial') ] = Handlebars.compile( partial.html(), { data : true } ); + }); + // modal capture + $(document).on( 'click', '[data-modal-node]', function( e ) { + + var clicked = $( this ), + nodes = clicked.data('modal-node').split('.'), + app = clicked.data('app') ? clicked.data('app') : nodes.shift(), + type = clicked.data('type') ? clicked.data('type') : 'save', + data; + + if( clicked.data('before') ){ + if( typeof clicked.data('before') === 'function' ){ + clicked.data('before')( clicked ); + }else if( typeof window[ clicked.data('before') ] === 'function' ){ + window[ clicked.data('before') ]( clicked ); + } + } + + + if( type !== 'delete' ){ + try{ + data = clicked.closest('.uix-modal-wrap').getObject(); + }catch (e){ + return; + } + } + + if( type === 'add' ){ + conduitAddNode( nodes.join('.'), app, data ); + }else if( type === 'delete' ){ + + var selector = nodes.shift(); + if( nodes.length ){ + selector += '[' + nodes.join('][') + ']'; + } + $( '[name^="' + selector + '"]' ).remove(); + conduitBuildData( app ); + conduitBuildUI( app ); + }else{ + conduitSetNode( nodes.join('.'), app, data ); + } + $( window ).trigger('close.modal'); + if( clicked.data('callback') ){ + if( typeof clicked.data('callback') === 'function' ){ + clicked.data('callback')( data, clicked ); + }else if( typeof window[ clicked.data('callback') ] === 'function' ){ + window[ clicked.data('callback') ]( data, clicked ); + } + } + }) + $(window).on('close.modal', function( e ){ + //console.log( e ); + var active = $('.current[data-tab]').data('tab') + if( active ){ + conduitBuildUI( active ); + } + }); + + // register apps + conduitRegisterApps(); + + window.onbeforeunload = function(){ + if( currentAjaxProcess ){ + return false; + } + }; + +}) ); \ No newline at end of file diff --git a/vendor/uix/assets/js/uix-core.min.js b/vendor/uix/assets/js/uix-core.min.js index 3da64223..42d2da64 100644 --- a/vendor/uix/assets/js/uix-core.min.js +++ b/vendor/uix/assets/js/uix-core.min.js @@ -1,208 +1 @@ -var conduitApp = {}, coduitTemplates = {}, conduitRegisterApps, conduitModal, conduitModalSave, conduitGenID, - conduitSaveObject, conduitGetData; -!jQuery(function (a) { - var b = null; - conduitException = function (a) { - this.message = a, this.name = "ConduitException" - }, a.fn.conduitTrigger = function (b) { - var c = {method: "GET", url: ajaxurl}; - return a.extend(!0, c, b), a.ajax(c).success(function () { - }), this - }, a.fn.getObject = function () { - for (var b = a(this), c = b.find("[name]"), d = {}, e = {}, f = 0; f < c.length; f++) { - var g = a(c[f]), h = g.prop("name").replace(/\]/gi, "").split("["), i = g.val(), j = {}; - if (!g.is(":radio") && !g.is(":checkbox") || g.is(":checked")) { - if (g.prop("required") && !g.val().length)throw g.focus(), new conduitException("requiredfield"); - for (var k = h.length - 1; k >= 0; k--) { - var l = h[k]; - if ("undefined" == typeof l && (l = ""), 0 === l.length && (j = [], "undefined" == typeof e[h[k - 1]] ? e[h[k - 1]] = 0 : e[h[k - 1]] += 1, l = e[h[k - 1]]), k === h.length - 1) { - if (i)if ("true" === i) i = !0; else if ("false" === i) i = !1; else if (isNaN(parseFloat(i)) || parseFloat(i).toString() !== i) { - if ("string" == typeof i && ("{" === i.substr(0, 1) || "[" === i.substr(0, 1)))try { - i = JSON.parse(i) - } catch (m) { - } - } else i = parseFloat(i); - j[l] = i - } else { - var n = j; - j = {}, j[l] = n - } - } - a.extend(!0, d, j) - } - } - return d - }, conduitGeneralBaldrick = function () { - a(".wp-trigger").conduitTrigger({ - method: "POST", before: function (b) { - var c = a(b), d = c.closest("[data-app]"); - d.length ? c.data("data", JSON.stringify(conduitBuildData(d.data("app")))) : c.data("data") && c.data("data", JSON.stringify(conduitBuildData(c.data("data")))) - } - }) - }, conduitSaveObject = function (c) { - var d; - d = !0 === c ? conduitPrepObject() : conduitPrepObject(c); - var e = { - action: uix.slug + "_save_config", - uix_setup: a("#uix_setup").val(), - page_slug: uix.page_slug, - config: JSON.stringify(d), - autosave: !0 - }; - uix.save_params && (e.params = uix.save_params), a(window).trigger("uix.saving"), b && b.abort(), b = a.post(ajaxurl, e, function (c) { - a(window).trigger("uix.saved"), b = null - }) - }, conduitPrepObject = function () { - var a = {}; - for (var b in conduitApp)conduitApp[b].app && (conduitApp[b].app.is(":visible") ? a[b] = conduitBuildData(b) : a[b] = conduitApp[b].data); - return a - }, conduitModalFooter = function (b) { - var c, d = b.buttons ? b.buttons.split(" ") : ["save"], e = b.modal.split("."), - f = b.app ? b.app : b.trigger.closest("[data-app]").data("app"), g = {__node_path: e.join(".")}, h = ""; - g.__app = f, b.trigger.data("callback") && (g.__callback = b.trigger.data("callback")); - for (var i = 0; i < d.length; i++)h += a("#__partial_" + d[i]).length ? a("#__partial_" + d[i]).html() : ""; - return (c = Handlebars.compile(h, {data: !0}))(g) - }, conduitModal = function (a, b) { - var c = a.modal.split("."), d = a.app ? a.app : a.trigger.closest("[data-app]").data("app"), - e = a["default"] ? a["default"] : null, - f = Handlebars.compile('
{{> ' + a.template + "}}
", {data: !0}); - if (data = {}, conduitBuildData(d), conduitApp[d]) { - var g = conduitApp[d].data; - if (null !== e) data = e; else { - for (var h = 0; h < c.length; h++)g = g[c[h]] ? g[c[h]] : {}; - data = g - } - } - return data.__node_path = a.points, data.__app = d, conduitApp[a.template] = { - app: b.content, - data: data - }, coduitTemplates[a.template] = f, f(data) - }, conduitGetData = function (a) { - var b = a.trigger.data("app"), c = {}; - return conduitApp[b] && conduitApp[b].data ? conduitApp[b].data : c - }, conduitBuildData = function (a) { - if (conduitApp[a] && conduitApp[a].app)try { - conduitApp[a].data = conduitApp[a].app.getObject() - } catch (b) { - return !1 - } - return conduitApp[a].data - }, conduitSyncData = function (a) { - conduitBuildData(a), conduitBuildUI(a) - }, conduitRegisterApps = function () { - var b = a("[data-app]").not("._bound_app"); - if (b.length && (b.each(function () { - var b = a(this), c = b.data("app"); - conduitApp[c] = {app: b, data: uix.config[c] ? uix.config[c] : {}}, b.addClass("_bound_app") - }), uix.tabs))for (var c in uix.tabs)if (uix.tabs[c]["default"]) { - a('[data-tab="' + c + '"]').trigger("click"); - break - } - }, conduitBuildUI = function (b) { - if (conduitApp[b]) { - var c = conduitApp[b].data; - c._tab = {}; - for (var d in conduitApp)d !== b && (c._tab[d] = conduitApp[d].data); - conduitApp[b].app.html(coduitTemplates[b](c)) - } - a(window).trigger("uix.init"), a(window).trigger("modal.init") - }, conduitSetNode = function (b, c, d) { - for (var e = b.split("."), f = '{ "' + e.join('": { "') + '" : ' + JSON.stringify(d), g = 0; g < e.length; g++)f += "}"; - var h = JSON.parse(f); - a.extend(!0, conduitApp[c].data, h), conduitBuildUI(c) - }, conduitGenID = function () { - var a = (new Date).getTime(), b = "ndxxxxxxxx".replace(/[xy]/g, function (b) { - var c = (a + 16 * Math.random()) % 16 | 0; - return a = Math.floor(a / 16), ("x" == b ? c : 3 & c | 8).toString(16) - }); - return b - }, conduitAddNode = function (b, c, d) { - var e = conduitGenID(), f = b.data ? b.data("addNode").split(".") : b.split("."), - g = d ? d : b.data("nodeDefault"), h = f.join(".") + "." + e, - i = JSON.parse('{ "_id" : "' + e + '", "_node_point" : "' + h + '" }'); - g && "object" == typeof g && a.extend(!0, i, g); - for (var j = '{ "' + f.join('": { "') + '" : { "' + e + '" : ' + JSON.stringify(i), k = 0; k <= f.length; k++)j += "}"; - var l = JSON.parse(j); - conduitBuildData(c), a.extend(!0, conduitApp[c].data, l), conduitBuildUI(c) - }, a(document).on("click", ".cf-reports-card-actions .confirm a", function (b) { - b.preventDefault(); - var c = a(this).closest(".cf-reports-card-content"); - actions = c.find(".row-actions"), actions.slideToggle(300) - }), a(document).on("keyup change", '[data-format="slug"]', function (b) { - var c = a(this); - return c.data("master") && c.prop("required") && this.value.length <= 0 && "change" === b.type ? (this.value = a(c.data("master")).val().replace(/[^a-z0-9]/gi, "_").toLowerCase(), void(this.value.length && c.trigger("change"))) : void(this.value = this.value.replace(/[^a-z0-9]/gi, "_").toLowerCase()) - }), a(document).on("keyup change", "[data-sync]", function () { - var b = a(this), c = a(b.data("sync")); - c.each(function () { - var c = a(this); - c.is("input") ? c.val(b.val()).trigger("change") : c.text(b.val()) - }) - }), a(document).on("click", "[data-add-node]", function (b) { - var c = a(this), d = c.closest("[data-app]").data("app"); - d && "object" == typeof conduitApp[d] && (b.preventDefault(), conduitAddNode(c, d)) - }), a(document).on("click", "[data-remove-element]", function (b) { - var c = a(this), d = c.closest("[data-app]").data("app"), e = a(c.data("removeElement")); - (!c.data("confirm") || confirm(c.data("confirm"))) && (e.remove(), conduitSyncData(d)) - }), a(document).on("click", "[data-save-object]", function (b) { - b.preventDefault(); - var c, d = a(this), e = a(this).data("saveObject"), f = a(".uix-save-spinner"), g = a(".uix-sub-nav"); - a(".uix-notice .notice-dismiss").trigger("click"), c = !0 === e ? conduitPrepObject() : conduitPrepObject(e), d.addClass("saving"), a(".save-confirm").hide(),f.slideDown(100); - var h = { - action: uix.slug + "_save_config", - uix_setup: a("#uix_setup").val(), - page_slug: uix.page_slug, - config: JSON.stringify(c) - }; - uix.save_params && (h.params = uix.save_params), a.post(ajaxurl, h, function (b) { - f.slideUp(100, function(){ - a(".save-confirm").fadeIn(200); - setTimeout(function(){a(".save-confirm").fadeOut(200);}, 1000); - }), d.removeClass("saving"); - var c = a(coduitTemplates.__notice(b)); - c.hide().insertAfter(g).slideDown(200), a(window).trigger("uix.saved") - }) - }), a(document).on("change", "[data-live-sync]", function (b) { - var c = a(this).closest("[data-app]").data("app"); - conduitSyncData(c) - }), a(document).on("click", "button[data-live-sync]", function (b) { - var c = a(this).closest("[data-app]").data("app"); - conduitSyncData(c) - }), a(document).on("click", ".uix-notice .notice-dismiss", function () { - var b = a(this).closest(".uix-notice"); - b.slideUp(200, function () { - b.remove() - }) - }), a(document).on("click", "[data-tab]", function (b) { - b.preventDefault(); - var c = a(this), d = c.data("tab"), e = a(".current[data-tab]").data("tab"); - if (e) { - if (conduitBuildData(e), e === d)return; - a('[data-app="' + e + '"]').empty().hide() - } - a("[data-tab]").removeClass("current"), a('[data-app="' + d + '"]').show(), c.addClass("current"), conduitBuildUI(d) - }), a("script[data-template]").each(function () { - var b = a(this), c = b.data("template"); - coduitTemplates[c] = Handlebars.compile(b.html(), {data: !0}) - }), a("script[data-handlebars-partial]").each(function () { - var b = a(this); - Handlebars.registerPartial(b.data("handlebarsPartial"), b.html()) - }), a(document).on("click", "[data-modal-node]", function (b) { - var c, d = a(this), e = d.data("modal-node").split("."), f = d.data("app") ? d.data("app") : e.shift(), - g = d.data("type") ? d.data("type") : "save"; - if ("delete" !== g)try { - c = d.closest(".uix-modal-wrap").getObject() - } catch (b) { - return - } - if ("add" === g) conduitAddNode(e.join("."), f, c); else if ("delete" === g) { - var h = e.shift(); - e.length && (h += "[" + e.join("][") + "]"), a('[name^="' + h + '"]').remove(), conduitBuildData(f), conduitBuildUI(f) - } else conduitSetNode(e.join("."), f, c); - a(window).trigger("close.modal"), d.data("callback") && ("function" == typeof d.data("callback") ? d.data("callback")(c, d) : "function" == typeof window[d.data("callback")] && window[d.data("callback")](c, d)) - }), a(window).on("close.modal", function (b) { - var c = a(".current[data-tab]").data("tab"); - c && conduitBuildUI(c) - }), conduitRegisterApps(), window.onbeforeunload = function () { - return b ? !1 : void 0 - } -}); \ No newline at end of file +var conduitApp={},coduitTemplates={},conduitRegisterApps,conduitModal,conduitModalSave,conduitGenID,conduitSaveObject,conduitGetData;!jQuery(function($){var currentAjaxProcess=null;conduitException=function(message){this.message=message;this.name="ConduitException"};$.fn.conduitTrigger=function(obj){var defaults={method:"GET",url:ajaxurl};$.extend(true,defaults,obj);$.ajax(defaults).success(function(){});return this};$.fn.getObject=function(forex){var element=$(this);var fields=element.find("[name]"),obj={},arraynames={};for(var v=0;v=0||name.indexOf("_node_point")>=0){continue}}if(field.is(":radio")||field.is(":checkbox")){if(!field.is(":checked")){continue}}if(field.prop("required")&&!field.val().length){field.focus();throw new conduitException("requiredfield")}for(var i=name.length-1;i>=0;i--){var nestname=name[i];if(typeof nestname==="undefined"){nestname=""}if(nestname.length===0){lineconf=[];if(typeof arraynames[name[i-1]]==="undefined"){arraynames[name[i-1]]=0}else{arraynames[name[i-1]]+=1}nestname=arraynames[name[i-1]]}if(i===name.length-1){if(value){if(value==="true"){value=true}else if(value==="false"){value=false}else if(!isNaN(parseFloat(value))&&parseFloat(value).toString()===value){value=parseFloat(value)}else if(typeof value==="string"&&(value.substr(0,1)==="{"||value.substr(0,1)==="[")){try{value=JSON.parse(value)}catch(e){}}}lineconf[nestname]=value}else{var newobj=lineconf;lineconf={};lineconf[nestname]=newobj}}$.extend(true,obj,lineconf)}return obj};conduitGeneralBaldrick=function(){$(".wp-trigger").conduitTrigger({method:"POST",before:function(el){var trigger=$(el),app=trigger.closest("[data-app]");if(app.length){trigger.data("data",JSON.stringify(conduitBuildData(app.data("app"))))}else{if(trigger.data("data")){trigger.data("data",JSON.stringify(conduitBuildData(trigger.data("data"))))}}}})};conduitSaveObject=function(app){var obj;if(true===app){obj=conduitPrepObject()}else{obj=conduitPrepObject(app)}var data={action:uix.slug+"_save_config",uix_setup:$("#uix_setup").val(),page_slug:uix.page_slug,config:JSON.stringify(obj),autosave:true};if(uix.save_params){data.params=uix.save_params}$(window).trigger("uix.saving");if(currentAjaxProcess){currentAjaxProcess.abort()}currentAjaxProcess=$.post(ajaxurl,data,function(response){$(window).trigger("uix.saved");currentAjaxProcess=null})};conduitPrepObject=function(){var obj={};for(var app in conduitApp){if(conduitApp[app].app){if(conduitApp[app].app.is(":visible")){obj[app]=conduitBuildData(app)}else{obj[app]=conduitApp[app].data}}if(obj[app]._tab){delete obj[app]._tab}}return obj};conduitModalFooter=function(opts){var buttons=opts.buttons?opts.buttons.split(" "):["save"],points=opts.modal.split("."),app=opts.app?opts.app:opts.trigger.closest("[data-app]").data("app"),data={__node_path:points.join(".")},template_str="",template;data.__app=app;if(opts.trigger.data("before")){data.__before=opts.trigger.data("before")}if(opts.trigger.data("callback")){data.__callback=opts.trigger.data("callback")}for(var i=0;i{{> '+opts.template+"}}",{data:true});data={};conduitBuildData(app);if(conduitApp[app]){var tmp=conduitApp[app].data;if(hasDefault!==null){data=hasDefault}else{for(var i=0;i