362 lines
9.8 KiB
JavaScript
362 lines
9.8 KiB
JavaScript
var spu = {
|
|
// module
|
|
rules : null
|
|
};
|
|
|
|
SPU_ADMIN = (function ( $ ) {
|
|
|
|
var spu_editor = '';
|
|
$(document).ready(function(){
|
|
|
|
spu.rules.init();
|
|
var color_field = $('#spu-appearance input.spu-color-field'),
|
|
spu_optin = $('#spu_optin');
|
|
// Only run if there is no optin being used in premium version
|
|
if( color_field.length && ( ! spu_optin.length || spu_optin.val() == '' ) ){
|
|
color_field.wpColorPicker({ change: applyStyles, clear: applyStyles });
|
|
}
|
|
$("#spu-appearance input,#spu-appearance select").not(".spu-color-field").change(applyStyles);
|
|
|
|
//Toogle trigger boxes on init
|
|
checkTriggerMethod( $("#spu_trigger").val() );
|
|
|
|
//Toogle trigger boxes on change
|
|
$("#spu_trigger").change(function(){
|
|
checkTriggerMethod( $(this).val() );
|
|
})
|
|
|
|
/**
|
|
* Updates on position change
|
|
*/
|
|
$('#spu_position').on('change', function(){
|
|
var $editor = SPU_ADMIN.spu_editor,
|
|
val = $(this).val();
|
|
//update editor
|
|
$editor.alterClass('spu-position-*', 'spu-position-'+ val )
|
|
if( val == 'top-bar' || val == 'bottom-bar') {
|
|
$editor.find('.spu-box-container *:not("p, .spu-fields-container, .spu-fields-container *")').remove();
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
/**
|
|
* When tinyMcr loads
|
|
*/
|
|
function TinyMceOptin() {
|
|
SPU_ADMIN.spu_editor = $("#content_ifr").contents().find('html #tinymce');
|
|
|
|
// add position class
|
|
SPU_ADMIN.spu_editor.addClass(' spu-position-' + spu_js.opts.css.position).removeClass('wp-autoresize');
|
|
applyStyles();
|
|
}
|
|
|
|
function checkTriggerMethod( val ) {
|
|
if( val == 'pixels' || val == 'percentage' || val == 'visible') {
|
|
$('tr.auto_hide').fadeIn('fast');
|
|
} else {
|
|
$('tr.auto_hide').fadeOut('fast');
|
|
}/*TODO I should fix premium so these values are not even considered here*/
|
|
if( val == 'manual' || val == 'trigger-click' || val == 'visible' || val == 'exit-intent') {
|
|
$('.spu-trigger-number').fadeOut('fast');
|
|
} else {
|
|
$('.spu-trigger-number').fadeIn('fast');
|
|
}
|
|
}
|
|
|
|
// functions
|
|
function getPxValue($el, retval) {
|
|
if($el.val()) {
|
|
return parseInt($el.val());
|
|
} else {
|
|
return (retval !== undefined) ? retval + "px" : 0;
|
|
}
|
|
}
|
|
|
|
function getColor($el, retval) {
|
|
if($el.val().length > 0) {
|
|
return $el.wpColorPicker('color');
|
|
} else {
|
|
return (retval !== undefined) ? retval : '';
|
|
}
|
|
}
|
|
|
|
function applyStyles() {
|
|
var $editor = $("#content_ifr").contents().find('html');
|
|
$editor.trigger('spu_tinymce_init');
|
|
$editor.css({
|
|
'background': spu_hexToRgb(getColor($("#spu_bgcolor")),$("#spu_bgopacity").val())
|
|
});
|
|
|
|
// if there is no optin mode load defaults
|
|
if (typeof spup_js == "undefined" || $('#spu_optin').val() == '') {
|
|
// remove any field that could be there after deactivating premium version
|
|
$editor.find(".spu-fields-container").remove();
|
|
$editor.find("#tinymce").attr('style', 'padding: ' + getPxValue($("#spu-padding")) + 'px !important');
|
|
$editor.find("#tinymce").css({
|
|
'background-color': spu_hexToRgb(getColor($("#spu-background-color")),$("#spu_background_opacity").val()),
|
|
'border-color': getColor($("#spu-border-color")),
|
|
'border-width': getPxValue($("#spu-border-width")),
|
|
'border-style': $("#spu-border-type").val(),
|
|
'width': $("#spu-width").val(),
|
|
'color': getColor($("#spu-color")),
|
|
'height': 'auto',
|
|
'min-width': '200px',
|
|
'max-width': '100%',
|
|
'margin': '8px auto 0;',
|
|
'box-shadow': ($("#spu-shadow-type").val() == 'inset' ? 'inset' : '') +' '+ $("#spu-shadow-x").val() + 'px ' + $("#spu-shadow-y").val() + 'px ' + $("#spu-shadow-blur").val() + 'px ' + $("#spu-shadow-spread").val() + 'px ' + getColor($("#spu-shadow-color"))
|
|
});
|
|
|
|
var img_src = $('#spu_bgimage').val();
|
|
$editor.find("#tinymce").css({
|
|
'background-image': 'url("'+img_src+'")',
|
|
'background-size' : 'cover'
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* Rules
|
|
*
|
|
* Js for needed for rules
|
|
*
|
|
* @since: 1.0.0
|
|
* Thanks to advanced custom fields plugin for part of this code
|
|
*/
|
|
spu.rules = {
|
|
$el : null,
|
|
init : function(){
|
|
|
|
// vars
|
|
var _this = this;
|
|
|
|
// $el
|
|
_this.$el = $('#spu-rules');
|
|
|
|
// add rule
|
|
_this.$el.on('click', '.rules-add-rule', function(){
|
|
_this.add_rule( $(this).closest('tr') );
|
|
return false;
|
|
});
|
|
|
|
// remove rule
|
|
_this.$el.on('click', '.rules-remove-rule', function(){
|
|
_this.remove_rule( $(this).closest('tr') );
|
|
return false;
|
|
});
|
|
|
|
// add rule
|
|
_this.$el.on('click', '.rules-add-group', function(){
|
|
_this.add_group();
|
|
return false;
|
|
});
|
|
|
|
// change rule
|
|
_this.$el.on('change', '.param select', function(){
|
|
|
|
// vars
|
|
var $tr = $(this).closest('tr'),
|
|
rule_id = $tr.attr('data-id'),
|
|
$group = $tr.closest('.rules-group'),
|
|
group_id = $group.attr('data-id'),
|
|
val_td = $tr.find('td.value'),
|
|
ajax_data = {
|
|
'action' : "spu/field_group/render_rules",
|
|
'nonce' : spu_js.nonce,
|
|
'rule_id' : rule_id,
|
|
'group_id' : group_id,
|
|
'value' : '',
|
|
'param' : $(this).val()
|
|
};
|
|
|
|
// add loading gif
|
|
var div = $('<div class="spu-loading"><img src="'+spu_js.admin_url+'/images/wpspin_light.gif"/> </div>');
|
|
val_td.html( div );
|
|
|
|
// load rules html
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: ajax_data,
|
|
type: 'post',
|
|
dataType: 'html',
|
|
success: function(html){
|
|
val_td.html(html);
|
|
}
|
|
});
|
|
|
|
// Operators Rules
|
|
var operator_td = $tr.find('td.operator'),
|
|
ajax_data = {
|
|
'action' : "spu/field_group/render_operator",
|
|
'nonce' : spu_js.nonce,
|
|
'rule_id' : rule_id,
|
|
'group_id' : group_id,
|
|
'value' : '',
|
|
'param' : $(this).val()
|
|
};
|
|
|
|
operator_td.html( div );
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: ajax_data,
|
|
type: 'post',
|
|
dataType: 'html',
|
|
success: function(html){
|
|
operator_td.html(html);
|
|
}
|
|
});
|
|
});
|
|
},
|
|
add_rule : function( $tr ){
|
|
|
|
// vars
|
|
var $tr2 = $tr.clone(),
|
|
old_id = $tr2.attr('data-id'),
|
|
new_id = 'rule_' + ( parseInt( old_id.replace('rule_', ''), 10 ) + 1);
|
|
|
|
// update names
|
|
$tr2.find('[name]').each(function(){
|
|
|
|
$(this).attr('name', $(this).attr('name').replace( old_id, new_id ));
|
|
$(this).attr('id', $(this).attr('id').replace( old_id, new_id ));
|
|
});
|
|
|
|
// update data-i
|
|
$tr2.attr( 'data-id', new_id );
|
|
|
|
// add tr
|
|
$tr.after( $tr2 );
|
|
|
|
return false;
|
|
},
|
|
remove_rule : function( $tr ){
|
|
|
|
// vars
|
|
var siblings = $tr.siblings('tr').length;
|
|
|
|
if( siblings == 0 ) {
|
|
// remove group
|
|
this.remove_group( $tr.closest('.rules-group') );
|
|
} else {
|
|
// remove tr
|
|
$tr.remove();
|
|
}
|
|
},
|
|
add_group : function(){
|
|
|
|
// vars
|
|
var $group = this.$el.find('.rules-group:last'),
|
|
$group2 = $group.clone(),
|
|
old_id = $group2.attr('data-id'),
|
|
new_id = 'group_' + ( parseInt( old_id.replace('group_', ''), 10 ) + 1);
|
|
|
|
// update names
|
|
$group2.find('[name]').each(function(){
|
|
|
|
$(this).attr('name', $(this).attr('name').replace( old_id, new_id ));
|
|
$(this).attr('id', $(this).attr('id').replace( old_id, new_id ));
|
|
|
|
});
|
|
|
|
// update data-i
|
|
$group2.attr( 'data-id', new_id );
|
|
|
|
// update h4
|
|
$group2.find('h4').html( spu_js.l10n.or ).addClass('rules-or');
|
|
|
|
// remove all tr's except the first one
|
|
$group2.find('tr:not(:first)').remove();
|
|
|
|
// add tr
|
|
$group.after( $group2 );
|
|
},
|
|
remove_group : function( $group ){
|
|
$group.remove();
|
|
}
|
|
};
|
|
|
|
return {
|
|
onTinyMceInit: function() {
|
|
TinyMceOptin();
|
|
}
|
|
}
|
|
}(jQuery));
|
|
|
|
|
|
( function( global, $ ) {
|
|
var editor,
|
|
syncCSS = function() {
|
|
$( '#spu-custom-css' ).val( editor.getSession().getValue() );
|
|
},
|
|
loadAce = function() {
|
|
if(! $('#custom_css').length )
|
|
return;
|
|
editor = ace.edit( 'custom_css' );
|
|
global.safecss_editor = editor;
|
|
editor.getSession().setUseWrapMode( true );
|
|
editor.setShowPrintMargin( false );
|
|
editor.getSession().setValue( $( '#spu-custom-css' ).val() );
|
|
editor.getSession().setMode( "ace/mode/css" );
|
|
jQuery.fn.spin&&$( '#custom_css_container' ).spin( false );
|
|
$( '#post' ).submit( syncCSS );
|
|
};
|
|
if ( $.browser.msie&&parseInt( $.browser.version, 10 ) <= 7 ) {
|
|
$( '#custom_css_container' ).hide();
|
|
$( '#spu-custom-css' ).show();
|
|
return false;
|
|
} else {
|
|
$( global ).load( loadAce );
|
|
}
|
|
global.aceSyncCSS = syncCSS;
|
|
} )( this, jQuery );
|
|
function spu_hexToRgb(hex, alpha) {
|
|
hex = hex.replace('#', '');
|
|
var r = parseInt(hex.length == 3 ? hex.slice(0, 1).repeat(2) : hex.slice(0, 2), 16);
|
|
var g = parseInt(hex.length == 3 ? hex.slice(1, 2).repeat(2) : hex.slice(2, 4), 16);
|
|
var b = parseInt(hex.length == 3 ? hex.slice(2, 3).repeat(2) : hex.slice(4, 6), 16);
|
|
if ( alpha ) {
|
|
return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + alpha + ')';
|
|
}
|
|
else {
|
|
return 'rgb(' + r + ', ' + g + ', ' + b + ')';
|
|
}
|
|
}
|
|
/**
|
|
* jQuery alterClass plugin
|
|
*
|
|
* Remove element classes with wildcard matching. Optionally add classes:
|
|
* $( '#foo' ).alterClass( 'foo-* bar-*', 'foobar' )
|
|
*
|
|
* Copyright (c) 2011 Pete Boere (the-echoplex.net)
|
|
* Free under terms of the MIT license: http://www.opensource.org/licenses/mit-license.php
|
|
*
|
|
*/
|
|
(function ( $ ) {
|
|
$.fn.alterClass = function ( removals, additions ) {
|
|
|
|
var self = this;
|
|
if ( removals.indexOf( '*' ) === -1 ) {
|
|
// Use native jQuery methods if there is no wildcard matching
|
|
self.removeClass( removals );
|
|
return !additions ? self : self.addClass( additions );
|
|
}
|
|
|
|
var patt = new RegExp( '\\s' +
|
|
removals.
|
|
replace( /\*/g, '[A-Za-z0-9-_]+' ).
|
|
split( ' ' ).
|
|
join( '\\s|\\s' ) +
|
|
'\\s', 'g' );
|
|
|
|
self.each( function ( i, it ) {
|
|
var cn = ' ' + it.className + ' ';
|
|
while ( patt.test( cn ) ) {
|
|
cn = cn.replace( patt, ' ' );
|
|
}
|
|
it.className = $.trim( cn );
|
|
});
|
|
|
|
return !additions ? self : self.addClass( additions );
|
|
};
|
|
})( jQuery ); |