527 lines
14 KiB
JavaScript
527 lines
14 KiB
JavaScript
var W3tc_Lightbox = {
|
|
window: jQuery(window),
|
|
container: null,
|
|
options: null,
|
|
|
|
create: function() {
|
|
var me = this;
|
|
|
|
this.container = jQuery('<div class="' + this.options.id + '"><div class="lightbox-close">' + this.options.close + '</div><div id="w3tc_lightbox_content" class="lightbox-content"></div></div>').css({
|
|
top: 0,
|
|
left: 0,
|
|
width: 0,
|
|
height: 0,
|
|
position: 'fixed',
|
|
'z-index': 9991,
|
|
display: 'none'
|
|
});
|
|
|
|
jQuery('body').append(this.container);
|
|
me.resize();
|
|
this.window.resize(function() {
|
|
me.resize();
|
|
});
|
|
|
|
this.window.scroll(function() {
|
|
me.resize();
|
|
});
|
|
|
|
this.container.find('.lightbox-close').on( 'click', function() {
|
|
me.close();
|
|
});
|
|
|
|
jQuery(document).keyup(function(e) {
|
|
if (e.keyCode == 27) { me.close(); } // esc
|
|
});
|
|
},
|
|
|
|
open: function(options) {
|
|
this.options = jQuery.extend({
|
|
id: 'lightbox',
|
|
close: 'Close window',
|
|
width: 0,
|
|
height: 0,
|
|
maxWidth: 0,
|
|
maxHeight: 0,
|
|
minWidth: 0,
|
|
minHeight: 0,
|
|
widthPercent: 0.6,
|
|
heightPercent: 0.8,
|
|
content: null,
|
|
url: null,
|
|
callback: null
|
|
}, options);
|
|
|
|
this.create();
|
|
this.resize();
|
|
|
|
if (this.options.content) {
|
|
this.content(this.options.content);
|
|
} else if (this.options.url) {
|
|
this.load(this.options.url, this.options.callback);
|
|
|
|
if (window.w3tc_ga) {
|
|
var w3tc_action = this.options.url.match(/w3tc_action=([^&]+)/);
|
|
|
|
if (! w3tc_action || ! w3tc_action[1]) {
|
|
w3tc_action = this.options.url.match(/&(w3tc_[^&]+)&/);
|
|
}
|
|
|
|
if (w3tc_action && w3tc_action[1]) {
|
|
w3tc_ga(
|
|
'event',
|
|
'pageview',
|
|
{
|
|
eventLabel: 'overlays/' + w3tc_action[1]
|
|
}
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
W3tc_Overlay.show();
|
|
this.container.show();
|
|
},
|
|
|
|
close: function() {
|
|
if (this.options.onClose)
|
|
this.options.onClose();
|
|
|
|
this.container.remove();
|
|
W3tc_Overlay.hide();
|
|
},
|
|
|
|
resize: function() {
|
|
var width = (this.options.width ? this.options.width : this.window.width() * this.options.widthPercent);
|
|
var height = (this.options.height ? this.options.height : this.window.height() * this.options.heightPercent);
|
|
|
|
if (!this.options.maxWidth)
|
|
this.options.maxWidth = this.window.width();
|
|
if (!this.options.maxHeight)
|
|
this.options.maxHeight = this.window.height();
|
|
|
|
if (this.options.maxWidth && width > this.options.maxWidth) {
|
|
width = this.options.maxWidth;
|
|
} else if (width < this.options.minWidth) {
|
|
width = this.options.minWidth;
|
|
}
|
|
|
|
if (this.options.maxHeight && height > this.options.maxHeight) {
|
|
height = this.options.maxHeight;
|
|
} else if (height < this.options.minHeight) {
|
|
height = this.options.minHeight;
|
|
}
|
|
|
|
this.container.css({
|
|
width: width,
|
|
height: height
|
|
});
|
|
|
|
this.container.css({
|
|
top: (this.window.height() / 2 - this.container.outerHeight() / 2)>=0 ? this.window.height() / 2 - this.container.outerHeight() / 2 : 0,
|
|
left: (this.window.width() / 2 - this.container.outerWidth() / 2)>=0 ? this.window.width() / 2 - this.container.outerWidth() / 2 : 0
|
|
});
|
|
|
|
jQuery('.lightbox-content', this.container).css({
|
|
width: width,
|
|
height: height
|
|
});
|
|
},
|
|
|
|
load: function(url, callback) {
|
|
this.content('');
|
|
this.loading(true);
|
|
var me = this;
|
|
jQuery.get(url, {}, function(content) {
|
|
me.loading(false);
|
|
if (content.substr(0, 9) === 'Location ') {
|
|
w3tc_beforeupload_unbind();
|
|
window.location = content.substr(9);
|
|
return;
|
|
}
|
|
|
|
me.content(content);
|
|
if (callback) {
|
|
callback.call(this, me);
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* adds all controls of the form to the url
|
|
*/
|
|
load_form: function(url, form_selector, callback) {
|
|
data = {}
|
|
var v = jQuery(form_selector).find('input').each(function(i) {
|
|
var name = jQuery(this).attr('name');
|
|
var type = jQuery(this).attr('type');
|
|
if (type == 'radio' || type == 'checkbox' ) {
|
|
if (!jQuery(this).prop('checked'))
|
|
return;
|
|
}
|
|
|
|
if (name)
|
|
data[name] = jQuery(this).val();
|
|
});
|
|
|
|
this.content('');
|
|
this.loading(true);
|
|
var me = this;
|
|
jQuery.post(url, data, function(content) {
|
|
me.loading(false);
|
|
if (content.substr(0, 9) === 'Location ') {
|
|
w3tc_beforeupload_unbind();
|
|
window.location = content.substr(9);
|
|
return;
|
|
}
|
|
|
|
me.content(content);
|
|
if (callback) {
|
|
callback.call(this, me);
|
|
}
|
|
});
|
|
},
|
|
|
|
|
|
content: function(content) {
|
|
return this.container.find('.lightbox-content').html(content);
|
|
},
|
|
|
|
width: function(width) {
|
|
if (width === undefined) {
|
|
return this.container.width();
|
|
} else {
|
|
this.container.css('width', width);
|
|
return this.resize();
|
|
}
|
|
},
|
|
|
|
height: function(height) {
|
|
if (height === undefined) {
|
|
return this.container.height();
|
|
} else {
|
|
this.container.css('height', height);
|
|
return this.resize();
|
|
}
|
|
},
|
|
|
|
loading: function(loading) {
|
|
if (loading)
|
|
this.container.find('.lightbox-content').addClass('lightbox-loader');
|
|
else
|
|
this.container.find('.lightbox-content').removeClass('lightbox-loader');
|
|
}
|
|
};
|
|
|
|
var W3tc_Overlay = {
|
|
window: jQuery(window),
|
|
container: null,
|
|
|
|
create: function() {
|
|
var me = this;
|
|
|
|
this.container = jQuery('<div id="overlay" />').css({
|
|
top: 0,
|
|
left: 0,
|
|
width: 0,
|
|
height: 0,
|
|
position: 'fixed',
|
|
'z-index': 9990,
|
|
display: 'none',
|
|
opacity: 0.6
|
|
});
|
|
|
|
jQuery('#w3tc').append(this.container);
|
|
|
|
this.window.resize(function() {
|
|
me.resize();
|
|
});
|
|
|
|
this.window.scroll(function() {
|
|
me.resize();
|
|
});
|
|
},
|
|
|
|
show: function() {
|
|
this.create();
|
|
this.resize();
|
|
this.container.show();
|
|
},
|
|
|
|
hide: function() {
|
|
this.container.remove();
|
|
},
|
|
|
|
resize: function() {
|
|
this.container.css({
|
|
width: this.window.width(),
|
|
height: this.window.height()
|
|
});
|
|
}
|
|
};
|
|
|
|
|
|
|
|
var w3tc_minify_recommendations_checked = {};
|
|
|
|
function w3tc_lightbox_minify_recommendations(nonce) {
|
|
W3tc_Lightbox.open({
|
|
width: 1000,
|
|
url: 'admin.php?page=w3tc_minify&w3tc_test_minify_recommendations&_wpnonce=' + nonce,
|
|
callback: function(lightbox) {
|
|
var theme = jQuery('#recom_theme').val();
|
|
|
|
if (jQuery.ui && jQuery.ui.sortable) {
|
|
jQuery("#recom_js_files,#recom_css_files").sortable({
|
|
axis: 'y',
|
|
stop: function() {
|
|
jQuery(this).find('li').each(function(index) {
|
|
jQuery(this).find('td:eq(1)').html((index + 1) + '.');
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
if (w3tc_minify_recommendations_checked[theme] !== undefined) {
|
|
jQuery('#recom_js_files :text,#recom_css_files :text').each(function() {
|
|
var hash = jQuery(this).parents('li').find('[name=recom_js_template]').val() + ':' + jQuery(this).val();
|
|
|
|
if (w3tc_minify_recommendations_checked[theme][hash] !== undefined) {
|
|
var checkbox = jQuery(this).parents('li').find(':checkbox');
|
|
|
|
if (w3tc_minify_recommendations_checked[theme][hash]) {
|
|
checkbox.attr('checked', 'checked');
|
|
} else {
|
|
checkbox.removeAttr('checked');
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
jQuery('#recom_theme').change(function() {
|
|
jQuery('#recom_js_files :checkbox,#recom_css_files :checkbox').each(function() {
|
|
var li = jQuery(this).parents('li');
|
|
var hash = li.find('[name=recom_js_template]').val() + ':' + li.find(':text').val();
|
|
|
|
if (w3tc_minify_recommendations_checked[theme] === undefined) {
|
|
w3tc_minify_recommendations_checked[theme] = {};
|
|
}
|
|
|
|
w3tc_minify_recommendations_checked[theme][hash] = jQuery(this).is(':checked');
|
|
});
|
|
|
|
lightbox.load('admin.php?page=w3tc_minify&w3tc_test_minify_recommendations&theme_key=' + jQuery(this).val() + '&_wpnonce=' + nonce, lightbox.options.callback);
|
|
});
|
|
|
|
jQuery('#recom_js_check').on( 'click', function() {
|
|
if (jQuery('#recom_js_files :checkbox:checked').length) {
|
|
jQuery('#recom_js_files :checkbox').removeAttr('checked');
|
|
} else {
|
|
jQuery('#recom_js_files :checkbox').attr('checked', 'checked');
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
jQuery('#recom_css_check').on( 'click', function() {
|
|
if (jQuery('#recom_css_files :checkbox:checked').length) {
|
|
jQuery('#recom_css_files :checkbox').removeAttr('checked');
|
|
} else {
|
|
jQuery('#recom_css_files :checkbox').attr('checked', 'checked');
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
jQuery('.recom_apply', lightbox.container).on( 'click', function() {
|
|
var theme = jQuery('#recom_theme').val();
|
|
|
|
jQuery('#js_files li').each(function() {
|
|
if (jQuery(this).find(':text').attr('name').indexOf('js_files[' + theme + ']') != -1) {
|
|
jQuery(this).remove();
|
|
}
|
|
});
|
|
|
|
jQuery('#css_files li').each(function() {
|
|
if (jQuery(this).find(':text').attr('name').indexOf('css_files[' + theme + ']') != -1) {
|
|
jQuery(this).remove();
|
|
}
|
|
});
|
|
|
|
jQuery('#recom_js_files li').each(function() {
|
|
if (jQuery(this).find(':checkbox:checked').length) {
|
|
w3tc_minify_js_file_add(theme, jQuery(this).find('[name=recom_js_template]').val(), jQuery(this).find('[name=recom_js_location]').val(), jQuery(this).find('[name=recom_js_file]').val());
|
|
}
|
|
});
|
|
|
|
jQuery('#recom_css_files li').each(function() {
|
|
if (jQuery(this).find(':checkbox:checked').length) {
|
|
w3tc_minify_css_file_add(theme, jQuery(this).find('[name=recom_css_template]').val(), jQuery(this).find('[name=recom_css_file]').val());
|
|
}
|
|
});
|
|
|
|
w3tc_minify_js_theme(theme);
|
|
w3tc_minify_css_theme(theme);
|
|
|
|
w3tc_input_enable('.js_enabled', jQuery('#minify_js_enable:checked').length);
|
|
w3tc_input_enable('.css_enabled', jQuery('#minify_css_enable:checked').length);
|
|
|
|
lightbox.close();
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
function w3tc_lightbox_self_test(nonce) {
|
|
W3tc_Lightbox.open({
|
|
width: 800,
|
|
minHeight: 300,
|
|
url: 'admin.php?page=w3tc_dashboard&w3tc_test_self&_wpnonce=' + w3tc_nonce,
|
|
callback: function(lightbox) {
|
|
jQuery('.button-primary', lightbox.container).on( 'click', function() {
|
|
lightbox.close();
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
function w3tc_lightbox_upgrade(nonce, data_src, renew_key) {
|
|
var client_id = '';
|
|
if (window.w3tc_ga) {
|
|
client_id = w3tc_ga_cid;
|
|
}
|
|
|
|
W3tc_Lightbox.open({
|
|
id: 'w3tc-overlay',
|
|
close: '',
|
|
width: 800,
|
|
height: 350,
|
|
url: 'admin.php?page=w3tc_dashboard&w3tc_licensing_upgrade&_wpnonce=' +
|
|
encodeURIComponent(nonce) + '&data_src=' + encodeURIComponent(data_src) +
|
|
(renew_key ? '&renew_key=' + encodeURIComponent(renew_key) : '') +
|
|
(client_id ? '&client_id=' + encodeURIComponent(client_id) : ''),
|
|
callback: function(lightbox) {
|
|
lightbox.options.height = jQuery('#w3tc-upgrade').outerHeight();
|
|
|
|
jQuery('.button-primary', lightbox.container).on( 'click', function() {
|
|
lightbox.close();
|
|
});
|
|
jQuery('#w3tc-purchase', lightbox.container).on( 'click', function() {
|
|
lightbox.close();
|
|
w3tc_lightbox_buy_plugin(nonce, data_src, renew_key, client_id);
|
|
});
|
|
jQuery('#w3tc-purchase-link', lightbox.container).on( 'click', function() {
|
|
lightbox.close();
|
|
|
|
if ( jQuery('#licensing').length ) {
|
|
jQuery([document.documentElement, document.body]).animate({
|
|
scrollTop: jQuery('#licensing').offset().top
|
|
}, 2000);
|
|
}
|
|
});
|
|
|
|
// Allow for customizations of the "upgrade" overlay specifically.
|
|
jQuery( '.w3tc-overlay' ).addClass( 'w3tc-overlay-upgrade' );
|
|
|
|
lightbox.resize();
|
|
}
|
|
});
|
|
}
|
|
|
|
function w3tc_lightbox_buy_plugin(nonce, data_src, renew_key, client_id) {
|
|
W3tc_Lightbox.open({
|
|
width: 800,
|
|
minHeight: 350,
|
|
maxWidth: jQuery(window).width() - 40,
|
|
maxHeight: jQuery(window).height() - 40,
|
|
url: 'admin.php?page=w3tc_dashboard&w3tc_licensing_buy_plugin' +
|
|
'&_wpnonce=' + encodeURIComponent(nonce) +
|
|
'&data_src=' + encodeURIComponent(data_src) +
|
|
(renew_key ? '&renew_key=' + encodeURIComponent(renew_key) : '') +
|
|
(client_id ? '&client_id=' + encodeURIComponent(client_id) : ''),
|
|
callback: function(lightbox) {
|
|
var w3tc_license_listener = function(event) {
|
|
if (event.origin.substr(event.origin.length - 12) !== ".w3-edge.com")
|
|
return;
|
|
|
|
var data = event.data.split(' ');
|
|
if (data[0] === 'license') {
|
|
// legacy purchase
|
|
w3tc_lightbox_save_license_key(function() {
|
|
lightbox.close();
|
|
});
|
|
} else if (data[0] === 'v2_license') {
|
|
// reset default timeout
|
|
var iframe = document.getElementById('buy_frame');
|
|
if (iframe.contentWindow && iframe.contentWindow.postMessage)
|
|
iframe.contentWindow.postMessage('v2_license_accepted', '*');
|
|
|
|
lightbox.options.onClose = function() {
|
|
window.location = window.location + '&refresh';
|
|
}
|
|
|
|
w3tc_lightbox_save_license_key(data[1], nonce, function() {
|
|
jQuery('#buy_frame').attr('src', data[3]);
|
|
});
|
|
}
|
|
}
|
|
|
|
if (window.addEventListener) {
|
|
addEventListener("message", w3tc_license_listener, false)
|
|
} else if (attachEvent) {
|
|
attachEvent("onmessage", w3tc_license_listener);
|
|
}
|
|
|
|
jQuery('.button-primary', lightbox.container).on( 'click', function() {
|
|
lightbox.close();
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
function w3tc_lightbox_save_license_key(license_key, nonce, callback) {
|
|
jQuery('#plugin_license_key').val(license_key);
|
|
var params = {
|
|
w3tc_default_save_license_key: 1,
|
|
license_key: license_key,
|
|
_wpnonce: ('array' === jQuery.type(nonce)) ? nonce[0] : nonce
|
|
};
|
|
|
|
jQuery.post('admin.php?page=w3tc_dashboard', params, function(data) {
|
|
callback();
|
|
}, 'json').fail(callback);
|
|
}
|
|
|
|
jQuery(function() {
|
|
jQuery('.button-minify-recommendations').on( 'click', function() {
|
|
var nonce = jQuery(this).metadata().nonce;
|
|
w3tc_lightbox_minify_recommendations(nonce);
|
|
return false;
|
|
});
|
|
|
|
jQuery('.button-self-test').on( 'click', function() {
|
|
var nonce = jQuery(this).metadata().nonce;
|
|
w3tc_lightbox_self_test(nonce);
|
|
return false;
|
|
});
|
|
|
|
jQuery('.button-buy-plugin').on( 'click', function() {
|
|
var data_src = jQuery(this).data('src');
|
|
var nonce = jQuery(this).data('nonce');
|
|
if (!nonce) {
|
|
nonce = w3tc_nonce;
|
|
}
|
|
var renew_key = jQuery(this).data('renew-key');
|
|
|
|
w3tc_lightbox_upgrade(nonce, data_src, renew_key);
|
|
jQuery('#w3tc-license-instruction').show();
|
|
return false;
|
|
});
|
|
|
|
jQuery('body').on('click', '.w3tc_lightbox_close', function() {
|
|
W3tc_Lightbox.close();
|
|
});
|
|
});
|