var ADK = {}; +function( $ ) { "use strict"; function toggleSection() { $( this ).next( "table" ).fadeToggle(); } function select2TemplatePreview( data, element ) { var ret = $( element ), html = '', w; if ( !data.id ) { return; } switch( data.id ) { case 'simple': w = 100; html = '
' + '
' + '
'; break; case 'two_columns': w = 50; html = '
' + '
' + '
' + '
'; break; case 'three_columns': w = 33; html = '
' + '
' + '
' + '
' + '
'; break } ret.attr( "value", data.id ); ret.html( html ); return ret; } function calc_width( width ) { return 'style="width: calc(' + width + '% - 4px);"'; } function showTemplateSections() { var show = [], hide = []; switch( $( this ).val() ) { case 'simple': show = [ "content" ]; hide = [ "top", "bottom", "left", "right" ]; break; case 'two_columns': show = [ "content", "right" ]; hide = [ "top", "bottom", "left" ]; break; case 'three_columns': show = [ "content", "left", "right" ]; hide = [ "top", "bottom" ]; break; } $.each( show, function() { $( "#section_" + this ).hide(); $( "#label-section_" + this ).show(); } ); $.each( hide, function() { $( "#section_" + this ).hide(); $( "#label-section_" + this ).hide(); } ); } function initColor() { $( this ).spectrum( { showAlpha: true, showInput: true, showPalette: true, preferredFormat: "hex3", palette: [], localStorageKey: "spectrum.adk", showInitial: true, showInput: true, showButtons: false } ); } function saveWidget() { var data = {}; $( ".adk-widget-control" ).each( function() { var name = this.name, parts, pointer, value = $( this ).hasClass( "adk-color" ) ? $( this ).spectrum( "get" ).toRgbString() : $( this ).val(); if ( name.match( "]" ) ) { parts = name.replace( "]", "" ).split( "[" ); pointer = data; for( var i = 0; i < parts.length; i++ ) { if ( i + 1 === parts.length ) { pointer[ parts[ i ] ] = value; break; } if ( typeof pointer[ parts[ i ] ] === "undefined" ) { pointer[ parts[ i ] ] = {}; } pointer = pointer[ parts[ i ] ]; } } else { data[ name ] = value; } } ); data.filter = {}; $( ".filter-line:not(.template)" ).each( function() { var name = $( this ).find( ".filter-name" ).val(), restrict = $( this ).find( ".filter-restrict" ).val(), value = $( this ).find( ".filter-value" ).val(); if ( !data.filter[ name ] ) { data.filter[ name ] = {}; } if ( !data.filter[ name ][ restrict ] ) { data.filter[ name ][ restrict ] = []; } data.filter[ name ][ restrict ].push( value ); } ); console.log( data ); ADK.buttonClick.call( this, data ); } function saveButton() { var data = {}; $( ".adk-button-control" ).each( function() { var name = this.name, parts, pointer, value = $( this ).hasClass( "adk-color" ) ? $( this ).spectrum( "get" ).toRgbString() : $( this ).val(); data[ name.substr( 7 ) ] = value; } ); console.log( data ); ADK.buttonClick.call( this, data ); } ADK.buttonClick = function( data ) { var url = $( this ).attr( "data-url" ), def = $.Deferred(); if ( !url ) { ADK.showError( adkLang.missUrl ); } $.post( url, data ) .done( function( ret ) { if ( ret.success ) { def.resolveWith( ret ); ADK.showSuccess( ret.success ); } if ( ret.error ) { def.rejectWith( ret ); ADK.showError( ret.error ); } } ) .fail( function( ret ) { var message; def.reject(); if ( typeof ret === "string" ) { message = ret; } else if( ret.statusText ) { message = ret.statusText; } if ( message ) { ADK.showError( message ); } } ); return def.promise(); } ADK.showError = function( message ) { alert( message ); } ADK.showSuccess = function( message ) { alert( message ); } function loadWidget() { var name = $( this ).val(); if ( 0 == name ) { return; } $.get( $( this ).attr( "data-url" ), { name: name } ) .done( function( ret ) { if ( ret.error ) { ADK.showError( ret.error ); } if ( ret.success ) { console.log( ret.data ); populateWidgetControls( ret.data ); } } ) .fail( function( ret ) { if ( typeof ret === "string" ) { message = ret; } else if( ret.statusText ) { message = ret.statusText; } if ( message ) { ADK.showError( message ); } console.log( ret ); } ); } function populateWidgetControls( data, section ) { var s = section ? section : ''; $.each( data, function( k, v ) { var name, element; if ( "filter" === k ) { populateFilters( v ); return; } if ( typeof v === "object" ) { var new_section = s ? s + '[' + k + ']' : k; populateWidgetControls( v, new_section ); return; } else { if ( s ) { name = s + '[' + k + ']'; } else { name = k; } } element = $( "[name='" + name + "']" ); if ( element.length ) { element.val( v ); if ( element.hasClass( "adk-color" ) ) { element.spectrum( "set", v ); } } } ); $( "#advertikon_notifications_template" ).trigger( "change" ); } function populateFilters( data ) { $( ".filter-line:not(.template)" ).remove(); $.each( data, function( k, v ) { var name = k; $.each( v, function( k1, v1 ) { var restrict = k1; $.each( v1, function() { var line = addFilter(); line.find( ".filter-name" ).val( name ).trigger( "change" ); line.find( ".filter-restrict" ).val( restrict ).trigger( "change" ); line.find( ".filter-value" ).val( this ).trigger( "change" ); } ); } ); } ); } function loadButton() { var name = $( this ).val(); if ( 0 == name ) { return; } $.get( $( this ).attr( "data-url" ), { name: name } ) .done( function( ret ) { if ( ret.error ) { ADK.showError( ret.error ); } if ( ret.success ) { console.log( ret.data ); populateButtonControls( ret.data ); } } ) .fail( function( ret ) { if ( typeof ret === "string" ) { message = ret; } else if( ret.statusText ) { message = ret.statusText; } if ( message ) { ADK.showError( message ); } console.log( ret ); } ); } function populateButtonControls( data ) { $.each( data, function( k, v ) { var name = "button-" + k, element; element = $( "[name='" + name + "']" ); if ( element.length ) { element.val( v ); if ( element.hasClass( "adk-color" ) ) { element.spectrum( "set", v ); } } } ); // $( "#advertikon_notifications_template" ).trigger( "change" ); } function initFilterValue() { var option = $( this ).find( "option:selected" ), input = $( option.attr( "data-input" ) ), restrict = JSON.parse( option.attr( "data-restrict" ) ), value = option.attr( "data-value" ), wrapper = $( this ).closest( "td" ), restricts = wrapper.find( ".filter-restrict" ); input.addClass( "filter-value" ); wrapper.find( ".filter-value-wrapper" ).html( input ); restricts.empty(); $.each( restrict, function( k, v ) { restricts.append( '' ); } ); } function addFilter() { var clone = $( ".filter-line.template" ).eq( 0 ).closest( "tr" ).clone(), filters = $( ".filter-line" ); clone.find( ".filter-line" ).removeClass( "template" ); clone.css( "display", "table-row" ); clone.insertAfter( filters.eq( filters.length - 1 ).closest( "tr" ) ); clone.find( ".filter-name" ).trigger( "change" ); // init filter inputs return clone; } function deleteFilter() { $( this ).closest( "tr" ).remove(); } $( document ).ready( function() { $( "h2" ).on( "click", toggleSection ); $( "#" + adkLang.prefix + "template" ).on( "change", showTemplateSections ); $( "#" + adkLang.prefix + "template" ).select2( { templateResult: select2TemplatePreview } ); $( ".adk-color" ).each( initColor ); $( ".adk-save-widget" ).on( "click", saveWidget ); $( ".adk-save-button" ).on( "click", saveButton ); $( "#load-widget" ).on( "change", loadWidget ); $( "#load-button" ).on( "change", loadButton ); $( document ).on( "change", ".filter-name", initFilterValue ); $( "#add-filter" ).on( "click", addFilter ); $( document ).on( "click", ".filter-delete", deleteFilter ); $( "#advertikon_notifications_template" ).trigger( "change" ); // hide unused sections } ); }( jQuery );