laipower/wp-content/plugins/w3-total-cache/pub/js/lightbox.js

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();
});
});