update plugins
This commit is contained in:
@@ -0,0 +1,413 @@
|
||||
/*!
|
||||
* accounting.js v0.4.2
|
||||
* Copyright 2014 Open Exchange Rates
|
||||
*
|
||||
* Freely distributable under the MIT license.
|
||||
* Portions of accounting.js are inspired or borrowed from underscore.js
|
||||
*
|
||||
* Full details and documentation:
|
||||
* http://openexchangerates.github.io/accounting.js/
|
||||
*/
|
||||
|
||||
(function(root, undefined) {
|
||||
|
||||
/* --- Setup --- */
|
||||
|
||||
// Create the local library object, to be exported or referenced globally later
|
||||
var lib = {};
|
||||
|
||||
// Current version
|
||||
lib.version = '0.4.1';
|
||||
|
||||
|
||||
/* --- Exposed settings --- */
|
||||
|
||||
// The library's settings configuration object. Contains default parameters for
|
||||
// currency and number formatting
|
||||
lib.settings = {
|
||||
currency: {
|
||||
symbol : "$", // default currency symbol is '$'
|
||||
format : "%s%v", // controls output: %s = symbol, %v = value (can be object, see docs)
|
||||
decimal : ".", // decimal point separator
|
||||
thousand : ",", // thousands separator
|
||||
precision : 2, // decimal places
|
||||
grouping : 3 // digit grouping (not implemented yet)
|
||||
},
|
||||
number: {
|
||||
precision : 0, // default precision on numbers is 0
|
||||
grouping : 3, // digit grouping (not implemented yet)
|
||||
thousand : ",",
|
||||
decimal : "."
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/* --- Internal Helper Methods --- */
|
||||
|
||||
// Store reference to possibly-available ECMAScript 5 methods for later
|
||||
var nativeMap = Array.prototype.map,
|
||||
nativeIsArray = Array.isArray,
|
||||
toString = Object.prototype.toString;
|
||||
|
||||
/**
|
||||
* Tests whether supplied parameter is a string
|
||||
* from underscore.js
|
||||
*/
|
||||
function isString(obj) {
|
||||
return !!(obj === '' || (obj && obj.charCodeAt && obj.substr));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether supplied parameter is a string
|
||||
* from underscore.js, delegates to ECMA5's native Array.isArray
|
||||
*/
|
||||
function isArray(obj) {
|
||||
return nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether supplied parameter is a true object
|
||||
*/
|
||||
function isObject(obj) {
|
||||
return obj && toString.call(obj) === '[object Object]';
|
||||
}
|
||||
|
||||
/**
|
||||
* Extends an object with a defaults object, similar to underscore's _.defaults
|
||||
*
|
||||
* Used for abstracting parameter handling from API methods
|
||||
*/
|
||||
function defaults(object, defs) {
|
||||
var key;
|
||||
object = object || {};
|
||||
defs = defs || {};
|
||||
// Iterate over object non-prototype properties:
|
||||
for (key in defs) {
|
||||
if (defs.hasOwnProperty(key)) {
|
||||
// Replace values with defaults only if undefined (allow empty/zero values):
|
||||
if (object[key] == null) object[key] = defs[key];
|
||||
}
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of `Array.map()` for iteration loops
|
||||
*
|
||||
* Returns a new Array as a result of calling `iterator` on each array value.
|
||||
* Defers to native Array.map if available
|
||||
*/
|
||||
function map(obj, iterator, context) {
|
||||
var results = [], i, j;
|
||||
|
||||
if (!obj) return results;
|
||||
|
||||
// Use native .map method if it exists:
|
||||
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
|
||||
|
||||
// Fallback for native .map:
|
||||
for (i = 0, j = obj.length; i < j; i++ ) {
|
||||
results[i] = iterator.call(context, obj[i], i, obj);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check and normalise the value of precision (must be positive integer)
|
||||
*/
|
||||
function checkPrecision(val, base) {
|
||||
val = Math.round(Math.abs(val));
|
||||
return isNaN(val)? base : val;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Parses a format string or object and returns format obj for use in rendering
|
||||
*
|
||||
* `format` is either a string with the default (positive) format, or object
|
||||
* containing `pos` (required), `neg` and `zero` values (or a function returning
|
||||
* either a string or object)
|
||||
*
|
||||
* Either string or format.pos must contain "%v" (value) to be valid
|
||||
*/
|
||||
function checkCurrencyFormat(format) {
|
||||
var defaults = lib.settings.currency.format;
|
||||
|
||||
// Allow function as format parameter (should return string or object):
|
||||
if ( typeof format === "function" ) format = format();
|
||||
|
||||
// Format can be a string, in which case `value` ("%v") must be present:
|
||||
if ( isString( format ) && format.match("%v") ) {
|
||||
|
||||
// Create and return positive, negative and zero formats:
|
||||
return {
|
||||
pos : format,
|
||||
neg : format.replace("-", "").replace("%v", "-%v"),
|
||||
zero : format
|
||||
};
|
||||
|
||||
// If no format, or object is missing valid positive value, use defaults:
|
||||
} else if ( !format || !format.pos || !format.pos.match("%v") ) {
|
||||
|
||||
// If defaults is a string, casts it to an object for faster checking next time:
|
||||
return ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {
|
||||
pos : defaults,
|
||||
neg : defaults.replace("%v", "-%v"),
|
||||
zero : defaults
|
||||
};
|
||||
|
||||
}
|
||||
// Otherwise, assume format was fine:
|
||||
return format;
|
||||
}
|
||||
|
||||
|
||||
/* --- API Methods --- */
|
||||
|
||||
/**
|
||||
* Takes a string/array of strings, removes all formatting/cruft and returns the raw float value
|
||||
* Alias: `accounting.parse(string)`
|
||||
*
|
||||
* Decimal must be included in the regular expression to match floats (defaults to
|
||||
* accounting.settings.number.decimal), so if the number uses a non-standard decimal
|
||||
* separator, provide it as the second argument.
|
||||
*
|
||||
* Also matches bracketed negatives (eg. "$ (1.99)" => -1.99)
|
||||
*
|
||||
* Doesn't throw any errors (`NaN`s become 0) but this may change in future
|
||||
*/
|
||||
var unformat = lib.unformat = lib.parse = function(value, decimal) {
|
||||
// Recursively unformat arrays:
|
||||
if (isArray(value)) {
|
||||
return map(value, function(val) {
|
||||
return unformat(val, decimal);
|
||||
});
|
||||
}
|
||||
|
||||
// Fails silently (need decent errors):
|
||||
value = value || 0;
|
||||
|
||||
// Return the value as-is if it's already a number:
|
||||
if (typeof value === "number") return value;
|
||||
|
||||
// Default decimal point comes from settings, but could be set to eg. "," in opts:
|
||||
decimal = decimal || lib.settings.number.decimal;
|
||||
|
||||
// Build regex to strip out everything except digits, decimal point and minus sign:
|
||||
var regex = new RegExp("[^0-9-" + decimal + "]", ["g"]),
|
||||
unformatted = parseFloat(
|
||||
("" + value)
|
||||
.replace(/\((.*)\)/, "-$1") // replace bracketed values with negatives
|
||||
.replace(regex, '') // strip out any cruft
|
||||
.replace(decimal, '.') // make sure decimal point is standard
|
||||
);
|
||||
|
||||
// This will fail silently which may cause trouble, let's wait and see:
|
||||
return !isNaN(unformatted) ? unformatted : 0;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Implementation of toFixed() that treats floats more like decimals
|
||||
*
|
||||
* Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present
|
||||
* problems for accounting- and finance-related software.
|
||||
*/
|
||||
var toFixed = lib.toFixed = function(value, precision) {
|
||||
precision = checkPrecision(precision, lib.settings.number.precision);
|
||||
var power = Math.pow(10, precision);
|
||||
|
||||
// Multiply up by precision, round accurately, then divide and use native toFixed():
|
||||
return (Math.round(lib.unformat(value) * power) / power).toFixed(precision);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Format a number, with comma-separated thousands and custom precision/decimal places
|
||||
* Alias: `accounting.format()`
|
||||
*
|
||||
* Localise by overriding the precision and thousand / decimal separators
|
||||
* 2nd parameter `precision` can be an object matching `settings.number`
|
||||
*/
|
||||
var formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {
|
||||
// Resursively format arrays:
|
||||
if (isArray(number)) {
|
||||
return map(number, function(val) {
|
||||
return formatNumber(val, precision, thousand, decimal);
|
||||
});
|
||||
}
|
||||
|
||||
// Clean up number:
|
||||
number = unformat(number);
|
||||
|
||||
// Build options object from second param (if object) or all params, extending defaults:
|
||||
var opts = defaults(
|
||||
(isObject(precision) ? precision : {
|
||||
precision : precision,
|
||||
thousand : thousand,
|
||||
decimal : decimal
|
||||
}),
|
||||
lib.settings.number
|
||||
),
|
||||
|
||||
// Clean up precision
|
||||
usePrecision = checkPrecision(opts.precision),
|
||||
|
||||
// Do some calc:
|
||||
negative = number < 0 ? "-" : "",
|
||||
base = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + "",
|
||||
mod = base.length > 3 ? base.length % 3 : 0;
|
||||
|
||||
// Format the number:
|
||||
return negative + (mod ? base.substr(0, mod) + opts.thousand : "") + base.substr(mod).replace(/(\d{3})(?=\d)/g, "$1" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : "");
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Format a number into currency
|
||||
*
|
||||
* Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)
|
||||
* defaults: (0, "$", 2, ",", ".", "%s%v")
|
||||
*
|
||||
* Localise by overriding the symbol, precision, thousand / decimal separators and format
|
||||
* Second param can be an object matching `settings.currency` which is the easiest way.
|
||||
*
|
||||
* To do: tidy up the parameters
|
||||
*/
|
||||
var formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {
|
||||
// Resursively format arrays:
|
||||
if (isArray(number)) {
|
||||
return map(number, function(val){
|
||||
return formatMoney(val, symbol, precision, thousand, decimal, format);
|
||||
});
|
||||
}
|
||||
|
||||
// Clean up number:
|
||||
number = unformat(number);
|
||||
|
||||
// Build options object from second param (if object) or all params, extending defaults:
|
||||
var opts = defaults(
|
||||
(isObject(symbol) ? symbol : {
|
||||
symbol : symbol,
|
||||
precision : precision,
|
||||
thousand : thousand,
|
||||
decimal : decimal,
|
||||
format : format
|
||||
}),
|
||||
lib.settings.currency
|
||||
),
|
||||
|
||||
// Check format (returns object with pos, neg and zero):
|
||||
formats = checkCurrencyFormat(opts.format),
|
||||
|
||||
// Choose which format to use for this value:
|
||||
useFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;
|
||||
|
||||
// Return with currency symbol added:
|
||||
return useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Format a list of numbers into an accounting column, padding with whitespace
|
||||
* to line up currency symbols, thousand separators and decimals places
|
||||
*
|
||||
* List should be an array of numbers
|
||||
* Second parameter can be an object containing keys that match the params
|
||||
*
|
||||
* Returns array of accouting-formatted number strings of same length
|
||||
*
|
||||
* NB: `white-space:pre` CSS rule is required on the list container to prevent
|
||||
* browsers from collapsing the whitespace in the output strings.
|
||||
*/
|
||||
lib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {
|
||||
if (!list) return [];
|
||||
|
||||
// Build options object from second param (if object) or all params, extending defaults:
|
||||
var opts = defaults(
|
||||
(isObject(symbol) ? symbol : {
|
||||
symbol : symbol,
|
||||
precision : precision,
|
||||
thousand : thousand,
|
||||
decimal : decimal,
|
||||
format : format
|
||||
}),
|
||||
lib.settings.currency
|
||||
),
|
||||
|
||||
// Check format (returns object with pos, neg and zero), only need pos for now:
|
||||
formats = checkCurrencyFormat(opts.format),
|
||||
|
||||
// Whether to pad at start of string or after currency symbol:
|
||||
padAfterSymbol = formats.pos.indexOf("%s") < formats.pos.indexOf("%v") ? true : false,
|
||||
|
||||
// Store value for the length of the longest string in the column:
|
||||
maxLength = 0,
|
||||
|
||||
// Format the list according to options, store the length of the longest string:
|
||||
formatted = map(list, function(val, i) {
|
||||
if (isArray(val)) {
|
||||
// Recursively format columns if list is a multi-dimensional array:
|
||||
return lib.formatColumn(val, opts);
|
||||
} else {
|
||||
// Clean up the value
|
||||
val = unformat(val);
|
||||
|
||||
// Choose which format to use for this value (pos, neg or zero):
|
||||
var useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,
|
||||
|
||||
// Format this value, push into formatted list and save the length:
|
||||
fVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));
|
||||
|
||||
if (fVal.length > maxLength) maxLength = fVal.length;
|
||||
return fVal;
|
||||
}
|
||||
});
|
||||
|
||||
// Pad each number in the list and send back the column of numbers:
|
||||
return map(formatted, function(val, i) {
|
||||
// Only if this is a string (not a nested array, which would have already been padded):
|
||||
if (isString(val) && val.length < maxLength) {
|
||||
// Depending on symbol position, pad after symbol or at index 0:
|
||||
return padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(" "))) : (new Array(maxLength - val.length + 1).join(" ")) + val;
|
||||
}
|
||||
return val;
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/* --- Module Definition --- */
|
||||
|
||||
// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.
|
||||
// Otherwise, just add `accounting` to the global object
|
||||
if (typeof exports !== 'undefined') {
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
exports = module.exports = lib;
|
||||
}
|
||||
exports.accounting = lib;
|
||||
} else if (typeof define === 'function' && define.amd) {
|
||||
// Return the library as an AMD module:
|
||||
define([], function() {
|
||||
return lib;
|
||||
});
|
||||
} else {
|
||||
// Use accounting.noConflict to restore `accounting` back to its original value.
|
||||
// Returns a reference to the library's `accounting` object;
|
||||
// e.g. `var numbers = accounting.noConflict();`
|
||||
lib.noConflict = (function(oldAccounting) {
|
||||
return function() {
|
||||
// Reset the value of the root's `accounting` variable:
|
||||
root.accounting = oldAccounting;
|
||||
// Delete the noConflict method:
|
||||
lib.noConflict = undefined;
|
||||
// Return reference to the library to re-assign it:
|
||||
return lib;
|
||||
};
|
||||
})(root.accounting);
|
||||
|
||||
// Declare `fx` on the root (global/window) object:
|
||||
root['accounting'] = lib;
|
||||
}
|
||||
|
||||
// Root will be `window` in browser or `global` on the server:
|
||||
}(this));
|
||||
11
wp/wp-content/plugins/woocommerce/assets/js/accounting/accounting.min.js
vendored
Normal file
11
wp/wp-content/plugins/woocommerce/assets/js/accounting/accounting.min.js
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
/*!
|
||||
* accounting.js v0.4.2
|
||||
* Copyright 2014 Open Exchange Rates
|
||||
*
|
||||
* Freely distributable under the MIT license.
|
||||
* Portions of accounting.js are inspired or borrowed from underscore.js
|
||||
*
|
||||
* Full details and documentation:
|
||||
* http://openexchangerates.github.io/accounting.js/
|
||||
*/
|
||||
!function(n,r){var e={version:"0.4.1",settings:{currency:{symbol:"$",format:"%s%v",decimal:".",thousand:",",precision:2,grouping:3},number:{precision:0,grouping:3,thousand:",",decimal:"."}}},t=Array.prototype.map,o=Array.isArray,a=Object.prototype.toString;function i(n){return!!(""===n||n&&n.charCodeAt&&n.substr)}function u(n){return o?o(n):"[object Array]"===a.call(n)}function c(n){return n&&"[object Object]"===a.call(n)}function s(n,r){var e;for(e in n=n||{},r=r||{})r.hasOwnProperty(e)&&null==n[e]&&(n[e]=r[e]);return n}function f(n,r,e){var o,a,i=[];if(!n)return i;if(t&&n.map===t)return n.map(r,e);for(o=0,a=n.length;o<a;o++)i[o]=r.call(e,n[o],o,n);return i}function p(n,r){return n=Math.round(Math.abs(n)),isNaN(n)?r:n}function l(n){var r=e.settings.currency.format;return"function"==typeof n&&(n=n()),i(n)&&n.match("%v")?{pos:n,neg:n.replace("-","").replace("%v","-%v"),zero:n}:n&&n.pos&&n.pos.match("%v")?n:i(r)?e.settings.currency.format={pos:r,neg:r.replace("%v","-%v"),zero:r}:r}var m,d=e.unformat=e.parse=function(n,r){if(u(n))return f(n,function(n){return d(n,r)});if("number"==typeof(n=n||0))return n;r=r||e.settings.number.decimal;var t=new RegExp("[^0-9-"+r+"]",["g"]),o=parseFloat((""+n).replace(/\((.*)\)/,"-$1").replace(t,"").replace(r,"."));return isNaN(o)?0:o},g=e.toFixed=function(n,r){r=p(r,e.settings.number.precision);var t=Math.pow(10,r);return(Math.round(e.unformat(n)*t)/t).toFixed(r)},h=e.formatNumber=e.format=function(n,r,t,o){if(u(n))return f(n,function(n){return h(n,r,t,o)});n=d(n);var a=s(c(r)?r:{precision:r,thousand:t,decimal:o},e.settings.number),i=p(a.precision),l=n<0?"-":"",m=parseInt(g(Math.abs(n||0),i),10)+"",y=m.length>3?m.length%3:0;return l+(y?m.substr(0,y)+a.thousand:"")+m.substr(y).replace(/(\d{3})(?=\d)/g,"$1"+a.thousand)+(i?a.decimal+g(Math.abs(n),i).split(".")[1]:"")},y=e.formatMoney=function(n,r,t,o,a,i){if(u(n))return f(n,function(n){return y(n,r,t,o,a,i)});n=d(n);var m=s(c(r)?r:{symbol:r,precision:t,thousand:o,decimal:a,format:i},e.settings.currency),g=l(m.format);return(n>0?g.pos:n<0?g.neg:g.zero).replace("%s",m.symbol).replace("%v",h(Math.abs(n),p(m.precision),m.thousand,m.decimal))};e.formatColumn=function(n,r,t,o,a,m){if(!n)return[];var g=s(c(r)?r:{symbol:r,precision:t,thousand:o,decimal:a,format:m},e.settings.currency),y=l(g.format),b=y.pos.indexOf("%s")<y.pos.indexOf("%v"),v=0;return f(f(n,function(n,r){if(u(n))return e.formatColumn(n,g);var t=((n=d(n))>0?y.pos:n<0?y.neg:y.zero).replace("%s",g.symbol).replace("%v",h(Math.abs(n),p(g.precision),g.thousand,g.decimal));return t.length>v&&(v=t.length),t}),function(n,r){return i(n)&&n.length<v?b?n.replace(g.symbol,g.symbol+new Array(v-n.length+1).join(" ")):new Array(v-n.length+1).join(" ")+n:n})},"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=e),exports.accounting=e):"function"==typeof define&&define.amd?define([],function(){return e}):(e.noConflict=(m=n.accounting,function(){return n.accounting=m,e.noConflict=void 0,e}),n.accounting=e)}(this);
|
||||
158
wp/wp-content/plugins/woocommerce/assets/js/admin/api-keys.js
Normal file
158
wp/wp-content/plugins/woocommerce/assets/js/admin/api-keys.js
Normal file
@@ -0,0 +1,158 @@
|
||||
/*global jQuery, Backbone, _, woocommerce_admin_api_keys, wcSetClipboard, wcClearClipboard */
|
||||
(function( $ ) {
|
||||
|
||||
var APIView = Backbone.View.extend({
|
||||
/**
|
||||
* Element
|
||||
*
|
||||
* @param {Object} '#key-fields'
|
||||
*/
|
||||
el: $( '#key-fields' ),
|
||||
|
||||
/**
|
||||
* Events
|
||||
*
|
||||
* @type {Object}
|
||||
*/
|
||||
events: {
|
||||
'click input#update_api_key': 'saveKey'
|
||||
},
|
||||
|
||||
/**
|
||||
* Initialize actions
|
||||
*/
|
||||
initialize: function(){
|
||||
_.bindAll( this, 'saveKey' );
|
||||
},
|
||||
|
||||
/**
|
||||
* Init jQuery.BlockUI
|
||||
*/
|
||||
block: function() {
|
||||
$( this.el ).block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Remove jQuery.BlockUI
|
||||
*/
|
||||
unblock: function() {
|
||||
$( this.el ).unblock();
|
||||
},
|
||||
|
||||
/**
|
||||
* Init TipTip
|
||||
*/
|
||||
initTipTip: function( css_class ) {
|
||||
$( document.body )
|
||||
.on( 'click', css_class, function( evt ) {
|
||||
evt.preventDefault();
|
||||
if ( ! document.queryCommandSupported( 'copy' ) ) {
|
||||
$( css_class ).parent().find( 'input' ).trigger( 'focus' ).trigger( 'select' );
|
||||
$( '#copy-error' ).text( woocommerce_admin_api_keys.clipboard_failed );
|
||||
} else {
|
||||
$( '#copy-error' ).text( '' );
|
||||
wcClearClipboard();
|
||||
wcSetClipboard( $( this ).prev( 'input' ).val().trim(), $( css_class ) );
|
||||
}
|
||||
} )
|
||||
.on( 'aftercopy', css_class, function() {
|
||||
$( '#copy-error' ).text( '' );
|
||||
$( css_class ).tipTip( {
|
||||
'attribute': 'data-tip',
|
||||
'activation': 'focus',
|
||||
'fadeIn': 50,
|
||||
'fadeOut': 50,
|
||||
'delay': 0
|
||||
} ).trigger( 'focus' );
|
||||
} )
|
||||
.on( 'aftercopyerror', css_class, function() {
|
||||
$( css_class ).parent().find( 'input' ).trigger( 'focus' ).trigger( 'select' );
|
||||
$( '#copy-error' ).text( woocommerce_admin_api_keys.clipboard_failed );
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Create qrcode
|
||||
*
|
||||
* @param {string} consumer_key
|
||||
* @param {string} consumer_secret
|
||||
*/
|
||||
createQRCode: function( consumer_key, consumer_secret ) {
|
||||
$( '#keys-qrcode' ).qrcode({
|
||||
text: consumer_key + '|' + consumer_secret,
|
||||
width: 120,
|
||||
height: 120
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Save API Key using ajax
|
||||
*
|
||||
* @param {Object} e
|
||||
*/
|
||||
saveKey: function( e ) {
|
||||
e.preventDefault();
|
||||
|
||||
var self = this;
|
||||
|
||||
self.block();
|
||||
|
||||
Backbone.ajax({
|
||||
method: 'POST',
|
||||
dataType: 'json',
|
||||
url: woocommerce_admin_api_keys.ajax_url,
|
||||
data: {
|
||||
action: 'woocommerce_update_api_key',
|
||||
security: woocommerce_admin_api_keys.update_api_nonce,
|
||||
key_id: $( '#key_id', self.el ).val(),
|
||||
description: $( '#key_description', self.el ).val(),
|
||||
user: $( '#key_user', self.el ).val(),
|
||||
permissions: $( '#key_permissions', self.el ).val()
|
||||
},
|
||||
success: function( response ) {
|
||||
$( '.wc-api-message', self.el ).remove();
|
||||
|
||||
if ( response.success ) {
|
||||
var data = response.data;
|
||||
|
||||
$( 'h2, h3', self.el ).first().append( '<div class="wc-api-message updated"><p>' + data.message + '</p></div>' );
|
||||
|
||||
if ( 0 < data.consumer_key.length && 0 < data.consumer_secret.length ) {
|
||||
$( '#api-keys-options', self.el ).remove();
|
||||
$( 'p.submit', self.el ).empty().append( data.revoke_url );
|
||||
|
||||
var template = wp.template( 'api-keys-template' );
|
||||
|
||||
$( 'p.submit', self.el ).before( template({
|
||||
consumer_key: data.consumer_key,
|
||||
consumer_secret: data.consumer_secret
|
||||
}) );
|
||||
self.createQRCode( data.consumer_key, data.consumer_secret );
|
||||
self.initTipTip( '.copy-key' );
|
||||
self.initTipTip( '.copy-secret' );
|
||||
} else {
|
||||
$( '#key_description', self.el ).val( data.description );
|
||||
$( '#key_user', self.el ).val( data.user_id );
|
||||
$( '#key_permissions', self.el ).val( data.permissions );
|
||||
}
|
||||
} else {
|
||||
$( 'h2, h3', self.el )
|
||||
.first()
|
||||
.append( '<div class="wc-api-message error"><p>' + response.data.message + '</p></div>' );
|
||||
}
|
||||
|
||||
self.unblock();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
new APIView();
|
||||
|
||||
})( jQuery );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/api-keys.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/api-keys.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(e){new(Backbone.View.extend({el:e("#key-fields"),events:{"click input#update_api_key":"saveKey"},initialize:function(){_.bindAll(this,"saveKey")},block:function(){e(this.el).block({message:null,overlayCSS:{background:"#fff",opacity:.6}})},unblock:function(){e(this.el).unblock()},initTipTip:function(i){e(document.body).on("click",i,function(t){t.preventDefault(),document.queryCommandSupported("copy")?(e("#copy-error").text(""),wcClearClipboard(),wcSetClipboard(e(this).prev("input").val().trim(),e(i))):(e(i).parent().find("input").trigger("focus").trigger("select"),e("#copy-error").text(woocommerce_admin_api_keys.clipboard_failed))}).on("aftercopy",i,function(){e("#copy-error").text(""),e(i).tipTip({attribute:"data-tip",activation:"focus",fadeIn:50,fadeOut:50,delay:0}).trigger("focus")}).on("aftercopyerror",i,function(){e(i).parent().find("input").trigger("focus").trigger("select"),e("#copy-error").text(woocommerce_admin_api_keys.clipboard_failed)})},createQRCode:function(i,t){e("#keys-qrcode").qrcode({text:i+"|"+t,width:120,height:120})},saveKey:function(i){i.preventDefault();var t=this;t.block(),Backbone.ajax({method:"POST",dataType:"json",url:woocommerce_admin_api_keys.ajax_url,data:{action:"woocommerce_update_api_key",security:woocommerce_admin_api_keys.update_api_nonce,key_id:e("#key_id",t.el).val(),description:e("#key_description",t.el).val(),user:e("#key_user",t.el).val(),permissions:e("#key_permissions",t.el).val()},success:function(i){if(e(".wc-api-message",t.el).remove(),i.success){var o=i.data;if(e("h2, h3",t.el).first().append('<div class="wc-api-message updated"><p>'+o.message+"</p></div>"),0<o.consumer_key.length&&0<o.consumer_secret.length){e("#api-keys-options",t.el).remove(),e("p.submit",t.el).empty().append(o.revoke_url);var r=wp.template("api-keys-template");e("p.submit",t.el).before(r({consumer_key:o.consumer_key,consumer_secret:o.consumer_secret})),t.createQRCode(o.consumer_key,o.consumer_secret),t.initTipTip(".copy-key"),t.initTipTip(".copy-secret")}else e("#key_description",t.el).val(o.description),e("#key_user",t.el).val(o.user_id),e("#key_permissions",t.el).val(o.permissions)}else e("h2, h3",t.el).first().append('<div class="wc-api-message error"><p>'+i.data.message+"</p></div>");t.unblock()}})}}))}(jQuery);
|
||||
@@ -0,0 +1,170 @@
|
||||
/*global jQuery, Backbone, _ */
|
||||
( function( $, Backbone, _ ) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* WooCommerce Backbone Modal plugin
|
||||
*
|
||||
* @param {object} options
|
||||
*/
|
||||
$.fn.WCBackboneModal = function( options ) {
|
||||
return this.each( function() {
|
||||
( new $.WCBackboneModal( $( this ), options ) );
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize the Backbone Modal
|
||||
*
|
||||
* @param {object} element [description]
|
||||
* @param {object} options [description]
|
||||
*/
|
||||
$.WCBackboneModal = function( element, options ) {
|
||||
// Set settings
|
||||
var settings = $.extend( {}, $.WCBackboneModal.defaultOptions, options );
|
||||
|
||||
if ( settings.template ) {
|
||||
new $.WCBackboneModal.View({
|
||||
target: settings.template,
|
||||
string: settings.variable
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Set default options
|
||||
*
|
||||
* @type {object}
|
||||
*/
|
||||
$.WCBackboneModal.defaultOptions = {
|
||||
template: '',
|
||||
variable: {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Create the Backbone Modal
|
||||
*
|
||||
* @return {null}
|
||||
*/
|
||||
$.WCBackboneModal.View = Backbone.View.extend({
|
||||
tagName: 'div',
|
||||
id: 'wc-backbone-modal-dialog',
|
||||
_target: undefined,
|
||||
_string: undefined,
|
||||
events: {
|
||||
'click .modal-close': 'closeButton',
|
||||
'click #btn-ok' : 'addButton',
|
||||
'click #btn-back' : 'backButton',
|
||||
'click #btn-next' : 'nextButton',
|
||||
'touchstart #btn-ok': 'addButton',
|
||||
'keydown' : 'keyboardActions',
|
||||
'input' : 'handleInputValidation'
|
||||
},
|
||||
resizeContent: function() {
|
||||
var $content = $( '.wc-backbone-modal-content' ).find( 'article' );
|
||||
var max_h = $( window ).height() * 0.75;
|
||||
|
||||
$content.css({
|
||||
'max-height': max_h + 'px'
|
||||
});
|
||||
},
|
||||
initialize: function( data ) {
|
||||
var view = this;
|
||||
this._target = data.target;
|
||||
this._string = data.string;
|
||||
_.bindAll( this, 'render' );
|
||||
this.render();
|
||||
|
||||
$( window ).on( 'resize', function() {
|
||||
view.resizeContent();
|
||||
});
|
||||
},
|
||||
render: function() {
|
||||
var template = wp.template( this._target );
|
||||
|
||||
this.$el.append(
|
||||
template( this._string )
|
||||
);
|
||||
|
||||
$( document.body ).css({
|
||||
'overflow': 'hidden'
|
||||
}).append( this.$el );
|
||||
|
||||
this.resizeContent();
|
||||
this.$( '.wc-backbone-modal-content' ).attr( 'tabindex' , '0' ).trigger( 'focus' );
|
||||
|
||||
$( document.body ).trigger( 'init_tooltips' );
|
||||
|
||||
$( document.body ).trigger( 'wc_backbone_modal_loaded', this._target );
|
||||
},
|
||||
closeButton: function( e, addButtonCalled ) {
|
||||
e.preventDefault();
|
||||
$( document.body ).trigger( 'wc_backbone_modal_before_remove', [ this._target, this.getFormData(), !!addButtonCalled ] );
|
||||
this.undelegateEvents();
|
||||
$( document ).off( 'focusin' );
|
||||
$( document.body ).css({
|
||||
'overflow': 'auto'
|
||||
});
|
||||
this.remove();
|
||||
$( document.body ).trigger( 'wc_backbone_modal_removed', this._target );
|
||||
},
|
||||
addButton: function( e ) {
|
||||
$( document.body ).trigger( 'wc_backbone_modal_response', [ this._target, this.getFormData() ] );
|
||||
this.closeButton( e, true );
|
||||
},
|
||||
backButton: function( e ) {
|
||||
$( document.body ).trigger( 'wc_backbone_modal_back_response', [ this._target, this.getFormData() ] );
|
||||
this.closeButton( e, false );
|
||||
},
|
||||
nextButton: function( e ) {
|
||||
var context = this;
|
||||
function closeModal() {
|
||||
context.closeButton( e );
|
||||
}
|
||||
$( document.body ).trigger( 'wc_backbone_modal_next_response', [ this._target, this.getFormData(), closeModal ] );
|
||||
},
|
||||
getFormData: function( updating = true ) {
|
||||
var data = {};
|
||||
|
||||
if ( updating ) {
|
||||
$( document.body ).trigger( 'wc_backbone_modal_before_update', this._target );
|
||||
}
|
||||
|
||||
$.each( $( 'form', this.$el ).serializeArray(), function( index, item ) {
|
||||
if ( item.name.indexOf( '[]' ) !== -1 ) {
|
||||
item.name = item.name.replace( '[]', '' );
|
||||
data[ item.name ] = $.makeArray( data[ item.name ] );
|
||||
data[ item.name ].push( item.value );
|
||||
} else {
|
||||
data[ item.name ] = item.value;
|
||||
}
|
||||
});
|
||||
|
||||
return data;
|
||||
},
|
||||
handleInputValidation: function() {
|
||||
$( document.body ).trigger( 'wc_backbone_modal_validation', [ this._target, this.getFormData( false ) ] );
|
||||
},
|
||||
keyboardActions: function( e ) {
|
||||
var button = e.keyCode || e.which;
|
||||
|
||||
// Enter key
|
||||
if (
|
||||
13 === button &&
|
||||
! ( e.target.tagName && ( e.target.tagName.toLowerCase() === 'input' || e.target.tagName.toLowerCase() === 'textarea' ) )
|
||||
) {
|
||||
if ( $( '#btn-ok' ).length ) {
|
||||
this.addButton( e );
|
||||
} else if ( $( '#btn-next' ).length ) {
|
||||
this.nextButton( e );
|
||||
}
|
||||
}
|
||||
|
||||
// ESC key
|
||||
if ( 27 === button ) {
|
||||
this.closeButton( e );
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}( jQuery, Backbone, _ ));
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/backbone-modal.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/backbone-modal.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(t,e,n){"use strict";t.fn.WCBackboneModal=function(e){return this.each(function(){new t.WCBackboneModal(t(this),e)})},t.WCBackboneModal=function(e,n){var o=t.extend({},t.WCBackboneModal.defaultOptions,n);o.template&&new t.WCBackboneModal.View({target:o.template,string:o.variable})},t.WCBackboneModal.defaultOptions={template:"",variable:{}},t.WCBackboneModal.View=e.View.extend({tagName:"div",id:"wc-backbone-modal-dialog",_target:undefined,_string:undefined,events:{"click .modal-close":"closeButton","click #btn-ok":"addButton","click #btn-back":"backButton","click #btn-next":"nextButton","touchstart #btn-ok":"addButton",keydown:"keyboardActions",input:"handleInputValidation"},resizeContent:function(){var e=t(".wc-backbone-modal-content").find("article"),n=.75*t(window).height();e.css({"max-height":n+"px"})},initialize:function(e){var o=this;this._target=e.target,this._string=e.string,n.bindAll(this,"render"),this.render(),t(window).on("resize",function(){o.resizeContent()})},render:function(){var e=wp.template(this._target);this.$el.append(e(this._string)),t(document.body).css({overflow:"hidden"}).append(this.$el),this.resizeContent(),this.$(".wc-backbone-modal-content").attr("tabindex","0").trigger("focus"),t(document.body).trigger("init_tooltips"),t(document.body).trigger("wc_backbone_modal_loaded",this._target)},closeButton:function(e,n){e.preventDefault(),t(document.body).trigger("wc_backbone_modal_before_remove",[this._target,this.getFormData(),!!n]),this.undelegateEvents(),t(document).off("focusin"),t(document.body).css({overflow:"auto"}),this.remove(),t(document.body).trigger("wc_backbone_modal_removed",this._target)},addButton:function(e){t(document.body).trigger("wc_backbone_modal_response",[this._target,this.getFormData()]),this.closeButton(e,!0)},backButton:function(e){t(document.body).trigger("wc_backbone_modal_back_response",[this._target,this.getFormData()]),this.closeButton(e,!1)},nextButton:function(e){var n=this;t(document.body).trigger("wc_backbone_modal_next_response",[this._target,this.getFormData(),function(){n.closeButton(e)}])},getFormData:function(e=!0){var n={};return e&&t(document.body).trigger("wc_backbone_modal_before_update",this._target),t.each(t("form",this.$el).serializeArray(),function(e,o){-1!==o.name.indexOf("[]")?(o.name=o.name.replace("[]",""),n[o.name]=t.makeArray(n[o.name]),n[o.name].push(o.value)):n[o.name]=o.value}),n},handleInputValidation:function(){t(document.body).trigger("wc_backbone_modal_validation",[this._target,this.getFormData(!1)])},keyboardActions:function(e){var n=e.keyCode||e.which;13!==n||e.target.tagName&&("input"===e.target.tagName.toLowerCase()||"textarea"===e.target.tagName.toLowerCase())||(t("#btn-ok").length?this.addButton(e):t("#btn-next").length&&this.nextButton(e)),27===n&&this.closeButton(e)}})}(jQuery,Backbone,_);
|
||||
@@ -0,0 +1,450 @@
|
||||
/* global marketplace_suggestions, ajaxurl, Cookies */
|
||||
( function( $, marketplace_suggestions, ajaxurl ) {
|
||||
$( function() {
|
||||
if ( 'undefined' === typeof marketplace_suggestions ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Stand-in wcTracks.recordEvent in case tracks is not available (for any reason).
|
||||
window.wcTracks = window.wcTracks || {};
|
||||
window.wcTracks.recordEvent = window.wcTracks.recordEvent || function() { };
|
||||
|
||||
// Tracks events sent in this file:
|
||||
// - marketplace_suggestion_displayed
|
||||
// - marketplace_suggestion_clicked
|
||||
// - marketplace_suggestion_dismissed
|
||||
// All are prefixed by {WC_Tracks::PREFIX}.
|
||||
// All have one property for `suggestionSlug`, to identify the specific suggestion message.
|
||||
|
||||
// Dismiss the specified suggestion from the UI, and save the dismissal in settings.
|
||||
function dismissSuggestion( context, product, promoted, url, suggestionSlug ) {
|
||||
// hide the suggestion in the UI
|
||||
var selector = '[data-suggestion-slug=' + suggestionSlug + ']';
|
||||
$( selector ).fadeOut( function() {
|
||||
$( this ).remove();
|
||||
tidyProductEditMetabox();
|
||||
} );
|
||||
|
||||
// save dismissal in user settings
|
||||
jQuery.post(
|
||||
ajaxurl,
|
||||
{
|
||||
'action': 'woocommerce_add_dismissed_marketplace_suggestion',
|
||||
'_wpnonce': marketplace_suggestions.dismiss_suggestion_nonce,
|
||||
'slug': suggestionSlug
|
||||
}
|
||||
);
|
||||
|
||||
// if this is a high-use area, delay new suggestion that area for a short while
|
||||
var highUseSuggestionContexts = [ 'products-list-inline' ];
|
||||
if ( _.contains( highUseSuggestionContexts, context ) ) {
|
||||
// snooze suggestions in that area for 2 days
|
||||
var contextSnoozeCookie = 'woocommerce_snooze_suggestions__' + context;
|
||||
Cookies.set( contextSnoozeCookie, 'true', { expires: 2 } );
|
||||
|
||||
// keep track of how often this area gets dismissed in a cookie
|
||||
var contextDismissalCountCookie = 'woocommerce_dismissed_suggestions__' + context;
|
||||
var previousDismissalsInThisContext = parseInt( Cookies.get( contextDismissalCountCookie ), 10 ) || 0;
|
||||
Cookies.set( contextDismissalCountCookie, previousDismissalsInThisContext + 1, { expires: 31 } );
|
||||
}
|
||||
|
||||
window.wcTracks.recordEvent( 'marketplace_suggestion_dismissed', {
|
||||
suggestion_slug: suggestionSlug,
|
||||
context: context,
|
||||
product: product || '',
|
||||
promoted: promoted || '',
|
||||
target: url || ''
|
||||
} );
|
||||
}
|
||||
|
||||
// Render DOM element for suggestion dismiss button.
|
||||
function renderDismissButton( context, product, promoted, url, suggestionSlug ) {
|
||||
var dismissButton = document.createElement( 'a' );
|
||||
|
||||
dismissButton.classList.add( 'suggestion-dismiss' );
|
||||
dismissButton.setAttribute( 'title', marketplace_suggestions.i18n_marketplace_suggestions_dismiss_tooltip );
|
||||
dismissButton.setAttribute( 'href', '#' );
|
||||
dismissButton.onclick = function( event ) {
|
||||
event.preventDefault();
|
||||
dismissSuggestion( context, product, promoted, url, suggestionSlug );
|
||||
};
|
||||
|
||||
return dismissButton;
|
||||
}
|
||||
|
||||
function addURLParameters( context, url ) {
|
||||
var urlParams = marketplace_suggestions.in_app_purchase_params;
|
||||
urlParams.utm_source = 'unknown';
|
||||
urlParams.utm_campaign = 'marketplacesuggestions';
|
||||
urlParams.utm_medium = 'product';
|
||||
|
||||
var sourceContextMap = {
|
||||
'productstable': [
|
||||
'products-list-inline'
|
||||
],
|
||||
'productsempty': [
|
||||
'products-list-empty-header',
|
||||
'products-list-empty-footer',
|
||||
'products-list-empty-body'
|
||||
],
|
||||
'ordersempty': [
|
||||
'orders-list-empty-header',
|
||||
'orders-list-empty-footer',
|
||||
'orders-list-empty-body'
|
||||
],
|
||||
'editproduct': [
|
||||
'product-edit-meta-tab-header',
|
||||
'product-edit-meta-tab-footer',
|
||||
'product-edit-meta-tab-body'
|
||||
]
|
||||
};
|
||||
var utmSource = _.findKey( sourceContextMap, function( sourceInfo ) {
|
||||
return _.contains( sourceInfo, context );
|
||||
} );
|
||||
if ( utmSource ) {
|
||||
urlParams.utm_source = utmSource;
|
||||
}
|
||||
|
||||
return url + '?' + jQuery.param( urlParams );
|
||||
}
|
||||
|
||||
// Render DOM element for suggestion linkout, optionally with button style.
|
||||
function renderLinkout( context, product, promoted, slug, url, text, isButton ) {
|
||||
var linkoutButton = document.createElement( 'a' );
|
||||
|
||||
var utmUrl = addURLParameters( context, url );
|
||||
linkoutButton.setAttribute( 'href', utmUrl );
|
||||
|
||||
// By default, CTA links should open in same tab (and feel integrated with Woo).
|
||||
// Exception: when editing products, use new tab. User may have product edits
|
||||
// that need to be saved.
|
||||
var newTabContexts = [
|
||||
'product-edit-meta-tab-header',
|
||||
'product-edit-meta-tab-footer',
|
||||
'product-edit-meta-tab-body',
|
||||
'products-list-empty-footer'
|
||||
];
|
||||
if ( _.includes( newTabContexts, context ) ) {
|
||||
linkoutButton.setAttribute( 'target', 'blank' );
|
||||
}
|
||||
|
||||
linkoutButton.textContent = text;
|
||||
|
||||
linkoutButton.onclick = function() {
|
||||
window.wcTracks.recordEvent( 'marketplace_suggestion_clicked', {
|
||||
suggestion_slug: slug,
|
||||
context: context,
|
||||
product: product || '',
|
||||
promoted: promoted || '',
|
||||
target: url || ''
|
||||
} );
|
||||
};
|
||||
|
||||
if ( isButton ) {
|
||||
linkoutButton.classList.add( 'button' );
|
||||
} else {
|
||||
linkoutButton.classList.add( 'linkout' );
|
||||
var linkoutIcon = document.createElement( 'span' );
|
||||
linkoutIcon.classList.add( 'dashicons', 'dashicons-external' );
|
||||
linkoutButton.appendChild( linkoutIcon );
|
||||
}
|
||||
|
||||
return linkoutButton;
|
||||
}
|
||||
|
||||
// Render DOM element for suggestion icon image.
|
||||
function renderSuggestionIcon( iconUrl ) {
|
||||
if ( ! iconUrl ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var image = document.createElement( 'img' );
|
||||
image.src = iconUrl;
|
||||
image.classList.add( 'marketplace-suggestion-icon' );
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
// Render DOM elements for suggestion content.
|
||||
function renderSuggestionContent( slug, title, copy ) {
|
||||
var container = document.createElement( 'div' );
|
||||
|
||||
container.classList.add( 'marketplace-suggestion-container-content' );
|
||||
|
||||
if ( title ) {
|
||||
var titleHeading = document.createElement( 'h4' );
|
||||
titleHeading.textContent = title;
|
||||
container.appendChild( titleHeading );
|
||||
}
|
||||
|
||||
if ( copy ) {
|
||||
var body = document.createElement( 'p' );
|
||||
body.textContent = copy;
|
||||
container.appendChild( body );
|
||||
}
|
||||
|
||||
// Conditionally add in a Manage suggestions link to product edit
|
||||
// metabox footer (based on suggestion slug).
|
||||
var slugsWithManage = [
|
||||
'product-edit-empty-footer-browse-all',
|
||||
'product-edit-meta-tab-footer-browse-all'
|
||||
];
|
||||
if ( -1 !== slugsWithManage.indexOf( slug ) ) {
|
||||
container.classList.add( 'has-manage-link' );
|
||||
|
||||
var manageSuggestionsLink = document.createElement( 'a' );
|
||||
manageSuggestionsLink.classList.add( 'marketplace-suggestion-manage-link', 'linkout' );
|
||||
manageSuggestionsLink.setAttribute(
|
||||
'href',
|
||||
marketplace_suggestions.manage_suggestions_url
|
||||
);
|
||||
manageSuggestionsLink.textContent = marketplace_suggestions.i18n_marketplace_suggestions_manage_suggestions;
|
||||
|
||||
container.appendChild( manageSuggestionsLink );
|
||||
}
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
// Render DOM elements for suggestion call-to-action – button or link with dismiss 'x'.
|
||||
function renderSuggestionCTA( context, product, promoted, slug, url, linkText, linkIsButton, allowDismiss ) {
|
||||
var container = document.createElement( 'div' );
|
||||
|
||||
if ( ! linkText ) {
|
||||
linkText = marketplace_suggestions.i18n_marketplace_suggestions_default_cta;
|
||||
}
|
||||
|
||||
container.classList.add( 'marketplace-suggestion-container-cta' );
|
||||
if ( url && linkText ) {
|
||||
var linkoutElement = renderLinkout( context, product, promoted, slug, url, linkText, linkIsButton );
|
||||
container.appendChild( linkoutElement );
|
||||
}
|
||||
|
||||
if ( allowDismiss ) {
|
||||
container.appendChild( renderDismissButton( context, product, promoted, url, slug ) );
|
||||
}
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
// Render a "list item" style suggestion.
|
||||
// These are used in onboarding style contexts, e.g. products list empty state.
|
||||
function renderListItem( context, product, promoted, slug, iconUrl, title, copy, url, linkText, linkIsButton, allowDismiss ) {
|
||||
var container = document.createElement( 'div' );
|
||||
container.classList.add( 'marketplace-suggestion-container' );
|
||||
container.dataset.suggestionSlug = slug;
|
||||
|
||||
var icon = renderSuggestionIcon( iconUrl );
|
||||
if ( icon ) {
|
||||
container.appendChild( icon );
|
||||
}
|
||||
container.appendChild(
|
||||
renderSuggestionContent( slug, title, copy )
|
||||
);
|
||||
container.appendChild(
|
||||
renderSuggestionCTA( context, product, promoted, slug, url, linkText, linkIsButton, allowDismiss )
|
||||
);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
// Filter suggestion data to remove less-relevant suggestions.
|
||||
function getRelevantPromotions( marketplaceSuggestionsApiData, displayContext ) {
|
||||
// select based on display context
|
||||
var promos = _.filter( marketplaceSuggestionsApiData, function( promo ) {
|
||||
if ( _.isArray( promo.context ) ) {
|
||||
return _.contains( promo.context, displayContext );
|
||||
}
|
||||
return ( displayContext === promo.context );
|
||||
} );
|
||||
|
||||
// hide promos the user has dismissed
|
||||
promos = _.filter( promos, function( promo ) {
|
||||
return ! _.contains( marketplace_suggestions.dismissed_suggestions, promo.slug );
|
||||
} );
|
||||
|
||||
// hide promos for things the user already has installed
|
||||
promos = _.filter( promos, function( promo ) {
|
||||
return ! _.contains( marketplace_suggestions.active_plugins, promo.product );
|
||||
} );
|
||||
|
||||
// hide promos that are not applicable based on user's installed extensions
|
||||
promos = _.filter( promos, function( promo ) {
|
||||
if ( ! promo['show-if-active'] ) {
|
||||
// this promotion is relevant to all
|
||||
return true;
|
||||
}
|
||||
|
||||
// if the user has any of the prerequisites, show the promo
|
||||
return ( _.intersection( marketplace_suggestions.active_plugins, promo['show-if-active'] ).length > 0 );
|
||||
} );
|
||||
|
||||
return promos;
|
||||
}
|
||||
|
||||
// Show and hide page elements dependent on suggestion state.
|
||||
function hidePageElementsForSuggestionState( usedSuggestionsContexts ) {
|
||||
var showingEmptyStateSuggestions = _.intersection(
|
||||
usedSuggestionsContexts,
|
||||
[ 'products-list-empty-body', 'orders-list-empty-body' ]
|
||||
).length > 0;
|
||||
|
||||
// Streamline onboarding UI if we're in 'empty state' welcome mode.
|
||||
if ( showingEmptyStateSuggestions ) {
|
||||
$( '#screen-meta-links' ).hide();
|
||||
$( '#wpfooter' ).hide();
|
||||
}
|
||||
|
||||
// Hide the header & footer, they don't make sense without specific promotion content
|
||||
if ( ! showingEmptyStateSuggestions ) {
|
||||
$( '.marketplace-suggestions-container[data-marketplace-suggestions-context="products-list-empty-header"]' ).hide();
|
||||
$( '.marketplace-suggestions-container[data-marketplace-suggestions-context="products-list-empty-footer"]' ).hide();
|
||||
$( '.marketplace-suggestions-container[data-marketplace-suggestions-context="orders-list-empty-header"]' ).hide();
|
||||
$( '.marketplace-suggestions-container[data-marketplace-suggestions-context="orders-list-empty-footer"]' ).hide();
|
||||
}
|
||||
}
|
||||
|
||||
// Streamline the product edit suggestions tab dependent on what's visible.
|
||||
function tidyProductEditMetabox() {
|
||||
var productMetaboxSuggestions = $(
|
||||
'.marketplace-suggestions-container[data-marketplace-suggestions-context="product-edit-meta-tab-body"]'
|
||||
).children();
|
||||
if ( 0 >= productMetaboxSuggestions.length ) {
|
||||
var metaboxSuggestionsUISelector =
|
||||
'.marketplace-suggestions-container[data-marketplace-suggestions-context="product-edit-meta-tab-body"]';
|
||||
metaboxSuggestionsUISelector +=
|
||||
', .marketplace-suggestions-container[data-marketplace-suggestions-context="product-edit-meta-tab-header"]';
|
||||
metaboxSuggestionsUISelector +=
|
||||
', .marketplace-suggestions-container[data-marketplace-suggestions-context="product-edit-meta-tab-footer"]';
|
||||
$( metaboxSuggestionsUISelector ).fadeOut( {
|
||||
complete: function() {
|
||||
$( '.marketplace-suggestions-metabox-nosuggestions-placeholder' ).fadeIn();
|
||||
}
|
||||
} );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function addManageSuggestionsTracksHandler() {
|
||||
$( 'a.marketplace-suggestion-manage-link' ).on( 'click', function() {
|
||||
window.wcTracks.recordEvent( 'marketplace_suggestions_manage_clicked' );
|
||||
} );
|
||||
}
|
||||
|
||||
function isContextHiddenOnPageLoad( context ) {
|
||||
// Some suggestions are not visible on page load;
|
||||
// e.g. the user reveals them by selecting a tab.
|
||||
var revealableSuggestionsContexts = [
|
||||
'product-edit-meta-tab-header',
|
||||
'product-edit-meta-tab-body',
|
||||
'product-edit-meta-tab-footer'
|
||||
];
|
||||
return _.includes( revealableSuggestionsContexts, context );
|
||||
}
|
||||
|
||||
// track the current product data tab to avoid over-tracking suggestions
|
||||
var currentTab = false;
|
||||
|
||||
// Render suggestion data in appropriate places in UI.
|
||||
function displaySuggestions( marketplaceSuggestionsApiData ) {
|
||||
var usedSuggestionsContexts = [];
|
||||
|
||||
// iterate over all suggestions containers, rendering promos
|
||||
$( '.marketplace-suggestions-container' ).each( function() {
|
||||
// determine the context / placement we're populating
|
||||
var context = this.dataset.marketplaceSuggestionsContext;
|
||||
|
||||
// find promotions that target this context
|
||||
var promos = getRelevantPromotions( marketplaceSuggestionsApiData, context );
|
||||
|
||||
// shuffle/randomly select five suggestions to display
|
||||
var suggestionsToDisplay = _.sample( promos, 5 );
|
||||
|
||||
// render the promo content
|
||||
for ( var i in suggestionsToDisplay ) {
|
||||
|
||||
var linkText = suggestionsToDisplay[ i ]['link-text'];
|
||||
var linkoutIsButton = true;
|
||||
if ( suggestionsToDisplay[ i ]['link-text'] ) {
|
||||
linkText = suggestionsToDisplay[ i ]['link-text'];
|
||||
linkoutIsButton = false;
|
||||
}
|
||||
|
||||
// dismiss is allowed by default
|
||||
var allowDismiss = true;
|
||||
if ( suggestionsToDisplay[ i ]['allow-dismiss'] === false ) {
|
||||
allowDismiss = false;
|
||||
}
|
||||
|
||||
var content = renderListItem(
|
||||
context,
|
||||
suggestionsToDisplay[ i ].product,
|
||||
suggestionsToDisplay[ i ].promoted,
|
||||
suggestionsToDisplay[ i ].slug,
|
||||
suggestionsToDisplay[ i ].icon,
|
||||
suggestionsToDisplay[ i ].title,
|
||||
suggestionsToDisplay[ i ].copy,
|
||||
suggestionsToDisplay[ i ].url,
|
||||
linkText,
|
||||
linkoutIsButton,
|
||||
allowDismiss
|
||||
);
|
||||
$( this ).append( content );
|
||||
$( this ).addClass( 'showing-suggestion' );
|
||||
usedSuggestionsContexts.push( context );
|
||||
|
||||
if ( ! isContextHiddenOnPageLoad( context ) ) {
|
||||
// Fire 'displayed' tracks events for immediately visible suggestions.
|
||||
window.wcTracks.recordEvent( 'marketplace_suggestion_displayed', {
|
||||
suggestion_slug: suggestionsToDisplay[ i ].slug,
|
||||
context: context,
|
||||
product: suggestionsToDisplay[ i ].product || '',
|
||||
promoted: suggestionsToDisplay[ i ].promoted || '',
|
||||
target: suggestionsToDisplay[ i ].url || ''
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
// Track when suggestions are displayed (and not already visible).
|
||||
$( 'ul.product_data_tabs li.marketplace-suggestions_options a' ).on( 'click', function( e ) {
|
||||
e.preventDefault();
|
||||
|
||||
if ( '#marketplace_suggestions' === currentTab ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! isContextHiddenOnPageLoad( context ) ) {
|
||||
// We've already fired 'displayed' event above.
|
||||
return;
|
||||
}
|
||||
|
||||
for ( var i in suggestionsToDisplay ) {
|
||||
window.wcTracks.recordEvent( 'marketplace_suggestion_displayed', {
|
||||
suggestion_slug: suggestionsToDisplay[ i ].slug,
|
||||
context: context,
|
||||
product: suggestionsToDisplay[ i ].product || '',
|
||||
promoted: suggestionsToDisplay[ i ].promoted || '',
|
||||
target: suggestionsToDisplay[ i ].url || ''
|
||||
} );
|
||||
}
|
||||
} );
|
||||
} );
|
||||
|
||||
hidePageElementsForSuggestionState( usedSuggestionsContexts );
|
||||
tidyProductEditMetabox();
|
||||
}
|
||||
|
||||
if ( marketplace_suggestions.suggestions_data ) {
|
||||
displaySuggestions( marketplace_suggestions.suggestions_data );
|
||||
|
||||
// track the current product data tab to avoid over-reporting suggestion views
|
||||
$( 'ul.product_data_tabs' ).on( 'click', 'li a', function( e ) {
|
||||
e.preventDefault();
|
||||
currentTab = $( this ).attr( 'href' );
|
||||
} );
|
||||
}
|
||||
|
||||
addManageSuggestionsTracksHandler();
|
||||
});
|
||||
|
||||
})( jQuery, marketplace_suggestions, ajaxurl );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/marketplace-suggestions.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/marketplace-suggestions.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,70 @@
|
||||
/* global woocommerce_admin_meta_boxes_coupon */
|
||||
jQuery(function( $ ) {
|
||||
|
||||
/**
|
||||
* Coupon actions
|
||||
*/
|
||||
var wc_meta_boxes_coupon_actions = {
|
||||
|
||||
/**
|
||||
* Initialize variations actions
|
||||
*/
|
||||
init: function() {
|
||||
$( 'select#discount_type' )
|
||||
.on( 'change', this.type_options )
|
||||
.trigger( 'change' );
|
||||
|
||||
this.insert_generate_coupon_code_button();
|
||||
$( '.button.generate-coupon-code' ).on( 'click', this.generate_coupon_code );
|
||||
},
|
||||
|
||||
/**
|
||||
* Show/hide fields by coupon type options
|
||||
*/
|
||||
type_options: function() {
|
||||
// Get value
|
||||
var select_val = $( this ).val();
|
||||
|
||||
if ( 'percent' === select_val ) {
|
||||
$( '#coupon_amount' ).removeClass( 'wc_input_price' ).addClass( 'wc_input_decimal' );
|
||||
} else {
|
||||
$( '#coupon_amount' ).removeClass( 'wc_input_decimal' ).addClass( 'wc_input_price' );
|
||||
}
|
||||
|
||||
if ( select_val !== 'fixed_cart' ) {
|
||||
$( '.limit_usage_to_x_items_field' ).show();
|
||||
} else {
|
||||
$( '.limit_usage_to_x_items_field' ).hide();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Insert generate coupon code buttom HTML.
|
||||
*/
|
||||
insert_generate_coupon_code_button: function() {
|
||||
$( '.post-type-shop_coupon' ).find( '#title' ).after(
|
||||
'<a href="#" class="button generate-coupon-code">' + woocommerce_admin_meta_boxes_coupon.generate_button_text + '</a>'
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Generate a random coupon code
|
||||
*/
|
||||
generate_coupon_code: function( e ) {
|
||||
e.preventDefault();
|
||||
var $coupon_code_field = $( '#title' ),
|
||||
$coupon_code_label = $( '#title-prompt-text' ),
|
||||
$result = '';
|
||||
for ( var i = 0; i < woocommerce_admin_meta_boxes_coupon.char_length; i++ ) {
|
||||
$result += woocommerce_admin_meta_boxes_coupon.characters.charAt(
|
||||
Math.floor( Math.random() * woocommerce_admin_meta_boxes_coupon.characters.length )
|
||||
);
|
||||
}
|
||||
$result = woocommerce_admin_meta_boxes_coupon.prefix + $result + woocommerce_admin_meta_boxes_coupon.suffix;
|
||||
$coupon_code_field.trigger( 'focus' ).val( $result );
|
||||
$coupon_code_label.addClass( 'screen-reader-text' );
|
||||
}
|
||||
};
|
||||
|
||||
wc_meta_boxes_coupon_actions.init();
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes-coupon.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes-coupon.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){({init:function(){e("select#discount_type").on("change",this.type_options).trigger("change"),this.insert_generate_coupon_code_button(),e(".button.generate-coupon-code").on("click",this.generate_coupon_code)},type_options:function(){var o=e(this).val();"percent"===o?e("#coupon_amount").removeClass("wc_input_price").addClass("wc_input_decimal"):e("#coupon_amount").removeClass("wc_input_decimal").addClass("wc_input_price"),"fixed_cart"!==o?e(".limit_usage_to_x_items_field").show():e(".limit_usage_to_x_items_field").hide()},insert_generate_coupon_code_button:function(){e(".post-type-shop_coupon").find("#title").after('<a href="#" class="button generate-coupon-code">'+woocommerce_admin_meta_boxes_coupon.generate_button_text+"</a>")},generate_coupon_code:function(o){o.preventDefault();for(var t=e("#title"),n=e("#title-prompt-text"),_="",c=0;c<woocommerce_admin_meta_boxes_coupon.char_length;c++)_+=woocommerce_admin_meta_boxes_coupon.characters.charAt(Math.floor(Math.random()*woocommerce_admin_meta_boxes_coupon.characters.length));_=woocommerce_admin_meta_boxes_coupon.prefix+_+woocommerce_admin_meta_boxes_coupon.suffix,t.trigger("focus").val(_),n.addClass("screen-reader-text")}}).init()});
|
||||
File diff suppressed because it is too large
Load Diff
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes-order.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes-order.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes-product-variation.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes-product-variation.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes-product.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes-product.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
195
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes.js
Normal file
195
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes.js
Normal file
@@ -0,0 +1,195 @@
|
||||
jQuery( function ( $ ) {
|
||||
/**
|
||||
* Function to check if the attribute and variation fields are empty.
|
||||
*/
|
||||
jQuery.is_attribute_or_variation_empty = function (
|
||||
attributes_and_variations_data
|
||||
) {
|
||||
var has_empty_fields = false;
|
||||
attributes_and_variations_data.each( function () {
|
||||
var $this = $( this );
|
||||
// Check if the field is checkbox or a search field.
|
||||
if (
|
||||
$this.hasClass( 'checkbox' ) ||
|
||||
$this.filter( '[class*=search__field]' ).length
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
var is_empty = $this.is( 'select' )
|
||||
? $this.find( ':selected' ).length === 0
|
||||
: ! $this.val();
|
||||
if ( is_empty ) {
|
||||
has_empty_fields = true;
|
||||
}
|
||||
} );
|
||||
return has_empty_fields;
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to maybe disable the save button.
|
||||
*/
|
||||
jQuery.maybe_disable_save_button = function () {
|
||||
var $tab;
|
||||
var $save_button;
|
||||
if (
|
||||
$( '.woocommerce_variation_new_attribute_data' ).is( ':visible' )
|
||||
) {
|
||||
$tab = $( '.woocommerce_variation_new_attribute_data' );
|
||||
$save_button = $( 'button.create-variations' );
|
||||
} else {
|
||||
var $tab = $( '.product_attributes' );
|
||||
var $save_button = $( 'button.save_attributes' );
|
||||
}
|
||||
|
||||
var attributes_and_variations_data = $tab.find(
|
||||
'input, select, textarea'
|
||||
);
|
||||
if (
|
||||
jQuery.is_attribute_or_variation_empty(
|
||||
attributes_and_variations_data
|
||||
)
|
||||
) {
|
||||
if ( ! $save_button.hasClass( 'disabled' ) ) {
|
||||
$save_button.addClass( 'disabled' );
|
||||
$save_button.attr( 'aria-disabled', true );
|
||||
}
|
||||
} else {
|
||||
$save_button.removeClass( 'disabled' );
|
||||
$save_button.removeAttr( 'aria-disabled' );
|
||||
}
|
||||
};
|
||||
|
||||
// Run tipTip
|
||||
function runTipTip() {
|
||||
// Remove any lingering tooltips
|
||||
$( '#tiptip_holder' ).removeAttr( 'style' );
|
||||
$( '#tiptip_arrow' ).removeAttr( 'style' );
|
||||
$( '.tips' ).tipTip( {
|
||||
attribute: 'data-tip',
|
||||
fadeIn: 50,
|
||||
fadeOut: 50,
|
||||
delay: 200,
|
||||
keepAlive: true,
|
||||
} );
|
||||
}
|
||||
|
||||
runTipTip();
|
||||
|
||||
$( '.save_attributes' ).tipTip( {
|
||||
content: function () {
|
||||
return $( '.save_attributes' ).hasClass( 'disabled' )
|
||||
? woocommerce_admin_meta_boxes.i18n_save_attribute_variation_tip
|
||||
: '';
|
||||
},
|
||||
fadeIn: 50,
|
||||
fadeOut: 50,
|
||||
delay: 200,
|
||||
keepAlive: true,
|
||||
} );
|
||||
|
||||
$( '.create-variations' ).tipTip( {
|
||||
content: function () {
|
||||
return $( '.create-variations' ).hasClass( 'disabled' )
|
||||
? woocommerce_admin_meta_boxes.i18n_save_attribute_variation_tip
|
||||
: '';
|
||||
},
|
||||
fadeIn: 50,
|
||||
fadeOut: 50,
|
||||
delay: 200,
|
||||
keepAlive: true,
|
||||
} );
|
||||
|
||||
$( '.wc-metaboxes-wrapper' ).on( 'click', '.wc-metabox > h3', function () {
|
||||
var metabox = $( this ).parent( '.wc-metabox' );
|
||||
|
||||
if ( metabox.hasClass( 'closed' ) ) {
|
||||
metabox.removeClass( 'closed' );
|
||||
} else {
|
||||
metabox.addClass( 'closed' );
|
||||
}
|
||||
|
||||
if ( metabox.hasClass( 'open' ) ) {
|
||||
metabox.removeClass( 'open' );
|
||||
} else {
|
||||
metabox.addClass( 'open' );
|
||||
}
|
||||
} );
|
||||
|
||||
// Tabbed Panels
|
||||
$( document.body )
|
||||
.on( 'wc-init-tabbed-panels', function () {
|
||||
$( 'ul.wc-tabs' ).show();
|
||||
$( 'ul.wc-tabs a' ).on( 'click', function ( e ) {
|
||||
e.preventDefault();
|
||||
var panel_wrap = $( this ).closest( 'div.panel-wrap' );
|
||||
$( 'ul.wc-tabs li', panel_wrap ).removeClass( 'active' );
|
||||
$( this ).parent().addClass( 'active' );
|
||||
$( 'div.panel', panel_wrap ).hide();
|
||||
$( $( this ).attr( 'href' ) ).show( 0, function () {
|
||||
$( this ).trigger( 'woocommerce_tab_shown' );
|
||||
} );
|
||||
} );
|
||||
$( 'div.panel-wrap' ).each( function () {
|
||||
$( this )
|
||||
.find( 'ul.wc-tabs li' )
|
||||
.eq( 0 )
|
||||
.find( 'a' )
|
||||
.trigger( 'click' );
|
||||
} );
|
||||
} )
|
||||
.trigger( 'wc-init-tabbed-panels' );
|
||||
|
||||
// Date Picker
|
||||
$( document.body )
|
||||
.on( 'wc-init-datepickers', function () {
|
||||
$( '.date-picker-field, .date-picker' ).datepicker( {
|
||||
dateFormat: 'yy-mm-dd',
|
||||
numberOfMonths: 1,
|
||||
showButtonPanel: true,
|
||||
} );
|
||||
} )
|
||||
.trigger( 'wc-init-datepickers' );
|
||||
|
||||
// Meta-Boxes - Open/close
|
||||
$( '.wc-metaboxes-wrapper' )
|
||||
.on( 'click', '.wc-metabox h3', function ( event ) {
|
||||
// If the user clicks on some form input inside the h3, like a select list (for variations), the box should not be toggled
|
||||
if ( $( event.target ).filter( ':input, option, .sort' ).length ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$( this ).next( '.wc-metabox-content' ).stop().slideToggle();
|
||||
} )
|
||||
.on( 'click', '.expand_all', function () {
|
||||
$( this )
|
||||
.closest( '.wc-metaboxes-wrapper' )
|
||||
.find( '.wc-metabox > .wc-metabox-content' )
|
||||
.show();
|
||||
return false;
|
||||
} )
|
||||
.on( 'click', '.close_all', function () {
|
||||
$( this )
|
||||
.closest( '.wc-metaboxes-wrapper' )
|
||||
.find( '.wc-metabox > .wc-metabox-content' )
|
||||
.hide();
|
||||
return false;
|
||||
} );
|
||||
$( '.wc-metabox.closed' ).each( function () {
|
||||
$( this ).find( '.wc-metabox-content' ).hide();
|
||||
} );
|
||||
|
||||
$( '#product_attributes' ).on(
|
||||
'change',
|
||||
'select.attribute_values',
|
||||
jQuery.maybe_disable_save_button
|
||||
);
|
||||
$( '#product_attributes, #variable_product_options' ).on(
|
||||
'keyup',
|
||||
'input, textarea',
|
||||
jQuery.maybe_disable_save_button
|
||||
);
|
||||
|
||||
// Maybe disable save buttons when editing products.
|
||||
jQuery.maybe_disable_save_button();
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/meta-boxes.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){jQuery.is_attribute_or_variation_empty=function(t){var a=!1;return t.each(function(){var t=e(this);t.hasClass("checkbox")||t.filter("[class*=search__field]").length||(t.is("select")?0===t.find(":selected").length:!t.val())&&(a=!0)}),a},jQuery.maybe_disable_save_button=function(){if(e(".woocommerce_variation_new_attribute_data").is(":visible"))t=e(".woocommerce_variation_new_attribute_data"),a=e("button.create-variations");else var t=e(".product_attributes"),a=e("button.save_attributes");var i=t.find("input, select, textarea");jQuery.is_attribute_or_variation_empty(i)?a.hasClass("disabled")||(a.addClass("disabled"),a.attr("aria-disabled",!0)):(a.removeClass("disabled"),a.removeAttr("aria-disabled"))},e("#tiptip_holder").removeAttr("style"),e("#tiptip_arrow").removeAttr("style"),e(".tips").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200,keepAlive:!0}),e(".save_attributes").tipTip({content:function(){return e(".save_attributes").hasClass("disabled")?woocommerce_admin_meta_boxes.i18n_save_attribute_variation_tip:""},fadeIn:50,fadeOut:50,delay:200,keepAlive:!0}),e(".create-variations").tipTip({content:function(){return e(".create-variations").hasClass("disabled")?woocommerce_admin_meta_boxes.i18n_save_attribute_variation_tip:""},fadeIn:50,fadeOut:50,delay:200,keepAlive:!0}),e(".wc-metaboxes-wrapper").on("click",".wc-metabox > h3",function(){var t=e(this).parent(".wc-metabox");t.hasClass("closed")?t.removeClass("closed"):t.addClass("closed"),t.hasClass("open")?t.removeClass("open"):t.addClass("open")}),e(document.body).on("wc-init-tabbed-panels",function(){e("ul.wc-tabs").show(),e("ul.wc-tabs a").on("click",function(t){t.preventDefault();var a=e(this).closest("div.panel-wrap");e("ul.wc-tabs li",a).removeClass("active"),e(this).parent().addClass("active"),e("div.panel",a).hide(),e(e(this).attr("href")).show(0,function(){e(this).trigger("woocommerce_tab_shown")})}),e("div.panel-wrap").each(function(){e(this).find("ul.wc-tabs li").eq(0).find("a").trigger("click")})}).trigger("wc-init-tabbed-panels"),e(document.body).on("wc-init-datepickers",function(){e(".date-picker-field, .date-picker").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0})}).trigger("wc-init-datepickers"),e(".wc-metaboxes-wrapper").on("click",".wc-metabox h3",function(t){e(t.target).filter(":input, option, .sort").length||e(this).next(".wc-metabox-content").stop().slideToggle()}).on("click",".expand_all",function(){return e(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > .wc-metabox-content").show(),!1}).on("click",".close_all",function(){return e(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > .wc-metabox-content").hide(),!1}),e(".wc-metabox.closed").each(function(){e(this).find(".wc-metabox-content").hide()}),e("#product_attributes").on("change","select.attribute_values",jQuery.maybe_disable_save_button),e("#product_attributes, #variable_product_options").on("keyup","input, textarea",jQuery.maybe_disable_save_button),jQuery.maybe_disable_save_button()});
|
||||
@@ -0,0 +1,90 @@
|
||||
/*global woocommerce_network_orders */
|
||||
(function( $, _, undefined ) {
|
||||
|
||||
if ( 'undefined' === typeof woocommerce_network_orders ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var orders = [],
|
||||
promises = [], // Track completion (pass or fail) of ajax requests.
|
||||
deferred = [], // Tracks the ajax deferreds.
|
||||
$tbody = $( document.getElementById( 'network-orders-tbody' ) ),
|
||||
template = _.template( $( document.getElementById( 'network-orders-row-template') ).text() ),
|
||||
$loadingIndicator = $( document.getElementById( 'woocommerce-network-order-table-loading' ) ),
|
||||
$orderTable = $( document.getElementById( 'woocommerce-network-order-table' ) ),
|
||||
$noneFound = $( document.getElementById( 'woocommerce-network-orders-no-orders' ) );
|
||||
|
||||
// No sites, so bail.
|
||||
if ( ! woocommerce_network_orders.sites.length ) {
|
||||
$loadingIndicator.removeClass( 'is-active' );
|
||||
$orderTable.removeClass( 'is-active' );
|
||||
$noneFound.addClass( 'is-active' );
|
||||
return;
|
||||
}
|
||||
|
||||
$.each( woocommerce_network_orders.sites, function( index, value ) {
|
||||
promises[ index ] = $.Deferred();
|
||||
deferred.push( $.ajax( {
|
||||
url : woocommerce_network_orders.order_endpoint,
|
||||
data: {
|
||||
_wpnonce: woocommerce_network_orders.nonce,
|
||||
network_orders: true,
|
||||
blog_id: value
|
||||
},
|
||||
type: 'GET'
|
||||
} ).success(function( response ) {
|
||||
var orderindex;
|
||||
|
||||
for ( orderindex in response ) {
|
||||
orders.push( response[ orderindex ] );
|
||||
}
|
||||
|
||||
promises[ index ].resolve();
|
||||
}).fail(function (){
|
||||
promises[ index ].resolve();
|
||||
}) );
|
||||
} );
|
||||
|
||||
if ( promises.length > 0 ) {
|
||||
$.when.apply( $, promises ).done( function() {
|
||||
var orderindex,
|
||||
currentOrder;
|
||||
|
||||
// Sort orders, newest first
|
||||
orders.sort(function( a, b ) {
|
||||
var adate, bdate;
|
||||
|
||||
adate = Date.parse( a.date_created_gmt );
|
||||
bdate = Date.parse( b.date_created_gmt );
|
||||
|
||||
if ( adate === bdate ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( adate < bdate ) {
|
||||
return 1;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
});
|
||||
|
||||
if ( orders.length > 0 ) {
|
||||
for ( orderindex in orders ) {
|
||||
currentOrder = orders[ orderindex ];
|
||||
|
||||
$tbody.append( template( currentOrder ) );
|
||||
}
|
||||
|
||||
$noneFound.removeClass( 'is-active' );
|
||||
$loadingIndicator.removeClass( 'is-active' );
|
||||
$orderTable.addClass( 'is-active' );
|
||||
} else {
|
||||
$noneFound.addClass( 'is-active' );
|
||||
$loadingIndicator.removeClass( 'is-active' );
|
||||
$orderTable.removeClass( 'is-active' );
|
||||
}
|
||||
|
||||
} );
|
||||
}
|
||||
|
||||
})( jQuery, _ );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/network-orders.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/network-orders.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(e,o,r){if("undefined"!=typeof woocommerce_network_orders){var t=[],n=[],s=[],a=e(document.getElementById("network-orders-tbody")),d=o.template(e(document.getElementById("network-orders-row-template")).text()),c=e(document.getElementById("woocommerce-network-order-table-loading")),i=e(document.getElementById("woocommerce-network-order-table")),m=e(document.getElementById("woocommerce-network-orders-no-orders"));if(!woocommerce_network_orders.sites.length)return c.removeClass("is-active"),i.removeClass("is-active"),void m.addClass("is-active");e.each(woocommerce_network_orders.sites,function(o,r){n[o]=e.Deferred(),s.push(e.ajax({url:woocommerce_network_orders.order_endpoint,data:{_wpnonce:woocommerce_network_orders.nonce,network_orders:!0,blog_id:r},type:"GET"}).success(function(e){var r;for(r in e)t.push(e[r]);n[o].resolve()}).fail(function(){n[o].resolve()}))}),n.length>0&&e.when.apply(e,n).done(function(){var e,o;if(t.sort(function(e,o){var r,t;return(r=Date.parse(e.date_created_gmt))===(t=Date.parse(o.date_created_gmt))?0:r<t?1:-1}),t.length>0){for(e in t)o=t[e],a.append(d(o));m.removeClass("is-active"),c.removeClass("is-active"),i.addClass("is-active")}else m.addClass("is-active"),c.removeClass("is-active"),i.removeClass("is-active")})}}(jQuery,_);
|
||||
@@ -0,0 +1,35 @@
|
||||
/*global woocommerce_admin_meta_boxes, wcTracks */
|
||||
jQuery( document ).ready( ( $ ) => {
|
||||
'use strict';
|
||||
|
||||
// Stand-in wcTracks.recordEvent in case Tracks is not available (for any reason).
|
||||
window.wcTracks = window.wcTracks || {};
|
||||
window.wcTracks.recordEvent = window.wcTracks.recordEvent || ( () => {} );
|
||||
|
||||
// Handle the "Details" container toggle.
|
||||
$( '.woocommerce-order-attribution-details-toggle' )
|
||||
.on( 'click', ( e ) => {
|
||||
const $this = $( e.target ).closest( '.woocommerce-order-attribution-details-toggle');
|
||||
const $container = $this.closest( '.order-attribution-metabox' )
|
||||
.find( '.woocommerce-order-attribution-details-container' );
|
||||
let toggle = '';
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
$container.fadeToggle( 250 );
|
||||
$this.find( '.toggle-text' ).toggle();
|
||||
if ( $container.hasClass( 'closed' ) ) {
|
||||
$this.attr( 'aria-expanded', 'true' );
|
||||
toggle = 'opened';
|
||||
} else {
|
||||
$this.attr( 'aria-expanded', 'false' );
|
||||
toggle = 'closed';
|
||||
}
|
||||
$container.toggleClass( 'closed' );
|
||||
|
||||
window.wcTracks.recordEvent( 'order_attribution_details_toggle', {
|
||||
order_id: window.woocommerce_admin_meta_boxes.order_id,
|
||||
details: toggle
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/order-attribution-admin.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/order-attribution-admin.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(document).ready(e=>{"use strict";window.wcTracks=window.wcTracks||{},window.wcTracks.recordEvent=window.wcTracks.recordEvent||(()=>{}),e(".woocommerce-order-attribution-details-toggle").on("click",o=>{const t=e(o.target).closest(".woocommerce-order-attribution-details-toggle"),r=t.closest(".order-attribution-metabox").find(".woocommerce-order-attribution-details-container");let d="";o.preventDefault(),r.fadeToggle(250),t.find(".toggle-text").toggle(),r.hasClass("closed")?(t.attr("aria-expanded","true"),d="opened"):(t.attr("aria-expanded","false"),d="closed"),r.toggleClass("closed"),window.wcTracks.recordEvent("order_attribution_details_toggle",{order_id:window.woocommerce_admin_meta_boxes.order_id,details:d})})});
|
||||
@@ -0,0 +1,15 @@
|
||||
/* global woocommerce_admin_product_editor */
|
||||
jQuery( function ( $ ) {
|
||||
$( function () {
|
||||
var editorWrapper = $( '#postdivrich' );
|
||||
|
||||
if ( editorWrapper.length ) {
|
||||
editorWrapper.addClass( 'postbox woocommerce-product-description' );
|
||||
editorWrapper.prepend(
|
||||
'<h2 class="postbox-header"><label>' +
|
||||
woocommerce_admin_product_editor.i18n_description +
|
||||
'</label></h2>'
|
||||
);
|
||||
}
|
||||
} );
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/product-editor.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/product-editor.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(o){o(function(){var e=o("#postdivrich");e.length&&(e.addClass("postbox woocommerce-product-description"),e.prepend('<h2 class="postbox-header"><label>'+woocommerce_admin_product_editor.i18n_description+"</label></h2>"))})});
|
||||
@@ -0,0 +1,80 @@
|
||||
/*global ajaxurl */
|
||||
|
||||
/**
|
||||
* Based on Simple Page Ordering by 10up (https://wordpress.org/plugins/simple-page-ordering/)
|
||||
*
|
||||
* Modified - products have no children (non hierarchical)
|
||||
*/
|
||||
jQuery( function( $ ) {
|
||||
$( 'table.widefat tbody th, table.widefat tbody td' ).css( 'cursor', 'move' );
|
||||
|
||||
$( 'table.widefat tbody' ).sortable({
|
||||
items: 'tr:not(.inline-edit-row)',
|
||||
cursor: 'move',
|
||||
axis: 'y',
|
||||
containment: 'table.widefat',
|
||||
scrollSensitivity: 40,
|
||||
helper: function( event, ui ) {
|
||||
ui.each( function() {
|
||||
$( this ).width( $( this ).width() );
|
||||
});
|
||||
return ui;
|
||||
},
|
||||
start: function( event, ui ) {
|
||||
ui.item.css( 'background-color', '#ffffff' );
|
||||
ui.item.children( 'td, th' ).css( 'border-bottom-width', '0' );
|
||||
ui.item.css( 'outline', '1px solid #dfdfdf' );
|
||||
},
|
||||
stop: function( event, ui ) {
|
||||
ui.item.removeAttr( 'style' );
|
||||
ui.item.children( 'td,th' ).css( 'border-bottom-width', '1px' );
|
||||
},
|
||||
update: function( event, ui ) {
|
||||
$( 'table.widefat tbody th, table.widefat tbody td' ).css( 'cursor', 'default' );
|
||||
$( 'table.widefat tbody' ).sortable( 'disable' );
|
||||
|
||||
var postid = ui.item.find( '.check-column input' ).val();
|
||||
var prevpostid = ui.item.prev().find( '.check-column input' ).val();
|
||||
var nextpostid = ui.item.next().find( '.check-column input' ).val();
|
||||
|
||||
// Show Spinner
|
||||
ui.item
|
||||
.find( '.check-column input' )
|
||||
.hide()
|
||||
.after( '<img alt="processing" src="images/wpspin_light.gif" class="waiting" style="margin-left: 6px;" />' );
|
||||
|
||||
// Go do the sorting stuff via ajax
|
||||
$.post(
|
||||
ajaxurl,
|
||||
{ action: 'woocommerce_product_ordering', id: postid, previd: prevpostid, nextid: nextpostid },
|
||||
function( response ) {
|
||||
$.each( response, function( key, value ) {
|
||||
$( '#inline_' + key + ' .menu_order' ).html( value );
|
||||
});
|
||||
ui.item.find( '.check-column input' ).show().siblings( 'img' ).remove();
|
||||
$( 'table.widefat tbody th, table.widefat tbody td' ).css( 'cursor', 'move' );
|
||||
$( 'table.widefat tbody' ).sortable( 'enable' );
|
||||
}
|
||||
);
|
||||
|
||||
// fix cell colors
|
||||
$( 'table.widefat tbody tr' ).each( function() {
|
||||
var i = $( 'table.widefat tbody tr' ).index( this );
|
||||
if ( i%2 === 0 ) {
|
||||
$( this ).addClass( 'alternate' );
|
||||
} else {
|
||||
$( this ).removeClass( 'alternate' );
|
||||
}
|
||||
});
|
||||
},
|
||||
sort: function (e, ui) {
|
||||
ui.placeholder.find( 'td' ).each( function( key, value ) {
|
||||
if ( ui.helper.find( 'td' ).eq( key ).is( ':visible' ) ) {
|
||||
$( this ).show();
|
||||
} else {
|
||||
$( this ).hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/product-ordering.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/product-ordering.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(t){t("table.widefat tbody th, table.widefat tbody td").css("cursor","move"),t("table.widefat tbody").sortable({items:"tr:not(.inline-edit-row)",cursor:"move",axis:"y",containment:"table.widefat",scrollSensitivity:40,helper:function(e,i){return i.each(function(){t(this).width(t(this).width())}),i},start:function(t,e){e.item.css("background-color","#ffffff"),e.item.children("td, th").css("border-bottom-width","0"),e.item.css("outline","1px solid #dfdfdf")},stop:function(t,e){e.item.removeAttr("style"),e.item.children("td,th").css("border-bottom-width","1px")},update:function(e,i){t("table.widefat tbody th, table.widefat tbody td").css("cursor","default"),t("table.widefat tbody").sortable("disable");var o=i.item.find(".check-column input").val(),n=i.item.prev().find(".check-column input").val(),d=i.item.next().find(".check-column input").val();i.item.find(".check-column input").hide().after('<img alt="processing" src="images/wpspin_light.gif" class="waiting" style="margin-left: 6px;" />'),t.post(ajaxurl,{action:"woocommerce_product_ordering",id:o,previd:n,nextid:d},function(e){t.each(e,function(e,i){t("#inline_"+e+" .menu_order").html(i)}),i.item.find(".check-column input").show().siblings("img").remove(),t("table.widefat tbody th, table.widefat tbody td").css("cursor","move"),t("table.widefat tbody").sortable("enable")}),t("table.widefat tbody tr").each(function(){t("table.widefat tbody tr").index(this)%2==0?t(this).addClass("alternate"):t(this).removeClass("alternate")})},sort:function(e,i){i.placeholder.find("td").each(function(e,o){i.helper.find("td").eq(e).is(":visible")?t(this).show():t(this).hide()})}})});
|
||||
167
wp/wp-content/plugins/woocommerce/assets/js/admin/quick-edit.js
Normal file
167
wp/wp-content/plugins/woocommerce/assets/js/admin/quick-edit.js
Normal file
@@ -0,0 +1,167 @@
|
||||
/*global inlineEditPost, woocommerce_admin, woocommerce_quick_edit */
|
||||
jQuery(
|
||||
function( $ ) {
|
||||
$( '#the-list' ).on(
|
||||
'click',
|
||||
'.editinline',
|
||||
function() {
|
||||
|
||||
inlineEditPost.revert();
|
||||
|
||||
var post_id = $( this ).closest( 'tr' ).attr( 'id' );
|
||||
|
||||
post_id = post_id.replace( 'post-', '' );
|
||||
|
||||
var $wc_inline_data = $( '#woocommerce_inline_' + post_id );
|
||||
|
||||
var sku = $wc_inline_data.find( '.sku' ).text(),
|
||||
regular_price = $wc_inline_data.find( '.regular_price' ).text(),
|
||||
sale_price = $wc_inline_data.find( '.sale_price ' ).text(),
|
||||
weight = $wc_inline_data.find( '.weight' ).text(),
|
||||
length = $wc_inline_data.find( '.length' ).text(),
|
||||
width = $wc_inline_data.find( '.width' ).text(),
|
||||
height = $wc_inline_data.find( '.height' ).text(),
|
||||
shipping_class = $wc_inline_data.find( '.shipping_class' ).text(),
|
||||
visibility = $wc_inline_data.find( '.visibility' ).text(),
|
||||
stock_status = $wc_inline_data.find( '.stock_status' ).text(),
|
||||
stock = $wc_inline_data.find( '.stock' ).text(),
|
||||
featured = $wc_inline_data.find( '.featured' ).text(),
|
||||
manage_stock = $wc_inline_data.find( '.manage_stock' ).text(),
|
||||
menu_order = $wc_inline_data.find( '.menu_order' ).text(),
|
||||
tax_status = $wc_inline_data.find( '.tax_status' ).text(),
|
||||
tax_class = $wc_inline_data.find( '.tax_class' ).text(),
|
||||
backorders = $wc_inline_data.find( '.backorders' ).text(),
|
||||
product_type = $wc_inline_data.find( '.product_type' ).text();
|
||||
|
||||
var formatted_regular_price = regular_price.replace( '.', woocommerce_admin.mon_decimal_point ),
|
||||
formatted_sale_price = sale_price.replace( '.', woocommerce_admin.mon_decimal_point );
|
||||
|
||||
$( 'input[name="_sku"]', '.inline-edit-row' ).val( sku );
|
||||
$( 'input[name="_regular_price"]', '.inline-edit-row' ).val( formatted_regular_price );
|
||||
$( 'input[name="_sale_price"]', '.inline-edit-row' ).val( formatted_sale_price );
|
||||
$( 'input[name="_weight"]', '.inline-edit-row' ).val( weight );
|
||||
$( 'input[name="_length"]', '.inline-edit-row' ).val( length );
|
||||
$( 'input[name="_width"]', '.inline-edit-row' ).val( width );
|
||||
$( 'input[name="_height"]', '.inline-edit-row' ).val( height );
|
||||
|
||||
$( 'select[name="_shipping_class"] option:selected', '.inline-edit-row' ).attr( 'selected', false ).trigger( 'change' );
|
||||
$( 'select[name="_shipping_class"] option[value="' + shipping_class + '"]' ).attr( 'selected', 'selected' )
|
||||
.trigger( 'change' );
|
||||
|
||||
$( 'input[name="_stock"]', '.inline-edit-row' ).val( stock );
|
||||
$( 'input[name="menu_order"]', '.inline-edit-row' ).val( menu_order );
|
||||
|
||||
$(
|
||||
'select[name="_tax_status"] option, ' +
|
||||
'select[name="_tax_class"] option, ' +
|
||||
'select[name="_visibility"] option, ' +
|
||||
'select[name="_stock_status"] option, ' +
|
||||
'select[name="_backorders"] option'
|
||||
).prop( 'selected', false ).removeAttr( 'selected' );
|
||||
|
||||
var is_variable_product = 'variable' === product_type;
|
||||
$( 'select[name="_stock_status"] ~ .wc-quick-edit-warning', '.inline-edit-row' ).toggle( is_variable_product );
|
||||
$( 'select[name="_stock_status"] option[value="' + (is_variable_product ? '' : stock_status) + '"]', '.inline-edit-row' )
|
||||
.attr( 'selected', 'selected' );
|
||||
|
||||
$( 'select[name="_tax_status"] option[value="' + tax_status + '"]', '.inline-edit-row' ).attr( 'selected', 'selected' );
|
||||
$( 'select[name="_tax_class"] option[value="' + tax_class + '"]', '.inline-edit-row' ).attr( 'selected', 'selected' );
|
||||
$( 'select[name="_visibility"] option[value="' + visibility + '"]', '.inline-edit-row' ).attr( 'selected', 'selected' );
|
||||
$( 'select[name="_backorders"] option[value="' + backorders + '"]', '.inline-edit-row' ).attr( 'selected', 'selected' );
|
||||
|
||||
if ( 'yes' === featured ) {
|
||||
$( 'input[name="_featured"]', '.inline-edit-row' ).prop( 'checked', true );
|
||||
} else {
|
||||
$( 'input[name="_featured"]', '.inline-edit-row' ).prop( 'checked', false );
|
||||
}
|
||||
|
||||
// Conditional display.
|
||||
var product_is_virtual = $wc_inline_data.find( '.product_is_virtual' ).text();
|
||||
|
||||
var product_supports_stock_status = 'external' !== product_type;
|
||||
var product_supports_stock_fields = 'external' !== product_type && 'grouped' !== product_type;
|
||||
|
||||
$( '.stock_fields, .manage_stock_field, .stock_status_field, .backorder_field' ).show();
|
||||
|
||||
if ( product_supports_stock_fields ) {
|
||||
if ( 'yes' === manage_stock ) {
|
||||
$( '.stock_qty_field, .backorder_field', '.inline-edit-row' ).show().removeAttr( 'style' );
|
||||
$( '.stock_status_field' ).hide();
|
||||
$( '.manage_stock_field input' ).prop( 'checked', true );
|
||||
} else {
|
||||
$( '.stock_qty_field, .backorder_field', '.inline-edit-row' ).hide();
|
||||
$( '.stock_status_field' ).show().removeAttr( 'style' );
|
||||
$( '.manage_stock_field input' ).prop( 'checked', false );
|
||||
}
|
||||
} else if ( product_supports_stock_status ) {
|
||||
$( '.stock_fields, .manage_stock_field, .backorder_field' ).hide();
|
||||
} else {
|
||||
$( '.stock_fields, .manage_stock_field, .stock_status_field, .backorder_field' ).hide();
|
||||
}
|
||||
|
||||
if ( 'simple' === product_type || 'external' === product_type ) {
|
||||
$( '.price_fields', '.inline-edit-row' ).show().removeAttr( 'style' );
|
||||
} else {
|
||||
$( '.price_fields', '.inline-edit-row' ).hide();
|
||||
}
|
||||
|
||||
if ( 'yes' === product_is_virtual ) {
|
||||
$( '.dimension_fields', '.inline-edit-row' ).hide();
|
||||
} else {
|
||||
$( '.dimension_fields', '.inline-edit-row' ).show().removeAttr( 'style' );
|
||||
}
|
||||
|
||||
// Rename core strings.
|
||||
$( 'input[name="comment_status"]' ).parent().find( '.checkbox-title' ).text( woocommerce_quick_edit.strings.allow_reviews );
|
||||
}
|
||||
);
|
||||
|
||||
$( '#the-list' ).on(
|
||||
'change',
|
||||
'.inline-edit-row input[name="_manage_stock"]',
|
||||
function() {
|
||||
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
$( '.stock_qty_field, .backorder_field', '.inline-edit-row' ).show().removeAttr( 'style' );
|
||||
$( '.stock_status_field' ).hide();
|
||||
} else {
|
||||
$( '.stock_qty_field, .backorder_field', '.inline-edit-row' ).hide();
|
||||
$( '.stock_status_field' ).show().removeAttr( 'style' );
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
$( '#wpbody' ).on(
|
||||
'click',
|
||||
'#doaction, #doaction2',
|
||||
function() {
|
||||
$( 'input.text', '.inline-edit-row' ).val( '' );
|
||||
$( '#woocommerce-fields' ).find( 'select' ).prop( 'selectedIndex', 0 );
|
||||
$( '#woocommerce-fields-bulk' ).find( '.inline-edit-group .change-input' ).hide();
|
||||
}
|
||||
);
|
||||
|
||||
$( '#wpbody' ).on(
|
||||
'change',
|
||||
'#woocommerce-fields-bulk .inline-edit-group .change_to',
|
||||
function() {
|
||||
|
||||
if ( 0 < $( this ).val() ) {
|
||||
$( this ).closest( 'div' ).find( '.change-input' ).show();
|
||||
} else {
|
||||
$( this ).closest( 'div' ).find( '.change-input' ).hide();
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
$( '#wpbody' ).on(
|
||||
'click',
|
||||
'.trash-product',
|
||||
function() {
|
||||
return window.confirm( woocommerce_admin.i18n_delete_product_notice );
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/quick-edit.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/quick-edit.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){e("#the-list").on("click",".editinline",function(){inlineEditPost.revert();var t=e(this).closest("tr").attr("id");t=t.replace("post-","");var i=e("#woocommerce_inline_"+t),n=i.find(".sku").text(),o=i.find(".regular_price").text(),d=i.find(".sale_price ").text(),s=i.find(".weight").text(),l=i.find(".length").text(),c=i.find(".width").text(),a=i.find(".height").text(),r=i.find(".shipping_class").text(),_=i.find(".visibility").text(),p=i.find(".stock_status").text(),m=i.find(".stock").text(),u=i.find(".featured").text(),f=i.find(".manage_stock").text(),w=i.find(".menu_order").text(),h=i.find(".tax_status").text(),k=i.find(".tax_class").text(),g=i.find(".backorders").text(),v=i.find(".product_type").text(),x=o.replace(".",woocommerce_admin.mon_decimal_point),y=d.replace(".",woocommerce_admin.mon_decimal_point);e('input[name="_sku"]',".inline-edit-row").val(n),e('input[name="_regular_price"]',".inline-edit-row").val(x),e('input[name="_sale_price"]',".inline-edit-row").val(y),e('input[name="_weight"]',".inline-edit-row").val(s),e('input[name="_length"]',".inline-edit-row").val(l),e('input[name="_width"]',".inline-edit-row").val(c),e('input[name="_height"]',".inline-edit-row").val(a),e('select[name="_shipping_class"] option:selected',".inline-edit-row").attr("selected",!1).trigger("change"),e('select[name="_shipping_class"] option[value="'+r+'"]').attr("selected","selected").trigger("change"),e('input[name="_stock"]',".inline-edit-row").val(m),e('input[name="menu_order"]',".inline-edit-row").val(w),e('select[name="_tax_status"] option, select[name="_tax_class"] option, select[name="_visibility"] option, select[name="_stock_status"] option, select[name="_backorders"] option').prop("selected",!1).removeAttr("selected");var b="variable"===v;e('select[name="_stock_status"] ~ .wc-quick-edit-warning',".inline-edit-row").toggle(b),e('select[name="_stock_status"] option[value="'+(b?"":p)+'"]',".inline-edit-row").attr("selected","selected"),e('select[name="_tax_status"] option[value="'+h+'"]',".inline-edit-row").attr("selected","selected"),e('select[name="_tax_class"] option[value="'+k+'"]',".inline-edit-row").attr("selected","selected"),e('select[name="_visibility"] option[value="'+_+'"]',".inline-edit-row").attr("selected","selected"),e('select[name="_backorders"] option[value="'+g+'"]',".inline-edit-row").attr("selected","selected"),"yes"===u?e('input[name="_featured"]',".inline-edit-row").prop("checked",!0):e('input[name="_featured"]',".inline-edit-row").prop("checked",!1);var A=i.find(".product_is_virtual").text(),q="external"!==v,j="external"!==v&&"grouped"!==v;e(".stock_fields, .manage_stock_field, .stock_status_field, .backorder_field").show(),j?"yes"===f?(e(".stock_qty_field, .backorder_field",".inline-edit-row").show().removeAttr("style"),e(".stock_status_field").hide(),e(".manage_stock_field input").prop("checked",!0)):(e(".stock_qty_field, .backorder_field",".inline-edit-row").hide(),e(".stock_status_field").show().removeAttr("style"),e(".manage_stock_field input").prop("checked",!1)):q?e(".stock_fields, .manage_stock_field, .backorder_field").hide():e(".stock_fields, .manage_stock_field, .stock_status_field, .backorder_field").hide(),"simple"===v||"external"===v?e(".price_fields",".inline-edit-row").show().removeAttr("style"):e(".price_fields",".inline-edit-row").hide(),"yes"===A?e(".dimension_fields",".inline-edit-row").hide():e(".dimension_fields",".inline-edit-row").show().removeAttr("style"),e('input[name="comment_status"]').parent().find(".checkbox-title").text(woocommerce_quick_edit.strings.allow_reviews)}),e("#the-list").on("change",'.inline-edit-row input[name="_manage_stock"]',function(){e(this).is(":checked")?(e(".stock_qty_field, .backorder_field",".inline-edit-row").show().removeAttr("style"),e(".stock_status_field").hide()):(e(".stock_qty_field, .backorder_field",".inline-edit-row").hide(),e(".stock_status_field").show().removeAttr("style"))}),e("#wpbody").on("click","#doaction, #doaction2",function(){e("input.text",".inline-edit-row").val(""),e("#woocommerce-fields").find("select").prop("selectedIndex",0),e("#woocommerce-fields-bulk").find(".inline-edit-group .change-input").hide()}),e("#wpbody").on("change","#woocommerce-fields-bulk .inline-edit-group .change_to",function(){0<e(this).val()?e(this).closest("div").find(".change-input").show():e(this).closest("div").find(".change-input").hide()}),e("#wpbody").on("click",".trash-product",function(){return window.confirm(woocommerce_admin.i18n_delete_product_notice)})});
|
||||
257
wp/wp-content/plugins/woocommerce/assets/js/admin/reports.js
Normal file
257
wp/wp-content/plugins/woocommerce/assets/js/admin/reports.js
Normal file
@@ -0,0 +1,257 @@
|
||||
jQuery(function( $ ) {
|
||||
|
||||
function showTooltip( x, y, contents ) {
|
||||
$( '<div class="chart-tooltip">' + contents + '</div>' ).css( {
|
||||
top: y - 16,
|
||||
left: x + 20
|
||||
}).appendTo( 'body' ).fadeIn( 200 );
|
||||
}
|
||||
|
||||
var prev_data_index = null;
|
||||
var prev_series_index = null;
|
||||
|
||||
$( '.chart-placeholder' ).on( 'plothover', function ( event, pos, item ) {
|
||||
if ( item ) {
|
||||
if ( prev_data_index !== item.dataIndex || prev_series_index !== item.seriesIndex ) {
|
||||
prev_data_index = item.dataIndex;
|
||||
prev_series_index = item.seriesIndex;
|
||||
|
||||
$( '.chart-tooltip' ).remove();
|
||||
|
||||
if ( item.series.points.show || item.series.enable_tooltip ) {
|
||||
|
||||
var y = item.series.data[item.dataIndex][1],
|
||||
tooltip_content = '';
|
||||
|
||||
if ( item.series.prepend_label ) {
|
||||
tooltip_content = tooltip_content + item.series.label + ': ';
|
||||
}
|
||||
|
||||
if ( item.series.prepend_tooltip ) {
|
||||
tooltip_content = tooltip_content + item.series.prepend_tooltip;
|
||||
}
|
||||
|
||||
tooltip_content = tooltip_content + y;
|
||||
|
||||
if ( item.series.append_tooltip ) {
|
||||
tooltip_content = tooltip_content + item.series.append_tooltip;
|
||||
}
|
||||
|
||||
if ( item.series.pie.show ) {
|
||||
showTooltip( pos.pageX, pos.pageY, tooltip_content );
|
||||
} else {
|
||||
showTooltip( item.pageX, item.pageY, tooltip_content );
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$( '.chart-tooltip' ).remove();
|
||||
prev_data_index = null;
|
||||
}
|
||||
});
|
||||
|
||||
$( '.wc_sparkline.bars' ).each( function() {
|
||||
var chart_data = $( this ).data( 'sparkline' );
|
||||
|
||||
var options = {
|
||||
grid: {
|
||||
show: false
|
||||
}
|
||||
};
|
||||
|
||||
// main series
|
||||
var series = [{
|
||||
data: chart_data,
|
||||
color: $( this ).data( 'color' ),
|
||||
bars: {
|
||||
fillColor: $( this ).data( 'color' ),
|
||||
fill: true,
|
||||
show: true,
|
||||
lineWidth: 1,
|
||||
barWidth: $( this ).data( 'barwidth' ),
|
||||
align: 'center'
|
||||
},
|
||||
shadowSize: 0
|
||||
}];
|
||||
|
||||
// draw the sparkline
|
||||
$.plot( $( this ), series, options );
|
||||
});
|
||||
|
||||
$( '.wc_sparkline.lines' ).each( function() {
|
||||
var chart_data = $( this ).data( 'sparkline' );
|
||||
|
||||
var options = {
|
||||
grid: {
|
||||
show: false
|
||||
}
|
||||
};
|
||||
|
||||
// main series
|
||||
var series = [{
|
||||
data: chart_data,
|
||||
color: $( this ).data( 'color' ),
|
||||
lines: {
|
||||
fill: false,
|
||||
show: true,
|
||||
lineWidth: 1,
|
||||
align: 'center'
|
||||
},
|
||||
shadowSize: 0
|
||||
}];
|
||||
|
||||
// draw the sparkline
|
||||
$.plot( $( this ), series, options );
|
||||
});
|
||||
|
||||
var dates = $( '.range_datepicker' ).datepicker({
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
defaultDate: '',
|
||||
dateFormat: 'yy-mm-dd',
|
||||
numberOfMonths: 1,
|
||||
minDate: '-20Y',
|
||||
maxDate: '+1D',
|
||||
showButtonPanel: true,
|
||||
showOn: 'focus',
|
||||
buttonImageOnly: true,
|
||||
onSelect: function() {
|
||||
var option = $( this ).is( '.from' ) ? 'minDate' : 'maxDate',
|
||||
date = $( this ).datepicker( 'getDate' );
|
||||
|
||||
dates.not( this ).datepicker( 'option', option, date );
|
||||
}
|
||||
});
|
||||
|
||||
var a = document.createElement( 'a' );
|
||||
|
||||
if ( typeof a.download === 'undefined' ) {
|
||||
$( '.export_csv' ).hide();
|
||||
}
|
||||
|
||||
// Export
|
||||
$( '.export_csv' ).on( 'click', function() {
|
||||
var exclude_series = $( this ).data( 'exclude_series' ) || '';
|
||||
exclude_series = exclude_series.toString();
|
||||
exclude_series = exclude_series.split( ',' );
|
||||
var xaxes_label = $( this ).data( 'xaxes' );
|
||||
var groupby = $( this ) .data( 'groupby' );
|
||||
var index_type = $( this ).data( 'index_type' );
|
||||
var export_format = $( this ).data( 'export' );
|
||||
var csv_data = '';
|
||||
var s, series_data, d;
|
||||
|
||||
if ( 'table' === export_format ) {
|
||||
|
||||
$( this ).offsetParent().find( 'thead tr,tbody tr' ).each( function() {
|
||||
$( this ).find( 'th, td' ).each( function() {
|
||||
var value = $( this ).text();
|
||||
value = value.replace( '[?]', '' ).replace( '#', '' );
|
||||
csv_data += '"' + value + '"' + ',';
|
||||
});
|
||||
csv_data = csv_data.substring( 0, csv_data.length - 1 );
|
||||
csv_data += '\n';
|
||||
});
|
||||
|
||||
$( this ).offsetParent().find( 'tfoot tr' ).each( function() {
|
||||
$( this ).find( 'th, td' ).each( function() {
|
||||
var value = $( this ).text();
|
||||
value = value.replace( '[?]', '' ).replace( '#', '' );
|
||||
csv_data += '"' + value + '"' + ',';
|
||||
if ( $( this ).attr( 'colspan' ) > 0 ) {
|
||||
for ( i = 1; i < $(this).attr('colspan'); i++ ) {
|
||||
csv_data += '"",';
|
||||
}
|
||||
}
|
||||
});
|
||||
csv_data = csv_data.substring( 0, csv_data.length - 1 );
|
||||
csv_data += '\n';
|
||||
});
|
||||
|
||||
} else {
|
||||
|
||||
if ( ! window.main_chart ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var the_series = window.main_chart.getData();
|
||||
var series = [];
|
||||
csv_data += '"' + xaxes_label + '",';
|
||||
|
||||
$.each( the_series, function( index, value ) {
|
||||
if ( ! exclude_series || $.inArray( index.toString(), exclude_series ) === -1 ) {
|
||||
series.push( value );
|
||||
}
|
||||
});
|
||||
|
||||
// CSV Headers
|
||||
for ( s = 0; s < series.length; ++s ) {
|
||||
csv_data += '"' + series[s].label + '",';
|
||||
}
|
||||
|
||||
csv_data = csv_data.substring( 0, csv_data.length - 1 );
|
||||
csv_data += '\n';
|
||||
|
||||
// Get x axis values
|
||||
var xaxis = {};
|
||||
|
||||
for ( s = 0; s < series.length; ++s ) {
|
||||
series_data = series[s].data;
|
||||
for ( d = 0; d < series_data.length; ++d ) {
|
||||
xaxis[series_data[d][0]] = [];
|
||||
// Zero values to start
|
||||
for ( var i = 0; i < series.length; ++i ) {
|
||||
xaxis[series_data[d][0]].push(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add chart data
|
||||
for ( s = 0; s < series.length; ++s ) {
|
||||
series_data = series[s].data;
|
||||
for ( d = 0; d < series_data.length; ++d ) {
|
||||
xaxis[series_data[d][0]][s] = series_data[d][1];
|
||||
}
|
||||
}
|
||||
|
||||
// Loop data and output to csv string
|
||||
$.each( xaxis, function( index, value ) {
|
||||
var date = new Date( parseInt( index, 10 ) );
|
||||
|
||||
if ( 'none' === index_type ) {
|
||||
csv_data += '"' + index + '",';
|
||||
} else {
|
||||
if ( groupby === 'day' ) {
|
||||
csv_data += '"' +
|
||||
date.getUTCFullYear() +
|
||||
'-' +
|
||||
parseInt( date.getUTCMonth() + 1, 10 ) +
|
||||
'-' +
|
||||
date.getUTCDate() +
|
||||
'",';
|
||||
} else {
|
||||
csv_data += '"' + date.getUTCFullYear() + '-' + parseInt( date.getUTCMonth() + 1, 10 ) + '",';
|
||||
}
|
||||
}
|
||||
|
||||
for ( var d = 0; d < value.length; ++d ) {
|
||||
var val = value[d];
|
||||
|
||||
if ( Math.round( val ) !== val ) {
|
||||
val = parseFloat( val );
|
||||
val = val.toFixed( 2 );
|
||||
}
|
||||
|
||||
csv_data += '"' + val + '",';
|
||||
}
|
||||
csv_data = csv_data.substring( 0, csv_data.length - 1 );
|
||||
csv_data += '\n';
|
||||
} );
|
||||
}
|
||||
|
||||
csv_data = 'data:text/csv;charset=utf-8,\uFEFF' + encodeURIComponent( csv_data );
|
||||
// Set data as href and return
|
||||
$( this ).attr( 'href', csv_data );
|
||||
return true;
|
||||
});
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/reports.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/reports.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(t){function e(e,a,n){t('<div class="chart-tooltip">'+n+"</div>").css({top:a-16,left:e+20}).appendTo("body").fadeIn(200)}var a=null,n=null;t(".chart-placeholder").on("plothover",function(i,r,o){if(o){if((a!==o.dataIndex||n!==o.seriesIndex)&&(a=o.dataIndex,n=o.seriesIndex,t(".chart-tooltip").remove(),o.series.points.show||o.series.enable_tooltip)){var s=o.series.data[o.dataIndex][1],l="";o.series.prepend_label&&(l=l+o.series.label+": "),o.series.prepend_tooltip&&(l+=o.series.prepend_tooltip),l+=s,o.series.append_tooltip&&(l+=o.series.append_tooltip),o.series.pie.show?e(r.pageX,r.pageY,l):e(o.pageX,o.pageY,l)}}else t(".chart-tooltip").remove(),a=null}),t(".wc_sparkline.bars").each(function(){var e=[{data:t(this).data("sparkline"),color:t(this).data("color"),bars:{fillColor:t(this).data("color"),fill:!0,show:!0,lineWidth:1,barWidth:t(this).data("barwidth"),align:"center"},shadowSize:0}];t.plot(t(this),e,{grid:{show:!1}})}),t(".wc_sparkline.lines").each(function(){var e=[{data:t(this).data("sparkline"),color:t(this).data("color"),lines:{fill:!1,show:!0,lineWidth:1,align:"center"},shadowSize:0}];t.plot(t(this),e,{grid:{show:!1}})});var i=t(".range_datepicker").datepicker({changeMonth:!0,changeYear:!0,defaultDate:"",dateFormat:"yy-mm-dd",numberOfMonths:1,minDate:"-20Y",maxDate:"+1D",showButtonPanel:!0,showOn:"focus",buttonImageOnly:!0,onSelect:function(){var e=t(this).is(".from")?"minDate":"maxDate",a=t(this).datepicker("getDate");i.not(this).datepicker("option",e,a)}});"undefined"==typeof document.createElement("a").download&&t(".export_csv").hide(),t(".export_csv").on("click",function(){var e=t(this).data("exclude_series")||"";e=(e=e.toString()).split(",");var a,n,i,r=t(this).data("xaxes"),o=t(this).data("groupby"),s=t(this).data("index_type"),l="";if("table"===t(this).data("export"))t(this).offsetParent().find("thead tr,tbody tr").each(function(){t(this).find("th, td").each(function(){var e=t(this).text();e=e.replace("[?]","").replace("#",""),l+='"'+e+'",'}),l=l.substring(0,l.length-1),l+="\n"}),t(this).offsetParent().find("tfoot tr").each(function(){t(this).find("th, td").each(function(){var e=t(this).text();if(e=e.replace("[?]","").replace("#",""),l+='"'+e+'",',t(this).attr("colspan")>0)for(p=1;p<t(this).attr("colspan");p++)l+='"",'}),l=l.substring(0,l.length-1),l+="\n"});else{if(!window.main_chart)return!1;var h=window.main_chart.getData(),d=[];for(l+='"'+r+'",',t.each(h,function(a,n){e&&-1!==t.inArray(a.toString(),e)||d.push(n)}),a=0;a<d.length;++a)l+='"'+d[a].label+'",';l=l.substring(0,l.length-1),l+="\n";var c={};for(a=0;a<d.length;++a)for(n=d[a].data,i=0;i<n.length;++i){c[n[i][0]]=[];for(var p=0;p<d.length;++p)c[n[i][0]].push(0)}for(a=0;a<d.length;++a)for(n=d[a].data,i=0;i<n.length;++i)c[n[i][0]][a]=n[i][1];t.each(c,function(t,e){var a=new Date(parseInt(t,10));l+="none"===s?'"'+t+'",':"day"===o?'"'+a.getUTCFullYear()+"-"+parseInt(a.getUTCMonth()+1,10)+"-"+a.getUTCDate()+'",':'"'+a.getUTCFullYear()+"-"+parseInt(a.getUTCMonth()+1,10)+'",';for(var n=0;n<e.length;++n){var i=e[n];Math.round(i)!==i&&(i=(i=parseFloat(i)).toFixed(2)),l+='"'+i+'",'}l=l.substring(0,l.length-1),l+="\n"})}return l="data:text/csv;charset=utf-8,\ufeff"+encodeURIComponent(l),t(this).attr("href",l),!0})});
|
||||
@@ -0,0 +1,383 @@
|
||||
/* global htmlSettingsTaxLocalizeScript, ajaxurl */
|
||||
|
||||
/**
|
||||
* Used by woocommerce/includes/admin/settings/views/html-settings-tax.php
|
||||
*/
|
||||
( function( $, data, wp, ajaxurl ) {
|
||||
$( function() {
|
||||
|
||||
if ( ! String.prototype.trim ) {
|
||||
String.prototype.trim = function () {
|
||||
return this.replace( /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '' );
|
||||
};
|
||||
}
|
||||
|
||||
var rowTemplate = wp.template( 'wc-tax-table-row' ),
|
||||
rowTemplateEmpty = wp.template( 'wc-tax-table-row-empty' ),
|
||||
paginationTemplate = wp.template( 'wc-tax-table-pagination' ),
|
||||
$table = $( '.wc_tax_rates' ),
|
||||
$tbody = $( '#rates' ),
|
||||
$save_button = $( ':input[name="save"]' ),
|
||||
$pagination = $( '#rates-pagination, #rates-bottom-pagination' ),
|
||||
$search_field = $( '#rates-search .wc-tax-rates-search-field' ),
|
||||
$submit = $( '.submit .button-primary[type=submit]' ),
|
||||
WCTaxTableModelConstructor = Backbone.Model.extend({
|
||||
changes: {},
|
||||
setRateAttribute: function( rateID, attribute, value ) {
|
||||
var rates = _.indexBy( this.get( 'rates' ), 'tax_rate_id' ),
|
||||
changes = {};
|
||||
|
||||
if ( rates[ rateID ][ attribute ] !== value ) {
|
||||
changes[ rateID ] = {};
|
||||
changes[ rateID ][ attribute ] = value;
|
||||
rates[ rateID ][ attribute ] = value;
|
||||
}
|
||||
|
||||
this.logChanges( changes );
|
||||
},
|
||||
logChanges: function( changedRows ) {
|
||||
var changes = this.changes || {};
|
||||
|
||||
_.each( changedRows, function( row, id ) {
|
||||
changes[ id ] = _.extend( changes[ id ] || {
|
||||
tax_rate_id : id
|
||||
}, row );
|
||||
} );
|
||||
|
||||
this.changes = changes;
|
||||
this.trigger( 'change:rates' );
|
||||
},
|
||||
getFilteredRates: function() {
|
||||
var rates = this.get( 'rates' ),
|
||||
search = $search_field.val().toLowerCase();
|
||||
|
||||
if ( search.length ) {
|
||||
rates = _.filter( rates, function( rate ) {
|
||||
var search_text = _.toArray( rate ).join( ' ' ).toLowerCase();
|
||||
return ( -1 !== search_text.indexOf( search ) );
|
||||
} );
|
||||
}
|
||||
|
||||
rates = _.sortBy( rates, function( rate ) {
|
||||
return parseInt( rate.tax_rate_order, 10 );
|
||||
} );
|
||||
|
||||
return rates;
|
||||
},
|
||||
block: function() {
|
||||
$( '.wc_tax_rates' ).block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
},
|
||||
unblock: function() {
|
||||
$( '.wc_tax_rates' ).unblock();
|
||||
},
|
||||
save: function() {
|
||||
var self = this;
|
||||
|
||||
self.block();
|
||||
|
||||
Backbone.ajax({
|
||||
method: 'POST',
|
||||
dataType: 'json',
|
||||
url: ajaxurl + ( ajaxurl.indexOf( '?' ) > 0 ? '&' : '?' ) + 'action=woocommerce_tax_rates_save_changes',
|
||||
data: {
|
||||
current_class: data.current_class,
|
||||
wc_tax_nonce: data.wc_tax_nonce,
|
||||
changes: self.changes
|
||||
},
|
||||
success: function( response, textStatus ) {
|
||||
if ( 'success' === textStatus && response.success ) {
|
||||
WCTaxTableModelInstance.set( 'rates', response.data.rates );
|
||||
WCTaxTableModelInstance.trigger( 'change:rates' );
|
||||
|
||||
WCTaxTableModelInstance.changes = {};
|
||||
WCTaxTableModelInstance.trigger( 'saved:rates' );
|
||||
|
||||
// Reload view.
|
||||
WCTaxTableInstance.render();
|
||||
}
|
||||
|
||||
self.unblock();
|
||||
}
|
||||
});
|
||||
}
|
||||
} ),
|
||||
WCTaxTableViewConstructor = Backbone.View.extend({
|
||||
rowTemplate: rowTemplate,
|
||||
per_page: data.limit,
|
||||
page: data.page,
|
||||
initialize: function() {
|
||||
var qty_pages = Math.ceil( _.toArray( this.model.get( 'rates' ) ).length / this.per_page );
|
||||
|
||||
this.qty_pages = 0 === qty_pages ? 1 : qty_pages;
|
||||
this.page = this.sanitizePage( data.page );
|
||||
|
||||
this.listenTo( this.model, 'change:rates', this.setUnloadConfirmation );
|
||||
this.listenTo( this.model, 'saved:rates', this.clearUnloadConfirmation );
|
||||
$tbody.on( 'change autocompletechange', ':input', { view: this }, this.updateModelOnChange );
|
||||
$search_field.on( 'keyup search', { view: this }, this.onSearchField );
|
||||
$pagination.on( 'click', 'a', { view: this }, this.onPageChange );
|
||||
$pagination.on( 'change', 'input', { view: this }, this.onPageChange );
|
||||
$( window ).on( 'beforeunload', { view: this }, this.unloadConfirmation );
|
||||
$submit.on( 'click', { view: this }, this.onSubmit );
|
||||
$save_button.prop( 'disabled', true );
|
||||
|
||||
// Can bind these directly to the buttons, as they won't get overwritten.
|
||||
$table.find( '.insert' ).on( 'click', { view: this }, this.onAddNewRow );
|
||||
$table.find( '.remove_tax_rates' ).on( 'click', { view: this }, this.onDeleteRow );
|
||||
$table.find( '.export' ).on( 'click', { view: this }, this.onExport );
|
||||
},
|
||||
render: function() {
|
||||
var rates = this.model.getFilteredRates(),
|
||||
qty_rates = _.size( rates ),
|
||||
qty_pages = Math.ceil( qty_rates / this.per_page ),
|
||||
first_index = 0 === qty_rates ? 0 : this.per_page * ( this.page - 1 ),
|
||||
last_index = this.per_page * this.page,
|
||||
paged_rates = _.toArray( rates ).slice( first_index, last_index ),
|
||||
view = this;
|
||||
|
||||
// Blank out the contents.
|
||||
this.$el.empty();
|
||||
|
||||
if ( paged_rates.length ) {
|
||||
// Populate $tbody with the current page of results.
|
||||
$.each( paged_rates, function( id, rowData ) {
|
||||
view.$el.append( view.rowTemplate( rowData ) );
|
||||
} );
|
||||
} else {
|
||||
view.$el.append( rowTemplateEmpty() );
|
||||
}
|
||||
|
||||
// Initialize autocomplete for countries.
|
||||
this.$el.find( 'td.country input' ).autocomplete({
|
||||
source: data.countries,
|
||||
minLength: 2
|
||||
});
|
||||
|
||||
// Initialize autocomplete for states.
|
||||
this.$el.find( 'td.state input' ).autocomplete({
|
||||
source: data.states,
|
||||
minLength: 3
|
||||
});
|
||||
|
||||
// Postcode and city don't have `name` values by default.
|
||||
// They're only created if the contents changes, to save on database queries (I think)
|
||||
this.$el.find( 'td.postcode input, td.city input' ).on( 'change', function() {
|
||||
$( this ).attr( 'name', $( this ).data( 'name' ) );
|
||||
});
|
||||
|
||||
if ( qty_pages > 1 ) {
|
||||
// We've now displayed our initial page, time to render the pagination box.
|
||||
$pagination.html( paginationTemplate( {
|
||||
qty_rates: qty_rates,
|
||||
current_page: this.page,
|
||||
qty_pages: qty_pages
|
||||
} ) );
|
||||
} else {
|
||||
$pagination.empty();
|
||||
view.page = 1;
|
||||
}
|
||||
},
|
||||
updateUrl: function() {
|
||||
if ( ! window.history.replaceState ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var url = data.base_url,
|
||||
search = $search_field.val();
|
||||
|
||||
if ( 1 < this.page ) {
|
||||
url += '&p=' + encodeURIComponent( this.page );
|
||||
}
|
||||
|
||||
if ( search.length ) {
|
||||
url += '&s=' + encodeURIComponent( search );
|
||||
}
|
||||
|
||||
window.history.replaceState( {}, '', url );
|
||||
},
|
||||
onSubmit: function( event ) {
|
||||
event.data.view.model.save();
|
||||
event.preventDefault();
|
||||
},
|
||||
onAddNewRow: function( event ) {
|
||||
var view = event.data.view,
|
||||
model = view.model,
|
||||
rates = _.indexBy( model.get( 'rates' ), 'tax_rate_id' ),
|
||||
changes = {},
|
||||
size = _.size( rates ),
|
||||
newRow = _.extend( {}, data.default_rate, {
|
||||
tax_rate_id: 'new-' + size + '-' + Date.now(),
|
||||
newRow: true
|
||||
} ),
|
||||
$current, current_id, current_order, rates_to_reorder, reordered_rates;
|
||||
|
||||
$current = $tbody.children( '.current' );
|
||||
|
||||
if ( $current.length ) {
|
||||
current_id = $current.last().data( 'id' );
|
||||
current_order = parseInt( rates[ current_id ].tax_rate_order, 10 );
|
||||
newRow.tax_rate_order = 1 + current_order;
|
||||
|
||||
rates_to_reorder = _.filter( rates, function( rate ) {
|
||||
if ( parseInt( rate.tax_rate_order, 10 ) > current_order ) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
} );
|
||||
|
||||
reordered_rates = _.map( rates_to_reorder, function( rate ) {
|
||||
rate.tax_rate_order++;
|
||||
changes[ rate.tax_rate_id ] = _.extend(
|
||||
changes[ rate.tax_rate_id ] || {}, { tax_rate_order : rate.tax_rate_order }
|
||||
);
|
||||
return rate;
|
||||
} );
|
||||
} else {
|
||||
newRow.tax_rate_order = 1 + _.max(
|
||||
_.pluck( rates, 'tax_rate_order' ),
|
||||
function ( val ) {
|
||||
// Cast them all to integers, because strings compare funky. Sighhh.
|
||||
return parseInt( val, 10 );
|
||||
}
|
||||
);
|
||||
// Move the last page
|
||||
view.page = view.qty_pages;
|
||||
}
|
||||
|
||||
rates[ newRow.tax_rate_id ] = newRow;
|
||||
changes[ newRow.tax_rate_id ] = newRow;
|
||||
|
||||
model.set( 'rates', rates );
|
||||
model.logChanges( changes );
|
||||
|
||||
view.render();
|
||||
},
|
||||
onDeleteRow: function( event ) {
|
||||
var view = event.data.view,
|
||||
model = view.model,
|
||||
rates = _.indexBy( model.get( 'rates' ), 'tax_rate_id' ),
|
||||
changes = {},
|
||||
$current, current_id;
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
if ( $current = $tbody.children( '.current' ) ) {
|
||||
$current.each(function(){
|
||||
current_id = $( this ).data('id');
|
||||
|
||||
delete rates[ current_id ];
|
||||
|
||||
changes[ current_id ] = _.extend( changes[ current_id ] || {}, { deleted : 'deleted' } );
|
||||
});
|
||||
|
||||
model.set( 'rates', rates );
|
||||
model.logChanges( changes );
|
||||
|
||||
view.render();
|
||||
} else {
|
||||
window.alert( data.strings.no_rows_selected );
|
||||
}
|
||||
},
|
||||
onSearchField: function( event ){
|
||||
event.data.view.updateUrl();
|
||||
event.data.view.render();
|
||||
},
|
||||
onPageChange: function( event ) {
|
||||
var $target = $( event.currentTarget );
|
||||
|
||||
event.preventDefault();
|
||||
event.data.view.page = $target.data( 'goto' ) ? $target.data( 'goto' ) : $target.val();
|
||||
event.data.view.render();
|
||||
event.data.view.updateUrl();
|
||||
},
|
||||
onExport: function( event ) {
|
||||
var csv_data = 'data:application/csv;charset=utf-8,' + data.strings.csv_data_cols.join(',') + '\n';
|
||||
|
||||
$.each( event.data.view.model.getFilteredRates(), function( id, rowData ) {
|
||||
var row = '';
|
||||
|
||||
row += rowData.tax_rate_country + ',';
|
||||
row += rowData.tax_rate_state + ',';
|
||||
row += ( rowData.postcode ? rowData.postcode.join( '; ' ) : '' ) + ',';
|
||||
row += ( rowData.city ? rowData.city.join( '; ' ) : '' ) + ',';
|
||||
row += rowData.tax_rate + ',';
|
||||
row += rowData.tax_rate_name + ',';
|
||||
row += rowData.tax_rate_priority + ',';
|
||||
row += rowData.tax_rate_compound + ',';
|
||||
row += rowData.tax_rate_shipping + ',';
|
||||
row += data.current_class;
|
||||
|
||||
csv_data += row + '\n';
|
||||
});
|
||||
|
||||
$( this ).attr( 'href', encodeURI( csv_data ) );
|
||||
|
||||
return true;
|
||||
},
|
||||
setUnloadConfirmation: function() {
|
||||
this.needsUnloadConfirm = true;
|
||||
$save_button.prop( 'disabled', false );
|
||||
},
|
||||
clearUnloadConfirmation: function() {
|
||||
this.needsUnloadConfirm = false;
|
||||
$save_button.prop( 'disabled', true );
|
||||
},
|
||||
unloadConfirmation: function( event ) {
|
||||
if ( event.data.view.needsUnloadConfirm ) {
|
||||
event.returnValue = data.strings.unload_confirmation_msg;
|
||||
window.event.returnValue = data.strings.unload_confirmation_msg;
|
||||
return data.strings.unload_confirmation_msg;
|
||||
}
|
||||
},
|
||||
updateModelOnChange: function( event ) {
|
||||
var model = event.data.view.model,
|
||||
$target = $( event.target ),
|
||||
id = $target.closest( 'tr' ).data( 'id' ),
|
||||
attribute = $target.data( 'attribute' ),
|
||||
val = $target.val();
|
||||
|
||||
if ( 'city' === attribute || 'postcode' === attribute ) {
|
||||
val = val.split( ';' );
|
||||
val = $.map( val, function( thing ) {
|
||||
return thing.trim();
|
||||
});
|
||||
}
|
||||
|
||||
if ( 'tax_rate_compound' === attribute || 'tax_rate_shipping' === attribute ) {
|
||||
if ( $target.is( ':checked' ) ) {
|
||||
val = 1;
|
||||
} else {
|
||||
val = 0;
|
||||
}
|
||||
}
|
||||
|
||||
model.setRateAttribute( id, attribute, val );
|
||||
},
|
||||
sanitizePage: function( page_num ) {
|
||||
page_num = parseInt( page_num, 10 );
|
||||
if ( page_num < 1 ) {
|
||||
page_num = 1;
|
||||
} else if ( page_num > this.qty_pages ) {
|
||||
page_num = this.qty_pages;
|
||||
}
|
||||
return page_num;
|
||||
}
|
||||
} ),
|
||||
WCTaxTableModelInstance = new WCTaxTableModelConstructor({
|
||||
rates: data.rates
|
||||
} ),
|
||||
WCTaxTableInstance = new WCTaxTableViewConstructor({
|
||||
model: WCTaxTableModelInstance,
|
||||
el: '#rates'
|
||||
} );
|
||||
|
||||
WCTaxTableInstance.render();
|
||||
|
||||
});
|
||||
})( jQuery, htmlSettingsTaxLocalizeScript, wp, ajaxurl );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/settings-views-html-settings-tax.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/settings-views-html-settings-tax.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
265
wp/wp-content/plugins/woocommerce/assets/js/admin/settings.js
Normal file
265
wp/wp-content/plugins/woocommerce/assets/js/admin/settings.js
Normal file
@@ -0,0 +1,265 @@
|
||||
/* global woocommerce_settings_params, wp */
|
||||
( function ( $, params, wp ) {
|
||||
$( function () {
|
||||
// Sell Countries
|
||||
$( 'select#woocommerce_allowed_countries' )
|
||||
.on( 'change', function () {
|
||||
if ( 'specific' === $( this ).val() ) {
|
||||
$( this ).closest( 'tr' ).next( 'tr' ).hide();
|
||||
$( this ).closest( 'tr' ).next().next( 'tr' ).show();
|
||||
} else if ( 'all_except' === $( this ).val() ) {
|
||||
$( this ).closest( 'tr' ).next( 'tr' ).show();
|
||||
$( this ).closest( 'tr' ).next().next( 'tr' ).hide();
|
||||
} else {
|
||||
$( this ).closest( 'tr' ).next( 'tr' ).hide();
|
||||
$( this ).closest( 'tr' ).next().next( 'tr' ).hide();
|
||||
}
|
||||
} )
|
||||
.trigger( 'change' );
|
||||
|
||||
// Ship Countries
|
||||
$( 'select#woocommerce_ship_to_countries' )
|
||||
.on( 'change', function () {
|
||||
if ( 'specific' === $( this ).val() ) {
|
||||
$( this ).closest( 'tr' ).next( 'tr' ).show();
|
||||
} else {
|
||||
$( this ).closest( 'tr' ).next( 'tr' ).hide();
|
||||
}
|
||||
} )
|
||||
.trigger( 'change' );
|
||||
|
||||
// Stock management
|
||||
$( 'input#woocommerce_manage_stock' )
|
||||
.on( 'change', function () {
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
$( this )
|
||||
.closest( 'tbody' )
|
||||
.find( '.manage_stock_field' )
|
||||
.closest( 'tr' )
|
||||
.show();
|
||||
} else {
|
||||
$( this )
|
||||
.closest( 'tbody' )
|
||||
.find( '.manage_stock_field' )
|
||||
.closest( 'tr' )
|
||||
.hide();
|
||||
}
|
||||
} )
|
||||
.trigger( 'change' );
|
||||
|
||||
// Color picker
|
||||
$( '.colorpick' )
|
||||
.iris( {
|
||||
change: function ( event, ui ) {
|
||||
$( this )
|
||||
.parent()
|
||||
.find( '.colorpickpreview' )
|
||||
.css( { backgroundColor: ui.color.toString() } );
|
||||
},
|
||||
hide: true,
|
||||
border: true,
|
||||
} )
|
||||
|
||||
.on( 'click focus', function ( event ) {
|
||||
event.stopPropagation();
|
||||
$( '.iris-picker' ).hide();
|
||||
$( this ).closest( 'td' ).find( '.iris-picker' ).show();
|
||||
$( this ).data( 'originalValue', $( this ).val() );
|
||||
} )
|
||||
|
||||
.on( 'change', function () {
|
||||
if ( $( this ).is( '.iris-error' ) ) {
|
||||
var original_value = $( this ).data( 'originalValue' );
|
||||
|
||||
if (
|
||||
original_value.match(
|
||||
/^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
|
||||
)
|
||||
) {
|
||||
$( this )
|
||||
.val( $( this ).data( 'originalValue' ) )
|
||||
.trigger( 'change' );
|
||||
} else {
|
||||
$( this ).val( '' ).trigger( 'change' );
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
||||
$( 'body' ).on( 'click', function () {
|
||||
$( '.iris-picker' ).hide();
|
||||
} );
|
||||
|
||||
// Edit prompt
|
||||
$( function () {
|
||||
var changed = false;
|
||||
let $check_column = $( '.wp-list-table .check-column' );
|
||||
|
||||
$( 'input, textarea, select, checkbox' ).on( 'change', function (
|
||||
event
|
||||
) {
|
||||
// Toggling WP List Table checkboxes should not trigger navigation warnings.
|
||||
if (
|
||||
$check_column.length &&
|
||||
$check_column.has( event.target )
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! changed ) {
|
||||
window.onbeforeunload = function () {
|
||||
return params.i18n_nav_warning;
|
||||
};
|
||||
changed = true;
|
||||
}
|
||||
} );
|
||||
|
||||
$( '.submit :input, input#search-submit' ).on(
|
||||
'click',
|
||||
function () {
|
||||
window.onbeforeunload = '';
|
||||
}
|
||||
);
|
||||
} );
|
||||
|
||||
// Sorting
|
||||
$( 'table.wc_gateways tbody, table.wc_shipping tbody' ).sortable( {
|
||||
items: 'tr',
|
||||
cursor: 'move',
|
||||
axis: 'y',
|
||||
handle: 'td.sort',
|
||||
scrollSensitivity: 40,
|
||||
helper: function ( event, ui ) {
|
||||
ui.children().each( function () {
|
||||
$( this ).width( $( this ).width() );
|
||||
} );
|
||||
ui.css( 'left', '0' );
|
||||
return ui;
|
||||
},
|
||||
start: function ( event, ui ) {
|
||||
ui.item.css( 'background-color', '#f6f6f6' );
|
||||
},
|
||||
stop: function ( event, ui ) {
|
||||
ui.item.removeAttr( 'style' );
|
||||
ui.item.trigger( 'updateMoveButtons' );
|
||||
},
|
||||
} );
|
||||
|
||||
// Select all/none
|
||||
$( '.woocommerce' ).on( 'click', '.select_all', function () {
|
||||
$( this )
|
||||
.closest( 'td' )
|
||||
.find( 'select option' )
|
||||
.prop( 'selected', true );
|
||||
$( this ).closest( 'td' ).find( 'select' ).trigger( 'change' );
|
||||
return false;
|
||||
} );
|
||||
|
||||
$( '.woocommerce' ).on( 'click', '.select_none', function () {
|
||||
$( this )
|
||||
.closest( 'td' )
|
||||
.find( 'select option' )
|
||||
.prop( 'selected', false );
|
||||
$( this ).closest( 'td' ).find( 'select' ).trigger( 'change' );
|
||||
return false;
|
||||
} );
|
||||
|
||||
// Re-order buttons.
|
||||
$( '.wc-item-reorder-nav' )
|
||||
.find( '.wc-move-up, .wc-move-down' )
|
||||
.on( 'click', function () {
|
||||
var moveBtn = $( this ),
|
||||
$row = moveBtn.closest( 'tr' );
|
||||
|
||||
moveBtn.trigger( 'focus' );
|
||||
|
||||
var isMoveUp = moveBtn.is( '.wc-move-up' ),
|
||||
isMoveDown = moveBtn.is( '.wc-move-down' );
|
||||
|
||||
if ( isMoveUp ) {
|
||||
var $previewRow = $row.prev( 'tr' );
|
||||
|
||||
if ( $previewRow && $previewRow.length ) {
|
||||
$previewRow.before( $row );
|
||||
wp.a11y.speak( params.i18n_moved_up );
|
||||
}
|
||||
} else if ( isMoveDown ) {
|
||||
var $nextRow = $row.next( 'tr' );
|
||||
|
||||
if ( $nextRow && $nextRow.length ) {
|
||||
$nextRow.after( $row );
|
||||
wp.a11y.speak( params.i18n_moved_down );
|
||||
}
|
||||
}
|
||||
|
||||
moveBtn.trigger( 'focus' ); // Re-focus after the container was moved.
|
||||
moveBtn.closest( 'table' ).trigger( 'updateMoveButtons' );
|
||||
} );
|
||||
|
||||
$( '.wc-item-reorder-nav' )
|
||||
.closest( 'table' )
|
||||
.on( 'updateMoveButtons', function () {
|
||||
var table = $( this ),
|
||||
lastRow = $( this ).find( 'tbody tr:last' ),
|
||||
firstRow = $( this ).find( 'tbody tr:first' );
|
||||
|
||||
table
|
||||
.find( '.wc-item-reorder-nav .wc-move-disabled' )
|
||||
.removeClass( 'wc-move-disabled' )
|
||||
.attr( { tabindex: '0', 'aria-hidden': 'false' } );
|
||||
firstRow
|
||||
.find( '.wc-item-reorder-nav .wc-move-up' )
|
||||
.addClass( 'wc-move-disabled' )
|
||||
.attr( { tabindex: '-1', 'aria-hidden': 'true' } );
|
||||
lastRow
|
||||
.find( '.wc-item-reorder-nav .wc-move-down' )
|
||||
.addClass( 'wc-move-disabled' )
|
||||
.attr( { tabindex: '-1', 'aria-hidden': 'true' } );
|
||||
} );
|
||||
|
||||
$( '.wc-item-reorder-nav' )
|
||||
.closest( 'table' )
|
||||
.trigger( 'updateMoveButtons' );
|
||||
|
||||
$( '.submit button' ).on( 'click', function () {
|
||||
if (
|
||||
$( 'select#woocommerce_allowed_countries' ).val() ===
|
||||
'specific' &&
|
||||
! $( '[name="woocommerce_specific_allowed_countries[]"]' ).val()
|
||||
) {
|
||||
if (
|
||||
window.confirm(
|
||||
woocommerce_settings_params.i18n_no_specific_countries_selected
|
||||
)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
} );
|
||||
|
||||
$( '#settings-other-payment-methods' ).on( 'click', function ( e ) {
|
||||
if (
|
||||
typeof window.wcTracks.recordEvent === 'undefined' &&
|
||||
typeof window.wc.tracks.recordEvent === 'undefined'
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
var recordEvent =
|
||||
window.wc.tracks.recordEvent || window.wcTracks.recordEvent;
|
||||
|
||||
var payment_methods = $.map(
|
||||
$(
|
||||
'td.wc_payment_gateways_wrapper tbody tr[data-gateway_id] '
|
||||
),
|
||||
function ( tr ) {
|
||||
return $( tr ).attr( 'data-gateway_id' );
|
||||
}
|
||||
);
|
||||
|
||||
recordEvent( 'settings_payments_recommendations_other_options', {
|
||||
available_payment_methods: payment_methods,
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
} )( jQuery, woocommerce_settings_params, wp );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/settings.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/settings.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(t,e,i){t(function(){t("select#woocommerce_allowed_countries").on("change",function(){"specific"===t(this).val()?(t(this).closest("tr").next("tr").hide(),t(this).closest("tr").next().next("tr").show()):"all_except"===t(this).val()?(t(this).closest("tr").next("tr").show(),t(this).closest("tr").next().next("tr").hide()):(t(this).closest("tr").next("tr").hide(),t(this).closest("tr").next().next("tr").hide())}).trigger("change"),t("select#woocommerce_ship_to_countries").on("change",function(){"specific"===t(this).val()?t(this).closest("tr").next("tr").show():t(this).closest("tr").next("tr").hide()}).trigger("change"),t("input#woocommerce_manage_stock").on("change",function(){t(this).is(":checked")?t(this).closest("tbody").find(".manage_stock_field").closest("tr").show():t(this).closest("tbody").find(".manage_stock_field").closest("tr").hide()}).trigger("change"),t(".colorpick").iris({change:function(e,i){t(this).parent().find(".colorpickpreview").css({backgroundColor:i.color.toString()})},hide:!0,border:!0}).on("click focus",function(e){e.stopPropagation(),t(".iris-picker").hide(),t(this).closest("td").find(".iris-picker").show(),t(this).data("originalValue",t(this).val())}).on("change",function(){t(this).is(".iris-error")&&(t(this).data("originalValue").match(/^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/)?t(this).val(t(this).data("originalValue")).trigger("change"):t(this).val("").trigger("change"))}),t("body").on("click",function(){t(".iris-picker").hide()}),t(function(){var i=!1;let o=t(".wp-list-table .check-column");t("input, textarea, select, checkbox").on("change",function(t){o.length&&o.has(t.target)||i||(window.onbeforeunload=function(){return e.i18n_nav_warning},i=!0)}),t(".submit :input, input#search-submit").on("click",function(){window.onbeforeunload=""})}),t("table.wc_gateways tbody, table.wc_shipping tbody").sortable({items:"tr",cursor:"move",axis:"y",handle:"td.sort",scrollSensitivity:40,helper:function(e,i){return i.children().each(function(){t(this).width(t(this).width())}),i.css("left","0"),i},start:function(t,e){e.item.css("background-color","#f6f6f6")},stop:function(t,e){e.item.removeAttr("style"),e.item.trigger("updateMoveButtons")}}),t(".woocommerce").on("click",".select_all",function(){return t(this).closest("td").find("select option").prop("selected",!0),t(this).closest("td").find("select").trigger("change"),!1}),t(".woocommerce").on("click",".select_none",function(){return t(this).closest("td").find("select option").prop("selected",!1),t(this).closest("td").find("select").trigger("change"),!1}),t(".wc-item-reorder-nav").find(".wc-move-up, .wc-move-down").on("click",function(){var o=t(this),n=o.closest("tr");o.trigger("focus");var c=o.is(".wc-move-up"),s=o.is(".wc-move-down");if(c){var r=n.prev("tr");r&&r.length&&(r.before(n),i.a11y.speak(e.i18n_moved_up))}else if(s){var a=n.next("tr");a&&a.length&&(a.after(n),i.a11y.speak(e.i18n_moved_down))}o.trigger("focus"),o.closest("table").trigger("updateMoveButtons")}),t(".wc-item-reorder-nav").closest("table").on("updateMoveButtons",function(){var e=t(this),i=t(this).find("tbody tr:last"),o=t(this).find("tbody tr:first");e.find(".wc-item-reorder-nav .wc-move-disabled").removeClass("wc-move-disabled").attr({tabindex:"0","aria-hidden":"false"}),o.find(".wc-item-reorder-nav .wc-move-up").addClass("wc-move-disabled").attr({tabindex:"-1","aria-hidden":"true"}),i.find(".wc-item-reorder-nav .wc-move-down").addClass("wc-move-disabled").attr({tabindex:"-1","aria-hidden":"true"})}),t(".wc-item-reorder-nav").closest("table").trigger("updateMoveButtons"),t(".submit button").on("click",function(){if("specific"===t("select#woocommerce_allowed_countries").val()&&!t('[name="woocommerce_specific_allowed_countries[]"]').val())return!!window.confirm(woocommerce_settings_params.i18n_no_specific_countries_selected)}),t("#settings-other-payment-methods").on("click",function(e){"undefined"==typeof window.wcTracks.recordEvent&&"undefined"==typeof window.wc.tracks.recordEvent||(window.wc.tracks.recordEvent||window.wcTracks.recordEvent)("settings_payments_recommendations_other_options",{available_payment_methods:t.map(t("td.wc_payment_gateways_wrapper tbody tr[data-gateway_id] "),function(e){return t(e).attr("data-gateway_id")})})})})}(jQuery,woocommerce_settings_params,wp);
|
||||
@@ -0,0 +1,145 @@
|
||||
/* global jQuery, woocommerce_admin_system_status, wcSetClipboard, wcClearClipboard */
|
||||
jQuery( function ( $ ) {
|
||||
/**
|
||||
* Users country and state fields
|
||||
*/
|
||||
var wcSystemStatus = {
|
||||
init: function () {
|
||||
$( document.body )
|
||||
.on(
|
||||
'click',
|
||||
'a.help_tip, a.woocommerce-help-tip, woocommerce-product-type-tip',
|
||||
this.preventTipTipClick
|
||||
)
|
||||
.on( 'click', 'a.debug-report', this.generateReport )
|
||||
.on( 'click', '#copy-for-support', this.copyReport )
|
||||
.on( 'aftercopy', '#copy-for-support', this.copySuccess )
|
||||
.on( 'aftercopyfailure', '#copy-for-support', this.copyFail )
|
||||
.on( 'click', '#download-for-support', this.downloadReport );
|
||||
},
|
||||
|
||||
/**
|
||||
* Prevent anchor behavior when click on TipTip.
|
||||
*
|
||||
* @return {Bool}
|
||||
*/
|
||||
preventTipTipClick: function() {
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Generate system status report.
|
||||
*
|
||||
* @return {Bool}
|
||||
*/
|
||||
generateReport: function() {
|
||||
var report = '';
|
||||
|
||||
$( '.wc_status_table thead, .wc_status_table tbody' ).each( function() {
|
||||
if ( $( this ).is( 'thead' ) ) {
|
||||
var label = $( this ).find( 'th:eq(0)' ).data( 'exportLabel' ) || $( this ).text();
|
||||
report = report + '\n### ' + label.trim() + ' ###\n\n';
|
||||
} else {
|
||||
$( 'tr', $( this ) ).each( function() {
|
||||
var label = $( this ).find( 'td:eq(0)' ).data( 'exportLabel' ) || $( this ).find( 'td:eq(0)' ).text();
|
||||
var the_name = label.trim().replace( /(<([^>]+)>)/ig, '' ); // Remove HTML.
|
||||
|
||||
// Find value
|
||||
var $value_html = $( this ).find( 'td:eq(2)' ).clone();
|
||||
$value_html.find( '.private' ).remove();
|
||||
$value_html.find( '.dashicons-yes' ).replaceWith( '✔' );
|
||||
$value_html.find( '.dashicons-no-alt, .dashicons-warning' ).replaceWith( '❌' );
|
||||
|
||||
// Format value
|
||||
var the_value = $value_html.text().trim();
|
||||
var value_array = the_value.split( ', ' );
|
||||
|
||||
if ( value_array.length > 1 ) {
|
||||
// If value have a list of plugins ','.
|
||||
// Split to add new line.
|
||||
var temp_line ='';
|
||||
$.each( value_array, function( key, line ) {
|
||||
temp_line = temp_line + line + '\n';
|
||||
});
|
||||
|
||||
the_value = temp_line;
|
||||
}
|
||||
|
||||
report = report + '' + the_name + ': ' + the_value + '\n';
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
$( '#debug-report' ).slideDown();
|
||||
$( '#debug-report' ).find( 'textarea' ).val( '`' + report + '`' ).trigger( 'focus' ).trigger( 'select' );
|
||||
$( this ).fadeOut();
|
||||
return false;
|
||||
} catch ( e ) {
|
||||
/* jshint devel: true */
|
||||
console.log( e );
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Copy for report.
|
||||
*
|
||||
* @param {Object} evt Copy event.
|
||||
*/
|
||||
copyReport: function( evt ) {
|
||||
wcClearClipboard();
|
||||
wcSetClipboard( $( '#debug-report' ).find( 'textarea' ).val(), $( this ) );
|
||||
evt.preventDefault();
|
||||
},
|
||||
|
||||
/**
|
||||
* Display a "Copied!" tip when success copying
|
||||
*/
|
||||
copySuccess: function() {
|
||||
$( '#copy-for-support' ).tipTip({
|
||||
'attribute': 'data-tip',
|
||||
'activation': 'focus',
|
||||
'fadeIn': 50,
|
||||
'fadeOut': 50,
|
||||
'delay': 0
|
||||
}).trigger( 'focus' );
|
||||
},
|
||||
|
||||
/**
|
||||
* Displays the copy error message when failure copying.
|
||||
*/
|
||||
copyFail: function() {
|
||||
$( '.copy-error' ).removeClass( 'hidden' );
|
||||
$( '#debug-report' ).find( 'textarea' ).trigger( 'focus' ).trigger( 'select' );
|
||||
},
|
||||
|
||||
downloadReport: function() {
|
||||
var ssr_text = new Blob( [ $( '#debug-report' ).find( 'textarea' ).val() ], { type: 'text/plain' } );
|
||||
|
||||
var domain = window.location.hostname;
|
||||
var datetime = new Date().toISOString().slice( 0, 19 ).replace( /:/g, '-' );
|
||||
|
||||
var a = document.createElement( 'a' );
|
||||
a.download = 'SystemStatusReport_' + domain + '_' + datetime + '.txt';
|
||||
a.href = window.URL.createObjectURL( ssr_text );
|
||||
a.textContent = 'Download ready';
|
||||
a.style='display:none';
|
||||
a.click();
|
||||
a.remove();
|
||||
}
|
||||
};
|
||||
|
||||
wcSystemStatus.init();
|
||||
|
||||
$( '.wc_status_table' ).on( 'click', '.run-tool .button', function( evt ) {
|
||||
evt.stopImmediatePropagation();
|
||||
return window.confirm( woocommerce_admin_system_status.run_tool_confirmation );
|
||||
});
|
||||
|
||||
$( '#log-viewer-select' ).on( 'click', 'h2 a.page-title-action', function( evt ) {
|
||||
evt.stopImmediatePropagation();
|
||||
return window.confirm( woocommerce_admin_system_status.delete_log_confirmation );
|
||||
});
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/system-status.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/system-status.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(t){({init:function(){t(document.body).on("click","a.help_tip, a.woocommerce-help-tip, woocommerce-product-type-tip",this.preventTipTipClick).on("click","a.debug-report",this.generateReport).on("click","#copy-for-support",this.copyReport).on("aftercopy","#copy-for-support",this.copySuccess).on("aftercopyfailure","#copy-for-support",this.copyFail).on("click","#download-for-support",this.downloadReport)},preventTipTipClick:function(){return!1},generateReport:function(){var e="";t(".wc_status_table thead, .wc_status_table tbody").each(function(){if(t(this).is("thead")){var o=t(this).find("th:eq(0)").data("exportLabel")||t(this).text();e=e+"\n### "+o.trim()+" ###\n\n"}else t("tr",t(this)).each(function(){var o=(t(this).find("td:eq(0)").data("exportLabel")||t(this).find("td:eq(0)").text()).trim().replace(/(<([^>]+)>)/gi,""),i=t(this).find("td:eq(2)").clone();i.find(".private").remove(),i.find(".dashicons-yes").replaceWith("✔"),i.find(".dashicons-no-alt, .dashicons-warning").replaceWith("❌");var n=i.text().trim(),r=n.split(", ");if(r.length>1){var a="";t.each(r,function(t,e){a=a+e+"\n"}),n=a}e=e+""+o+": "+n+"\n"})});try{return t("#debug-report").slideDown(),t("#debug-report").find("textarea").val("`"+e+"`").trigger("focus").trigger("select"),t(this).fadeOut(),!1}catch(o){console.log(o)}return!1},copyReport:function(e){wcClearClipboard(),wcSetClipboard(t("#debug-report").find("textarea").val(),t(this)),e.preventDefault()},copySuccess:function(){t("#copy-for-support").tipTip({attribute:"data-tip",activation:"focus",fadeIn:50,fadeOut:50,delay:0}).trigger("focus")},copyFail:function(){t(".copy-error").removeClass("hidden"),t("#debug-report").find("textarea").trigger("focus").trigger("select")},downloadReport:function(){var e=new Blob([t("#debug-report").find("textarea").val()],{type:"text/plain"}),o=window.location.hostname,i=(new Date).toISOString().slice(0,19).replace(/:/g,"-"),n=document.createElement("a");n.download="SystemStatusReport_"+o+"_"+i+".txt",n.href=window.URL.createObjectURL(e),n.textContent="Download ready",n.style="display:none",n.click(),n.remove()}}).init(),t(".wc_status_table").on("click",".run-tool .button",function(t){return t.stopImmediatePropagation(),window.confirm(woocommerce_admin_system_status.run_tool_confirmation)}),t("#log-viewer-select").on("click","h2 a.page-title-action",function(t){return t.stopImmediatePropagation(),window.confirm(woocommerce_admin_system_status.delete_log_confirmation)})});
|
||||
@@ -0,0 +1,148 @@
|
||||
/*global ajaxurl, woocommerce_term_ordering_params */
|
||||
|
||||
/* Modifided script from the simple-page-ordering plugin */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
var table_selector = 'table.wp-list-table',
|
||||
item_selector = 'tbody tr:not(.inline-edit-row)',
|
||||
term_id_selector = '.column-handle input[name="term_id"]',
|
||||
column_handle = '<td class="column-handle"></td>';
|
||||
|
||||
if ( 0 === $( table_selector ).find( '.column-handle' ).length ) {
|
||||
$( table_selector ).find( 'tr:not(.inline-edit-row)' ).append( column_handle );
|
||||
|
||||
term_id_selector = '.check-column input';
|
||||
}
|
||||
|
||||
// Stand-in wcTracks.recordEvent in case tracks is not available (for any reason).
|
||||
window.wcTracks = window.wcTracks || {};
|
||||
window.wcTracks.recordEvent = window.wcTracks.recordEvent || function() { };
|
||||
|
||||
$( table_selector ).find( '.column-handle' ).show();
|
||||
|
||||
$.wc_add_missing_sort_handles = function() {
|
||||
var all_table_rows = $( table_selector ).find('tbody > tr');
|
||||
var rows_with_handle = $( table_selector ).find('tbody > tr > td.column-handle').parent();
|
||||
if ( all_table_rows.length !== rows_with_handle.length ) {
|
||||
all_table_rows.each(function(index, elem){
|
||||
if ( ! rows_with_handle.is( elem ) ) {
|
||||
$( elem ).append( column_handle );
|
||||
}
|
||||
});
|
||||
}
|
||||
$( table_selector ).find( '.column-handle' ).show();
|
||||
};
|
||||
|
||||
$( document ).ajaxComplete( function( event, request, options ) {
|
||||
if (
|
||||
request &&
|
||||
4 === request.readyState &&
|
||||
200 === request.status &&
|
||||
options.data &&
|
||||
( 0 <= options.data.indexOf( '_inline_edit' ) || 0 <= options.data.indexOf( 'add-tag' ) )
|
||||
) {
|
||||
$.wc_add_missing_sort_handles();
|
||||
$( document.body ).trigger( 'init_tooltips' );
|
||||
}
|
||||
} );
|
||||
|
||||
$( table_selector ).sortable({
|
||||
items: item_selector,
|
||||
cursor: 'move',
|
||||
handle: '.column-handle',
|
||||
axis: 'y',
|
||||
forcePlaceholderSize: true,
|
||||
helper: 'clone',
|
||||
opacity: 0.65,
|
||||
placeholder: 'product-cat-placeholder',
|
||||
scrollSensitivity: 40,
|
||||
start: function( event, ui ) {
|
||||
if ( ! ui.item.hasClass( 'alternate' ) ) {
|
||||
ui.item.css( 'background-color', '#ffffff' );
|
||||
}
|
||||
ui.item.children( 'td, th' ).css( 'border-bottom-width', '0' );
|
||||
ui.item.css( 'outline', '1px solid #aaa' );
|
||||
},
|
||||
stop: function( event, ui ) {
|
||||
ui.item.removeAttr( 'style' );
|
||||
ui.item.children( 'td, th' ).css( 'border-bottom-width', '1px' );
|
||||
},
|
||||
update: function( event, ui ) {
|
||||
var termid = ui.item.find( term_id_selector ).val(); // this post id
|
||||
var termparent = ui.item.find( '.parent' ).html(); // post parent
|
||||
|
||||
var prevtermid = ui.item.prev().find( term_id_selector ).val();
|
||||
var nexttermid = ui.item.next().find( term_id_selector ).val();
|
||||
|
||||
// Can only sort in same tree
|
||||
var prevtermparent, nexttermparent;
|
||||
if ( prevtermid !== undefined ) {
|
||||
prevtermparent = ui.item.prev().find( '.parent' ).html();
|
||||
if ( prevtermparent !== termparent) {
|
||||
prevtermid = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if ( nexttermid !== undefined ) {
|
||||
nexttermparent = ui.item.next().find( '.parent' ).html();
|
||||
if ( nexttermparent !== termparent) {
|
||||
nexttermid = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
// If previous and next not at same tree level, or next not at same tree level and
|
||||
// the previous is the parent of the next, or just moved item beneath its own children.
|
||||
if (
|
||||
( prevtermid === undefined && nexttermid === undefined ) ||
|
||||
( nexttermid === undefined && nexttermparent === prevtermid ) ||
|
||||
( nexttermid !== undefined && prevtermparent === termid )
|
||||
) {
|
||||
$( table_selector ).sortable( 'cancel' );
|
||||
return;
|
||||
}
|
||||
|
||||
window.wcTracks.recordEvent( 'product_attributes_ordering_term', {
|
||||
is_category:
|
||||
woocommerce_term_ordering_params.taxonomy === 'product_cat'
|
||||
? 'yes'
|
||||
: 'no',
|
||||
} );
|
||||
|
||||
// Show Spinner
|
||||
ui.item.find( '.check-column input' ).hide();
|
||||
ui.item
|
||||
.find( '.check-column' )
|
||||
.append( '<img alt="processing" src="images/wpspin_light.gif" class="waiting" style="margin-left: 6px;" />' );
|
||||
|
||||
// Go do the sorting stuff via ajax.
|
||||
$.post(
|
||||
ajaxurl,
|
||||
{
|
||||
action: 'woocommerce_term_ordering',
|
||||
id: termid,
|
||||
nextid: nexttermid,
|
||||
thetaxonomy: woocommerce_term_ordering_params.taxonomy
|
||||
},
|
||||
function(response) {
|
||||
if ( response === 'children' ) {
|
||||
window.location.reload();
|
||||
} else {
|
||||
ui.item.find( '.check-column input' ).show();
|
||||
ui.item.find( '.check-column' ).find( 'img' ).remove();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Fix cell colors
|
||||
$( 'table.widefat tbody tr' ).each( function() {
|
||||
var i = jQuery( 'table.widefat tbody tr' ).index( this );
|
||||
if ( i%2 === 0 ) {
|
||||
jQuery( this ).addClass( 'alternate' );
|
||||
} else {
|
||||
jQuery( this ).removeClass( 'alternate' );
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/term-ordering.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/term-ordering.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){var t="table.wp-list-table",n='.column-handle input[name="term_id"]';0===e(t).find(".column-handle").length&&(e(t).find("tr:not(.inline-edit-row)").append('<td class="column-handle"></td>'),n=".check-column input"),window.wcTracks=window.wcTracks||{},window.wcTracks.recordEvent=window.wcTracks.recordEvent||function(){},e(t).find(".column-handle").show(),e.wc_add_missing_sort_handles=function(){var n=e(t).find("tbody > tr"),i=e(t).find("tbody > tr > td.column-handle").parent();n.length!==i.length&&n.each(function(t,n){i.is(n)||e(n).append('<td class="column-handle"></td>')}),e(t).find(".column-handle").show()},e(document).ajaxComplete(function(t,n,i){n&&4===n.readyState&&200===n.status&&i.data&&(0<=i.data.indexOf("_inline_edit")||0<=i.data.indexOf("add-tag"))&&(e.wc_add_missing_sort_handles(),e(document.body).trigger("init_tooltips"))}),e(t).sortable({items:"tbody tr:not(.inline-edit-row)",cursor:"move",handle:".column-handle",axis:"y",forcePlaceholderSize:!0,helper:"clone",opacity:.65,placeholder:"product-cat-placeholder",scrollSensitivity:40,start:function(e,t){t.item.hasClass("alternate")||t.item.css("background-color","#ffffff"),t.item.children("td, th").css("border-bottom-width","0"),t.item.css("outline","1px solid #aaa")},stop:function(e,t){t.item.removeAttr("style"),t.item.children("td, th").css("border-bottom-width","1px")},update:function(i,d){var o,a,r=d.item.find(n).val(),c=d.item.find(".parent").html(),l=d.item.prev().find(n).val(),s=d.item.next().find(n).val();l!==undefined&&(o=d.item.prev().find(".parent").html())!==c&&(l=undefined),s!==undefined&&(a=d.item.next().find(".parent").html())!==c&&(s=undefined),l===undefined&&s===undefined||s===undefined&&a===l||s!==undefined&&o===r?e(t).sortable("cancel"):(window.wcTracks.recordEvent("product_attributes_ordering_term",{is_category:"product_cat"===woocommerce_term_ordering_params.taxonomy?"yes":"no"}),d.item.find(".check-column input").hide(),d.item.find(".check-column").append('<img alt="processing" src="images/wpspin_light.gif" class="waiting" style="margin-left: 6px;" />'),e.post(ajaxurl,{action:"woocommerce_term_ordering",id:r,nextid:s,thetaxonomy:woocommerce_term_ordering_params.taxonomy},function(e){"children"===e?window.location.reload():(d.item.find(".check-column input").show(),d.item.find(".check-column").find("img").remove())}),e("table.widefat tbody tr").each(function(){jQuery("table.widefat tbody tr").index(this)%2==0?jQuery(this).addClass("alternate"):jQuery(this).removeClass("alternate")}))}})});
|
||||
120
wp/wp-content/plugins/woocommerce/assets/js/admin/users.js
Normal file
120
wp/wp-content/plugins/woocommerce/assets/js/admin/users.js
Normal file
@@ -0,0 +1,120 @@
|
||||
/*global wc_users_params */
|
||||
jQuery( function ( $ ) {
|
||||
|
||||
/**
|
||||
* Users country and state fields
|
||||
*/
|
||||
var wc_users_fields = {
|
||||
states: null,
|
||||
init: function() {
|
||||
if ( typeof wc_users_params.countries !== 'undefined' ) {
|
||||
/* State/Country select boxes */
|
||||
this.states = JSON.parse( wc_users_params.countries.replace( /"/g, '"' ) );
|
||||
}
|
||||
|
||||
$( '.js_field-country' ).selectWoo().on( 'change', this.change_country );
|
||||
$( '.js_field-country' ).trigger( 'change', [ true ] );
|
||||
$( document.body ).on( 'change', 'select.js_field-state', this.change_state );
|
||||
|
||||
$( document.body ).on( 'click', 'button.js_copy-billing', this.copy_billing );
|
||||
},
|
||||
|
||||
change_country: function( e, stickValue ) {
|
||||
// Check for stickValue before using it
|
||||
if ( typeof stickValue === 'undefined' ) {
|
||||
stickValue = false;
|
||||
}
|
||||
|
||||
// Prevent if we don't have the metabox data
|
||||
if ( wc_users_fields.states === null ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $this = $( this ),
|
||||
country = $this.val(),
|
||||
$state = $this.parents( '.form-table' ).find( ':input.js_field-state' ),
|
||||
$parent = $state.parent(),
|
||||
input_name = $state.attr( 'name' ),
|
||||
input_id = $state.attr( 'id' ),
|
||||
stickstatefield = 'woocommerce.stickState-' + country,
|
||||
value = $this.data( stickstatefield ) ? $this.data( stickstatefield ) : $state.val(),
|
||||
placeholder = $state.attr( 'placeholder' ),
|
||||
$newstate;
|
||||
|
||||
if ( stickValue ){
|
||||
$this.data( 'woocommerce.stickState-' + country, value );
|
||||
}
|
||||
|
||||
// Remove the previous DOM element
|
||||
$parent.show().find( '.select2-container' ).remove();
|
||||
|
||||
if ( ! $.isEmptyObject( wc_users_fields.states[ country ] ) ) {
|
||||
var state = wc_users_fields.states[ country ],
|
||||
$defaultOption = $( '<option value=""></option>' )
|
||||
.text( wc_users_fields.i18n_select_state_text );
|
||||
|
||||
$newstate = $( '<select style="width: 25em;"></select>' )
|
||||
.prop( 'id', input_id )
|
||||
.prop( 'name', input_name )
|
||||
.prop( 'placeholder', placeholder )
|
||||
.addClass( 'js_field-state' )
|
||||
.append( $defaultOption );
|
||||
|
||||
$.each( state, function( index ) {
|
||||
var $option = $( '<option></option>' )
|
||||
.prop( 'value', index )
|
||||
.text( state[ index ] );
|
||||
$newstate.append( $option );
|
||||
} );
|
||||
|
||||
$newstate.val( value );
|
||||
|
||||
$state.replaceWith( $newstate );
|
||||
|
||||
$newstate.show().selectWoo().hide().trigger( 'change' );
|
||||
} else {
|
||||
$newstate = $( '<input type="text" />' )
|
||||
.prop( 'id', input_id )
|
||||
.prop( 'name', input_name )
|
||||
.prop( 'placeholder', placeholder )
|
||||
.addClass( 'js_field-state regular-text' )
|
||||
.val( value );
|
||||
$state.replaceWith( $newstate );
|
||||
}
|
||||
|
||||
// This event has a typo - deprecated in 2.5.0
|
||||
$( document.body ).trigger( 'contry-change.woocommerce', [country, $( this ).closest( 'div' )] );
|
||||
$( document.body ).trigger( 'country-change.woocommerce', [country, $( this ).closest( 'div' )] );
|
||||
},
|
||||
|
||||
change_state: function() {
|
||||
// Here we will find if state value on a select has changed and stick it to the country data
|
||||
var $this = $( this ),
|
||||
state = $this.val(),
|
||||
$country = $this.parents( '.form-table' ).find( ':input.js_field-country' ),
|
||||
country = $country.val();
|
||||
|
||||
$country.data( 'woocommerce.stickState-' + country, state );
|
||||
},
|
||||
|
||||
copy_billing: function( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
$( '#fieldset-billing' ).find( 'input, select' ).each( function( i, el ) {
|
||||
// The address keys match up, except for the prefix
|
||||
var shipName = el.name.replace( /^billing_/, 'shipping_' );
|
||||
// Swap prefix, then check if there are any elements
|
||||
var shipEl = $( '[name="' + shipName + '"]' );
|
||||
// No corresponding shipping field, skip this item
|
||||
if ( ! shipEl.length ) {
|
||||
return;
|
||||
}
|
||||
// Found a matching shipping element, update the value
|
||||
shipEl.val( el.value ).trigger( 'change' );
|
||||
} );
|
||||
}
|
||||
};
|
||||
|
||||
wc_users_fields.init();
|
||||
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/users.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/users.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){var t={states:null,init:function(){"undefined"!=typeof wc_users_params.countries&&(this.states=JSON.parse(wc_users_params.countries.replace(/"/g,'"'))),e(".js_field-country").selectWoo().on("change",this.change_country),e(".js_field-country").trigger("change",[!0]),e(document.body).on("change","select.js_field-state",this.change_state),e(document.body).on("click","button.js_copy-billing",this.copy_billing)},change_country:function(a,n){if(void 0===n&&(n=!1),null!==t.states){var o,i=e(this),c=i.val(),s=i.parents(".form-table").find(":input.js_field-state"),r=s.parent(),l=s.attr("name"),p=s.attr("id"),d="woocommerce.stickState-"+c,u=i.data(d)?i.data(d):s.val(),h=s.attr("placeholder");if(n&&i.data("woocommerce.stickState-"+c,u),r.show().find(".select2-container").remove(),e.isEmptyObject(t.states[c]))o=e('<input type="text" />').prop("id",p).prop("name",l).prop("placeholder",h).addClass("js_field-state regular-text").val(u),s.replaceWith(o);else{var g=t.states[c],f=e('<option value=""></option>').text(t.i18n_select_state_text);o=e('<select style="width: 25em;"></select>').prop("id",p).prop("name",l).prop("placeholder",h).addClass("js_field-state").append(f),e.each(g,function(t){var a=e("<option></option>").prop("value",t).text(g[t]);o.append(a)}),o.val(u),s.replaceWith(o),o.show().selectWoo().hide().trigger("change")}e(document.body).trigger("contry-change.woocommerce",[c,e(this).closest("div")]),e(document.body).trigger("country-change.woocommerce",[c,e(this).closest("div")])}},change_state:function(){var t=e(this),a=t.val(),n=t.parents(".form-table").find(":input.js_field-country"),o=n.val();n.data("woocommerce.stickState-"+o,a)},copy_billing:function(t){t.preventDefault(),e("#fieldset-billing").find("input, select").each(function(t,a){var n=a.name.replace(/^billing_/,"shipping_"),o=e('[name="'+n+'"]');o.length&&o.val(a.value).trigger("change")})}};t.init()});
|
||||
@@ -0,0 +1,38 @@
|
||||
/* exported wcSetClipboard, wcClearClipboard */
|
||||
|
||||
/**
|
||||
* Simple text copy functions using native browser clipboard capabilities.
|
||||
* @since 3.2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Set the user's clipboard contents.
|
||||
*
|
||||
* @param string data: Text to copy to clipboard.
|
||||
* @param object $el: jQuery element to trigger copy events on. (Default: document)
|
||||
*/
|
||||
function wcSetClipboard( data, $el ) {
|
||||
if ( 'undefined' === typeof $el ) {
|
||||
$el = jQuery( document );
|
||||
}
|
||||
var $temp_input = jQuery( '<textarea style="opacity:0">' );
|
||||
jQuery( 'body' ).append( $temp_input );
|
||||
$temp_input.val( data ).trigger( 'select' );
|
||||
|
||||
$el.trigger( 'beforecopy' );
|
||||
try {
|
||||
document.execCommand( 'copy' );
|
||||
$el.trigger( 'aftercopy' );
|
||||
} catch ( err ) {
|
||||
$el.trigger( 'aftercopyfailure' );
|
||||
}
|
||||
|
||||
$temp_input.remove();
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the user's clipboard.
|
||||
*/
|
||||
function wcClearClipboard() {
|
||||
wcSetClipboard( '' );
|
||||
}
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-clipboard.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-clipboard.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
function wcSetClipboard(e,r){void 0===r&&(r=jQuery(document));var t=jQuery('<textarea style="opacity:0">');jQuery("body").append(t),t.val(e).trigger("select"),r.trigger("beforecopy");try{document.execCommand("copy"),r.trigger("aftercopy")}catch(o){r.trigger("aftercopyfailure")}t.remove()}function wcClearClipboard(){wcSetClipboard("")}
|
||||
@@ -0,0 +1,416 @@
|
||||
/*global wc_enhanced_select_params */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
function getEnhancedSelectFormatString() {
|
||||
return {
|
||||
'language': {
|
||||
errorLoading: function() {
|
||||
// Workaround for https://github.com/select2/select2/issues/4355 instead of i18n_ajax_error.
|
||||
return wc_enhanced_select_params.i18n_searching;
|
||||
},
|
||||
inputTooLong: function( args ) {
|
||||
var overChars = args.input.length - args.maximum;
|
||||
|
||||
if ( 1 === overChars ) {
|
||||
return wc_enhanced_select_params.i18n_input_too_long_1;
|
||||
}
|
||||
|
||||
return wc_enhanced_select_params.i18n_input_too_long_n.replace( '%qty%', overChars );
|
||||
},
|
||||
inputTooShort: function( args ) {
|
||||
var remainingChars = args.minimum - args.input.length;
|
||||
|
||||
if ( 1 === remainingChars ) {
|
||||
return wc_enhanced_select_params.i18n_input_too_short_1;
|
||||
}
|
||||
|
||||
return wc_enhanced_select_params.i18n_input_too_short_n.replace( '%qty%', remainingChars );
|
||||
},
|
||||
loadingMore: function() {
|
||||
return wc_enhanced_select_params.i18n_load_more;
|
||||
},
|
||||
maximumSelected: function( args ) {
|
||||
if ( args.maximum === 1 ) {
|
||||
return wc_enhanced_select_params.i18n_selection_too_long_1;
|
||||
}
|
||||
|
||||
return wc_enhanced_select_params.i18n_selection_too_long_n.replace( '%qty%', args.maximum );
|
||||
},
|
||||
noResults: function() {
|
||||
return wc_enhanced_select_params.i18n_no_matches;
|
||||
},
|
||||
searching: function() {
|
||||
return wc_enhanced_select_params.i18n_searching;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
$( document.body )
|
||||
|
||||
.on( 'wc-enhanced-select-init', function() {
|
||||
|
||||
// Regular select boxes
|
||||
$( ':input.wc-enhanced-select, :input.chosen_select' ).filter( ':not(.enhanced)' ).each( function() {
|
||||
var select2_args = $.extend({
|
||||
minimumResultsForSearch: 10,
|
||||
allowClear: $( this ).data( 'allow_clear' ) ? true : false,
|
||||
placeholder: $( this ).data( 'placeholder' )
|
||||
}, getEnhancedSelectFormatString() );
|
||||
|
||||
$( this ).selectWoo( select2_args ).addClass( 'enhanced' );
|
||||
});
|
||||
|
||||
$( ':input.wc-enhanced-select-nostd, :input.chosen_select_nostd' ).filter( ':not(.enhanced)' ).each( function() {
|
||||
var select2_args = $.extend({
|
||||
minimumResultsForSearch: 10,
|
||||
allowClear: true,
|
||||
placeholder: $( this ).data( 'placeholder' )
|
||||
}, getEnhancedSelectFormatString() );
|
||||
|
||||
$( this ).selectWoo( select2_args ).addClass( 'enhanced' );
|
||||
});
|
||||
|
||||
function display_result( self, select2_args ) {
|
||||
select2_args = $.extend( select2_args, getEnhancedSelectFormatString() );
|
||||
|
||||
$( self ).selectWoo( select2_args ).addClass( 'enhanced' );
|
||||
|
||||
if ( $( self ).data( 'sortable' ) ) {
|
||||
var $select = $(self);
|
||||
var $list = $( self ).next( '.select2-container' ).find( 'ul.select2-selection__rendered' );
|
||||
|
||||
$list.sortable({
|
||||
placeholder : 'ui-state-highlight select2-selection__choice',
|
||||
forcePlaceholderSize: true,
|
||||
items : 'li:not(.select2-search__field)',
|
||||
tolerance : 'pointer',
|
||||
stop: function() {
|
||||
$( $list.find( '.select2-selection__choice' ).get().reverse() ).each( function() {
|
||||
var id = $( this ).data( 'data' ).id;
|
||||
var option = $select.find( 'option[value="' + id + '"]' )[0];
|
||||
$select.prepend( option );
|
||||
} );
|
||||
}
|
||||
});
|
||||
// Keep multiselects ordered alphabetically if they are not sortable.
|
||||
} else if ( $( self ).prop( 'multiple' ) ) {
|
||||
$( self ).on( 'change', function(){
|
||||
var $children = $( self ).children();
|
||||
$children.sort(function(a, b){
|
||||
var atext = a.text.toLowerCase();
|
||||
var btext = b.text.toLowerCase();
|
||||
|
||||
if ( atext > btext ) {
|
||||
return 1;
|
||||
}
|
||||
if ( atext < btext ) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
$( self ).html( $children );
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Ajax product search box
|
||||
$( ':input.wc-product-search' ).filter( ':not(.enhanced)' ).each( function() {
|
||||
var select2_args = {
|
||||
allowClear: $( this ).data( 'allow_clear' ) ? true : false,
|
||||
placeholder: $( this ).data( 'placeholder' ),
|
||||
minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '3',
|
||||
escapeMarkup: function( m ) {
|
||||
return m;
|
||||
},
|
||||
ajax: {
|
||||
url: wc_enhanced_select_params.ajax_url,
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
data: function( params ) {
|
||||
return {
|
||||
term : params.term,
|
||||
action : $( this ).data( 'action' ) || 'woocommerce_json_search_products_and_variations',
|
||||
security : wc_enhanced_select_params.search_products_nonce,
|
||||
exclude : $( this ).data( 'exclude' ),
|
||||
exclude_type : $( this ).data( 'exclude_type' ),
|
||||
include : $( this ).data( 'include' ),
|
||||
limit : $( this ).data( 'limit' ),
|
||||
display_stock: $( this ).data( 'display_stock' )
|
||||
};
|
||||
},
|
||||
processResults: function( data ) {
|
||||
var terms = [];
|
||||
if ( data ) {
|
||||
$.each( data, function( id, text ) {
|
||||
terms.push( { id: id, text: text } );
|
||||
});
|
||||
}
|
||||
return {
|
||||
results: terms
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
};
|
||||
|
||||
display_result( this, select2_args );
|
||||
});
|
||||
|
||||
// Ajax Page Search.
|
||||
$( ':input.wc-page-search' ).filter( ':not(.enhanced)' ).each( function() {
|
||||
var select2_args = {
|
||||
allowClear: $( this ).data( 'allow_clear' ) ? true : false,
|
||||
placeholder: $( this ).data( 'placeholder' ),
|
||||
minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '3',
|
||||
escapeMarkup: function( m ) {
|
||||
return m;
|
||||
},
|
||||
ajax: {
|
||||
url: wc_enhanced_select_params.ajax_url,
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
data: function( params ) {
|
||||
return {
|
||||
term : params.term,
|
||||
action : $( this ).data( 'action' ) || 'woocommerce_json_search_pages',
|
||||
security : wc_enhanced_select_params.search_pages_nonce,
|
||||
exclude : $( this ).data( 'exclude' ),
|
||||
post_status : $( this ).data( 'post_status' ),
|
||||
limit : $( this ).data( 'limit' ),
|
||||
};
|
||||
},
|
||||
processResults: function( data ) {
|
||||
var terms = [];
|
||||
if ( data ) {
|
||||
$.each( data, function( id, text ) {
|
||||
terms.push( { id: id, text: text } );
|
||||
} );
|
||||
}
|
||||
return {
|
||||
results: terms
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
};
|
||||
|
||||
$( this ).selectWoo( select2_args ).addClass( 'enhanced' );
|
||||
});
|
||||
|
||||
// Ajax customer search boxes
|
||||
$( ':input.wc-customer-search' ).filter( ':not(.enhanced)' ).each( function() {
|
||||
var select2_args = {
|
||||
allowClear: $( this ).data( 'allow_clear' ) ? true : false,
|
||||
placeholder: $( this ).data( 'placeholder' ),
|
||||
minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '1',
|
||||
escapeMarkup: function( m ) {
|
||||
return m;
|
||||
},
|
||||
ajax: {
|
||||
url: wc_enhanced_select_params.ajax_url,
|
||||
dataType: 'json',
|
||||
delay: 1000,
|
||||
data: function( params ) {
|
||||
return {
|
||||
term: params.term,
|
||||
action: 'woocommerce_json_search_customers',
|
||||
security: wc_enhanced_select_params.search_customers_nonce,
|
||||
exclude: $( this ).data( 'exclude' )
|
||||
};
|
||||
},
|
||||
processResults: function( data ) {
|
||||
var terms = [];
|
||||
if ( data ) {
|
||||
$.each( data, function( id, text ) {
|
||||
terms.push({
|
||||
id: id,
|
||||
text: text
|
||||
});
|
||||
});
|
||||
}
|
||||
return {
|
||||
results: terms
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
};
|
||||
|
||||
select2_args = $.extend( select2_args, getEnhancedSelectFormatString() );
|
||||
|
||||
$( this ).selectWoo( select2_args ).addClass( 'enhanced' );
|
||||
|
||||
if ( $( this ).data( 'sortable' ) ) {
|
||||
var $select = $(this);
|
||||
var $list = $( this ).next( '.select2-container' ).find( 'ul.select2-selection__rendered' );
|
||||
|
||||
$list.sortable({
|
||||
placeholder : 'ui-state-highlight select2-selection__choice',
|
||||
forcePlaceholderSize: true,
|
||||
items : 'li:not(.select2-search__field)',
|
||||
tolerance : 'pointer',
|
||||
stop: function() {
|
||||
$( $list.find( '.select2-selection__choice' ).get().reverse() ).each( function() {
|
||||
var id = $( this ).data( 'data' ).id;
|
||||
var option = $select.find( 'option[value="' + id + '"]' )[0];
|
||||
$select.prepend( option );
|
||||
} );
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Ajax category search boxes
|
||||
$( ':input.wc-category-search' ).filter( ':not(.enhanced)' ).each( function() {
|
||||
var return_format = $( this ).data( 'return_id' ) ? 'id' : 'slug';
|
||||
|
||||
var select2_args = $.extend( {
|
||||
allowClear : $( this ).data( 'allow_clear' ) ? true : false,
|
||||
placeholder : $( this ).data( 'placeholder' ),
|
||||
minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '3',
|
||||
escapeMarkup : function( m ) {
|
||||
return m;
|
||||
},
|
||||
ajax: {
|
||||
url: wc_enhanced_select_params.ajax_url,
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
data: function( params ) {
|
||||
return {
|
||||
term: params.term,
|
||||
action: 'woocommerce_json_search_categories',
|
||||
security: wc_enhanced_select_params.search_categories_nonce
|
||||
};
|
||||
},
|
||||
processResults: function( data ) {
|
||||
var terms = [];
|
||||
if ( data ) {
|
||||
$.each( data, function( id, term ) {
|
||||
terms.push({
|
||||
id: 'id' === return_format ? term.term_id : term.slug,
|
||||
text: term.formatted_name
|
||||
});
|
||||
});
|
||||
}
|
||||
return {
|
||||
results: terms
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
}, getEnhancedSelectFormatString() );
|
||||
|
||||
$( this ).selectWoo( select2_args ).addClass( 'enhanced' );
|
||||
});
|
||||
|
||||
// Ajax category search boxes
|
||||
$( ':input.wc-taxonomy-term-search' ).filter( ':not(.enhanced)' ).each( function() {
|
||||
var return_format = $( this ).data( 'return_id' ) ? 'id' : 'slug';
|
||||
|
||||
var select2_args = $.extend( {
|
||||
allowClear : $( this ).data( 'allow_clear' ) ? true : false,
|
||||
placeholder : $( this ).data( 'placeholder' ),
|
||||
minimumInputLength: $( this ).data( 'minimum_input_length' ) !== null && $( this ).data( 'minimum_input_length' ) !== undefined ? $( this ).data( 'minimum_input_length' ) : '3',
|
||||
escapeMarkup : function( m ) {
|
||||
return m;
|
||||
},
|
||||
ajax: {
|
||||
url: wc_enhanced_select_params.ajax_url,
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
data: function( params ) {
|
||||
return {
|
||||
taxonomy: $( this ).data( 'taxonomy' ),
|
||||
limit: $( this ).data( 'limit' ),
|
||||
orderby: $( this ).data( 'orderby'),
|
||||
term: params.term,
|
||||
action: 'woocommerce_json_search_taxonomy_terms',
|
||||
security: wc_enhanced_select_params.search_taxonomy_terms_nonce
|
||||
};
|
||||
},
|
||||
processResults: function( data ) {
|
||||
var terms = [];
|
||||
if ( data ) {
|
||||
$.each( data, function( id, term ) {
|
||||
terms.push({
|
||||
id: 'id' === return_format ? term.term_id : term.slug,
|
||||
text: term.name
|
||||
});
|
||||
});
|
||||
}
|
||||
return {
|
||||
results: terms
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
}, getEnhancedSelectFormatString() );
|
||||
|
||||
$( this ).selectWoo( select2_args ).addClass( 'enhanced' );
|
||||
});
|
||||
|
||||
$( ':input.wc-attribute-search' ).filter( ':not(.enhanced)' ).each( function() {
|
||||
var select2Element = this;
|
||||
var select2_args = $.extend( {
|
||||
allowClear : $( this ).data( 'allow_clear' ) ? true : false,
|
||||
placeholder : $( this ).data( 'placeholder' ),
|
||||
minimumInputLength: $( this ).data( 'minimum_input_length' ) !== null && $( this ).data( 'minimum_input_length' ) !== undefined ? $( this ).data( 'minimum_input_length' ) : '3',
|
||||
escapeMarkup : function( m ) {
|
||||
return m;
|
||||
},
|
||||
ajax: {
|
||||
url: wc_enhanced_select_params.ajax_url,
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
data: function( params ) {
|
||||
return {
|
||||
term: params.term,
|
||||
action: 'woocommerce_json_search_product_attributes',
|
||||
security: wc_enhanced_select_params.search_product_attributes_nonce
|
||||
};
|
||||
},
|
||||
processResults: function( data ) {
|
||||
var disabledItems = $( select2Element ).data('disabled-items') || [];
|
||||
var terms = [];
|
||||
if ( data ) {
|
||||
$.each( data, function( id, term ) {
|
||||
terms.push({
|
||||
id: term.slug,
|
||||
text: term.name,
|
||||
disabled: disabledItems.includes( term.slug )
|
||||
});
|
||||
});
|
||||
}
|
||||
return {
|
||||
results: terms
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
}
|
||||
}, getEnhancedSelectFormatString() );
|
||||
|
||||
$( this ).selectWoo( select2_args ).addClass( 'enhanced' );
|
||||
});
|
||||
})
|
||||
|
||||
// WooCommerce Backbone Modal
|
||||
.on( 'wc_backbone_modal_before_remove', function() {
|
||||
$( '.wc-enhanced-select, :input.wc-product-search, :input.wc-customer-search' ).filter( '.select2-hidden-accessible' )
|
||||
.selectWoo( 'close' );
|
||||
})
|
||||
|
||||
.trigger( 'wc-enhanced-select-init' );
|
||||
|
||||
$( 'html' ).on( 'click', function( event ) {
|
||||
if ( this === event.target ) {
|
||||
$( '.wc-enhanced-select, :input.wc-product-search, :input.wc-customer-search' ).filter( '.select2-hidden-accessible' )
|
||||
.selectWoo( 'close' );
|
||||
}
|
||||
} );
|
||||
} catch( err ) {
|
||||
// If select2 failed (conflict?) log the error but don't stop other scripts breaking.
|
||||
window.console.log( err );
|
||||
}
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-enhanced-select.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-enhanced-select.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,92 @@
|
||||
/* global wc_orders_params */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
if ( typeof wc_orders_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* WCOrdersTable class.
|
||||
*/
|
||||
var WCOrdersTable = function() {
|
||||
$( document )
|
||||
.on(
|
||||
'click',
|
||||
'.post-type-shop_order .wp-list-table tbody td, .woocommerce_page_wc-orders .wp-list-table.orders tbody td',
|
||||
this.onRowClick
|
||||
)
|
||||
.on( 'click', '.order-preview:not(.disabled)', this.onPreview );
|
||||
};
|
||||
|
||||
/**
|
||||
* Click a row.
|
||||
*/
|
||||
WCOrdersTable.prototype.onRowClick = function( e ) {
|
||||
if ( $( e.target ).filter( 'a, a *, .no-link, .no-link *, button, button *' ).length ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( window.getSelection && window.getSelection().toString().length ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
var $row = $( this ).closest( 'tr' ),
|
||||
href = $row.find( 'a.order-view' ).attr( 'href' );
|
||||
|
||||
if ( href && href.length ) {
|
||||
e.preventDefault();
|
||||
|
||||
if ( e.metaKey || e.ctrlKey ) {
|
||||
window.open( href, '_blank' );
|
||||
} else {
|
||||
window.location = href;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Preview an order.
|
||||
*/
|
||||
WCOrdersTable.prototype.onPreview = function() {
|
||||
var $previewButton = $( this ),
|
||||
$order_id = $previewButton.data( 'orderId' );
|
||||
|
||||
if ( $previewButton.data( 'order-data' ) ) {
|
||||
$( this ).WCBackboneModal({
|
||||
template: 'wc-modal-view-order',
|
||||
variable : $previewButton.data( 'orderData' )
|
||||
});
|
||||
} else {
|
||||
$previewButton.addClass( 'disabled' );
|
||||
|
||||
$.ajax({
|
||||
url: wc_orders_params.ajax_url,
|
||||
data: {
|
||||
order_id: $order_id,
|
||||
action : 'woocommerce_get_order_details',
|
||||
security: wc_orders_params.preview_nonce
|
||||
},
|
||||
type: 'GET',
|
||||
success: function( response ) {
|
||||
$( '.order-preview' ).removeClass( 'disabled' );
|
||||
|
||||
if ( response.success ) {
|
||||
$previewButton.data( 'orderData', response.data );
|
||||
|
||||
$( this ).WCBackboneModal({
|
||||
template: 'wc-modal-view-order',
|
||||
variable : response.data
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return false;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Init WCOrdersTable.
|
||||
*/
|
||||
new WCOrdersTable();
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-orders.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-orders.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){if("undefined"==typeof wc_orders_params)return!1;var t=function(){e(document).on("click",".post-type-shop_order .wp-list-table tbody td, .woocommerce_page_wc-orders .wp-list-table.orders tbody td",this.onRowClick).on("click",".order-preview:not(.disabled)",this.onPreview)};t.prototype.onRowClick=function(t){if(e(t.target).filter("a, a *, .no-link, .no-link *, button, button *").length)return!0;if(window.getSelection&&window.getSelection().toString().length)return!0;var r=e(this).closest("tr").find("a.order-view").attr("href");r&&r.length&&(t.preventDefault(),t.metaKey||t.ctrlKey?window.open(r,"_blank"):window.location=r)},t.prototype.onPreview=function(){var t=e(this),r=t.data("orderId");return t.data("order-data")?e(this).WCBackboneModal({template:"wc-modal-view-order",variable:t.data("orderData")}):(t.addClass("disabled"),e.ajax({url:wc_orders_params.ajax_url,data:{order_id:r,action:"woocommerce_get_order_details",security:wc_orders_params.preview_nonce},type:"GET",success:function(r){e(".order-preview").removeClass("disabled"),r.success&&(t.data("orderData",r.data),e(this).WCBackboneModal({template:"wc-modal-view-order",variable:r.data}))}})),!1},new t});
|
||||
@@ -0,0 +1,112 @@
|
||||
/*global ajaxurl, wc_product_export_params */
|
||||
;(function ( $, window ) {
|
||||
/**
|
||||
* productExportForm handles the export process.
|
||||
*/
|
||||
var productExportForm = function( $form ) {
|
||||
this.$form = $form;
|
||||
this.xhr = false;
|
||||
|
||||
// Initial state.
|
||||
this.$form.find('.woocommerce-exporter-progress').val( 0 );
|
||||
|
||||
// Methods.
|
||||
this.processStep = this.processStep.bind( this );
|
||||
|
||||
// Events.
|
||||
$form.on( 'submit', { productExportForm: this }, this.onSubmit );
|
||||
$form.find( '.woocommerce-exporter-types' ).on( 'change', { productExportForm: this }, this.exportTypeFields );
|
||||
};
|
||||
|
||||
/**
|
||||
* Handle export form submission.
|
||||
*/
|
||||
productExportForm.prototype.onSubmit = function( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
var currentDate = new Date(),
|
||||
day = currentDate.getDate(),
|
||||
month = currentDate.getMonth() + 1,
|
||||
year = currentDate.getFullYear(),
|
||||
timestamp = currentDate.getTime(),
|
||||
filename = 'wc-product-export-' + day + '-' + month + '-' + year + '-' + timestamp + '.csv';
|
||||
|
||||
event.data.productExportForm.$form.addClass( 'woocommerce-exporter__exporting' );
|
||||
event.data.productExportForm.$form.find('.woocommerce-exporter-progress').val( 0 );
|
||||
event.data.productExportForm.$form.find('.woocommerce-exporter-button').prop( 'disabled', true );
|
||||
event.data.productExportForm.processStep( 1, $( this ).serialize(), '', filename );
|
||||
};
|
||||
|
||||
/**
|
||||
* Process the current export step.
|
||||
*/
|
||||
productExportForm.prototype.processStep = function( step, data, columns, filename ) {
|
||||
var $this = this,
|
||||
selected_columns = $( '.woocommerce-exporter-columns' ).val(),
|
||||
export_meta = $( '#woocommerce-exporter-meta:checked' ).length ? 1: 0,
|
||||
export_types = $( '.woocommerce-exporter-types' ).val(),
|
||||
export_category = $( '.woocommerce-exporter-category' ).val();
|
||||
|
||||
$.ajax( {
|
||||
type: 'POST',
|
||||
url: ajaxurl,
|
||||
data: {
|
||||
form : data,
|
||||
action : 'woocommerce_do_ajax_product_export',
|
||||
step : step,
|
||||
columns : columns,
|
||||
selected_columns : selected_columns,
|
||||
export_meta : export_meta,
|
||||
export_types : export_types,
|
||||
export_category : export_category,
|
||||
filename : filename,
|
||||
security : wc_product_export_params.export_nonce
|
||||
},
|
||||
dataType: 'json',
|
||||
success: function( response ) {
|
||||
if ( response.success ) {
|
||||
if ( 'done' === response.data.step ) {
|
||||
$this.$form.find('.woocommerce-exporter-progress').val( response.data.percentage );
|
||||
window.location = response.data.url;
|
||||
setTimeout( function() {
|
||||
$this.$form.removeClass( 'woocommerce-exporter__exporting' );
|
||||
$this.$form.find('.woocommerce-exporter-button').prop( 'disabled', false );
|
||||
}, 2000 );
|
||||
} else {
|
||||
$this.$form.find('.woocommerce-exporter-progress').val( response.data.percentage );
|
||||
$this.processStep( parseInt( response.data.step, 10 ), data, response.data.columns, filename );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} ).fail( function( response ) {
|
||||
window.console.log( response );
|
||||
} );
|
||||
};
|
||||
|
||||
/**
|
||||
* Handle fields per export type.
|
||||
*/
|
||||
productExportForm.prototype.exportTypeFields = function() {
|
||||
var exportCategory = $( '.woocommerce-exporter-category' );
|
||||
|
||||
if ( -1 !== $.inArray( 'variation', $( this ).val() ) ) {
|
||||
exportCategory.closest( 'tr' ).hide();
|
||||
exportCategory.val( '' ).trigger( 'change' ); // Reset WooSelect selected value.
|
||||
} else {
|
||||
exportCategory.closest( 'tr' ).show();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to call productExportForm on jquery selector.
|
||||
*/
|
||||
$.fn.wc_product_export_form = function() {
|
||||
new productExportForm( this );
|
||||
return this;
|
||||
};
|
||||
|
||||
$( '.woocommerce-exporter' ).wc_product_export_form();
|
||||
|
||||
})( jQuery, window );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-product-export.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-product-export.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(o,e){var r=function(o){this.$form=o,this.xhr=!1,this.$form.find(".woocommerce-exporter-progress").val(0),this.processStep=this.processStep.bind(this),o.on("submit",{productExportForm:this},this.onSubmit),o.find(".woocommerce-exporter-types").on("change",{productExportForm:this},this.exportTypeFields)};r.prototype.onSubmit=function(e){e.preventDefault();var r=new Date,t="wc-product-export-"+r.getDate()+"-"+(r.getMonth()+1)+"-"+r.getFullYear()+"-"+r.getTime()+".csv";e.data.productExportForm.$form.addClass("woocommerce-exporter__exporting"),e.data.productExportForm.$form.find(".woocommerce-exporter-progress").val(0),e.data.productExportForm.$form.find(".woocommerce-exporter-button").prop("disabled",!0),e.data.productExportForm.processStep(1,o(this).serialize(),"",t)},r.prototype.processStep=function(r,t,c,p){var a=this,s=o(".woocommerce-exporter-columns").val(),m=o("#woocommerce-exporter-meta:checked").length?1:0,n=o(".woocommerce-exporter-types").val(),i=o(".woocommerce-exporter-category").val();o.ajax({type:"POST",url:ajaxurl,data:{form:t,action:"woocommerce_do_ajax_product_export",step:r,columns:c,selected_columns:s,export_meta:m,export_types:n,export_category:i,filename:p,security:wc_product_export_params.export_nonce},dataType:"json",success:function(o){o.success&&("done"===o.data.step?(a.$form.find(".woocommerce-exporter-progress").val(o.data.percentage),e.location=o.data.url,setTimeout(function(){a.$form.removeClass("woocommerce-exporter__exporting"),a.$form.find(".woocommerce-exporter-button").prop("disabled",!1)},2e3)):(a.$form.find(".woocommerce-exporter-progress").val(o.data.percentage),a.processStep(parseInt(o.data.step,10),t,o.data.columns,p)))}}).fail(function(o){e.console.log(o)})},r.prototype.exportTypeFields=function(){var e=o(".woocommerce-exporter-category");-1!==o.inArray("variation",o(this).val())?(e.closest("tr").hide(),e.val("").trigger("change")):e.closest("tr").show()},o.fn.wc_product_export_form=function(){return new r(this),this},o(".woocommerce-exporter").wc_product_export_form()}(jQuery,window);
|
||||
@@ -0,0 +1,99 @@
|
||||
/*global ajaxurl, wc_product_import_params */
|
||||
;(function ( $, window ) {
|
||||
|
||||
/**
|
||||
* productImportForm handles the import process.
|
||||
*/
|
||||
var productImportForm = function( $form ) {
|
||||
this.$form = $form;
|
||||
this.xhr = false;
|
||||
this.mapping = wc_product_import_params.mapping;
|
||||
this.position = 0;
|
||||
this.file = wc_product_import_params.file;
|
||||
this.update_existing = wc_product_import_params.update_existing;
|
||||
this.delimiter = wc_product_import_params.delimiter;
|
||||
this.security = wc_product_import_params.import_nonce;
|
||||
this.character_encoding = wc_product_import_params.character_encoding;
|
||||
|
||||
// Number of import successes/failures.
|
||||
this.imported = 0;
|
||||
this.imported_variations = 0;
|
||||
this.failed = 0;
|
||||
this.updated = 0;
|
||||
this.skipped = 0;
|
||||
|
||||
// Initial state.
|
||||
this.$form.find('.woocommerce-importer-progress').val( 0 );
|
||||
|
||||
this.run_import = this.run_import.bind( this );
|
||||
|
||||
// Start importing.
|
||||
this.run_import();
|
||||
};
|
||||
|
||||
/**
|
||||
* Run the import in batches until finished.
|
||||
*/
|
||||
productImportForm.prototype.run_import = function() {
|
||||
var $this = this;
|
||||
|
||||
$.ajax( {
|
||||
type: 'POST',
|
||||
url: ajaxurl,
|
||||
data: {
|
||||
action : 'woocommerce_do_ajax_product_import',
|
||||
position : $this.position,
|
||||
mapping : $this.mapping,
|
||||
file : $this.file,
|
||||
update_existing : $this.update_existing,
|
||||
delimiter : $this.delimiter,
|
||||
security : $this.security,
|
||||
character_encoding: $this.character_encoding
|
||||
},
|
||||
dataType: 'json',
|
||||
success: function( response ) {
|
||||
if ( response.success ) {
|
||||
$this.position = response.data.position;
|
||||
$this.imported += response.data.imported;
|
||||
$this.imported_variations += response.data.imported_variations;
|
||||
$this.failed += response.data.failed;
|
||||
$this.updated += response.data.updated;
|
||||
$this.skipped += response.data.skipped;
|
||||
$this.$form.find('.woocommerce-importer-progress').val( response.data.percentage );
|
||||
|
||||
if ( 'done' === response.data.position ) {
|
||||
var file_name = wc_product_import_params.file.split( '/' ).pop();
|
||||
window.location = response.data.url +
|
||||
'&products-imported=' +
|
||||
parseInt( $this.imported, 10 ) +
|
||||
'&products-imported-variations=' +
|
||||
parseInt( $this.imported_variations, 10 ) +
|
||||
'&products-failed=' +
|
||||
parseInt( $this.failed, 10 ) +
|
||||
'&products-updated=' +
|
||||
parseInt( $this.updated, 10 ) +
|
||||
'&products-skipped=' +
|
||||
parseInt( $this.skipped, 10 ) +
|
||||
'&file-name=' +
|
||||
file_name;
|
||||
} else {
|
||||
$this.run_import();
|
||||
}
|
||||
}
|
||||
}
|
||||
} ).fail( function( response ) {
|
||||
window.console.log( response );
|
||||
} );
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to call productImportForm on jQuery selector.
|
||||
*/
|
||||
$.fn.wc_product_importer = function() {
|
||||
new productImportForm( this );
|
||||
return this;
|
||||
};
|
||||
|
||||
$( '.woocommerce-importer' ).wc_product_importer();
|
||||
|
||||
})( jQuery, window );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-product-import.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-product-import.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(i,t){var r=function(i){this.$form=i,this.xhr=!1,this.mapping=wc_product_import_params.mapping,this.position=0,this.file=wc_product_import_params.file,this.update_existing=wc_product_import_params.update_existing,this.delimiter=wc_product_import_params.delimiter,this.security=wc_product_import_params.import_nonce,this.character_encoding=wc_product_import_params.character_encoding,this.imported=0,this.imported_variations=0,this.failed=0,this.updated=0,this.skipped=0,this.$form.find(".woocommerce-importer-progress").val(0),this.run_import=this.run_import.bind(this),this.run_import()};r.prototype.run_import=function(){var r=this;i.ajax({type:"POST",url:ajaxurl,data:{action:"woocommerce_do_ajax_product_import",position:r.position,mapping:r.mapping,file:r.file,update_existing:r.update_existing,delimiter:r.delimiter,security:r.security,character_encoding:r.character_encoding},dataType:"json",success:function(i){if(i.success)if(r.position=i.data.position,r.imported+=i.data.imported,r.imported_variations+=i.data.imported_variations,r.failed+=i.data.failed,r.updated+=i.data.updated,r.skipped+=i.data.skipped,r.$form.find(".woocommerce-importer-progress").val(i.data.percentage),"done"===i.data.position){var o=wc_product_import_params.file.split("/").pop();t.location=i.data.url+"&products-imported="+parseInt(r.imported,10)+"&products-imported-variations="+parseInt(r.imported_variations,10)+"&products-failed="+parseInt(r.failed,10)+"&products-updated="+parseInt(r.updated,10)+"&products-skipped="+parseInt(r.skipped,10)+"&file-name="+o}else r.run_import()}}).fail(function(i){t.console.log(i)})},i.fn.wc_product_importer=function(){return new r(this),this},i(".woocommerce-importer").wc_product_importer()}(jQuery,window);
|
||||
322
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-setup.js
Normal file
322
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-setup.js
Normal file
@@ -0,0 +1,322 @@
|
||||
/*global wc_setup_params */
|
||||
/*global wc_setup_currencies */
|
||||
/*global wc_base_state */
|
||||
/* @deprecated 4.6.0 */
|
||||
jQuery( function( $ ) {
|
||||
function blockWizardUI() {
|
||||
$('.wc-setup-content').block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$( '.button-next' ).on( 'click', function() {
|
||||
var form = $( this ).parents( 'form' ).get( 0 );
|
||||
|
||||
if ( ( 'function' !== typeof form.checkValidity ) || form.checkValidity() ) {
|
||||
blockWizardUI();
|
||||
}
|
||||
|
||||
return true;
|
||||
} );
|
||||
|
||||
$( 'form.address-step' ).on( 'submit', function( e ) {
|
||||
var form = $( this );
|
||||
if ( ( 'function' !== typeof form.checkValidity ) || form.checkValidity() ) {
|
||||
blockWizardUI();
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
$('.wc-setup-content').unblock();
|
||||
|
||||
$( this ).WCBackboneModal( {
|
||||
template: 'wc-modal-tracking-setup'
|
||||
} );
|
||||
|
||||
$( document.body ).on( 'wc_backbone_modal_response', function() {
|
||||
form.off( 'submit' ).trigger( 'submit' );
|
||||
} );
|
||||
|
||||
$( '#wc_tracker_checkbox_dialog' ).on( 'change', function( e ) {
|
||||
var eventTarget = $( e.target );
|
||||
$( '#wc_tracker_checkbox' ).prop( 'checked', eventTarget.prop( 'checked' ) );
|
||||
} );
|
||||
|
||||
$( '#wc_tracker_submit' ).on( 'click', function () {
|
||||
form.off( 'submit' ).trigger( 'submit' );
|
||||
} );
|
||||
|
||||
return true;
|
||||
} );
|
||||
|
||||
$( '#store_country' ).on( 'change', function() {
|
||||
// Prevent if we don't have the metabox data
|
||||
if ( wc_setup_params.states === null ){
|
||||
return;
|
||||
}
|
||||
|
||||
var $this = $( this ),
|
||||
country = $this.val(),
|
||||
$state_select = $( '#store_state' );
|
||||
|
||||
if ( ! $.isEmptyObject( wc_setup_params.states[ country ] ) ) {
|
||||
var states = wc_setup_params.states[ country ];
|
||||
|
||||
$state_select.empty();
|
||||
|
||||
$.each( states, function( index ) {
|
||||
$state_select.append( $( '<option value="' + index + '">' + states[ index ] + '</option>' ) );
|
||||
} );
|
||||
|
||||
$( '.store-state-container' ).show();
|
||||
$state_select.selectWoo().val( wc_base_state ).trigger( 'change' ).prop( 'required', true );
|
||||
} else {
|
||||
$( '.store-state-container' ).hide();
|
||||
$state_select.empty().val( '' ).trigger( 'change' ).prop( 'required', false );
|
||||
}
|
||||
|
||||
$( '#currency_code' ).val( wc_setup_currencies[ country ] ).trigger( 'change' );
|
||||
} );
|
||||
|
||||
/* Setup postcode field and validations */
|
||||
$( '#store_country' ).on( 'change', function() {
|
||||
if ( ! wc_setup_params.postcodes ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $this = $( this ),
|
||||
country = $this.val(),
|
||||
$store_postcode_input = $( '#store_postcode' ),
|
||||
country_postcode_obj = wc_setup_params.postcodes[ country ];
|
||||
|
||||
// Default to required, if its unknown whether postcode is required or not.
|
||||
if ( $.isEmptyObject( country_postcode_obj ) || country_postcode_obj.required ) {
|
||||
$store_postcode_input.attr( 'required', 'true' );
|
||||
} else {
|
||||
$store_postcode_input.prop( 'required', false );
|
||||
}
|
||||
} );
|
||||
|
||||
$( '#store_country' ).trigger( 'change' );
|
||||
|
||||
$( '.wc-wizard-services' ).on( 'change', '.wc-wizard-service-enable input', function() {
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
$( this ).closest( '.wc-wizard-service-toggle' ).removeClass( 'disabled' );
|
||||
$( this ).closest( '.wc-wizard-service-item' ).addClass( 'checked' );
|
||||
$( this ).closest( '.wc-wizard-service-item' )
|
||||
.find( '.wc-wizard-service-settings' ).removeClass( 'hide' );
|
||||
} else {
|
||||
$( this ).closest( '.wc-wizard-service-toggle' ).addClass( 'disabled' );
|
||||
$( this ).closest( '.wc-wizard-service-item' ).removeClass( 'checked' );
|
||||
$( this ).closest( '.wc-wizard-service-item' )
|
||||
.find( '.wc-wizard-service-settings' ).addClass( 'hide' );
|
||||
}
|
||||
} );
|
||||
|
||||
$( '.wc-wizard-services' ).on( 'keyup', function( e ) {
|
||||
var code = e.keyCode || e.which,
|
||||
$focused = $( document.activeElement );
|
||||
|
||||
if ( $focused.is( '.wc-wizard-service-toggle, .wc-wizard-service-enable' ) && ( 13 === code || 32 === code ) ) {
|
||||
$focused.find( ':input' ).trigger( 'click' );
|
||||
}
|
||||
} );
|
||||
|
||||
$( '.wc-wizard-services' ).on( 'click', '.wc-wizard-service-enable', function( e ) {
|
||||
var eventTarget = $( e.target );
|
||||
|
||||
if ( eventTarget.is( 'input' ) ) {
|
||||
e.stopPropagation();
|
||||
return;
|
||||
}
|
||||
|
||||
var $checkbox = $( this ).find( 'input[type="checkbox"]' );
|
||||
|
||||
$checkbox.prop( 'checked', ! $checkbox.prop( 'checked' ) ).trigger( 'change' );
|
||||
} );
|
||||
|
||||
$( '.wc-wizard-services-list-toggle' ).on( 'click', function() {
|
||||
var listToggle = $( this ).closest( '.wc-wizard-services-list-toggle' );
|
||||
|
||||
if ( listToggle.hasClass( 'closed' ) ) {
|
||||
listToggle.removeClass( 'closed' );
|
||||
} else {
|
||||
listToggle.addClass( 'closed' );
|
||||
}
|
||||
|
||||
$( this ).closest( '.wc-wizard-services' ).find( '.wc-wizard-service-item' )
|
||||
.slideToggle()
|
||||
.css( 'display', 'flex' );
|
||||
} );
|
||||
|
||||
$( '.wc-wizard-services' ).on( 'change', '.wc-wizard-shipping-method-select .method', function( e ) {
|
||||
var zone = $( this ).closest( '.wc-wizard-service-description' );
|
||||
var selectedMethod = e.target.value;
|
||||
|
||||
var description = zone.find( '.shipping-method-descriptions' );
|
||||
description.find( '.shipping-method-description' ).addClass( 'hide' );
|
||||
description.find( '.' + selectedMethod ).removeClass( 'hide' );
|
||||
|
||||
var $checkbox = zone.parent().find( 'input[type="checkbox"]' );
|
||||
var settings = zone.find( '.shipping-method-settings' );
|
||||
settings
|
||||
.find( '.shipping-method-setting' )
|
||||
.addClass( 'hide' )
|
||||
.find( '.shipping-method-required-field' )
|
||||
.prop( 'required', false );
|
||||
settings
|
||||
.find( '.' + selectedMethod )
|
||||
.removeClass( 'hide' )
|
||||
.find( '.shipping-method-required-field' )
|
||||
.prop( 'required', $checkbox.prop( 'checked' ) );
|
||||
} ).find( '.wc-wizard-shipping-method-select .method' ).trigger( 'change' );
|
||||
|
||||
$( '.wc-wizard-services' ).on( 'change', '.wc-wizard-shipping-method-enable', function() {
|
||||
var checked = $( this ).is( ':checked' );
|
||||
var selectedMethod = $( this )
|
||||
.closest( '.wc-wizard-service-item' )
|
||||
.find( '.wc-wizard-shipping-method-select .method' )
|
||||
.val();
|
||||
|
||||
$( this )
|
||||
.closest( '.wc-wizard-service-item' )
|
||||
.find( '.' + selectedMethod )
|
||||
.find( '.shipping-method-required-field' )
|
||||
.prop( 'required', checked );
|
||||
} );
|
||||
|
||||
function submitActivateForm() {
|
||||
$( 'form.activate-jetpack' ).trigger( 'submit' );
|
||||
}
|
||||
|
||||
function waitForJetpackInstall() {
|
||||
wp.ajax.post( 'setup_wizard_check_jetpack' )
|
||||
.then( function( result ) {
|
||||
// If we receive success, or an unexpected result
|
||||
// let the form submit.
|
||||
if (
|
||||
! result ||
|
||||
! result.is_active ||
|
||||
'yes' === result.is_active
|
||||
) {
|
||||
return submitActivateForm();
|
||||
}
|
||||
|
||||
// Wait until checking the status again
|
||||
setTimeout( waitForJetpackInstall, 3000 );
|
||||
} )
|
||||
.fail( function() {
|
||||
// Submit the form as normal if the request fails
|
||||
submitActivateForm();
|
||||
} );
|
||||
}
|
||||
|
||||
// Wait for a pending Jetpack install to finish before triggering a "save"
|
||||
// on the activate step, which launches the Jetpack connection flow.
|
||||
$( '.activate-jetpack' ).on( 'click', '.button-primary', function( e ) {
|
||||
blockWizardUI();
|
||||
|
||||
if ( 'no' === wc_setup_params.pending_jetpack_install ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
waitForJetpackInstall();
|
||||
} );
|
||||
|
||||
$( '.activate-new-onboarding' ).on( 'click', '.button-primary', function() {
|
||||
// Show pending spinner while activate happens.
|
||||
blockWizardUI();
|
||||
} );
|
||||
|
||||
$( '.wc-wizard-services' ).on( 'change', 'input#stripe_create_account, input#ppec_paypal_reroute_requests', function() {
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
$( this ).closest( '.wc-wizard-service-settings' )
|
||||
.find( 'input.payment-email-input' )
|
||||
.attr( 'type', 'email' )
|
||||
.prop( 'disabled', false )
|
||||
.prop( 'required', true );
|
||||
} else {
|
||||
$( this ).closest( '.wc-wizard-service-settings' )
|
||||
.find( 'input.payment-email-input' )
|
||||
.attr( 'type', null )
|
||||
.prop( 'disabled', true )
|
||||
.prop( 'required', false );
|
||||
}
|
||||
} ).find( 'input#stripe_create_account, input#ppec_paypal_reroute_requests' ).trigger( 'change' );
|
||||
|
||||
function addPlugins( bySlug, $el, hover ) {
|
||||
var plugins = $el.data( 'plugins' );
|
||||
for ( var i in Array.isArray( plugins ) ? plugins : [] ) {
|
||||
var slug = plugins[ i ].slug;
|
||||
bySlug[ slug ] = bySlug[ slug ] ||
|
||||
$( '<span class="plugin-install-info-list-item">' )
|
||||
.append( '<a href="https://wordpress.org/plugins/' + slug + '/" target="_blank">' + plugins[ i ].name + '</a>' );
|
||||
|
||||
bySlug[ slug ].find( 'a' )
|
||||
.on( 'mouseenter mouseleave', ( function( $hover, event ) {
|
||||
$hover.toggleClass( 'plugin-install-source', 'mouseenter' === event.type );
|
||||
} ).bind( null, hover ? $el.closest( hover ) : $el ) );
|
||||
}
|
||||
}
|
||||
|
||||
function updatePluginInfo() {
|
||||
var pluginLinkBySlug = {};
|
||||
var extraPlugins = [];
|
||||
|
||||
$( '.wc-wizard-service-enable input:checked' ).each( function() {
|
||||
addPlugins( pluginLinkBySlug, $( this ), '.wc-wizard-service-item' );
|
||||
|
||||
var $container = $( this ).closest( '.wc-wizard-service-item' );
|
||||
$container.find( 'input.payment-checkbox-input:checked' ).each( function() {
|
||||
extraPlugins.push( $( this ).attr( 'id' ) );
|
||||
addPlugins( pluginLinkBySlug, $( this ), '.wc-wizard-service-settings' );
|
||||
} );
|
||||
$container.find( '.wc-wizard-shipping-method-select .method' ).each( function() {
|
||||
var $this = $( this );
|
||||
if ( 'live_rates' === $this.val() ) {
|
||||
addPlugins( pluginLinkBySlug, $this, '.wc-wizard-service-item' );
|
||||
}
|
||||
} );
|
||||
} );
|
||||
|
||||
$( '.recommended-item input:checked' ).each( function() {
|
||||
addPlugins( pluginLinkBySlug, $( this ), '.recommended-item' );
|
||||
} );
|
||||
|
||||
var $list = $( 'span.plugin-install-info-list' ).empty();
|
||||
|
||||
for ( var slug in pluginLinkBySlug ) {
|
||||
$list.append( pluginLinkBySlug[ slug ] );
|
||||
}
|
||||
|
||||
if (
|
||||
extraPlugins &&
|
||||
wc_setup_params.current_step &&
|
||||
wc_setup_params.i18n.extra_plugins[ wc_setup_params.current_step ] &&
|
||||
wc_setup_params.i18n.extra_plugins[ wc_setup_params.current_step ][ extraPlugins.join( ',' ) ]
|
||||
) {
|
||||
$list.append(
|
||||
wc_setup_params.i18n.extra_plugins[ wc_setup_params.current_step ][ extraPlugins.join( ',' ) ]
|
||||
);
|
||||
}
|
||||
|
||||
$( 'span.plugin-install-info' ).toggle( $list.children().length > 0 );
|
||||
}
|
||||
|
||||
updatePluginInfo();
|
||||
$( '.wc-setup-content' ).on( 'change', '[data-plugins]', updatePluginInfo );
|
||||
|
||||
$( document.body ).on( 'init_tooltips', function() {
|
||||
$( '.help_tip' ).tipTip( {
|
||||
'attribute': 'data-tip',
|
||||
'fadeIn': 50,
|
||||
'fadeOut': 50,
|
||||
'delay': 200,
|
||||
'defaultPosition': 'top'
|
||||
} );
|
||||
} ).trigger( 'init_tooltips' );
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-setup.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-setup.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,211 @@
|
||||
/* global shippingClassesLocalizeScript, ajaxurl */
|
||||
( function( $, data, wp, ajaxurl ) {
|
||||
$( function() {
|
||||
var $tbody = $( '.wc-shipping-class-rows' ),
|
||||
$save_button = $( '.wc-shipping-class-save' ),
|
||||
$row_template = wp.template( 'wc-shipping-class-row' ),
|
||||
$blank_template = wp.template( 'wc-shipping-class-row-blank' ),
|
||||
|
||||
// Backbone model
|
||||
ShippingClass = Backbone.Model.extend({
|
||||
save: function( changes ) {
|
||||
$.post( ajaxurl + ( ajaxurl.indexOf( '?' ) > 0 ? '&' : '?' ) + 'action=woocommerce_shipping_classes_save_changes', {
|
||||
wc_shipping_classes_nonce : data.wc_shipping_classes_nonce,
|
||||
changes,
|
||||
}, this.onSaveResponse, 'json' );
|
||||
},
|
||||
onSaveResponse: function( response, textStatus ) {
|
||||
if ( 'success' === textStatus ) {
|
||||
if ( response.success ) {
|
||||
shippingClass.set( 'classes', response.data.shipping_classes );
|
||||
shippingClass.trigger( 'saved:classes' );
|
||||
} else if ( response.data ) {
|
||||
window.alert( response.data );
|
||||
} else {
|
||||
window.alert( data.strings.save_failed );
|
||||
}
|
||||
}
|
||||
shippingClassView.unblock();
|
||||
}
|
||||
} ),
|
||||
|
||||
// Backbone view
|
||||
ShippingClassView = Backbone.View.extend({
|
||||
rowTemplate: $row_template,
|
||||
initialize: function() {
|
||||
this.listenTo( this.model, 'saved:classes', this.render );
|
||||
$( document.body ).on( 'click', '.wc-shipping-class-add-new', { view: this }, this.configureNewShippingClass );
|
||||
$( document.body ).on( 'wc_backbone_modal_response', { view: this }, this.onConfigureShippingClassSubmitted );
|
||||
$( document.body ).on( 'wc_backbone_modal_loaded', { view: this }, this.onLoadBackboneModal );
|
||||
$( document.body ).on( 'wc_backbone_modal_validation', this.validateFormArguments );
|
||||
},
|
||||
block: function() {
|
||||
$( this.el ).block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
},
|
||||
unblock: function() {
|
||||
$( this.el ).unblock();
|
||||
},
|
||||
render: function() {
|
||||
var classes = _.indexBy( this.model.get( 'classes' ), 'term_id' ),
|
||||
view = this;
|
||||
|
||||
this.$el.empty();
|
||||
this.unblock();
|
||||
|
||||
if ( _.size( classes ) ) {
|
||||
// Sort classes
|
||||
classes = _.sortBy( classes, function( shipping_class ) {
|
||||
return shipping_class.name;
|
||||
} );
|
||||
|
||||
// Populate $tbody with the current classes
|
||||
$.each( classes, function( id, rowData ) {
|
||||
view.renderRow( rowData );
|
||||
} );
|
||||
} else {
|
||||
view.$el.append( $blank_template );
|
||||
}
|
||||
},
|
||||
renderRow: function( rowData ) {
|
||||
var view = this;
|
||||
view.$el.append( view.rowTemplate( rowData ) );
|
||||
view.initRow( rowData );
|
||||
},
|
||||
initRow: function( rowData ) {
|
||||
var view = this;
|
||||
var $tr = view.$el.find( 'tr[data-id="' + rowData.term_id + '"]');
|
||||
|
||||
// Support select boxes
|
||||
$tr.find( 'select' ).each( function() {
|
||||
var attribute = $( this ).data( 'attribute' );
|
||||
$( this ).find( 'option[value="' + rowData[ attribute ] + '"]' ).prop( 'selected', true );
|
||||
} );
|
||||
|
||||
// Make the rows function
|
||||
$tr.find( '.view' ).show();
|
||||
$tr.find( '.edit' ).hide();
|
||||
$tr.find( '.wc-shipping-class-edit' ).on( 'click', { view: this }, this.onEditRow );
|
||||
$tr.find( '.wc-shipping-class-delete' ).on( 'click', { view: this }, this.onDeleteRow );
|
||||
},
|
||||
configureNewShippingClass: function( event ) {
|
||||
event.preventDefault();
|
||||
const term_id = 'new-1-' + Date.now();
|
||||
|
||||
$( this ).WCBackboneModal({
|
||||
template : 'wc-shipping-class-configure',
|
||||
variable : {
|
||||
term_id,
|
||||
action: 'create',
|
||||
},
|
||||
data : {
|
||||
term_id,
|
||||
action: 'create',
|
||||
}
|
||||
});
|
||||
},
|
||||
onConfigureShippingClassSubmitted: function( event, target, posted_data ) {
|
||||
if ( target === 'wc-shipping-class-configure' ) {
|
||||
const view = event.data.view;
|
||||
const model = view.model;
|
||||
const isNewRow = posted_data.term_id.includes( 'new-1-' );
|
||||
const rowData = {
|
||||
...posted_data,
|
||||
};
|
||||
|
||||
if ( isNewRow ) {
|
||||
rowData.newRow = true;
|
||||
}
|
||||
|
||||
view.block();
|
||||
|
||||
model.save( {
|
||||
[ posted_data.term_id ]: rowData
|
||||
} );
|
||||
}
|
||||
},
|
||||
validateFormArguments: function( element, target, data ) {
|
||||
const requiredFields = [ 'name', 'description' ];
|
||||
const formIsComplete = Object.keys( data ).every( key => {
|
||||
if ( ! requiredFields.includes( key ) ) {
|
||||
return true;
|
||||
}
|
||||
if ( Array.isArray( data[ key ] ) ) {
|
||||
return data[ key ].length && !!data[ key ][ 0 ];
|
||||
}
|
||||
return !!data[ key ];
|
||||
} );
|
||||
const createButton = document.getElementById( 'btn-ok' );
|
||||
createButton.disabled = ! formIsComplete;
|
||||
createButton.classList.toggle( 'disabled', ! formIsComplete );
|
||||
},
|
||||
onEditRow: function( event ) {
|
||||
const term_id = $( this ).closest('tr').data('id');
|
||||
const model = event.data.view.model;
|
||||
const classes = _.indexBy( model.get( 'classes' ), 'term_id' );
|
||||
const rowData = classes[ term_id ];
|
||||
|
||||
event.preventDefault();
|
||||
$( this ).WCBackboneModal({
|
||||
template : 'wc-shipping-class-configure',
|
||||
variable : {
|
||||
action: 'edit',
|
||||
...rowData
|
||||
},
|
||||
data : {
|
||||
action: 'edit',
|
||||
...rowData
|
||||
}
|
||||
});
|
||||
},
|
||||
onLoadBackboneModal: function( event, target ) {
|
||||
if ( 'wc-shipping-class-configure' === target ) {
|
||||
const modalContent = $('.wc-backbone-modal-content');
|
||||
const term_id = modalContent.data('id');
|
||||
const model = event.data.view.model;
|
||||
const classes = _.indexBy( model.get( 'classes' ), 'term_id' );
|
||||
const rowData = classes[ term_id ];
|
||||
|
||||
if ( rowData ) {
|
||||
// Support select boxes
|
||||
$('.wc-backbone-modal-content').find( 'select' ).each( function() {
|
||||
var attribute = $( this ).data( 'attribute' );
|
||||
$( this ).find( 'option[value="' + rowData[ attribute ] + '"]' ).prop( 'selected', true );
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
onDeleteRow: function( event ) {
|
||||
var view = event.data.view,
|
||||
model = view.model,
|
||||
term_id = $( this ).closest('tr').data('id');
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
view.block();
|
||||
|
||||
model.save( {
|
||||
[ term_id ]: {
|
||||
term_id,
|
||||
deleted: 'deleted',
|
||||
}
|
||||
} );
|
||||
},
|
||||
} ),
|
||||
shippingClass = new ShippingClass({
|
||||
classes: data.classes
|
||||
} ),
|
||||
shippingClassView = new ShippingClassView({
|
||||
model: shippingClass,
|
||||
el: $tbody
|
||||
} );
|
||||
|
||||
shippingClassView.render();
|
||||
});
|
||||
})( jQuery, shippingClassesLocalizeScript, wp, ajaxurl );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-shipping-classes.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-shipping-classes.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(e,i,n,t){e(function(){var s=e(".wc-shipping-class-rows"),a=(e(".wc-shipping-class-save"),n.template("wc-shipping-class-row")),o=n.template("wc-shipping-class-row-blank"),c=Backbone.Model.extend({save:function(n){e.post(t+(t.indexOf("?")>0?"&":"?")+"action=woocommerce_shipping_classes_save_changes",{wc_shipping_classes_nonce:i.wc_shipping_classes_nonce,changes:n},this.onSaveResponse,"json")},onSaveResponse:function(e,n){"success"===n&&(e.success?(l.set("classes",e.data.shipping_classes),l.trigger("saved:classes")):e.data?window.alert(e.data):window.alert(i.strings.save_failed)),r.unblock()}}),d=Backbone.View.extend({rowTemplate:a,initialize:function(){this.listenTo(this.model,"saved:classes",this.render),e(document.body).on("click",".wc-shipping-class-add-new",{view:this},this.configureNewShippingClass),e(document.body).on("wc_backbone_modal_response",{view:this},this.onConfigureShippingClassSubmitted),e(document.body).on("wc_backbone_modal_loaded",{view:this},this.onLoadBackboneModal),e(document.body).on("wc_backbone_modal_validation",this.validateFormArguments)},block:function(){e(this.el).block({message:null,overlayCSS:{background:"#fff",opacity:.6}})},unblock:function(){e(this.el).unblock()},render:function(){var i=_.indexBy(this.model.get("classes"),"term_id"),n=this;this.$el.empty(),this.unblock(),_.size(i)?(i=_.sortBy(i,function(e){return e.name}),e.each(i,function(e,i){n.renderRow(i)})):n.$el.append(o)},renderRow:function(e){this.$el.append(this.rowTemplate(e)),this.initRow(e)},initRow:function(i){var n=this.$el.find('tr[data-id="'+i.term_id+'"]');n.find("select").each(function(){var n=e(this).data("attribute");e(this).find('option[value="'+i[n]+'"]').prop("selected",!0)}),n.find(".view").show(),n.find(".edit").hide(),n.find(".wc-shipping-class-edit").on("click",{view:this},this.onEditRow),n.find(".wc-shipping-class-delete").on("click",{view:this},this.onDeleteRow)},configureNewShippingClass:function(i){i.preventDefault();const n="new-1-"+Date.now();e(this).WCBackboneModal({template:"wc-shipping-class-configure",variable:{term_id:n,action:"create"},data:{term_id:n,action:"create"}})},onConfigureShippingClassSubmitted:function(e,i,n){if("wc-shipping-class-configure"===i){const i=e.data.view,t=i.model,s=n.term_id.includes("new-1-"),a={...n};s&&(a.newRow=!0),i.block(),t.save({[n.term_id]:a})}},validateFormArguments:function(e,i,n){const t=["name","description"],s=Object.keys(n).every(e=>!t.includes(e)||(Array.isArray(n[e])?n[e].length&&!!n[e][0]:!!n[e])),a=document.getElementById("btn-ok");a.disabled=!s,a.classList.toggle("disabled",!s)},onEditRow:function(i){const n=e(this).closest("tr").data("id"),t=i.data.view.model,s=_.indexBy(t.get("classes"),"term_id")[n];i.preventDefault(),e(this).WCBackboneModal({template:"wc-shipping-class-configure",variable:{action:"edit",...s},data:{action:"edit",...s}})},onLoadBackboneModal:function(i,n){if("wc-shipping-class-configure"===n){const n=e(".wc-backbone-modal-content").data("id"),t=i.data.view.model,s=_.indexBy(t.get("classes"),"term_id")[n];s&&e(".wc-backbone-modal-content").find("select").each(function(){var i=e(this).data("attribute");e(this).find('option[value="'+s[i]+'"]').prop("selected",!0)})}},onDeleteRow:function(i){var n=i.data.view,t=n.model,s=e(this).closest("tr").data("id");i.preventDefault(),n.block(),t.save({[s]:{term_id:s,deleted:"deleted"}})}}),l=new c({classes:i.classes}),r=new d({model:l,el:s});r.render()})}(jQuery,shippingClassesLocalizeScript,wp,ajaxurl);
|
||||
@@ -0,0 +1,733 @@
|
||||
/* global shippingZoneMethodsLocalizeScript, ajaxurl */
|
||||
( function( $, data, wp, ajaxurl ) {
|
||||
$( function() {
|
||||
var $table = $( '.wc-shipping-zone-methods' ),
|
||||
$tbody = $( '.wc-shipping-zone-method-rows' ),
|
||||
$save_button = $( '.wc-shipping-zone-method-save' ),
|
||||
$row_template = wp.template( 'wc-shipping-zone-method-row' ),
|
||||
$blank_template = wp.template( 'wc-shipping-zone-method-row-blank' ),
|
||||
|
||||
// Backbone model
|
||||
ShippingMethod = Backbone.Model.extend({
|
||||
changes: {},
|
||||
logChanges: function( changedRows ) {
|
||||
var changes = this.changes || {};
|
||||
|
||||
_.each( changedRows.methods, function( row, id ) {
|
||||
changes.methods = changes.methods || { methods : {} };
|
||||
changes.methods[ id ] = _.extend( changes.methods[ id ] || { instance_id : id }, row );
|
||||
} );
|
||||
|
||||
if ( typeof changedRows.zone_name !== 'undefined' ) {
|
||||
changes.zone_name = changedRows.zone_name;
|
||||
}
|
||||
|
||||
if ( typeof changedRows.zone_locations !== 'undefined' ) {
|
||||
changes.zone_locations = changedRows.zone_locations;
|
||||
}
|
||||
|
||||
if ( typeof changedRows.zone_postcodes !== 'undefined' ) {
|
||||
changes.zone_postcodes = changedRows.zone_postcodes;
|
||||
}
|
||||
|
||||
this.changes = changes;
|
||||
this.trigger( 'change:methods' );
|
||||
},
|
||||
save: function() {
|
||||
// Special handling for an empty 'zone_locations' array, which jQuery filters out during $.post().
|
||||
var changes = _.clone( this.changes );
|
||||
if ( _.has( changes, 'zone_locations' ) && _.isEmpty( changes.zone_locations ) ) {
|
||||
changes.zone_locations = [''];
|
||||
}
|
||||
|
||||
$.post(
|
||||
ajaxurl + ( ajaxurl.indexOf( '?' ) > 0 ? '&' : '?' ) + 'action=woocommerce_shipping_zone_methods_save_changes',
|
||||
{
|
||||
wc_shipping_zones_nonce : data.wc_shipping_zones_nonce,
|
||||
changes : changes,
|
||||
zone_id : data.zone_id
|
||||
},
|
||||
this.onSaveResponse,
|
||||
'json'
|
||||
);
|
||||
},
|
||||
onSaveResponse: function( response, textStatus ) {
|
||||
if ( 'success' === textStatus ) {
|
||||
if ( response.success ) {
|
||||
if ( response.data.zone_id !== data.zone_id ) {
|
||||
data.zone_id = response.data.zone_id;
|
||||
if ( window.history.pushState ) {
|
||||
window.history.pushState(
|
||||
{},
|
||||
'',
|
||||
'admin.php?page=wc-settings&tab=shipping&zone_id=' + response.data.zone_id
|
||||
);
|
||||
}
|
||||
}
|
||||
shippingMethod.set( 'methods', response.data.methods );
|
||||
shippingMethod.trigger( 'change:methods' );
|
||||
shippingMethod.changes = {};
|
||||
shippingMethod.trigger( 'saved:methods' );
|
||||
|
||||
// Overrides the onbeforeunload callback added by settings.js.
|
||||
window.onbeforeunload = null;
|
||||
} else {
|
||||
window.alert( data.strings.save_failed );
|
||||
}
|
||||
}
|
||||
}
|
||||
} ),
|
||||
|
||||
// Backbone view
|
||||
ShippingMethodView = Backbone.View.extend({
|
||||
rowTemplate: $row_template,
|
||||
initialize: function() {
|
||||
this.listenTo( this.model, 'change:methods', this.setUnloadConfirmation );
|
||||
this.listenTo( this.model, 'saved:methods', this.clearUnloadConfirmation );
|
||||
this.listenTo( this.model, 'saved:methods', this.render );
|
||||
this.listenTo( this.model, 'rerender', this.render );
|
||||
$tbody.on( 'change', { view: this }, this.updateModelOnChange );
|
||||
$tbody.on( 'sortupdate', { view: this }, this.updateModelOnSort );
|
||||
$( window ).on( 'beforeunload', { view: this }, this.unloadConfirmation );
|
||||
$save_button.on( 'click', { view: this }, this.onSubmit );
|
||||
|
||||
$( document.body ).on(
|
||||
'input change',
|
||||
'#zone_name, #zone_locations, #zone_postcodes',
|
||||
{ view: this },
|
||||
this.onUpdateZone
|
||||
);
|
||||
$( document.body ).on( 'click', '.wc-shipping-zone-method-settings', { view: this }, this.onConfigureShippingMethod );
|
||||
$( document.body ).on( 'click', '.wc-shipping-zone-add-method', { view: this }, this.onAddShippingMethod );
|
||||
$( document.body ).on( 'wc_backbone_modal_response', this.onConfigureShippingMethodSubmitted );
|
||||
$( document.body ).on( 'wc_region_picker_update', this.onUpdateZoneRegionPicker );
|
||||
$( document.body ).on( 'wc_backbone_modal_next_response', this.onAddShippingMethodSubmitted );
|
||||
$( document.body ).on( 'wc_backbone_modal_before_remove', this.onCloseConfigureShippingMethod );
|
||||
$( document.body ).on( 'wc_backbone_modal_back_response', this.onConfigureShippingMethodBack );
|
||||
$( document.body ).on( 'change', '.wc-shipping-zone-method-selector select', this.onChangeShippingMethodSelector );
|
||||
$( document.body ).on( 'click', '.wc-shipping-zone-postcodes-toggle', this.onTogglePostcodes );
|
||||
$( document.body ).on( 'wc_backbone_modal_validation', { view: this }, this.validateFormArguments );
|
||||
$( document.body ).on( 'wc_backbone_modal_loaded', { view: this }, this.onModalLoaded );
|
||||
},
|
||||
onUpdateZoneRegionPicker: function( event ) {
|
||||
var value = event.detail,
|
||||
attribute = 'zone_locations',
|
||||
changes = {};
|
||||
|
||||
changes[ attribute ] = value;
|
||||
shippingMethodView.model.set( attribute, value );
|
||||
shippingMethodView.model.logChanges( changes );
|
||||
},
|
||||
onUpdateZone: function( event ) {
|
||||
var view = event.data.view,
|
||||
model = view.model,
|
||||
value = $( this ).val(),
|
||||
$target = $( event.target ),
|
||||
attribute = $target.data( 'attribute' ),
|
||||
changes = {};
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
changes[ attribute ] = value;
|
||||
model.set( attribute, value );
|
||||
model.logChanges( changes );
|
||||
view.render();
|
||||
},
|
||||
block: function() {
|
||||
$( this.el ).block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
},
|
||||
unblock: function() {
|
||||
$( this.el ).unblock();
|
||||
},
|
||||
render: function() {
|
||||
var methods = _.indexBy( this.model.get( 'methods' ), 'instance_id' ),
|
||||
zone_name = this.model.get( 'zone_name' ),
|
||||
view = this;
|
||||
|
||||
// Set name.
|
||||
$('.wc-shipping-zone-name').text( zone_name ? zone_name : data.strings.default_zone_name );
|
||||
|
||||
// Blank out the contents.
|
||||
this.$el.empty();
|
||||
this.unblock();
|
||||
|
||||
if ( _.size( methods ) ) {
|
||||
// Sort methods
|
||||
methods = _.sortBy( methods, function( method ) {
|
||||
return parseInt( method.method_order, 10 );
|
||||
} );
|
||||
|
||||
// Populate $tbody with the current methods
|
||||
$.each( methods, function( id, rowData ) {
|
||||
if ( 'yes' === rowData.enabled ) {
|
||||
rowData.enabled_icon = '<span class="woocommerce-input-toggle woocommerce-input-toggle--enabled">' +
|
||||
data.strings.yes +
|
||||
'</span>';
|
||||
} else {
|
||||
rowData.enabled_icon = '<span class="woocommerce-input-toggle woocommerce-input-toggle--disabled">' +
|
||||
data.strings.no +
|
||||
'</span>';
|
||||
}
|
||||
|
||||
view.$el.append( view.rowTemplate( rowData ) );
|
||||
|
||||
var $tr = view.$el.find( 'tr[data-id="' + rowData.instance_id + '"]');
|
||||
|
||||
if ( ! rowData.has_settings ) {
|
||||
$tr
|
||||
.find( '.wc-shipping-zone-method-title > a' )
|
||||
.replaceWith('<span>' + $tr.find( '.wc-shipping-zone-method-title > a' ).text() + '</span>' );
|
||||
var $del = $tr.find( '.wc-shipping-zone-method-delete' );
|
||||
$tr.find( '.wc-shipping-zone-method-title .row-actions' ).empty().html($del);
|
||||
}
|
||||
} );
|
||||
|
||||
// Make the rows function
|
||||
this.$el.find( '.wc-shipping-zone-method-delete' ).on( 'click', { view: this }, this.onDeleteRow );
|
||||
this.$el.find( '.wc-shipping-zone-method-enabled a').on( 'click', { view: this }, this.onToggleEnabled );
|
||||
} else {
|
||||
view.$el.append( $blank_template );
|
||||
}
|
||||
|
||||
this.initTooltips();
|
||||
},
|
||||
initTooltips: function() {
|
||||
$( '#tiptip_holder' ).removeAttr( 'style' );
|
||||
$( '#tiptip_arrow' ).removeAttr( 'style' );
|
||||
$( '.tips' ).tipTip({ 'attribute': 'data-tip', 'fadeIn': 50, 'fadeOut': 50, 'delay': 50 });
|
||||
},
|
||||
onSubmit: function( event ) {
|
||||
event.data.view.block();
|
||||
event.data.view.model.save();
|
||||
event.preventDefault();
|
||||
},
|
||||
onDeleteRow: function( event ) {
|
||||
var view = event.data.view,
|
||||
model = view.model,
|
||||
methods = _.indexBy( model.get( 'methods' ), 'instance_id' ),
|
||||
changes = {},
|
||||
instance_id = $( this ).closest( 'tr' ).data( 'id' );
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
if ( window.confirm( data.strings.delete_shipping_method_confirmation ) ) {
|
||||
shippingMethodView.block();
|
||||
|
||||
// Add method to zone via ajax call
|
||||
$.post( {
|
||||
url: ajaxurl + ( ajaxurl.indexOf( '?' ) > 0 ? '&' : '?') + 'action=woocommerce_shipping_zone_remove_method',
|
||||
data: {
|
||||
wc_shipping_zones_nonce: data.wc_shipping_zones_nonce,
|
||||
instance_id: instance_id,
|
||||
zone_id: data.zone_id,
|
||||
},
|
||||
success: function( { data } ) {
|
||||
delete methods[instance_id];
|
||||
changes.methods = changes.methods || data.methods;
|
||||
model.set('methods', methods);
|
||||
model.logChanges( changes );
|
||||
view.clearUnloadConfirmation();
|
||||
view.render();
|
||||
shippingMethodView.unblock();
|
||||
},
|
||||
error: function( jqXHR, textStatus, errorThrown ) {
|
||||
window.alert( data.strings.remove_method_failed );
|
||||
shippingMethodView.unblock();
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
}
|
||||
},
|
||||
onToggleEnabled: function( event ) {
|
||||
var view = event.data.view,
|
||||
$target = $( event.target ),
|
||||
model = view.model,
|
||||
methods = _.indexBy( model.get( 'methods' ), 'instance_id' ),
|
||||
instance_id = $target.closest( 'tr' ).data( 'id' ),
|
||||
enabled = $target.closest( 'tr' ).data( 'enabled' ) === 'yes' ? 'no' : 'yes',
|
||||
changes = {};
|
||||
|
||||
event.preventDefault();
|
||||
methods[ instance_id ].enabled = enabled;
|
||||
changes.methods = changes.methods || { methods : {} };
|
||||
changes.methods[ instance_id ] = _.extend( changes.methods[ instance_id ] || {}, { enabled : enabled } );
|
||||
model.set( 'methods', methods );
|
||||
model.logChanges( changes );
|
||||
view.render();
|
||||
},
|
||||
setUnloadConfirmation: function() {
|
||||
this.needsUnloadConfirm = true;
|
||||
$save_button.prop( 'disabled', false );
|
||||
},
|
||||
clearUnloadConfirmation: function() {
|
||||
this.needsUnloadConfirm = false;
|
||||
$save_button.attr( 'disabled', 'disabled' );
|
||||
},
|
||||
unloadConfirmation: function( event ) {
|
||||
if ( event.data.view.needsUnloadConfirm ) {
|
||||
event.returnValue = data.strings.unload_confirmation_msg;
|
||||
window.event.returnValue = data.strings.unload_confirmation_msg;
|
||||
return data.strings.unload_confirmation_msg;
|
||||
}
|
||||
},
|
||||
updateModelOnChange: function( event ) {
|
||||
var model = event.data.view.model,
|
||||
$target = $( event.target ),
|
||||
instance_id = $target.closest( 'tr' ).data( 'id' ),
|
||||
attribute = $target.data( 'attribute' ),
|
||||
value = $target.val(),
|
||||
methods = _.indexBy( model.get( 'methods' ), 'instance_id' ),
|
||||
changes = {};
|
||||
|
||||
if ( methods[ instance_id ][ attribute ] !== value ) {
|
||||
changes.methods[ instance_id ] = {};
|
||||
changes.methods[ instance_id ][ attribute ] = value;
|
||||
methods[ instance_id ][ attribute ] = value;
|
||||
}
|
||||
|
||||
model.logChanges( changes );
|
||||
},
|
||||
updateModelOnSort: function( event ) {
|
||||
var view = event.data.view,
|
||||
model = view.model,
|
||||
methods = _.indexBy( model.get( 'methods' ), 'instance_id' ),
|
||||
changes = {};
|
||||
|
||||
_.each( methods, function( method ) {
|
||||
var old_position = parseInt( method.method_order, 10 );
|
||||
var new_position = parseInt( $table.find( 'tr[data-id="' + method.instance_id + '"]').index() + 1, 10 );
|
||||
|
||||
if ( old_position !== new_position ) {
|
||||
methods[ method.instance_id ].method_order = new_position;
|
||||
changes.methods = changes.methods || { methods : {} };
|
||||
changes.methods[ method.instance_id ] = _.extend(
|
||||
changes.methods[ method.instance_id ] || {}, { method_order : new_position }
|
||||
);
|
||||
}
|
||||
} );
|
||||
|
||||
if ( _.size( changes ) ) {
|
||||
model.logChanges( changes );
|
||||
}
|
||||
},
|
||||
onConfigureShippingMethod: function( event ) {
|
||||
var instance_id = $( this ).closest( 'tr' ).data( 'id' ),
|
||||
model = event.data.view.model,
|
||||
methods = _.indexBy( model.get( 'methods' ), 'instance_id' ),
|
||||
method = methods[ instance_id ];
|
||||
|
||||
// Only load modal if supported.
|
||||
if ( ! method.settings_html ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
method.settings_html = shippingMethodView.reformatSettingsHTML( method.settings_html );
|
||||
|
||||
$( this ).WCBackboneModal({
|
||||
template : 'wc-modal-shipping-method-settings',
|
||||
variable : {
|
||||
instance_id : instance_id,
|
||||
method : method,
|
||||
status : 'existing'
|
||||
},
|
||||
data : {
|
||||
instance_id : instance_id,
|
||||
method : method,
|
||||
status : 'existing'
|
||||
}
|
||||
});
|
||||
|
||||
shippingMethodView.highlightOnFocus( '.wc-shipping-modal-price' );
|
||||
|
||||
$( document.body ).trigger( 'init_tooltips' );
|
||||
},
|
||||
onConfigureShippingMethodSubmitted: function( event, target, posted_data ) {
|
||||
if ( 'wc-modal-shipping-method-settings' === target ) {
|
||||
shippingMethodView.block();
|
||||
|
||||
// Save method settings via ajax call
|
||||
$.post(
|
||||
ajaxurl + ( ajaxurl.indexOf( '?' ) > 0 ? '&' : '?' ) + 'action=woocommerce_shipping_zone_methods_save_settings',
|
||||
{
|
||||
wc_shipping_zones_nonce : data.wc_shipping_zones_nonce,
|
||||
instance_id : posted_data.instance_id,
|
||||
data : posted_data
|
||||
},
|
||||
function( response, textStatus ) {
|
||||
if ( 'success' === textStatus && response.success ) {
|
||||
$( 'table.wc-shipping-zone-methods' ).parent().find( '#woocommerce_errors' ).remove();
|
||||
|
||||
// If there were errors, prepend the form.
|
||||
if ( response.data.errors.length > 0 ) {
|
||||
shippingMethodView.showErrors( response.data.errors );
|
||||
}
|
||||
|
||||
// Method was saved. Re-render.
|
||||
if ( _.size( shippingMethodView.model.changes ) ) {
|
||||
shippingMethodView.model.save();
|
||||
} else {
|
||||
shippingMethodView.model.onSaveResponse( response, textStatus );
|
||||
}
|
||||
} else {
|
||||
window.alert( data.strings.save_failed );
|
||||
shippingMethodView.unblock();
|
||||
}
|
||||
},
|
||||
'json'
|
||||
);
|
||||
}
|
||||
},
|
||||
onConfigureShippingMethodBack: function( event, target ) {
|
||||
if ( 'wc-modal-shipping-method-settings' === target ) {
|
||||
shippingMethodView.onAddShippingMethod( event );
|
||||
}
|
||||
},
|
||||
showErrors: function( errors ) {
|
||||
var error_html = '<div id="woocommerce_errors" class="error notice is-dismissible">';
|
||||
|
||||
$( errors ).each( function( index, value ) {
|
||||
error_html = error_html + '<p>' + value + '</p>';
|
||||
} );
|
||||
error_html = error_html + '</div>';
|
||||
|
||||
$( 'table.wc-shipping-zone-methods' ).before( error_html );
|
||||
},
|
||||
highlightOnFocus: function( query ) {
|
||||
const inputs = $( query );
|
||||
inputs.focus( function() {
|
||||
$( this ).select();
|
||||
} );
|
||||
},
|
||||
onAddShippingMethod: function( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
$( this ).WCBackboneModal({
|
||||
template : 'wc-modal-add-shipping-method',
|
||||
variable : {
|
||||
zone_id : data.zone_id
|
||||
}
|
||||
});
|
||||
|
||||
$( '.wc-shipping-zone-method-selector select' ).trigger( 'change' );
|
||||
|
||||
$('.wc-shipping-zone-method-input input').change( function() {
|
||||
const selected = $('.wc-shipping-zone-method-input input:checked');
|
||||
const id = selected.attr( 'id' );
|
||||
const description = $( `#${ id }-description` );
|
||||
const descriptions = $( '.wc-shipping-zone-method-input-help-text' );
|
||||
descriptions.css( 'display', 'none' );
|
||||
description.css( 'display', 'block' );
|
||||
});
|
||||
},
|
||||
/**
|
||||
* The settings HTML is controlled and built by the settings api, so in order to refactor the
|
||||
* markup, it needs to be manipulated here.
|
||||
*/
|
||||
reformatSettingsHTML: function( html ) {
|
||||
const formattingFunctions = [
|
||||
this.replaceHTMLTables,
|
||||
this.moveAdvancedCostsHelpTip,
|
||||
this.moveHTMLHelpTips,
|
||||
this.addCurrencySymbol
|
||||
];
|
||||
|
||||
return formattingFunctions.reduce( ( formattedHTML, fn ) => {
|
||||
return fn( formattedHTML );
|
||||
}, html );
|
||||
},
|
||||
moveAdvancedCostsHelpTip: function( html ) {
|
||||
const htmlContent = $( html );
|
||||
const advancedCostsHelpTip = htmlContent.find( '#wc-shipping-advanced-costs-help-text' );
|
||||
advancedCostsHelpTip.addClass( 'wc-shipping-zone-method-fields-help-text' );
|
||||
|
||||
const input = htmlContent.find( '#woocommerce_flat_rate_cost' );
|
||||
const fieldset = input.closest( 'fieldset' );
|
||||
advancedCostsHelpTip.appendTo( fieldset );
|
||||
|
||||
return htmlContent.prop( 'outerHTML' );
|
||||
},
|
||||
addCurrencySymbol: function( html ) {
|
||||
if ( ! window.wc.ShippingCurrencyContext || ! window.wc.ShippingCurrencyNumberFormat ) {
|
||||
return html;
|
||||
}
|
||||
const htmlContent = $( html );
|
||||
const priceInputs = htmlContent.find( '.wc-shipping-modal-price' );
|
||||
const config = window.wc.ShippingCurrencyContext.getCurrencyConfig();
|
||||
const { symbol, symbolPosition } = config;
|
||||
|
||||
priceInputs.addClass( `wc-shipping-currency-size-${ symbol.length }` );
|
||||
priceInputs.addClass( `wc-shipping-currency-position-${ symbolPosition }` );
|
||||
priceInputs.before( `<div class="wc-shipping-zone-method-currency wc-shipping-currency-position-${ symbolPosition }">${ symbol }</div>` );
|
||||
|
||||
priceInputs.each( ( i ) => {
|
||||
const priceInput = $( priceInputs[ i ] );
|
||||
const value = priceInput.attr( 'value' );
|
||||
const formattedValue = window.wc.ShippingCurrencyNumberFormat( config, value );
|
||||
priceInput.attr( 'value', formattedValue );
|
||||
} );
|
||||
|
||||
return htmlContent.prop( 'outerHTML' );
|
||||
},
|
||||
moveHTMLHelpTips: function( html ) {
|
||||
// These help tips aren't moved.
|
||||
const helpTipsToRetain = [ 'woocommerce_flat_rate_cost', 'woocommerce_flat_rate_no_class_cost', 'woocommerce_flat_rate_class_cost_' ];
|
||||
|
||||
const htmlContent = $( html );
|
||||
const labels = htmlContent.find( 'label' );
|
||||
labels.each( ( i ) => {
|
||||
const label = $( labels[ i ] );
|
||||
const helpTip = label.find( '.woocommerce-help-tip' );
|
||||
|
||||
if ( helpTip.length === 0 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
const id = label.attr( 'for' );
|
||||
|
||||
if ( helpTipsToRetain.some( ( tip ) => id.includes( tip ) ) ) {
|
||||
const helpTip = htmlContent.find( `label[for=${ id }] span.woocommerce-help-tip` );
|
||||
helpTip.addClass( 'wc-shipping-visible-help-text' );
|
||||
return;
|
||||
}
|
||||
|
||||
// woocommerce_free_shipping_ignore_discounts gets a helpTip appended to its label. Otherwise, add the text as the last element in the fieldset.
|
||||
if ( id === 'woocommerce_free_shipping_ignore_discounts' ) {
|
||||
const input = htmlContent.find( `#${ id }` );
|
||||
const fieldset = input.closest( 'fieldset' );
|
||||
const inputLabel = fieldset.find( 'label' );
|
||||
inputLabel.append( helpTip );
|
||||
} else {
|
||||
const text = helpTip.data( 'tip' );
|
||||
const input = htmlContent.find( `#${ id }` );
|
||||
const fieldset = input.closest( 'fieldset' );
|
||||
|
||||
if ( fieldset.length && fieldset.find( '.wc-shipping-zone-method-fields-help-text' ).length === 0 ) {
|
||||
fieldset.append( `<div class="wc-shipping-zone-method-fields-help-text">${ text }</div>` );
|
||||
}
|
||||
}
|
||||
|
||||
// Coupon discounts doesn't get a title on Free Shipping.
|
||||
if ( label.text().trim() === 'Coupons discounts' ) {
|
||||
label.text( '' );
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
return htmlContent.prop( 'outerHTML' );
|
||||
},
|
||||
replaceHTMLTables: function ( html ) {
|
||||
// Wrap the html content in a div
|
||||
const htmlContent = $( '<div>' + html + '</div>' );
|
||||
|
||||
// `<table class="form-table" />` elements added by the Settings API need to be removed.
|
||||
// Modern browsers won't interpret other table elements like `td` not in a `table`, so
|
||||
// Removing the `table` is sufficient.
|
||||
const innerTables = htmlContent.find( 'table.form-table' );
|
||||
innerTables.each( ( i ) => {
|
||||
const table = $( innerTables[ i ] );
|
||||
const div = $( '<div class="wc-shipping-zone-method-fields" />' );
|
||||
div.html( table.html() );
|
||||
table.replaceWith( div );
|
||||
} );
|
||||
|
||||
return htmlContent.prop('outerHTML');
|
||||
},
|
||||
onAddShippingMethodSubmitted: function( event, target, posted_data, closeModal ) {
|
||||
if ( 'wc-modal-add-shipping-method' === target ) {
|
||||
shippingMethodView.block();
|
||||
|
||||
$('#btn-next').addClass( 'is-busy' );
|
||||
|
||||
// Add method to zone via ajax call
|
||||
$.post( ajaxurl + ( ajaxurl.indexOf( '?' ) > 0 ? '&' : '?' ) + 'action=woocommerce_shipping_zone_add_method', {
|
||||
wc_shipping_zones_nonce : data.wc_shipping_zones_nonce,
|
||||
method_id : posted_data.add_method_id,
|
||||
zone_id : data.zone_id
|
||||
}, function( response, textStatus ) {
|
||||
if ( 'success' === textStatus && response.success ) {
|
||||
if ( response.data.zone_id !== data.zone_id ) {
|
||||
data.zone_id = response.data.zone_id;
|
||||
if ( window.history.pushState ) {
|
||||
window.history.pushState(
|
||||
{},
|
||||
'',
|
||||
'admin.php?page=wc-settings&tab=shipping&zone_id=' + response.data.zone_id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Avoid triggering a rerender here because we don't want to show the method in the table in case merchant doesn't finish flow.
|
||||
|
||||
shippingMethodView.model.set( 'methods', response.data.methods );
|
||||
|
||||
// Close original modal
|
||||
closeModal();
|
||||
}
|
||||
var instance_id = response.data.instance_id,
|
||||
method = response.data.methods[ instance_id ];
|
||||
|
||||
shippingMethodView.unblock();
|
||||
|
||||
if ( method.settings_html ) {
|
||||
method.settings_html = shippingMethodView.reformatSettingsHTML( method.settings_html );
|
||||
|
||||
// Pop up next modal
|
||||
$( this ).WCBackboneModal({
|
||||
template : 'wc-modal-shipping-method-settings',
|
||||
variable : {
|
||||
instance_id : instance_id,
|
||||
method : method,
|
||||
status : 'new'
|
||||
},
|
||||
data : {
|
||||
instance_id : instance_id,
|
||||
method : method,
|
||||
status : 'new'
|
||||
}
|
||||
});
|
||||
|
||||
shippingMethodView.highlightOnFocus( '.wc-shipping-modal-price' );
|
||||
} else {
|
||||
shippingMethodView.model.trigger( 'change:methods' );
|
||||
shippingMethodView.model.trigger( 'saved:methods' );
|
||||
}
|
||||
|
||||
$( document.body ).trigger( 'init_tooltips' );
|
||||
}, 'json' );
|
||||
}
|
||||
},
|
||||
// Free Shipping has hidden field elements depending on data values.
|
||||
possiblyHideFreeShippingRequirements: function( data ) {
|
||||
if ( Object.keys( data ).includes( 'woocommerce_free_shipping_requires' ) ) {
|
||||
const shouldHideRequirements = data.woocommerce_free_shipping_requires === null ||
|
||||
data.woocommerce_free_shipping_requires === '' ||
|
||||
data.woocommerce_free_shipping_requires === 'coupon';
|
||||
|
||||
const select = $( '#woocommerce_free_shipping_requires' );
|
||||
const fieldset = select.closest( 'fieldset' );
|
||||
const allOtherLabelElementsAfter = fieldset.nextAll( 'label' );
|
||||
const allOtherFieldsetElementsAfter = fieldset.nextAll( 'fieldset' );
|
||||
|
||||
allOtherLabelElementsAfter.each( ( i ) => {
|
||||
$( allOtherLabelElementsAfter[ i ] ).css( 'display', shouldHideRequirements ? 'none' : 'block' );
|
||||
} );
|
||||
|
||||
allOtherFieldsetElementsAfter.each( ( i ) => {
|
||||
$( allOtherFieldsetElementsAfter[ i ] ).css( 'display', shouldHideRequirements ? 'none' : 'block' );
|
||||
} );
|
||||
}
|
||||
},
|
||||
onModalLoaded: function( event, target ) {
|
||||
if ( target === 'wc-modal-shipping-method-settings' ) {
|
||||
const select = $( '#woocommerce_free_shipping_requires' );
|
||||
if ( select.length > 0 ) {
|
||||
event.data.view.possiblyHideFreeShippingRequirements( { woocommerce_free_shipping_requires: select.val() } );
|
||||
}
|
||||
|
||||
event.data.view.possiblyAddShippingClassLink( event );
|
||||
}
|
||||
},
|
||||
possiblyAddShippingClassLink: function( event ) {
|
||||
const article = $( 'article.wc-modal-shipping-method-settings' );
|
||||
const shippingClassesCount = article.data( 'shipping-classes-count' );
|
||||
const status = article.data( 'status' );
|
||||
const instance_id = article.data( 'id' );
|
||||
const model = event.data.view.model;
|
||||
const methods = _.indexBy( model.get( 'methods' ), 'instance_id' );
|
||||
const method = methods[ instance_id ];
|
||||
|
||||
if ( method.id === 'flat_rate' && shippingClassesCount === 0 ) {
|
||||
const link = article.find( '.wc-shipping-method-add-class-costs' );
|
||||
link.css( 'display', 'block' );
|
||||
}
|
||||
},
|
||||
validateFormArguments: function( event, target, data ) {
|
||||
if ( target === 'wc-modal-add-shipping-method' ) {
|
||||
if ( data.add_method_id ) {
|
||||
const nextButton = document.getElementById( 'btn-next' );
|
||||
nextButton.disabled = false;
|
||||
nextButton.classList.remove( 'disabled' );
|
||||
}
|
||||
} else if ( target === 'wc-modal-shipping-method-settings' ) {
|
||||
event.data.view.possiblyHideFreeShippingRequirements( data );
|
||||
}
|
||||
},
|
||||
onCloseConfigureShippingMethod: function( event, target, post_data, addButtonCalled ) {
|
||||
if ( target === 'wc-modal-shipping-method-settings' ) {
|
||||
var btnData = $( '#btn-ok' ).data();
|
||||
|
||||
if ( ! addButtonCalled && btnData && btnData.status === 'new' ) {
|
||||
shippingMethodView.block();
|
||||
|
||||
var view = shippingMethodView,
|
||||
model = view.model,
|
||||
methods = _.indexBy( model.get( 'methods' ), 'instance_id' ),
|
||||
changes = {},
|
||||
instance_id = post_data.instance_id;
|
||||
|
||||
// Remove method to zone via ajax call
|
||||
$.post( {
|
||||
url: ajaxurl + ( ajaxurl.indexOf( '?' ) > 0 ? '&' : '?') + 'action=woocommerce_shipping_zone_remove_method',
|
||||
data: {
|
||||
wc_shipping_zones_nonce: data.wc_shipping_zones_nonce,
|
||||
instance_id: instance_id,
|
||||
zone_id: data.zone_id,
|
||||
},
|
||||
success: function( { data } ) {
|
||||
delete methods[instance_id];
|
||||
changes.methods = changes.methods || data.methods;
|
||||
model.set('methods', methods);
|
||||
model.logChanges( changes );
|
||||
view.clearUnloadConfirmation();
|
||||
view.render();
|
||||
shippingMethodView.unblock();
|
||||
},
|
||||
error: function( jqXHR, textStatus, errorThrown ) {
|
||||
window.alert( data.strings.remove_method_failed );
|
||||
shippingMethodView.unblock();
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
onChangeShippingMethodSelector: function() {
|
||||
var description = $( this ).find( 'option:selected' ).data( 'description' );
|
||||
$( this ).parent().find( '.wc-shipping-zone-method-description' ).remove();
|
||||
$( this ).after( '<div class="wc-shipping-zone-method-description">' + description + '</div>' );
|
||||
},
|
||||
onTogglePostcodes: function( event ) {
|
||||
event.preventDefault();
|
||||
var $tr = $( this ).closest( 'tr');
|
||||
$tr.find( '.wc-shipping-zone-postcodes' ).show();
|
||||
$tr.find( '.wc-shipping-zone-postcodes-toggle' ).hide();
|
||||
}
|
||||
} ),
|
||||
shippingMethod = new ShippingMethod({
|
||||
methods: data.methods,
|
||||
zone_name: data.zone_name
|
||||
} ),
|
||||
shippingMethodView = new ShippingMethodView({
|
||||
model: shippingMethod,
|
||||
el: $tbody
|
||||
} );
|
||||
|
||||
shippingMethodView.render();
|
||||
|
||||
$tbody.sortable({
|
||||
items: 'tr',
|
||||
cursor: 'move',
|
||||
axis: 'y',
|
||||
handle: 'td.wc-shipping-zone-method-sort',
|
||||
scrollSensitivity: 40
|
||||
});
|
||||
});
|
||||
})( jQuery, shippingZoneMethodsLocalizeScript, wp, ajaxurl );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-shipping-zone-methods.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-shipping-zone-methods.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,278 @@
|
||||
/* global shippingZonesLocalizeScript, ajaxurl */
|
||||
( function( $, data, wp, ajaxurl ) {
|
||||
$( function() {
|
||||
var $table = $( '.wc-shipping-zones' ),
|
||||
$tbody = $( '.wc-shipping-zone-rows' ),
|
||||
$save_button = $( '.wc-shipping-zone-save' ),
|
||||
$row_template = wp.template( 'wc-shipping-zone-row' ),
|
||||
$blank_template = wp.template( 'wc-shipping-zone-row-blank' ),
|
||||
|
||||
// Backbone model
|
||||
ShippingZone = Backbone.Model.extend({
|
||||
changes: {},
|
||||
logChanges: function( changedRows ) {
|
||||
var changes = this.changes || {};
|
||||
|
||||
_.each( changedRows, function( row, id ) {
|
||||
changes[ id ] = _.extend( changes[ id ] || { zone_id : id }, row );
|
||||
} );
|
||||
|
||||
this.changes = changes;
|
||||
this.trigger( 'change:zones' );
|
||||
},
|
||||
discardChanges: function( id ) {
|
||||
var changes = this.changes || {},
|
||||
set_position = null,
|
||||
zones = _.indexBy( this.get( 'zones' ), 'zone_id' );
|
||||
|
||||
// Find current set position if it has moved since last save
|
||||
if ( changes[ id ] && changes[ id ].zone_order !== undefined ) {
|
||||
set_position = changes[ id ].zone_order;
|
||||
}
|
||||
|
||||
// Delete all changes
|
||||
delete changes[ id ];
|
||||
|
||||
// If the position was set, and this zone does exist in DB, set the position again so the changes are not lost.
|
||||
if ( set_position !== null && zones[ id ] && zones[ id ].zone_order !== set_position ) {
|
||||
changes[ id ] = _.extend( changes[ id ] || {}, { zone_id : id, zone_order : set_position } );
|
||||
}
|
||||
|
||||
this.changes = changes;
|
||||
|
||||
// No changes? Disable save button.
|
||||
if ( 0 === _.size( this.changes ) ) {
|
||||
shippingZoneView.clearUnloadConfirmation();
|
||||
}
|
||||
},
|
||||
save: function() {
|
||||
if ( _.size( this.changes ) ) {
|
||||
$.post( ajaxurl + ( ajaxurl.indexOf( '?' ) > 0 ? '&' : '?' ) + 'action=woocommerce_shipping_zones_save_changes', {
|
||||
wc_shipping_zones_nonce : data.wc_shipping_zones_nonce,
|
||||
changes : this.changes
|
||||
}, this.onSaveResponse, 'json' );
|
||||
} else {
|
||||
shippingZone.trigger( 'saved:zones' );
|
||||
}
|
||||
},
|
||||
onSaveResponse: function( response, textStatus ) {
|
||||
if ( 'success' === textStatus ) {
|
||||
if ( response.success ) {
|
||||
shippingZone.set( 'zones', response.data.zones );
|
||||
shippingZone.trigger( 'change:zones' );
|
||||
shippingZone.changes = {};
|
||||
shippingZone.trigger( 'saved:zones' );
|
||||
} else {
|
||||
window.alert( data.strings.save_failed );
|
||||
}
|
||||
}
|
||||
}
|
||||
} ),
|
||||
|
||||
// Backbone view
|
||||
ShippingZoneView = Backbone.View.extend({
|
||||
rowTemplate: $row_template,
|
||||
initialize: function() {
|
||||
this.listenTo( this.model, 'change:zones', this.setUnloadConfirmation );
|
||||
this.listenTo( this.model, 'saved:zones', this.clearUnloadConfirmation );
|
||||
this.listenTo( this.model, 'saved:zones', this.render );
|
||||
$tbody.on( 'change', { view: this }, this.updateModelOnChange );
|
||||
$tbody.on( 'sortupdate', { view: this }, this.updateModelOnSort );
|
||||
$( window ).on( 'beforeunload', { view: this }, this.unloadConfirmation );
|
||||
$( document.body ).on( 'click', '.wc-shipping-zone-add', { view: this }, this.onAddNewRow );
|
||||
},
|
||||
onAddNewRow: function() {
|
||||
var $link = $( this );
|
||||
window.location.href = $link.attr( 'href' );
|
||||
},
|
||||
block: function() {
|
||||
$( this.el ).block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
},
|
||||
unblock: function() {
|
||||
$( this.el ).unblock();
|
||||
},
|
||||
render: function() {
|
||||
var zones = _.indexBy( this.model.get( 'zones' ), 'zone_id' ),
|
||||
view = this;
|
||||
|
||||
view.$el.empty();
|
||||
view.unblock();
|
||||
|
||||
if ( _.size( zones ) ) {
|
||||
// Sort zones
|
||||
zones = _( zones )
|
||||
.chain()
|
||||
.sortBy( function ( zone ) { return parseInt( zone.zone_id, 10 ); } )
|
||||
.sortBy( function ( zone ) { return parseInt( zone.zone_order, 10 ); } )
|
||||
.value();
|
||||
|
||||
// Populate $tbody with the current zones
|
||||
$.each( zones, function( id, rowData ) {
|
||||
view.renderRow( rowData );
|
||||
} );
|
||||
} else {
|
||||
view.$el.append( $blank_template );
|
||||
}
|
||||
|
||||
view.initRows();
|
||||
},
|
||||
renderRow: function( rowData ) {
|
||||
var view = this;
|
||||
view.$el.append( view.rowTemplate( rowData ) );
|
||||
view.initRow( rowData );
|
||||
},
|
||||
initRow: function( rowData ) {
|
||||
var view = this;
|
||||
var $tr = view.$el.find( 'tr[data-id="' + rowData.zone_id + '"]');
|
||||
|
||||
// List shipping methods
|
||||
view.renderShippingMethods( rowData.zone_id, rowData.shipping_methods );
|
||||
$tr.find( '.wc-shipping-zone-delete' ).on( 'click', { view: this }, this.onDeleteRow );
|
||||
},
|
||||
initRows: function() {
|
||||
const isEven = 0 !== ( $( 'tbody.wc-shipping-zone-rows tr' ).length % 2 );
|
||||
const tfoot = $( 'tfoot.wc-shipping-zone-rows-tfoot' );
|
||||
|
||||
// Stripe
|
||||
if ( isEven ) {
|
||||
tfoot.find( 'tr' ).addClass( 'even' );
|
||||
} else {
|
||||
tfoot.find( 'tr' ).removeClass( 'even' );
|
||||
}
|
||||
// Tooltips
|
||||
$( '#tiptip_holder' ).removeAttr( 'style' );
|
||||
$( '#tiptip_arrow' ).removeAttr( 'style' );
|
||||
$( '.tips' ).tipTip({ 'attribute': 'data-tip', 'fadeIn': 50, 'fadeOut': 50, 'delay': 50 });
|
||||
},
|
||||
renderShippingMethods: function( zone_id, shipping_methods ) {
|
||||
var $tr = $( '.wc-shipping-zones tr[data-id="' + zone_id + '"]');
|
||||
var $method_list = $tr.find('.wc-shipping-zone-methods ul');
|
||||
|
||||
$method_list.find( '.wc-shipping-zone-method' ).remove();
|
||||
|
||||
if ( _.size( shipping_methods ) ) {
|
||||
shipping_methods = _.sortBy( shipping_methods, function( method ) {
|
||||
return parseInt( method.method_order, 10 );
|
||||
} );
|
||||
|
||||
_.each( shipping_methods, function( shipping_method ) {
|
||||
var class_name = 'method_disabled';
|
||||
|
||||
if ( 'yes' === shipping_method.enabled ) {
|
||||
class_name = 'method_enabled';
|
||||
}
|
||||
|
||||
$method_list.append(
|
||||
'<li class="wc-shipping-zone-method ' + class_name + '">' + shipping_method.title + '</li>'
|
||||
);
|
||||
} );
|
||||
} else {
|
||||
$method_list.append( '<li class="wc-shipping-zone-method">' + data.strings.no_shipping_methods_offered + '</li>' );
|
||||
}
|
||||
},
|
||||
onDeleteRow: function( event ) {
|
||||
var view = event.data.view,
|
||||
model = view.model,
|
||||
zones = _.indexBy( model.get( 'zones' ), 'zone_id' ),
|
||||
changes = {},
|
||||
row = $( this ).closest('tr'),
|
||||
zone_id = row.data('id');
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
if ( window.confirm( data.strings.delete_confirmation_msg ) ) {
|
||||
if ( zones[ zone_id ] ) {
|
||||
delete zones[ zone_id ];
|
||||
changes[ zone_id ] = _.extend( changes[ zone_id ] || {}, { deleted : 'deleted' } );
|
||||
model.set( 'zones', zones );
|
||||
model.logChanges( changes );
|
||||
event.data.view.block();
|
||||
event.data.view.model.save();
|
||||
}
|
||||
}
|
||||
},
|
||||
setUnloadConfirmation: function() {
|
||||
this.needsUnloadConfirm = true;
|
||||
$save_button.prop( 'disabled', false );
|
||||
},
|
||||
clearUnloadConfirmation: function() {
|
||||
this.needsUnloadConfirm = false;
|
||||
$save_button.prop( 'disabled', true );
|
||||
},
|
||||
unloadConfirmation: function( event ) {
|
||||
if ( event.data.view.needsUnloadConfirm ) {
|
||||
event.returnValue = data.strings.unload_confirmation_msg;
|
||||
window.event.returnValue = data.strings.unload_confirmation_msg;
|
||||
return data.strings.unload_confirmation_msg;
|
||||
}
|
||||
},
|
||||
updateModelOnChange: function( event ) {
|
||||
var model = event.data.view.model,
|
||||
$target = $( event.target ),
|
||||
zone_id = $target.closest( 'tr' ).data( 'id' ),
|
||||
attribute = $target.data( 'attribute' ),
|
||||
value = $target.val(),
|
||||
zones = _.indexBy( model.get( 'zones' ), 'zone_id' ),
|
||||
changes = {};
|
||||
|
||||
if ( ! zones[ zone_id ] || zones[ zone_id ][ attribute ] !== value ) {
|
||||
changes[ zone_id ] = {};
|
||||
changes[ zone_id ][ attribute ] = value;
|
||||
}
|
||||
|
||||
model.logChanges( changes );
|
||||
},
|
||||
updateModelOnSort: function( event ) {
|
||||
var view = event.data.view,
|
||||
model = view.model,
|
||||
zones = _.indexBy( model.get( 'zones' ), 'zone_id' ),
|
||||
rows = $( 'tbody.wc-shipping-zone-rows tr' ),
|
||||
changes = {};
|
||||
|
||||
// Update sorted row position
|
||||
_.each( rows, function( row ) {
|
||||
var zone_id = $( row ).data( 'id' ),
|
||||
old_position = null,
|
||||
new_position = parseInt( $( row ).index(), 10 );
|
||||
|
||||
if ( zones[ zone_id ] ) {
|
||||
old_position = parseInt( zones[ zone_id ].zone_order, 10 );
|
||||
}
|
||||
|
||||
if ( old_position !== new_position ) {
|
||||
changes[ zone_id ] = _.extend( changes[ zone_id ] || {}, { zone_order : new_position } );
|
||||
}
|
||||
} );
|
||||
|
||||
if ( _.size( changes ) ) {
|
||||
model.logChanges( changes );
|
||||
event.data.view.block();
|
||||
event.data.view.model.save();
|
||||
}
|
||||
}
|
||||
} ),
|
||||
shippingZone = new ShippingZone({
|
||||
zones: data.zones
|
||||
} ),
|
||||
shippingZoneView = new ShippingZoneView({
|
||||
model: shippingZone,
|
||||
el: $tbody
|
||||
} );
|
||||
|
||||
shippingZoneView.render();
|
||||
|
||||
$tbody.sortable({
|
||||
items: 'tr',
|
||||
cursor: 'move',
|
||||
axis: 'y',
|
||||
handle: 'td.wc-shipping-zone-sort',
|
||||
scrollSensitivity: 40
|
||||
});
|
||||
});
|
||||
})( jQuery, shippingZonesLocalizeScript, wp, ajaxurl );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-shipping-zones.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-shipping-zones.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(e,n,i,o){e(function(){e(".wc-shipping-zones");var t=e(".wc-shipping-zone-rows"),s=e(".wc-shipping-zone-save"),a=i.template("wc-shipping-zone-row"),d=i.template("wc-shipping-zone-row-blank"),r=Backbone.Model.extend({changes:{},logChanges:function(e){var n=this.changes||{};_.each(e,function(e,i){n[i]=_.extend(n[i]||{zone_id:i},e)}),this.changes=n,this.trigger("change:zones")},discardChanges:function(e){var n=this.changes||{},i=null,o=_.indexBy(this.get("zones"),"zone_id");n[e]&&n[e].zone_order!==undefined&&(i=n[e].zone_order),delete n[e],null!==i&&o[e]&&o[e].zone_order!==i&&(n[e]=_.extend(n[e]||{},{zone_id:e,zone_order:i})),this.changes=n,0===_.size(this.changes)&&h.clearUnloadConfirmation()},save:function(){_.size(this.changes)?e.post(o+(o.indexOf("?")>0?"&":"?")+"action=woocommerce_shipping_zones_save_changes",{wc_shipping_zones_nonce:n.wc_shipping_zones_nonce,changes:this.changes},this.onSaveResponse,"json"):c.trigger("saved:zones")},onSaveResponse:function(e,i){"success"===i&&(e.success?(c.set("zones",e.data.zones),c.trigger("change:zones"),c.changes={},c.trigger("saved:zones")):window.alert(n.strings.save_failed))}}),l=Backbone.View.extend({rowTemplate:a,initialize:function(){this.listenTo(this.model,"change:zones",this.setUnloadConfirmation),this.listenTo(this.model,"saved:zones",this.clearUnloadConfirmation),this.listenTo(this.model,"saved:zones",this.render),t.on("change",{view:this},this.updateModelOnChange),t.on("sortupdate",{view:this},this.updateModelOnSort),e(window).on("beforeunload",{view:this},this.unloadConfirmation),e(document.body).on("click",".wc-shipping-zone-add",{view:this},this.onAddNewRow)},onAddNewRow:function(){var n=e(this);window.location.href=n.attr("href")},block:function(){e(this.el).block({message:null,overlayCSS:{background:"#fff",opacity:.6}})},unblock:function(){e(this.el).unblock()},render:function(){var n=_.indexBy(this.model.get("zones"),"zone_id"),i=this;i.$el.empty(),i.unblock(),_.size(n)?(n=_(n).chain().sortBy(function(e){return parseInt(e.zone_id,10)}).sortBy(function(e){return parseInt(e.zone_order,10)}).value(),e.each(n,function(e,n){i.renderRow(n)})):i.$el.append(d),i.initRows()},renderRow:function(e){this.$el.append(this.rowTemplate(e)),this.initRow(e)},initRow:function(e){var n=this.$el.find('tr[data-id="'+e.zone_id+'"]');this.renderShippingMethods(e.zone_id,e.shipping_methods),n.find(".wc-shipping-zone-delete").on("click",{view:this},this.onDeleteRow)},initRows:function(){const n=0!=e("tbody.wc-shipping-zone-rows tr").length%2,i=e("tfoot.wc-shipping-zone-rows-tfoot");n?i.find("tr").addClass("even"):i.find("tr").removeClass("even"),e("#tiptip_holder").removeAttr("style"),e("#tiptip_arrow").removeAttr("style"),e(".tips").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:50})},renderShippingMethods:function(i,o){var t=e('.wc-shipping-zones tr[data-id="'+i+'"]').find(".wc-shipping-zone-methods ul");t.find(".wc-shipping-zone-method").remove(),_.size(o)?(o=_.sortBy(o,function(e){return parseInt(e.method_order,10)}),_.each(o,function(e){var n="method_disabled";"yes"===e.enabled&&(n="method_enabled"),t.append('<li class="wc-shipping-zone-method '+n+'">'+e.title+"</li>")})):t.append('<li class="wc-shipping-zone-method">'+n.strings.no_shipping_methods_offered+"</li>")},onDeleteRow:function(i){var o=i.data.view.model,t=_.indexBy(o.get("zones"),"zone_id"),s={},a=e(this).closest("tr").data("id");i.preventDefault(),window.confirm(n.strings.delete_confirmation_msg)&&t[a]&&(delete t[a],s[a]=_.extend(s[a]||{},{deleted:"deleted"}),o.set("zones",t),o.logChanges(s),i.data.view.block(),i.data.view.model.save())},setUnloadConfirmation:function(){this.needsUnloadConfirm=!0,s.prop("disabled",!1)},clearUnloadConfirmation:function(){this.needsUnloadConfirm=!1,s.prop("disabled",!0)},unloadConfirmation:function(e){if(e.data.view.needsUnloadConfirm)return e.returnValue=n.strings.unload_confirmation_msg,window.event.returnValue=n.strings.unload_confirmation_msg,n.strings.unload_confirmation_msg},updateModelOnChange:function(n){var i=n.data.view.model,o=e(n.target),t=o.closest("tr").data("id"),s=o.data("attribute"),a=o.val(),d=_.indexBy(i.get("zones"),"zone_id"),r={};d[t]&&d[t][s]===a||(r[t]={},r[t][s]=a),i.logChanges(r)},updateModelOnSort:function(n){var i=n.data.view.model,o=_.indexBy(i.get("zones"),"zone_id"),t=e("tbody.wc-shipping-zone-rows tr"),s={};_.each(t,function(n){var i=e(n).data("id"),t=null,a=parseInt(e(n).index(),10);o[i]&&(t=parseInt(o[i].zone_order,10)),t!==a&&(s[i]=_.extend(s[i]||{},{zone_order:a}))}),_.size(s)&&(i.logChanges(s),n.data.view.block(),n.data.view.model.save())}}),c=new r({zones:n.zones}),h=new l({model:c,el:t});h.render(),t.sortable({items:"tr",cursor:"move",axis:"y",handle:"td.wc-shipping-zone-sort",scrollSensitivity:40})})}(jQuery,shippingZonesLocalizeScript,wp,ajaxurl);
|
||||
@@ -0,0 +1,36 @@
|
||||
/*global jQuery */
|
||||
(function( $ ) {
|
||||
$( function() {
|
||||
window.wcTracks.recordEvent( 'wcadmin_status_widget_view' );
|
||||
});
|
||||
|
||||
var recordEvent = function( link ) {
|
||||
window.wcTracks.recordEvent( 'status_widget_click', {
|
||||
link: link
|
||||
} );
|
||||
};
|
||||
|
||||
$( '.sales-this-month a' ).on( 'click', function() {
|
||||
recordEvent( 'net-sales' );
|
||||
});
|
||||
|
||||
$( '.best-seller-this-month a' ).on( 'click', function() {
|
||||
recordEvent( 'best-seller-this-month' );
|
||||
});
|
||||
|
||||
$( '.processing-orders a' ).on( 'click', function() {
|
||||
recordEvent( 'orders-processing' );
|
||||
});
|
||||
|
||||
$( '.on-hold-orders a' ).on( 'click', function() {
|
||||
recordEvent( 'orders-on-hold' );
|
||||
});
|
||||
|
||||
$( '.low-in-stock a' ).on( 'click', function() {
|
||||
recordEvent( 'low-stock' );
|
||||
});
|
||||
|
||||
$( '.out-of-stock a' ).on( 'click', function() {
|
||||
recordEvent( 'out-of-stock' );
|
||||
});
|
||||
})( jQuery );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-status-widget.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/wc-status-widget.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(o){o(function(){window.wcTracks.recordEvent("wcadmin_status_widget_view")});var n=function(o){window.wcTracks.recordEvent("status_widget_click",{link:o})};o(".sales-this-month a").on("click",function(){n("net-sales")}),o(".best-seller-this-month a").on("click",function(){n("best-seller-this-month")}),o(".processing-orders a").on("click",function(){n("orders-processing")}),o(".on-hold-orders a").on("click",function(){n("orders-on-hold")}),o(".low-in-stock a").on("click",function(){n("low-stock")}),o(".out-of-stock a").on("click",function(){n("out-of-stock")})}(jQuery);
|
||||
@@ -0,0 +1,760 @@
|
||||
/* global woocommerce_admin */
|
||||
( function ( $, woocommerce_admin ) {
|
||||
$( function () {
|
||||
if ( 'undefined' === typeof woocommerce_admin ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add buttons to product screen.
|
||||
var $product_screen = $( '.edit-php.post-type-product' ),
|
||||
$title_action = $product_screen.find( '.page-title-action:first' ),
|
||||
$blankslate = $product_screen.find( '.woocommerce-BlankState' );
|
||||
|
||||
if ( 0 === $blankslate.length ) {
|
||||
if ( woocommerce_admin.urls.add_product ) {
|
||||
$title_action
|
||||
.first()
|
||||
.attr( 'href', woocommerce_admin.urls.add_product );
|
||||
}
|
||||
if ( woocommerce_admin.urls.export_products ) {
|
||||
$title_action.after(
|
||||
'<a href="' +
|
||||
woocommerce_admin.urls.export_products +
|
||||
'" class="page-title-action">' +
|
||||
woocommerce_admin.strings.export_products +
|
||||
'</a>'
|
||||
);
|
||||
}
|
||||
if ( woocommerce_admin.urls.import_products ) {
|
||||
$title_action.after(
|
||||
'<a href="' +
|
||||
woocommerce_admin.urls.import_products +
|
||||
'" class="page-title-action">' +
|
||||
woocommerce_admin.strings.import_products +
|
||||
'</a>'
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$title_action.hide();
|
||||
}
|
||||
|
||||
// Progress indicators when showing steps.
|
||||
$( '.woocommerce-progress-form-wrapper .button-next' ).on(
|
||||
'click',
|
||||
function () {
|
||||
$( '.wc-progress-form-content' ).block( {
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6,
|
||||
},
|
||||
} );
|
||||
return true;
|
||||
}
|
||||
);
|
||||
|
||||
// Field validation error tips
|
||||
$( document.body )
|
||||
.on( 'wc_add_error_tip', function ( e, element, error_type ) {
|
||||
var offset = element.position();
|
||||
|
||||
if ( element.parent().find( '.wc_error_tip' ).length === 0 ) {
|
||||
element.after(
|
||||
'<div class="wc_error_tip ' +
|
||||
error_type +
|
||||
'">' +
|
||||
woocommerce_admin[ error_type ] +
|
||||
'</div>'
|
||||
);
|
||||
element
|
||||
.parent()
|
||||
.find( '.wc_error_tip' )
|
||||
.css(
|
||||
'left',
|
||||
offset.left +
|
||||
element.width() -
|
||||
element.width() / 2 -
|
||||
$( '.wc_error_tip' ).width() / 2
|
||||
)
|
||||
.css( 'top', offset.top + element.height() )
|
||||
.fadeIn( '100' );
|
||||
}
|
||||
} )
|
||||
|
||||
.on( 'wc_remove_error_tip', function ( e, element, error_type ) {
|
||||
element
|
||||
.parent()
|
||||
.find( '.wc_error_tip.' + error_type )
|
||||
.fadeOut( '100', function () {
|
||||
$( this ).remove();
|
||||
} );
|
||||
} )
|
||||
|
||||
.on( 'click', function () {
|
||||
$( '.wc_error_tip' ).fadeOut( '100', function () {
|
||||
$( this ).remove();
|
||||
} );
|
||||
} )
|
||||
|
||||
.on(
|
||||
'blur',
|
||||
'.wc_input_decimal[type=text], .wc_input_price[type=text], .wc_input_country_iso[type=text]',
|
||||
function () {
|
||||
$( '.wc_error_tip' ).fadeOut( '100', function () {
|
||||
$( this ).remove();
|
||||
} );
|
||||
}
|
||||
)
|
||||
|
||||
.on(
|
||||
'change',
|
||||
'.wc_input_price[type=text], .wc_input_decimal[type=text], .wc-order-totals #refund_amount[type=text], ' +
|
||||
'.wc_input_variations_price[type=text]',
|
||||
function () {
|
||||
var regex,
|
||||
decimalRegex,
|
||||
decimailPoint = woocommerce_admin.decimal_point;
|
||||
|
||||
if (
|
||||
$( this ).is( '.wc_input_price' ) ||
|
||||
$( this ).is( '.wc_input_variations_price' ) ||
|
||||
$( this ).is( '#refund_amount' )
|
||||
) {
|
||||
decimailPoint = woocommerce_admin.mon_decimal_point;
|
||||
}
|
||||
|
||||
regex = new RegExp(
|
||||
'[^-0-9%\\' + decimailPoint + ']+',
|
||||
'gi'
|
||||
);
|
||||
decimalRegex = new RegExp(
|
||||
'\\' + decimailPoint + '+',
|
||||
'gi'
|
||||
);
|
||||
|
||||
var value = $( this ).val();
|
||||
var newvalue = value
|
||||
.replace( regex, '' )
|
||||
.replace( decimalRegex, decimailPoint );
|
||||
|
||||
if ( value !== newvalue ) {
|
||||
$( this ).val( newvalue );
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
.on(
|
||||
'keyup',
|
||||
// eslint-disable-next-line max-len
|
||||
'.wc_input_price[type=text], .wc_input_decimal[type=text], .wc_input_country_iso[type=text], .wc-order-totals #refund_amount[type=text], .wc_input_variations_price[type=text]',
|
||||
function () {
|
||||
var regex, error, decimalRegex;
|
||||
var checkDecimalNumbers = false;
|
||||
if (
|
||||
$( this ).is( '.wc_input_price' ) ||
|
||||
$( this ).is( '.wc_input_variations_price' ) ||
|
||||
$( this ).is( '#refund_amount' )
|
||||
) {
|
||||
checkDecimalNumbers = true;
|
||||
regex = new RegExp(
|
||||
'[^-0-9%\\' +
|
||||
woocommerce_admin.mon_decimal_point +
|
||||
']+',
|
||||
'gi'
|
||||
);
|
||||
decimalRegex = new RegExp(
|
||||
'[^\\' + woocommerce_admin.mon_decimal_point + ']',
|
||||
'gi'
|
||||
);
|
||||
error = 'i18n_mon_decimal_error';
|
||||
} else if ( $( this ).is( '.wc_input_country_iso' ) ) {
|
||||
regex = new RegExp( '([^A-Z])+|(.){3,}', 'im' );
|
||||
error = 'i18n_country_iso_error';
|
||||
} else {
|
||||
checkDecimalNumbers = true;
|
||||
regex = new RegExp(
|
||||
'[^-0-9%\\' +
|
||||
woocommerce_admin.decimal_point +
|
||||
']+',
|
||||
'gi'
|
||||
);
|
||||
decimalRegex = new RegExp(
|
||||
'[^\\' + woocommerce_admin.decimal_point + ']',
|
||||
'gi'
|
||||
);
|
||||
error = 'i18n_decimal_error';
|
||||
}
|
||||
|
||||
var value = $( this ).val();
|
||||
var newvalue = value.replace( regex, '' );
|
||||
|
||||
// Check if newvalue have more than one decimal point.
|
||||
if (
|
||||
checkDecimalNumbers &&
|
||||
1 < newvalue.replace( decimalRegex, '' ).length
|
||||
) {
|
||||
newvalue = newvalue.replace( decimalRegex, '' );
|
||||
}
|
||||
|
||||
if ( value !== newvalue ) {
|
||||
$( document.body ).triggerHandler( 'wc_add_error_tip', [
|
||||
$( this ),
|
||||
error,
|
||||
] );
|
||||
} else {
|
||||
$(
|
||||
document.body
|
||||
).triggerHandler( 'wc_remove_error_tip', [
|
||||
$( this ),
|
||||
error,
|
||||
] );
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
.on(
|
||||
'change',
|
||||
'#_sale_price.wc_input_price[type=text], .wc_input_price[name^=variable_sale_price]',
|
||||
function () {
|
||||
var sale_price_field = $( this ),
|
||||
regular_price_field;
|
||||
|
||||
if (
|
||||
sale_price_field
|
||||
.attr( 'name' )
|
||||
.indexOf( 'variable' ) !== -1
|
||||
) {
|
||||
regular_price_field = sale_price_field
|
||||
.parents( '.variable_pricing' )
|
||||
.find(
|
||||
'.wc_input_price[name^=variable_regular_price]'
|
||||
);
|
||||
} else {
|
||||
regular_price_field = $( '#_regular_price' );
|
||||
}
|
||||
|
||||
var sale_price = parseFloat(
|
||||
window.accounting.unformat(
|
||||
sale_price_field.val(),
|
||||
woocommerce_admin.mon_decimal_point
|
||||
)
|
||||
);
|
||||
var regular_price = parseFloat(
|
||||
window.accounting.unformat(
|
||||
regular_price_field.val(),
|
||||
woocommerce_admin.mon_decimal_point
|
||||
)
|
||||
);
|
||||
|
||||
if ( sale_price >= regular_price ) {
|
||||
$( this ).val( '' );
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
.on(
|
||||
'keyup',
|
||||
'#_sale_price.wc_input_price[type=text], .wc_input_price[name^=variable_sale_price]',
|
||||
function () {
|
||||
var sale_price_field = $( this ),
|
||||
regular_price_field;
|
||||
|
||||
if (
|
||||
sale_price_field
|
||||
.attr( 'name' )
|
||||
.indexOf( 'variable' ) !== -1
|
||||
) {
|
||||
regular_price_field = sale_price_field
|
||||
.parents( '.variable_pricing' )
|
||||
.find(
|
||||
'.wc_input_price[name^=variable_regular_price]'
|
||||
);
|
||||
} else {
|
||||
regular_price_field = $( '#_regular_price' );
|
||||
}
|
||||
|
||||
var sale_price = parseFloat(
|
||||
window.accounting.unformat(
|
||||
sale_price_field.val(),
|
||||
woocommerce_admin.mon_decimal_point
|
||||
)
|
||||
);
|
||||
var regular_price = parseFloat(
|
||||
window.accounting.unformat(
|
||||
regular_price_field.val(),
|
||||
woocommerce_admin.mon_decimal_point
|
||||
)
|
||||
);
|
||||
|
||||
if ( sale_price >= regular_price ) {
|
||||
$( document.body ).triggerHandler( 'wc_add_error_tip', [
|
||||
$( this ),
|
||||
'i18n_sale_less_than_regular_error',
|
||||
] );
|
||||
} else {
|
||||
$(
|
||||
document.body
|
||||
).triggerHandler( 'wc_remove_error_tip', [
|
||||
$( this ),
|
||||
'i18n_sale_less_than_regular_error',
|
||||
] );
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
.on( 'init_tooltips', function () {
|
||||
$( '.tips, .help_tip, .woocommerce-help-tip' ).tipTip( {
|
||||
attribute: 'data-tip',
|
||||
fadeIn: 50,
|
||||
fadeOut: 50,
|
||||
delay: 200,
|
||||
keepAlive: true,
|
||||
} );
|
||||
|
||||
$( '.column-wc_actions .wc-action-button' ).tipTip( {
|
||||
fadeIn: 50,
|
||||
fadeOut: 50,
|
||||
delay: 200,
|
||||
} );
|
||||
|
||||
// Add tiptip to parent element for widefat tables
|
||||
$( '.parent-tips' ).each( function () {
|
||||
$( this )
|
||||
.closest( 'a, th' )
|
||||
.attr( 'data-tip', $( this ).data( 'tip' ) )
|
||||
.tipTip( {
|
||||
attribute: 'data-tip',
|
||||
fadeIn: 50,
|
||||
fadeOut: 50,
|
||||
delay: 200,
|
||||
keepAlive: true,
|
||||
} )
|
||||
.css( 'cursor', 'help' );
|
||||
} );
|
||||
} )
|
||||
|
||||
.on( 'click', '.wc-confirm-delete', function ( event ) {
|
||||
if (
|
||||
! window.confirm( woocommerce_admin.i18n_confirm_delete )
|
||||
) {
|
||||
event.stopPropagation();
|
||||
}
|
||||
} );
|
||||
|
||||
// Tooltips
|
||||
$( document.body ).trigger( 'init_tooltips' );
|
||||
|
||||
// wc_input_table tables
|
||||
$( '.wc_input_table.sortable tbody' ).sortable( {
|
||||
items: 'tr',
|
||||
cursor: 'move',
|
||||
axis: 'y',
|
||||
scrollSensitivity: 40,
|
||||
forcePlaceholderSize: true,
|
||||
helper: 'clone',
|
||||
opacity: 0.65,
|
||||
placeholder: 'wc-metabox-sortable-placeholder',
|
||||
start: function ( event, ui ) {
|
||||
ui.item.css( 'background-color', '#f6f6f6' );
|
||||
},
|
||||
stop: function ( event, ui ) {
|
||||
ui.item.removeAttr( 'style' );
|
||||
},
|
||||
} );
|
||||
// Focus on inputs within the table if clicked instead of trying to sort.
|
||||
$( '.wc_input_table.sortable tbody input' ).on( 'click', function () {
|
||||
$( this ).trigger( 'focus' );
|
||||
} );
|
||||
|
||||
$( '.wc_input_table .remove_rows' ).on( 'click', function () {
|
||||
var $tbody = $( this ).closest( '.wc_input_table' ).find( 'tbody' );
|
||||
if ( $tbody.find( 'tr.current' ).length > 0 ) {
|
||||
var $current = $tbody.find( 'tr.current' );
|
||||
$current.each( function () {
|
||||
$( this ).remove();
|
||||
} );
|
||||
}
|
||||
return false;
|
||||
} );
|
||||
|
||||
var controlled = false;
|
||||
var shifted = false;
|
||||
var hasFocus = false;
|
||||
|
||||
$( document.body ).on( 'keyup keydown', function ( e ) {
|
||||
shifted = e.shiftKey;
|
||||
controlled = e.ctrlKey || e.metaKey;
|
||||
} );
|
||||
|
||||
$( '.wc_input_table' )
|
||||
.on( 'focus click', 'input', function ( e ) {
|
||||
var $this_table = $( this ).closest( 'table, tbody' );
|
||||
var $this_row = $( this ).closest( 'tr' );
|
||||
|
||||
if (
|
||||
( e.type === 'focus' && hasFocus !== $this_row.index() ) ||
|
||||
( e.type === 'click' && $( this ).is( ':focus' ) )
|
||||
) {
|
||||
hasFocus = $this_row.index();
|
||||
|
||||
if ( ! shifted && ! controlled ) {
|
||||
$( 'tr', $this_table )
|
||||
.removeClass( 'current' )
|
||||
.removeClass( 'last_selected' );
|
||||
$this_row
|
||||
.addClass( 'current' )
|
||||
.addClass( 'last_selected' );
|
||||
} else if ( shifted ) {
|
||||
$( 'tr', $this_table ).removeClass( 'current' );
|
||||
$this_row
|
||||
.addClass( 'selected_now' )
|
||||
.addClass( 'current' );
|
||||
|
||||
if ( $( 'tr.last_selected', $this_table ).length > 0 ) {
|
||||
if (
|
||||
$this_row.index() >
|
||||
$( 'tr.last_selected', $this_table ).index()
|
||||
) {
|
||||
$( 'tr', $this_table )
|
||||
.slice(
|
||||
$(
|
||||
'tr.last_selected',
|
||||
$this_table
|
||||
).index(),
|
||||
$this_row.index()
|
||||
)
|
||||
.addClass( 'current' );
|
||||
} else {
|
||||
$( 'tr', $this_table )
|
||||
.slice(
|
||||
$this_row.index(),
|
||||
$(
|
||||
'tr.last_selected',
|
||||
$this_table
|
||||
).index() + 1
|
||||
)
|
||||
.addClass( 'current' );
|
||||
}
|
||||
}
|
||||
|
||||
$( 'tr', $this_table ).removeClass( 'last_selected' );
|
||||
$this_row.addClass( 'last_selected' );
|
||||
} else {
|
||||
$( 'tr', $this_table ).removeClass( 'last_selected' );
|
||||
if (
|
||||
controlled &&
|
||||
$( this ).closest( 'tr' ).is( '.current' )
|
||||
) {
|
||||
$this_row.removeClass( 'current' );
|
||||
} else {
|
||||
$this_row
|
||||
.addClass( 'current' )
|
||||
.addClass( 'last_selected' );
|
||||
}
|
||||
}
|
||||
|
||||
$( 'tr', $this_table ).removeClass( 'selected_now' );
|
||||
}
|
||||
} )
|
||||
.on( 'blur', 'input', function () {
|
||||
hasFocus = false;
|
||||
} );
|
||||
|
||||
// Additional cost and Attribute term tables
|
||||
$(
|
||||
'.woocommerce_page_wc-settings .shippingrows tbody tr:even, table.attributes-table tbody tr:nth-child(odd)'
|
||||
).addClass( 'alternate' );
|
||||
|
||||
// Show order items on orders page
|
||||
$( document.body ).on( 'click', '.show_order_items', function () {
|
||||
$( this ).closest( 'td' ).find( 'table' ).toggle();
|
||||
return false;
|
||||
} );
|
||||
|
||||
// Select availability
|
||||
$( 'select.availability' )
|
||||
.on( 'change', function () {
|
||||
if ( $( this ).val() === 'all' ) {
|
||||
$( this ).closest( 'tr' ).next( 'tr' ).hide();
|
||||
} else {
|
||||
$( this ).closest( 'tr' ).next( 'tr' ).show();
|
||||
}
|
||||
} )
|
||||
.trigger( 'change' );
|
||||
|
||||
// Hidden options
|
||||
$( '.hide_options_if_checked' ).each( function () {
|
||||
$( this )
|
||||
.find( 'input:eq(0)' )
|
||||
.on( 'change', function () {
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
$( this )
|
||||
.closest( 'fieldset, tr' )
|
||||
.nextUntil(
|
||||
'.hide_options_if_checked, .show_options_if_checked',
|
||||
'.hidden_option'
|
||||
)
|
||||
.hide();
|
||||
} else {
|
||||
$( this )
|
||||
.closest( 'fieldset, tr' )
|
||||
.nextUntil(
|
||||
'.hide_options_if_checked, .show_options_if_checked',
|
||||
'.hidden_option'
|
||||
)
|
||||
.show();
|
||||
}
|
||||
} )
|
||||
.trigger( 'change' );
|
||||
} );
|
||||
|
||||
$( '.show_options_if_checked' ).each( function () {
|
||||
$( this )
|
||||
.find( 'input:eq(0)' )
|
||||
.on( 'change', function () {
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
$( this )
|
||||
.closest( 'fieldset, tr' )
|
||||
.nextUntil(
|
||||
'.hide_options_if_checked, .show_options_if_checked',
|
||||
'.hidden_option'
|
||||
)
|
||||
.show();
|
||||
} else {
|
||||
$( this )
|
||||
.closest( 'fieldset, tr' )
|
||||
.nextUntil(
|
||||
'.hide_options_if_checked, .show_options_if_checked',
|
||||
'.hidden_option'
|
||||
)
|
||||
.hide();
|
||||
}
|
||||
} )
|
||||
.trigger( 'change' );
|
||||
} );
|
||||
|
||||
// Reviews.
|
||||
$( 'input#woocommerce_enable_reviews' )
|
||||
.on( 'change', function () {
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
$( '#woocommerce_enable_review_rating' )
|
||||
.closest( 'tr' )
|
||||
.show();
|
||||
} else {
|
||||
$( '#woocommerce_enable_review_rating' )
|
||||
.closest( 'tr' )
|
||||
.hide();
|
||||
}
|
||||
} )
|
||||
.trigger( 'change' );
|
||||
|
||||
// Attribute term table
|
||||
$( 'table.attributes-table tbody tr:nth-child(odd)' ).addClass(
|
||||
'alternate'
|
||||
);
|
||||
|
||||
// Toggle gateway on/off.
|
||||
$( '.wc_gateways' ).on(
|
||||
'click',
|
||||
'.wc-payment-gateway-method-toggle-enabled',
|
||||
function () {
|
||||
var $link = $( this ),
|
||||
$row = $link.closest( 'tr' ),
|
||||
$toggle = $link.find( '.woocommerce-input-toggle' );
|
||||
|
||||
var data = {
|
||||
action: 'woocommerce_toggle_gateway_enabled',
|
||||
security: woocommerce_admin.nonces.gateway_toggle,
|
||||
gateway_id: $row.data( 'gateway_id' ),
|
||||
};
|
||||
|
||||
$toggle.addClass( 'woocommerce-input-toggle--loading' );
|
||||
|
||||
$.ajax( {
|
||||
url: woocommerce_admin.ajax_url,
|
||||
data: data,
|
||||
dataType: 'json',
|
||||
type: 'POST',
|
||||
success: function ( response ) {
|
||||
if ( true === response.data ) {
|
||||
$toggle.removeClass(
|
||||
'woocommerce-input-toggle--enabled, woocommerce-input-toggle--disabled'
|
||||
);
|
||||
$toggle.addClass(
|
||||
'woocommerce-input-toggle--enabled'
|
||||
);
|
||||
$toggle.removeClass(
|
||||
'woocommerce-input-toggle--loading'
|
||||
);
|
||||
} else if ( false === response.data ) {
|
||||
$toggle.removeClass(
|
||||
'woocommerce-input-toggle--enabled, woocommerce-input-toggle--disabled'
|
||||
);
|
||||
$toggle.addClass(
|
||||
'woocommerce-input-toggle--disabled'
|
||||
);
|
||||
$toggle.removeClass(
|
||||
'woocommerce-input-toggle--loading'
|
||||
);
|
||||
} else if ( 'needs_setup' === response.data ) {
|
||||
window.location.href = $link.attr( 'href' );
|
||||
}
|
||||
},
|
||||
} );
|
||||
|
||||
return false;
|
||||
}
|
||||
);
|
||||
|
||||
$( '#wpbody' ).on( 'click', '#doaction, #doaction2', function () {
|
||||
var action = $( this ).is( '#doaction' )
|
||||
? $( '#bulk-action-selector-top' ).val()
|
||||
: $( '#bulk-action-selector-bottom' ).val();
|
||||
|
||||
if ( 'remove_personal_data' === action ) {
|
||||
return window.confirm(
|
||||
woocommerce_admin.i18n_remove_personal_data_notice
|
||||
);
|
||||
}
|
||||
} );
|
||||
|
||||
var marketplaceSectionDropdown = $(
|
||||
'#marketplace-current-section-dropdown'
|
||||
);
|
||||
var marketplaceSectionName = $( '#marketplace-current-section-name' );
|
||||
var marketplaceMenuIsOpen = false;
|
||||
|
||||
// Add event listener to toggle Marketplace menu on touch devices
|
||||
if ( marketplaceSectionDropdown.length ) {
|
||||
if ( isTouchDevice() ) {
|
||||
marketplaceSectionName.on( 'click', function () {
|
||||
marketplaceMenuIsOpen = ! marketplaceMenuIsOpen;
|
||||
if ( marketplaceMenuIsOpen ) {
|
||||
marketplaceSectionDropdown.addClass( 'is-open' );
|
||||
$( document ).on( 'click', maybeToggleMarketplaceMenu );
|
||||
} else {
|
||||
marketplaceSectionDropdown.removeClass( 'is-open' );
|
||||
$( document ).off(
|
||||
'click',
|
||||
maybeToggleMarketplaceMenu
|
||||
);
|
||||
}
|
||||
} );
|
||||
} else {
|
||||
document.body.classList.add( 'no-touch' );
|
||||
}
|
||||
}
|
||||
|
||||
// Close menu if the user clicks outside it
|
||||
function maybeToggleMarketplaceMenu( e ) {
|
||||
if (
|
||||
! marketplaceSectionDropdown.is( e.target ) &&
|
||||
marketplaceSectionDropdown.has( e.target ).length === 0
|
||||
) {
|
||||
marketplaceSectionDropdown.removeClass( 'is-open' );
|
||||
marketplaceMenuIsOpen = false;
|
||||
$( document ).off( 'click', maybeToggleMarketplaceMenu );
|
||||
}
|
||||
}
|
||||
|
||||
function isTouchDevice() {
|
||||
return (
|
||||
'ontouchstart' in window ||
|
||||
navigator.maxTouchPoints > 0 ||
|
||||
navigator.msMaxTouchPoints > 0
|
||||
);
|
||||
}
|
||||
} );
|
||||
|
||||
$( function() {
|
||||
/**
|
||||
* Handles heartbeat integration of order locking when HPOS is enabled.
|
||||
*/
|
||||
var wc_order_lock = {
|
||||
init: function() {
|
||||
// Order screen.
|
||||
this.$lock_dialog = $( '.woocommerce_page_wc-orders #post-lock-dialog.order-lock-dialog' );
|
||||
if ( 0 !== this.$lock_dialog.length && 'undefined' !== typeof woocommerce_admin_meta_boxes ) {
|
||||
// We do not want WP's lock to interfere.
|
||||
$( document ).off( 'heartbeat-send.refresh-lock' );
|
||||
$( document ).off( 'heartbeat-tick.refresh-lock' );
|
||||
|
||||
$( document ).on( 'heartbeat-send', this.refresh_order_lock );
|
||||
$( document ).on( 'heartbeat-tick', this.check_order_lock );
|
||||
}
|
||||
|
||||
// Orders list table.
|
||||
this.$list_table = $( '.woocommerce_page_wc-orders table.wc-orders-list-table' );
|
||||
if ( 0 !== this.$list_table.length ) {
|
||||
$( document ).on( 'heartbeat-send', this.send_orders_in_list );
|
||||
$( document ).on( 'heartbeat-tick', this.check_orders_in_list );
|
||||
}
|
||||
},
|
||||
|
||||
refresh_order_lock: function( e, data ) {
|
||||
delete data['wp-refresh-post-lock'];
|
||||
data['wc-refresh-order-lock'] = woocommerce_admin_meta_boxes.post_id;
|
||||
},
|
||||
|
||||
check_order_lock: function( e, data ) {
|
||||
var lock_data = data['wc-refresh-order-lock'];
|
||||
|
||||
if ( ! lock_data || ! lock_data.error ) {
|
||||
// No lock request in heartbeat or lock refreshed ok.
|
||||
return;
|
||||
}
|
||||
|
||||
if ( wc_order_lock.$lock_dialog.is( ':visible' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( lock_data.error.user_avatar_src ) {
|
||||
wc_order_lock.$lock_dialog.find( '.post-locked-avatar' ).empty().append(
|
||||
$(
|
||||
'<img />',
|
||||
{
|
||||
'class': 'avatar avatar-64 photo',
|
||||
width: 64,
|
||||
height: 64,
|
||||
alt: '',
|
||||
src: lock_data.error.user_avatar_src,
|
||||
srcset: lock_data.error.user_avatar_src_2x ? lock_data.error.user_avatar_src_2x + ' 2x' : undefined
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
wc_order_lock.$lock_dialog.find( '.currently-editing' ).text( lock_data.error.message );
|
||||
wc_order_lock.$lock_dialog.show();
|
||||
wc_order_lock.$lock_dialog.find( '.wp-tab-first' ).trigger( 'focus' );
|
||||
},
|
||||
|
||||
send_orders_in_list: function( e, data ) {
|
||||
data['wc-check-locked-orders'] = wc_order_lock.$list_table.find( 'tr input[name="id[]"]' ).map(
|
||||
function() { return this.value; }
|
||||
).get();
|
||||
},
|
||||
|
||||
check_orders_in_list: function( e, data ) {
|
||||
var locked_orders = data['wc-check-locked-orders'] || {};
|
||||
|
||||
wc_order_lock.$list_table.find( 'tr' ).each( function( i, tr ) {
|
||||
var $tr = $( tr );
|
||||
var order_id = $tr.find( 'input[name="id[]"]' ).val();
|
||||
|
||||
if ( locked_orders[ order_id ] ) {
|
||||
if ( ! $tr.hasClass( 'wp-locked' ) ) {
|
||||
$tr.find( '.check-column checkbox' ).prop( 'checked', false );
|
||||
$tr.addClass( 'wp-locked' );
|
||||
}
|
||||
} else {
|
||||
$tr.removeClass( 'wp-locked' ).find( '.locked-info span' ).empty();
|
||||
}
|
||||
} );
|
||||
}
|
||||
};
|
||||
|
||||
wc_order_lock.init();
|
||||
} );
|
||||
|
||||
} )( jQuery, woocommerce_admin );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/admin/woocommerce_admin.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/admin/woocommerce_admin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
1
wp/wp-content/plugins/woocommerce/assets/js/flexslider/jquery.flexslider.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/flexslider/jquery.flexslider.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,44 @@
|
||||
jQuery( function( $ ) {
|
||||
|
||||
// woocommerce_params is required to continue, ensure the object exists
|
||||
if ( typeof woocommerce_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$( '#add_payment_method' )
|
||||
|
||||
/* Payment option selection */
|
||||
|
||||
.on( 'click init_add_payment_method', '.payment_methods input.input-radio', function() {
|
||||
if ( $( '.payment_methods input.input-radio' ).length > 1 ) {
|
||||
var target_payment_box = $( 'div.payment_box.' + $( this ).attr( 'ID' ) );
|
||||
if ( $( this ).is( ':checked' ) && ! target_payment_box.is( ':visible' ) ) {
|
||||
$( 'div.payment_box' ).filter( ':visible' ).slideUp( 250 );
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
$( 'div.payment_box.' + $( this ).attr( 'ID' ) ).slideDown( 250 );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$( 'div.payment_box' ).show();
|
||||
}
|
||||
})
|
||||
|
||||
// Trigger initial click
|
||||
.find( 'input[name=payment_method]:checked' ).trigger( 'click' );
|
||||
|
||||
$( '#add_payment_method' ).on( 'submit', function() {
|
||||
$( '#add_payment_method' ).block({ message: null, overlayCSS: { background: '#fff', opacity: 0.6 } });
|
||||
});
|
||||
|
||||
$( document.body ).trigger( 'init_add_payment_method' );
|
||||
|
||||
// Prevent firing multiple requests upon double clicking the buttons in payment methods table
|
||||
$(' .woocommerce .payment-method-actions .button.delete' ).on( 'click' , function( event ) {
|
||||
if ( $( this ).hasClass( 'disabled' ) ) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
$( this ).addClass( 'disabled' );
|
||||
});
|
||||
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/add-payment-method.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/add-payment-method.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){if("undefined"==typeof woocommerce_params)return!1;e("#add_payment_method").on("click init_add_payment_method",".payment_methods input.input-radio",function(){if(e(".payment_methods input.input-radio").length>1){var t=e("div.payment_box."+e(this).attr("ID"));e(this).is(":checked")&&!t.is(":visible")&&(e("div.payment_box").filter(":visible").slideUp(250),e(this).is(":checked")&&e("div.payment_box."+e(this).attr("ID")).slideDown(250))}else e("div.payment_box").show()}).find("input[name=payment_method]:checked").trigger("click"),e("#add_payment_method").on("submit",function(){e("#add_payment_method").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}),e(document.body).trigger("init_add_payment_method"),e(" .woocommerce .payment-method-actions .button.delete").on("click",function(t){e(this).hasClass("disabled")&&t.preventDefault(),e(this).addClass("disabled")})});
|
||||
@@ -0,0 +1,818 @@
|
||||
/*global wc_add_to_cart_variation_params */
|
||||
;(function ( $, window, document, undefined ) {
|
||||
/**
|
||||
* VariationForm class which handles variation forms and attributes.
|
||||
*/
|
||||
var VariationForm = function( $form ) {
|
||||
var self = this;
|
||||
|
||||
self.$form = $form;
|
||||
self.$attributeFields = $form.find( '.variations select' );
|
||||
self.$singleVariation = $form.find( '.single_variation' );
|
||||
self.$singleVariationWrap = $form.find( '.single_variation_wrap' );
|
||||
self.$resetVariations = $form.find( '.reset_variations' );
|
||||
self.$product = $form.closest( '.product' );
|
||||
self.variationData = $form.data( 'product_variations' );
|
||||
self.useAjax = false === self.variationData;
|
||||
self.xhr = false;
|
||||
self.loading = true;
|
||||
|
||||
// Initial state.
|
||||
self.$singleVariationWrap.show();
|
||||
self.$form.off( '.wc-variation-form' );
|
||||
|
||||
// Methods.
|
||||
self.getChosenAttributes = self.getChosenAttributes.bind( self );
|
||||
self.findMatchingVariations = self.findMatchingVariations.bind( self );
|
||||
self.isMatch = self.isMatch.bind( self );
|
||||
self.toggleResetLink = self.toggleResetLink.bind( self );
|
||||
|
||||
// Events.
|
||||
$form.on( 'click.wc-variation-form', '.reset_variations', { variationForm: self }, self.onReset );
|
||||
$form.on( 'reload_product_variations', { variationForm: self }, self.onReload );
|
||||
$form.on( 'hide_variation', { variationForm: self }, self.onHide );
|
||||
$form.on( 'show_variation', { variationForm: self }, self.onShow );
|
||||
$form.on( 'click', '.single_add_to_cart_button', { variationForm: self }, self.onAddToCart );
|
||||
$form.on( 'reset_data', { variationForm: self }, self.onResetDisplayedVariation );
|
||||
$form.on( 'reset_image', { variationForm: self }, self.onResetImage );
|
||||
$form.on( 'change.wc-variation-form', '.variations select', { variationForm: self }, self.onChange );
|
||||
$form.on( 'found_variation.wc-variation-form', { variationForm: self }, self.onFoundVariation );
|
||||
$form.on( 'check_variations.wc-variation-form', { variationForm: self }, self.onFindVariation );
|
||||
$form.on( 'update_variation_values.wc-variation-form', { variationForm: self }, self.onUpdateAttributes );
|
||||
|
||||
// Init after gallery.
|
||||
setTimeout( function() {
|
||||
$form.trigger( 'check_variations' );
|
||||
$form.trigger( 'wc_variation_form', self );
|
||||
self.loading = false;
|
||||
}, 100 );
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset all fields.
|
||||
*/
|
||||
VariationForm.prototype.onReset = function( event ) {
|
||||
event.preventDefault();
|
||||
event.data.variationForm.$attributeFields.val( '' ).trigger( 'change' );
|
||||
event.data.variationForm.$form.trigger( 'reset_data' );
|
||||
};
|
||||
|
||||
/**
|
||||
* Reload variation data from the DOM.
|
||||
*/
|
||||
VariationForm.prototype.onReload = function( event ) {
|
||||
var form = event.data.variationForm;
|
||||
form.variationData = form.$form.data( 'product_variations' );
|
||||
form.useAjax = false === form.variationData;
|
||||
form.$form.trigger( 'check_variations' );
|
||||
};
|
||||
|
||||
/**
|
||||
* When a variation is hidden.
|
||||
*/
|
||||
VariationForm.prototype.onHide = function( event ) {
|
||||
event.preventDefault();
|
||||
event.data.variationForm.$form
|
||||
.find( '.single_add_to_cart_button' )
|
||||
.removeClass( 'wc-variation-is-unavailable' )
|
||||
.addClass( 'disabled wc-variation-selection-needed' );
|
||||
event.data.variationForm.$form
|
||||
.find( '.woocommerce-variation-add-to-cart' )
|
||||
.removeClass( 'woocommerce-variation-add-to-cart-enabled' )
|
||||
.addClass( 'woocommerce-variation-add-to-cart-disabled' );
|
||||
};
|
||||
|
||||
/**
|
||||
* When a variation is shown.
|
||||
*/
|
||||
VariationForm.prototype.onShow = function( event, variation, purchasable ) {
|
||||
event.preventDefault();
|
||||
if ( purchasable ) {
|
||||
event.data.variationForm.$form
|
||||
.find( '.single_add_to_cart_button' )
|
||||
.removeClass( 'disabled wc-variation-selection-needed wc-variation-is-unavailable' );
|
||||
event.data.variationForm.$form
|
||||
.find( '.woocommerce-variation-add-to-cart' )
|
||||
.removeClass( 'woocommerce-variation-add-to-cart-disabled' )
|
||||
.addClass( 'woocommerce-variation-add-to-cart-enabled' );
|
||||
} else {
|
||||
event.data.variationForm.$form
|
||||
.find( '.single_add_to_cart_button' )
|
||||
.removeClass( 'wc-variation-selection-needed' )
|
||||
.addClass( 'disabled wc-variation-is-unavailable' );
|
||||
event.data.variationForm.$form
|
||||
.find( '.woocommerce-variation-add-to-cart' )
|
||||
.removeClass( 'woocommerce-variation-add-to-cart-enabled' )
|
||||
.addClass( 'woocommerce-variation-add-to-cart-disabled' );
|
||||
}
|
||||
|
||||
// If present, the media element library needs initialized on the variation description.
|
||||
if ( wp.mediaelement ) {
|
||||
event.data.variationForm.$form.find( '.wp-audio-shortcode, .wp-video-shortcode' )
|
||||
.not( '.mejs-container' )
|
||||
.filter(
|
||||
function () {
|
||||
return ! $( this ).parent().hasClass( 'mejs-mediaelement' );
|
||||
}
|
||||
)
|
||||
.mediaelementplayer( wp.mediaelement.settings );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* When the cart button is pressed.
|
||||
*/
|
||||
VariationForm.prototype.onAddToCart = function( event ) {
|
||||
if ( $( this ).is('.disabled') ) {
|
||||
event.preventDefault();
|
||||
|
||||
if ( $( this ).is('.wc-variation-is-unavailable') ) {
|
||||
window.alert( wc_add_to_cart_variation_params.i18n_unavailable_text );
|
||||
} else if ( $( this ).is('.wc-variation-selection-needed') ) {
|
||||
window.alert( wc_add_to_cart_variation_params.i18n_make_a_selection_text );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* When displayed variation data is reset.
|
||||
*/
|
||||
VariationForm.prototype.onResetDisplayedVariation = function( event ) {
|
||||
var form = event.data.variationForm;
|
||||
form.$product.find( '.product_meta' ).find( '.sku' ).wc_reset_content();
|
||||
form.$product
|
||||
.find( '.product_weight, .woocommerce-product-attributes-item--weight .woocommerce-product-attributes-item__value' )
|
||||
.wc_reset_content();
|
||||
form.$product
|
||||
.find( '.product_dimensions, .woocommerce-product-attributes-item--dimensions .woocommerce-product-attributes-item__value' )
|
||||
.wc_reset_content();
|
||||
form.$form.trigger( 'reset_image' );
|
||||
form.$singleVariation.slideUp( 200 ).trigger( 'hide_variation' );
|
||||
};
|
||||
|
||||
/**
|
||||
* When the product image is reset.
|
||||
*/
|
||||
VariationForm.prototype.onResetImage = function( event ) {
|
||||
event.data.variationForm.$form.wc_variations_image_update( false );
|
||||
};
|
||||
|
||||
/**
|
||||
* Looks for matching variations for current selected attributes.
|
||||
*/
|
||||
VariationForm.prototype.onFindVariation = function( event, chosenAttributes ) {
|
||||
var form = event.data.variationForm,
|
||||
attributes = 'undefined' !== typeof chosenAttributes ? chosenAttributes : form.getChosenAttributes(),
|
||||
currentAttributes = attributes.data;
|
||||
|
||||
if ( attributes.count && attributes.count === attributes.chosenCount ) {
|
||||
if ( form.useAjax ) {
|
||||
if ( form.xhr ) {
|
||||
form.xhr.abort();
|
||||
}
|
||||
form.$form.block( { message: null, overlayCSS: { background: '#fff', opacity: 0.6 } } );
|
||||
currentAttributes.product_id = parseInt( form.$form.data( 'product_id' ), 10 );
|
||||
currentAttributes.custom_data = form.$form.data( 'custom_data' );
|
||||
form.xhr = $.ajax( {
|
||||
url: wc_add_to_cart_variation_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_variation' ),
|
||||
type: 'POST',
|
||||
data: currentAttributes,
|
||||
success: function( variation ) {
|
||||
if ( variation ) {
|
||||
form.$form.trigger( 'found_variation', [ variation ] );
|
||||
} else {
|
||||
form.$form.trigger( 'reset_data' );
|
||||
attributes.chosenCount = 0;
|
||||
|
||||
if ( ! form.loading ) {
|
||||
form.$form
|
||||
.find( '.single_variation' )
|
||||
.after(
|
||||
'<p class="wc-no-matching-variations woocommerce-info">' +
|
||||
wc_add_to_cart_variation_params.i18n_no_matching_variations_text +
|
||||
'</p>'
|
||||
);
|
||||
form.$form.find( '.wc-no-matching-variations' ).slideDown( 200 );
|
||||
}
|
||||
}
|
||||
},
|
||||
complete: function() {
|
||||
form.$form.unblock();
|
||||
}
|
||||
} );
|
||||
} else {
|
||||
form.$form.trigger( 'update_variation_values' );
|
||||
|
||||
var matching_variations = form.findMatchingVariations( form.variationData, currentAttributes ),
|
||||
variation = matching_variations.shift();
|
||||
|
||||
if ( variation ) {
|
||||
form.$form.trigger( 'found_variation', [ variation ] );
|
||||
} else {
|
||||
form.$form.trigger( 'reset_data' );
|
||||
attributes.chosenCount = 0;
|
||||
|
||||
if ( ! form.loading ) {
|
||||
form.$form
|
||||
.find( '.single_variation' )
|
||||
.after(
|
||||
'<p class="wc-no-matching-variations woocommerce-info">' +
|
||||
wc_add_to_cart_variation_params.i18n_no_matching_variations_text +
|
||||
'</p>'
|
||||
);
|
||||
form.$form.find( '.wc-no-matching-variations' ).slideDown( 200 );
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
form.$form.trigger( 'update_variation_values' );
|
||||
form.$form.trigger( 'reset_data' );
|
||||
}
|
||||
|
||||
// Show reset link.
|
||||
form.toggleResetLink( attributes.chosenCount > 0 );
|
||||
};
|
||||
|
||||
/**
|
||||
* Triggered when a variation has been found which matches all attributes.
|
||||
*/
|
||||
VariationForm.prototype.onFoundVariation = function( event, variation ) {
|
||||
var form = event.data.variationForm,
|
||||
$sku = form.$product.find( '.product_meta' ).find( '.sku' ),
|
||||
$weight = form.$product.find(
|
||||
'.product_weight, .woocommerce-product-attributes-item--weight .woocommerce-product-attributes-item__value'
|
||||
),
|
||||
$dimensions = form.$product.find(
|
||||
'.product_dimensions, .woocommerce-product-attributes-item--dimensions .woocommerce-product-attributes-item__value'
|
||||
),
|
||||
$qty_input = form.$singleVariationWrap.find( '.quantity input.qty[name="quantity"]' ),
|
||||
$qty = $qty_input.closest( '.quantity' ),
|
||||
purchasable = true,
|
||||
variation_id = '',
|
||||
template = false,
|
||||
$template_html = '';
|
||||
|
||||
if ( variation.sku ) {
|
||||
$sku.wc_set_content( variation.sku );
|
||||
} else {
|
||||
$sku.wc_reset_content();
|
||||
}
|
||||
|
||||
if ( variation.weight ) {
|
||||
$weight.wc_set_content( variation.weight_html );
|
||||
} else {
|
||||
$weight.wc_reset_content();
|
||||
}
|
||||
|
||||
if ( variation.dimensions ) {
|
||||
// Decode HTML entities.
|
||||
$dimensions.wc_set_content( $.parseHTML( variation.dimensions_html )[0].data );
|
||||
} else {
|
||||
$dimensions.wc_reset_content();
|
||||
}
|
||||
|
||||
form.$form.wc_variations_image_update( variation );
|
||||
|
||||
if ( ! variation.variation_is_visible ) {
|
||||
template = wp_template( 'unavailable-variation-template' );
|
||||
} else {
|
||||
template = wp_template( 'variation-template' );
|
||||
variation_id = variation.variation_id;
|
||||
}
|
||||
|
||||
$template_html = template( {
|
||||
variation: variation
|
||||
} );
|
||||
$template_html = $template_html.replace( '/*<![CDATA[*/', '' );
|
||||
$template_html = $template_html.replace( '/*]]>*/', '' );
|
||||
|
||||
form.$singleVariation.html( $template_html );
|
||||
form.$form.find( 'input[name="variation_id"], input.variation_id' ).val( variation.variation_id ).trigger( 'change' );
|
||||
|
||||
// Hide or show qty input
|
||||
if ( variation.is_sold_individually === 'yes' ) {
|
||||
$qty_input.val( '1' ).attr( 'min', '1' ).attr( 'max', '' ).trigger( 'change' );
|
||||
$qty.hide();
|
||||
} else {
|
||||
|
||||
var qty_val = parseFloat( $qty_input.val() );
|
||||
|
||||
if ( isNaN( qty_val ) ) {
|
||||
qty_val = variation.min_qty;
|
||||
} else {
|
||||
qty_val = qty_val > parseFloat( variation.max_qty ) ? variation.max_qty : qty_val;
|
||||
qty_val = qty_val < parseFloat( variation.min_qty ) ? variation.min_qty : qty_val;
|
||||
}
|
||||
|
||||
$qty_input.attr( 'min', variation.min_qty ).attr( 'max', variation.max_qty ).val( qty_val ).trigger( 'change' );
|
||||
$qty.show();
|
||||
}
|
||||
|
||||
// Enable or disable the add to cart button
|
||||
if ( ! variation.is_purchasable || ! variation.is_in_stock || ! variation.variation_is_visible ) {
|
||||
purchasable = false;
|
||||
}
|
||||
|
||||
// Reveal
|
||||
if ( form.$singleVariation.text().trim() ) {
|
||||
form.$singleVariation.slideDown( 200 ).trigger( 'show_variation', [ variation, purchasable ] );
|
||||
} else {
|
||||
form.$singleVariation.show().trigger( 'show_variation', [ variation, purchasable ] );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Triggered when an attribute field changes.
|
||||
*/
|
||||
VariationForm.prototype.onChange = function( event ) {
|
||||
var form = event.data.variationForm;
|
||||
|
||||
form.$form.find( 'input[name="variation_id"], input.variation_id' ).val( '' ).trigger( 'change' );
|
||||
form.$form.find( '.wc-no-matching-variations' ).remove();
|
||||
|
||||
if ( form.useAjax ) {
|
||||
form.$form.trigger( 'check_variations' );
|
||||
} else {
|
||||
form.$form.trigger( 'woocommerce_variation_select_change' );
|
||||
form.$form.trigger( 'check_variations' );
|
||||
}
|
||||
|
||||
// Custom event for when variation selection has been changed
|
||||
form.$form.trigger( 'woocommerce_variation_has_changed' );
|
||||
};
|
||||
|
||||
/**
|
||||
* Escape quotes in a string.
|
||||
* @param {string} string
|
||||
* @return {string}
|
||||
*/
|
||||
VariationForm.prototype.addSlashes = function( string ) {
|
||||
string = string.replace( /'/g, '\\\'' );
|
||||
string = string.replace( /"/g, '\\\"' );
|
||||
return string;
|
||||
};
|
||||
|
||||
/**
|
||||
* Updates attributes in the DOM to show valid values.
|
||||
*/
|
||||
VariationForm.prototype.onUpdateAttributes = function( event ) {
|
||||
var form = event.data.variationForm,
|
||||
attributes = form.getChosenAttributes(),
|
||||
currentAttributes = attributes.data;
|
||||
|
||||
if ( form.useAjax ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Loop through selects and disable/enable options based on selections.
|
||||
form.$attributeFields.each( function( index, el ) {
|
||||
var current_attr_select = $( el ),
|
||||
current_attr_name = current_attr_select.data( 'attribute_name' ) || current_attr_select.attr( 'name' ),
|
||||
show_option_none = $( el ).data( 'show_option_none' ),
|
||||
option_gt_filter = ':gt(0)',
|
||||
attached_options_count = 0,
|
||||
new_attr_select = $( '<select/>' ),
|
||||
selected_attr_val = current_attr_select.val() || '',
|
||||
selected_attr_val_valid = true;
|
||||
|
||||
// Reference options set at first.
|
||||
if ( ! current_attr_select.data( 'attribute_html' ) ) {
|
||||
var refSelect = current_attr_select.clone();
|
||||
|
||||
refSelect.find( 'option' ).removeAttr( 'attached' ).prop( 'disabled', false ).prop( 'selected', false );
|
||||
|
||||
// Legacy data attribute.
|
||||
current_attr_select.data(
|
||||
'attribute_options',
|
||||
refSelect.find( 'option' + option_gt_filter ).get()
|
||||
);
|
||||
current_attr_select.data( 'attribute_html', refSelect.html() );
|
||||
}
|
||||
|
||||
new_attr_select.html( current_attr_select.data( 'attribute_html' ) );
|
||||
|
||||
// The attribute of this select field should not be taken into account when calculating its matching variations:
|
||||
// The constraints of this attribute are shaped by the values of the other attributes.
|
||||
var checkAttributes = $.extend( true, {}, currentAttributes );
|
||||
|
||||
checkAttributes[ current_attr_name ] = '';
|
||||
|
||||
var variations = form.findMatchingVariations( form.variationData, checkAttributes );
|
||||
|
||||
// Loop through variations.
|
||||
for ( var num in variations ) {
|
||||
if ( typeof( variations[ num ] ) !== 'undefined' ) {
|
||||
var variationAttributes = variations[ num ].attributes;
|
||||
|
||||
for ( var attr_name in variationAttributes ) {
|
||||
if ( variationAttributes.hasOwnProperty( attr_name ) ) {
|
||||
var attr_val = variationAttributes[ attr_name ],
|
||||
variation_active = '';
|
||||
|
||||
if ( attr_name === current_attr_name ) {
|
||||
if ( variations[ num ].variation_is_active ) {
|
||||
variation_active = 'enabled';
|
||||
}
|
||||
|
||||
if ( attr_val ) {
|
||||
// Decode entities.
|
||||
attr_val = $( '<div/>' ).html( attr_val ).text();
|
||||
|
||||
// Attach to matching options by value. This is done to compare
|
||||
// TEXT values rather than any HTML entities.
|
||||
var $option_elements = new_attr_select.find( 'option' );
|
||||
if ( $option_elements.length ) {
|
||||
for (var i = 0, len = $option_elements.length; i < len; i++) {
|
||||
var $option_element = $( $option_elements[i] ),
|
||||
option_value = $option_element.val();
|
||||
|
||||
if ( attr_val === option_value ) {
|
||||
$option_element.addClass( 'attached ' + variation_active );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Attach all apart from placeholder.
|
||||
new_attr_select.find( 'option:gt(0)' ).addClass( 'attached ' + variation_active );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Count available options.
|
||||
attached_options_count = new_attr_select.find( 'option.attached' ).length;
|
||||
|
||||
// Check if current selection is in attached options.
|
||||
if ( selected_attr_val ) {
|
||||
selected_attr_val_valid = false;
|
||||
|
||||
if ( 0 !== attached_options_count ) {
|
||||
new_attr_select.find( 'option.attached.enabled' ).each( function() {
|
||||
var option_value = $( this ).val();
|
||||
|
||||
if ( selected_attr_val === option_value ) {
|
||||
selected_attr_val_valid = true;
|
||||
return false; // break.
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Detach the placeholder if:
|
||||
// - Valid options exist.
|
||||
// - The current selection is non-empty.
|
||||
// - The current selection is valid.
|
||||
// - Placeholders are not set to be permanently visible.
|
||||
if ( attached_options_count > 0 && selected_attr_val && selected_attr_val_valid && ( 'no' === show_option_none ) ) {
|
||||
new_attr_select.find( 'option:first' ).remove();
|
||||
option_gt_filter = '';
|
||||
}
|
||||
|
||||
// Detach unattached.
|
||||
new_attr_select.find( 'option' + option_gt_filter + ':not(.attached)' ).remove();
|
||||
|
||||
// Finally, copy to DOM and set value.
|
||||
current_attr_select.html( new_attr_select.html() );
|
||||
current_attr_select.find( 'option' + option_gt_filter + ':not(.enabled)' ).prop( 'disabled', true );
|
||||
|
||||
// Choose selected value.
|
||||
if ( selected_attr_val ) {
|
||||
// If the previously selected value is no longer available, fall back to the placeholder (it's going to be there).
|
||||
if ( selected_attr_val_valid ) {
|
||||
current_attr_select.val( selected_attr_val );
|
||||
} else {
|
||||
current_attr_select.val( '' ).trigger( 'change' );
|
||||
}
|
||||
} else {
|
||||
current_attr_select.val( '' ); // No change event to prevent infinite loop.
|
||||
}
|
||||
});
|
||||
|
||||
// Custom event for when variations have been updated.
|
||||
form.$form.trigger( 'woocommerce_update_variation_values' );
|
||||
};
|
||||
|
||||
/**
|
||||
* Get chosen attributes from form.
|
||||
* @return array
|
||||
*/
|
||||
VariationForm.prototype.getChosenAttributes = function() {
|
||||
var data = {};
|
||||
var count = 0;
|
||||
var chosen = 0;
|
||||
|
||||
this.$attributeFields.each( function() {
|
||||
var attribute_name = $( this ).data( 'attribute_name' ) || $( this ).attr( 'name' );
|
||||
var value = $( this ).val() || '';
|
||||
|
||||
if ( value.length > 0 ) {
|
||||
chosen ++;
|
||||
}
|
||||
|
||||
count ++;
|
||||
data[ attribute_name ] = value;
|
||||
});
|
||||
|
||||
return {
|
||||
'count' : count,
|
||||
'chosenCount': chosen,
|
||||
'data' : data
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Find matching variations for attributes.
|
||||
*/
|
||||
VariationForm.prototype.findMatchingVariations = function( variations, attributes ) {
|
||||
var matching = [];
|
||||
for ( var i = 0; i < variations.length; i++ ) {
|
||||
var variation = variations[i];
|
||||
|
||||
if ( this.isMatch( variation.attributes, attributes ) ) {
|
||||
matching.push( variation );
|
||||
}
|
||||
}
|
||||
return matching;
|
||||
};
|
||||
|
||||
/**
|
||||
* See if attributes match.
|
||||
* @return {Boolean}
|
||||
*/
|
||||
VariationForm.prototype.isMatch = function( variation_attributes, attributes ) {
|
||||
var match = true;
|
||||
for ( var attr_name in variation_attributes ) {
|
||||
if ( variation_attributes.hasOwnProperty( attr_name ) ) {
|
||||
var val1 = variation_attributes[ attr_name ];
|
||||
var val2 = attributes[ attr_name ];
|
||||
if ( val1 !== undefined && val2 !== undefined && val1.length !== 0 && val2.length !== 0 && val1 !== val2 ) {
|
||||
match = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return match;
|
||||
};
|
||||
|
||||
/**
|
||||
* Show or hide the reset link.
|
||||
*/
|
||||
VariationForm.prototype.toggleResetLink = function( on ) {
|
||||
if ( on ) {
|
||||
if ( this.$resetVariations.css( 'visibility' ) === 'hidden' ) {
|
||||
this.$resetVariations.css( 'visibility', 'visible' ).hide().fadeIn();
|
||||
}
|
||||
} else {
|
||||
this.$resetVariations.css( 'visibility', 'hidden' );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to call wc_variation_form on jquery selector.
|
||||
*/
|
||||
$.fn.wc_variation_form = function() {
|
||||
new VariationForm( this );
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Stores the default text for an element so it can be reset later
|
||||
*/
|
||||
$.fn.wc_set_content = function( content ) {
|
||||
if ( undefined === this.attr( 'data-o_content' ) ) {
|
||||
this.attr( 'data-o_content', this.text() );
|
||||
}
|
||||
this.text( content );
|
||||
};
|
||||
|
||||
/**
|
||||
* Stores the default text for an element so it can be reset later
|
||||
*/
|
||||
$.fn.wc_reset_content = function() {
|
||||
if ( undefined !== this.attr( 'data-o_content' ) ) {
|
||||
this.text( this.attr( 'data-o_content' ) );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Stores a default attribute for an element so it can be reset later
|
||||
*/
|
||||
$.fn.wc_set_variation_attr = function( attr, value ) {
|
||||
if ( undefined === this.attr( 'data-o_' + attr ) ) {
|
||||
this.attr( 'data-o_' + attr, ( ! this.attr( attr ) ) ? '' : this.attr( attr ) );
|
||||
}
|
||||
if ( false === value ) {
|
||||
this.removeAttr( attr );
|
||||
} else {
|
||||
this.attr( attr, value );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset a default attribute for an element so it can be reset later
|
||||
*/
|
||||
$.fn.wc_reset_variation_attr = function( attr ) {
|
||||
if ( undefined !== this.attr( 'data-o_' + attr ) ) {
|
||||
this.attr( attr, this.attr( 'data-o_' + attr ) );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset the slide position if the variation has a different image than the current one
|
||||
*/
|
||||
$.fn.wc_maybe_trigger_slide_position_reset = function( variation ) {
|
||||
var $form = $( this ),
|
||||
$product = $form.closest( '.product' ),
|
||||
$product_gallery = $product.find( '.images' ),
|
||||
reset_slide_position = false,
|
||||
new_image_id = ( variation && variation.image_id ) ? variation.image_id : '';
|
||||
|
||||
if ( $form.attr( 'current-image' ) !== new_image_id ) {
|
||||
reset_slide_position = true;
|
||||
}
|
||||
|
||||
$form.attr( 'current-image', new_image_id );
|
||||
|
||||
if ( reset_slide_position ) {
|
||||
$product_gallery.trigger( 'woocommerce_gallery_reset_slide_position' );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets product images for the chosen variation
|
||||
*/
|
||||
$.fn.wc_variations_image_update = function( variation ) {
|
||||
var $form = this,
|
||||
$product = $form.closest( '.product' ),
|
||||
$product_gallery = $product.find( '.images' ),
|
||||
$gallery_nav = $product.find( '.flex-control-nav' ),
|
||||
$gallery_img = $gallery_nav.find( 'li:eq(0) img' ),
|
||||
$product_img_wrap = $product_gallery
|
||||
.find( '.woocommerce-product-gallery__image, .woocommerce-product-gallery__image--placeholder' )
|
||||
.eq( 0 ),
|
||||
$product_img = $product_img_wrap.find( '.wp-post-image' ),
|
||||
$product_link = $product_img_wrap.find( 'a' ).eq( 0 );
|
||||
|
||||
if ( variation && variation.image && variation.image.src && variation.image.src.length > 1 ) {
|
||||
// See if the gallery has an image with the same original src as the image we want to switch to.
|
||||
var galleryHasImage = $gallery_nav.find( 'li img[data-o_src="' + variation.image.gallery_thumbnail_src + '"]' ).length > 0;
|
||||
|
||||
// If the gallery has the image, reset the images. We'll scroll to the correct one.
|
||||
if ( galleryHasImage ) {
|
||||
$form.wc_variations_image_reset();
|
||||
}
|
||||
|
||||
// See if gallery has a matching image we can slide to.
|
||||
var slideToImage = $gallery_nav.find( 'li img[src="' + variation.image.gallery_thumbnail_src + '"]' );
|
||||
|
||||
if ( slideToImage.length > 0 ) {
|
||||
slideToImage.trigger( 'click' );
|
||||
$form.attr( 'current-image', variation.image_id );
|
||||
window.setTimeout( function() {
|
||||
$( window ).trigger( 'resize' );
|
||||
$product_gallery.trigger( 'woocommerce_gallery_init_zoom' );
|
||||
}, 20 );
|
||||
return;
|
||||
}
|
||||
|
||||
$product_img.wc_set_variation_attr( 'src', variation.image.src );
|
||||
$product_img.wc_set_variation_attr( 'height', variation.image.src_h );
|
||||
$product_img.wc_set_variation_attr( 'width', variation.image.src_w );
|
||||
$product_img.wc_set_variation_attr( 'srcset', variation.image.srcset );
|
||||
$product_img.wc_set_variation_attr( 'sizes', variation.image.sizes );
|
||||
$product_img.wc_set_variation_attr( 'title', variation.image.title );
|
||||
$product_img.wc_set_variation_attr( 'data-caption', variation.image.caption );
|
||||
$product_img.wc_set_variation_attr( 'alt', variation.image.alt );
|
||||
$product_img.wc_set_variation_attr( 'data-src', variation.image.full_src );
|
||||
$product_img.wc_set_variation_attr( 'data-large_image', variation.image.full_src );
|
||||
$product_img.wc_set_variation_attr( 'data-large_image_width', variation.image.full_src_w );
|
||||
$product_img.wc_set_variation_attr( 'data-large_image_height', variation.image.full_src_h );
|
||||
$product_img_wrap.wc_set_variation_attr( 'data-thumb', variation.image.src );
|
||||
$gallery_img.wc_set_variation_attr( 'src', variation.image.gallery_thumbnail_src );
|
||||
$product_link.wc_set_variation_attr( 'href', variation.image.full_src );
|
||||
} else {
|
||||
$form.wc_variations_image_reset();
|
||||
}
|
||||
|
||||
window.setTimeout( function() {
|
||||
$( window ).trigger( 'resize' );
|
||||
$form.wc_maybe_trigger_slide_position_reset( variation );
|
||||
$product_gallery.trigger( 'woocommerce_gallery_init_zoom' );
|
||||
}, 20 );
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset main image to defaults.
|
||||
*/
|
||||
$.fn.wc_variations_image_reset = function() {
|
||||
var $form = this,
|
||||
$product = $form.closest( '.product' ),
|
||||
$product_gallery = $product.find( '.images' ),
|
||||
$gallery_nav = $product.find( '.flex-control-nav' ),
|
||||
$gallery_img = $gallery_nav.find( 'li:eq(0) img' ),
|
||||
$product_img_wrap = $product_gallery
|
||||
.find( '.woocommerce-product-gallery__image, .woocommerce-product-gallery__image--placeholder' )
|
||||
.eq( 0 ),
|
||||
$product_img = $product_img_wrap.find( '.wp-post-image' ),
|
||||
$product_link = $product_img_wrap.find( 'a' ).eq( 0 );
|
||||
|
||||
$product_img.wc_reset_variation_attr( 'src' );
|
||||
$product_img.wc_reset_variation_attr( 'width' );
|
||||
$product_img.wc_reset_variation_attr( 'height' );
|
||||
$product_img.wc_reset_variation_attr( 'srcset' );
|
||||
$product_img.wc_reset_variation_attr( 'sizes' );
|
||||
$product_img.wc_reset_variation_attr( 'title' );
|
||||
$product_img.wc_reset_variation_attr( 'data-caption' );
|
||||
$product_img.wc_reset_variation_attr( 'alt' );
|
||||
$product_img.wc_reset_variation_attr( 'data-src' );
|
||||
$product_img.wc_reset_variation_attr( 'data-large_image' );
|
||||
$product_img.wc_reset_variation_attr( 'data-large_image_width' );
|
||||
$product_img.wc_reset_variation_attr( 'data-large_image_height' );
|
||||
$product_img_wrap.wc_reset_variation_attr( 'data-thumb' );
|
||||
$gallery_img.wc_reset_variation_attr( 'src' );
|
||||
$product_link.wc_reset_variation_attr( 'href' );
|
||||
};
|
||||
|
||||
$(function() {
|
||||
if ( typeof wc_add_to_cart_variation_params !== 'undefined' ) {
|
||||
$( '.variations_form' ).each( function() {
|
||||
$( this ).wc_variation_form();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Matches inline variation objects to chosen attributes
|
||||
* @deprecated 2.6.9
|
||||
* @type {Object}
|
||||
*/
|
||||
var wc_variation_form_matcher = {
|
||||
find_matching_variations: function( product_variations, settings ) {
|
||||
var matching = [];
|
||||
for ( var i = 0; i < product_variations.length; i++ ) {
|
||||
var variation = product_variations[i];
|
||||
|
||||
if ( wc_variation_form_matcher.variations_match( variation.attributes, settings ) ) {
|
||||
matching.push( variation );
|
||||
}
|
||||
}
|
||||
return matching;
|
||||
},
|
||||
variations_match: function( attrs1, attrs2 ) {
|
||||
var match = true;
|
||||
for ( var attr_name in attrs1 ) {
|
||||
if ( attrs1.hasOwnProperty( attr_name ) ) {
|
||||
var val1 = attrs1[ attr_name ];
|
||||
var val2 = attrs2[ attr_name ];
|
||||
if ( val1 !== undefined && val2 !== undefined && val1.length !== 0 && val2.length !== 0 && val1 !== val2 ) {
|
||||
match = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return match;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Avoids using wp.template where possible in order to be CSP compliant.
|
||||
* wp.template uses internally eval().
|
||||
* @param {string} templateId
|
||||
* @return {Function}
|
||||
*/
|
||||
var wp_template = function( templateId ) {
|
||||
var html = document.getElementById( 'tmpl-' + templateId ).textContent;
|
||||
var hard = false;
|
||||
// any <# #> interpolate (evaluate).
|
||||
hard = hard || /<#\s?data\./.test( html );
|
||||
// any data that is NOT data.variation.
|
||||
hard = hard || /{{{?\s?data\.(?!variation\.).+}}}?/.test( html );
|
||||
// any data access deeper than 1 level e.g.
|
||||
// data.variation.object.item
|
||||
// data.variation.object['item']
|
||||
// data.variation.array[0]
|
||||
hard = hard || /{{{?\s?data\.variation\.[\w-]*[^\s}]/.test ( html );
|
||||
if ( hard ) {
|
||||
return wp.template( templateId );
|
||||
}
|
||||
return function template ( data ) {
|
||||
var variation = data.variation || {};
|
||||
return html.replace( /({{{?)\s?data\.variation\.([\w-]*)\s?(}}}?)/g, function( _, open, key, close ) {
|
||||
// Error in the format, ignore.
|
||||
if ( open.length !== close.length ) {
|
||||
return '';
|
||||
}
|
||||
var replacement = variation[ key ] || '';
|
||||
// {{{ }}} => interpolate (unescaped).
|
||||
// {{ }} => interpolate (escaped).
|
||||
// https://codex.wordpress.org/Javascript_Reference/wp.template
|
||||
if ( open.length === 2 ) {
|
||||
return window.escape( replacement );
|
||||
}
|
||||
return replacement;
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
})( jQuery, window, document );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,214 @@
|
||||
/* global wc_add_to_cart_params */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
if ( typeof wc_add_to_cart_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* AddToCartHandler class.
|
||||
*/
|
||||
var AddToCartHandler = function() {
|
||||
this.requests = [];
|
||||
this.addRequest = this.addRequest.bind( this );
|
||||
this.run = this.run.bind( this );
|
||||
|
||||
$( document.body )
|
||||
.on( 'click', '.add_to_cart_button:not(.wc-interactive)', { addToCartHandler: this }, this.onAddToCart )
|
||||
.on( 'click', '.remove_from_cart_button', { addToCartHandler: this }, this.onRemoveFromCart )
|
||||
.on( 'added_to_cart', this.updateButton )
|
||||
.on( 'ajax_request_not_sent.adding_to_cart', this.updateButton )
|
||||
.on( 'added_to_cart removed_from_cart', { addToCartHandler: this }, this.updateFragments );
|
||||
};
|
||||
|
||||
/**
|
||||
* Add add to cart event.
|
||||
*/
|
||||
AddToCartHandler.prototype.addRequest = function( request ) {
|
||||
this.requests.push( request );
|
||||
|
||||
if ( 1 === this.requests.length ) {
|
||||
this.run();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Run add to cart events.
|
||||
*/
|
||||
AddToCartHandler.prototype.run = function() {
|
||||
var requestManager = this,
|
||||
originalCallback = requestManager.requests[0].complete;
|
||||
|
||||
requestManager.requests[0].complete = function() {
|
||||
if ( typeof originalCallback === 'function' ) {
|
||||
originalCallback();
|
||||
}
|
||||
|
||||
requestManager.requests.shift();
|
||||
|
||||
if ( requestManager.requests.length > 0 ) {
|
||||
requestManager.run();
|
||||
}
|
||||
};
|
||||
|
||||
$.ajax( this.requests[0] );
|
||||
};
|
||||
|
||||
/**
|
||||
* Handle the add to cart event.
|
||||
*/
|
||||
AddToCartHandler.prototype.onAddToCart = function( e ) {
|
||||
var $thisbutton = $( this );
|
||||
|
||||
if ( $thisbutton.is( '.ajax_add_to_cart' ) ) {
|
||||
if ( ! $thisbutton.attr( 'data-product_id' ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
$thisbutton.removeClass( 'added' );
|
||||
$thisbutton.addClass( 'loading' );
|
||||
|
||||
// Allow 3rd parties to validate and quit early.
|
||||
if ( false === $( document.body ).triggerHandler( 'should_send_ajax_request.adding_to_cart', [ $thisbutton ] ) ) {
|
||||
$( document.body ).trigger( 'ajax_request_not_sent.adding_to_cart', [ false, false, $thisbutton ] );
|
||||
return true;
|
||||
}
|
||||
|
||||
var data = {};
|
||||
|
||||
// Fetch changes that are directly added by calling $thisbutton.data( key, value )
|
||||
$.each( $thisbutton.data(), function( key, value ) {
|
||||
data[ key ] = value;
|
||||
});
|
||||
|
||||
// Fetch data attributes in $thisbutton. Give preference to data-attributes because they can be directly modified by javascript
|
||||
// while `.data` are jquery specific memory stores.
|
||||
$.each( $thisbutton[0].dataset, function( key, value ) {
|
||||
data[ key ] = value;
|
||||
});
|
||||
|
||||
// Trigger event.
|
||||
$( document.body ).trigger( 'adding_to_cart', [ $thisbutton, data ] );
|
||||
|
||||
e.data.addToCartHandler.addRequest({
|
||||
type: 'POST',
|
||||
url: wc_add_to_cart_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'add_to_cart' ),
|
||||
data: data,
|
||||
success: function( response ) {
|
||||
if ( ! response ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( response.error && response.product_url ) {
|
||||
window.location = response.product_url;
|
||||
return;
|
||||
}
|
||||
|
||||
// Redirect to cart option
|
||||
if ( wc_add_to_cart_params.cart_redirect_after_add === 'yes' ) {
|
||||
window.location = wc_add_to_cart_params.cart_url;
|
||||
return;
|
||||
}
|
||||
|
||||
// Trigger event so themes can refresh other areas.
|
||||
$( document.body ).trigger( 'added_to_cart', [ response.fragments, response.cart_hash, $thisbutton ] );
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Update fragments after remove from cart event in mini-cart.
|
||||
*/
|
||||
AddToCartHandler.prototype.onRemoveFromCart = function( e ) {
|
||||
var $thisbutton = $( this ),
|
||||
$row = $thisbutton.closest( '.woocommerce-mini-cart-item' );
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
$row.block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
|
||||
e.data.addToCartHandler.addRequest({
|
||||
type: 'POST',
|
||||
url: wc_add_to_cart_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'remove_from_cart' ),
|
||||
data: {
|
||||
cart_item_key : $thisbutton.data( 'cart_item_key' )
|
||||
},
|
||||
success: function( response ) {
|
||||
if ( ! response || ! response.fragments ) {
|
||||
window.location = $thisbutton.attr( 'href' );
|
||||
return;
|
||||
}
|
||||
|
||||
$( document.body ).trigger( 'removed_from_cart', [ response.fragments, response.cart_hash, $thisbutton ] );
|
||||
},
|
||||
error: function() {
|
||||
window.location = $thisbutton.attr( 'href' );
|
||||
return;
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Update cart page elements after add to cart events.
|
||||
*/
|
||||
AddToCartHandler.prototype.updateButton = function( e, fragments, cart_hash, $button ) {
|
||||
$button = typeof $button === 'undefined' ? false : $button;
|
||||
|
||||
if ( $button ) {
|
||||
$button.removeClass( 'loading' );
|
||||
|
||||
if ( fragments ) {
|
||||
$button.addClass( 'added' );
|
||||
}
|
||||
|
||||
// View cart text.
|
||||
if ( fragments && ! wc_add_to_cart_params.is_cart && $button.parent().find( '.added_to_cart' ).length === 0 ) {
|
||||
$button.after( '<a href="' + wc_add_to_cart_params.cart_url + '" class="added_to_cart wc-forward" title="' +
|
||||
wc_add_to_cart_params.i18n_view_cart + '">' + wc_add_to_cart_params.i18n_view_cart + '</a>' );
|
||||
}
|
||||
|
||||
$( document.body ).trigger( 'wc_cart_button_updated', [ $button ] );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Update fragments after add to cart events.
|
||||
*/
|
||||
AddToCartHandler.prototype.updateFragments = function( e, fragments ) {
|
||||
if ( fragments ) {
|
||||
$.each( fragments, function( key ) {
|
||||
$( key )
|
||||
.addClass( 'updating' )
|
||||
.fadeTo( '400', '0.6' )
|
||||
.block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$.each( fragments, function( key, value ) {
|
||||
$( key ).replaceWith( value );
|
||||
$( key ).stop( true ).css( 'opacity', '1' ).unblock();
|
||||
});
|
||||
|
||||
$( document.body ).trigger( 'wc_fragments_loaded' );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Init AddToCartHandler.
|
||||
*/
|
||||
new AddToCartHandler();
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(t){if("undefined"==typeof wc_add_to_cart_params)return!1;var a=function(){this.requests=[],this.addRequest=this.addRequest.bind(this),this.run=this.run.bind(this),t(document.body).on("click",".add_to_cart_button:not(.wc-interactive)",{addToCartHandler:this},this.onAddToCart).on("click",".remove_from_cart_button",{addToCartHandler:this},this.onRemoveFromCart).on("added_to_cart",this.updateButton).on("ajax_request_not_sent.adding_to_cart",this.updateButton).on("added_to_cart removed_from_cart",{addToCartHandler:this},this.updateFragments)};a.prototype.addRequest=function(t){this.requests.push(t),1===this.requests.length&&this.run()},a.prototype.run=function(){var a=this,e=a.requests[0].complete;a.requests[0].complete=function(){"function"==typeof e&&e(),a.requests.shift(),a.requests.length>0&&a.run()},t.ajax(this.requests[0])},a.prototype.onAddToCart=function(a){var e=t(this);if(e.is(".ajax_add_to_cart")){if(!e.attr("data-product_id"))return!0;if(a.preventDefault(),e.removeClass("added"),e.addClass("loading"),!1===t(document.body).triggerHandler("should_send_ajax_request.adding_to_cart",[e]))return t(document.body).trigger("ajax_request_not_sent.adding_to_cart",[!1,!1,e]),!0;var r={};t.each(e.data(),function(t,a){r[t]=a}),t.each(e[0].dataset,function(t,a){r[t]=a}),t(document.body).trigger("adding_to_cart",[e,r]),a.data.addToCartHandler.addRequest({type:"POST",url:wc_add_to_cart_params.wc_ajax_url.toString().replace("%%endpoint%%","add_to_cart"),data:r,success:function(a){a&&(a.error&&a.product_url?window.location=a.product_url:"yes"!==wc_add_to_cart_params.cart_redirect_after_add?t(document.body).trigger("added_to_cart",[a.fragments,a.cart_hash,e]):window.location=wc_add_to_cart_params.cart_url)},dataType:"json"})}},a.prototype.onRemoveFromCart=function(a){var e=t(this),r=e.closest(".woocommerce-mini-cart-item");a.preventDefault(),r.block({message:null,overlayCSS:{opacity:.6}}),a.data.addToCartHandler.addRequest({type:"POST",url:wc_add_to_cart_params.wc_ajax_url.toString().replace("%%endpoint%%","remove_from_cart"),data:{cart_item_key:e.data("cart_item_key")},success:function(a){a&&a.fragments?t(document.body).trigger("removed_from_cart",[a.fragments,a.cart_hash,e]):window.location=e.attr("href")},error:function(){window.location=e.attr("href")},dataType:"json"})},a.prototype.updateButton=function(a,e,r,d){(d=void 0!==d&&d)&&(d.removeClass("loading"),e&&d.addClass("added"),e&&!wc_add_to_cart_params.is_cart&&0===d.parent().find(".added_to_cart").length&&d.after('<a href="'+wc_add_to_cart_params.cart_url+'" class="added_to_cart wc-forward" title="'+wc_add_to_cart_params.i18n_view_cart+'">'+wc_add_to_cart_params.i18n_view_cart+"</a>"),t(document.body).trigger("wc_cart_button_updated",[d]))},a.prototype.updateFragments=function(a,e){e&&(t.each(e,function(a){t(a).addClass("updating").fadeTo("400","0.6").block({message:null,overlayCSS:{opacity:.6}})}),t.each(e,function(a,e){t(a).replaceWith(e),t(a).stop(!0).css("opacity","1").unblock()}),t(document.body).trigger("wc_fragments_loaded"))},new a});
|
||||
@@ -0,0 +1,151 @@
|
||||
/*global wc_address_i18n_params */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
// wc_address_i18n_params is required to continue, ensure the object exists
|
||||
if ( typeof wc_address_i18n_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var locale_json = wc_address_i18n_params.locale.replace( /"/g, '"' ), locale = JSON.parse( locale_json );
|
||||
|
||||
function field_is_required( field, is_required ) {
|
||||
if ( is_required ) {
|
||||
field.find( 'label .optional' ).remove();
|
||||
field.addClass( 'validate-required' );
|
||||
|
||||
if ( field.find( 'label .required' ).length === 0 ) {
|
||||
field.find( 'label' ).append(
|
||||
' <abbr class="required" title="' +
|
||||
wc_address_i18n_params.i18n_required_text +
|
||||
'">*</abbr>'
|
||||
);
|
||||
}
|
||||
} else {
|
||||
field.find( 'label .required' ).remove();
|
||||
field.removeClass( 'validate-required woocommerce-invalid woocommerce-invalid-required-field' );
|
||||
|
||||
if ( field.find( 'label .optional' ).length === 0 ) {
|
||||
field.find( 'label' ).append( ' <span class="optional">(' + wc_address_i18n_params.i18n_optional_text + ')</span>' );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle locale
|
||||
$( document.body )
|
||||
.on( 'country_to_state_changing', function( event, country, wrapper ) {
|
||||
var thisform = wrapper, thislocale;
|
||||
|
||||
if ( typeof locale[ country ] !== 'undefined' ) {
|
||||
thislocale = locale[ country ];
|
||||
} else {
|
||||
thislocale = locale['default'];
|
||||
}
|
||||
|
||||
var $postcodefield = thisform.find( '#billing_postcode_field, #shipping_postcode_field' ),
|
||||
$cityfield = thisform.find( '#billing_city_field, #shipping_city_field' ),
|
||||
$statefield = thisform.find( '#billing_state_field, #shipping_state_field' );
|
||||
|
||||
if ( ! $postcodefield.attr( 'data-o_class' ) ) {
|
||||
$postcodefield.attr( 'data-o_class', $postcodefield.attr( 'class' ) );
|
||||
$cityfield.attr( 'data-o_class', $cityfield.attr( 'class' ) );
|
||||
$statefield.attr( 'data-o_class', $statefield.attr( 'class' ) );
|
||||
}
|
||||
|
||||
var locale_fields = JSON.parse( wc_address_i18n_params.locale_fields );
|
||||
|
||||
$.each( locale_fields, function( key, value ) {
|
||||
|
||||
var field = thisform.find( value ),
|
||||
fieldLocale = $.extend( true, {}, locale['default'][ key ], thislocale[ key ] );
|
||||
|
||||
// Labels.
|
||||
if ( typeof fieldLocale.label !== 'undefined' ) {
|
||||
field.find( 'label' ).html( fieldLocale.label );
|
||||
}
|
||||
|
||||
// Placeholders.
|
||||
if ( typeof fieldLocale.placeholder !== 'undefined' ) {
|
||||
field.find( ':input' ).attr( 'placeholder', fieldLocale.placeholder );
|
||||
field.find( ':input' ).attr( 'data-placeholder', fieldLocale.placeholder );
|
||||
field.find( '.select2-selection__placeholder' ).text( fieldLocale.placeholder );
|
||||
}
|
||||
|
||||
// Use the i18n label as a placeholder if there is no label element and no i18n placeholder.
|
||||
if (
|
||||
typeof fieldLocale.placeholder === 'undefined' &&
|
||||
typeof fieldLocale.label !== 'undefined' &&
|
||||
! field.find( 'label' ).length
|
||||
) {
|
||||
field.find( ':input' ).attr( 'placeholder', fieldLocale.label );
|
||||
field.find( ':input' ).attr( 'data-placeholder', fieldLocale.label );
|
||||
field.find( '.select2-selection__placeholder' ).text( fieldLocale.label );
|
||||
}
|
||||
|
||||
// Required.
|
||||
if ( typeof fieldLocale.required !== 'undefined' ) {
|
||||
field_is_required( field, fieldLocale.required );
|
||||
} else {
|
||||
field_is_required( field, false );
|
||||
}
|
||||
|
||||
// Priority.
|
||||
if ( typeof fieldLocale.priority !== 'undefined' ) {
|
||||
field.data( 'priority', fieldLocale.priority );
|
||||
}
|
||||
|
||||
// Hidden fields.
|
||||
if ( 'state' !== key ) {
|
||||
if ( typeof fieldLocale.hidden !== 'undefined' && true === fieldLocale.hidden ) {
|
||||
field.hide().find( ':input' ).val( '' );
|
||||
} else {
|
||||
field.show();
|
||||
}
|
||||
}
|
||||
|
||||
// Class changes.
|
||||
if ( Array.isArray( fieldLocale.class ) ) {
|
||||
field.removeClass( 'form-row-first form-row-last form-row-wide' );
|
||||
field.addClass( fieldLocale.class.join( ' ' ) );
|
||||
}
|
||||
});
|
||||
|
||||
var fieldsets = $(
|
||||
'.woocommerce-billing-fields__field-wrapper,' +
|
||||
'.woocommerce-shipping-fields__field-wrapper,' +
|
||||
'.woocommerce-address-fields__field-wrapper,' +
|
||||
'.woocommerce-additional-fields__field-wrapper .woocommerce-account-fields'
|
||||
);
|
||||
|
||||
fieldsets.each( function( index, fieldset ) {
|
||||
var rows = $( fieldset ).find( '.form-row' );
|
||||
var wrapper = rows.first().parent();
|
||||
|
||||
// Before sorting, ensure all fields have a priority for bW compatibility.
|
||||
var last_priority = 0;
|
||||
|
||||
rows.each( function() {
|
||||
if ( ! $( this ).data( 'priority' ) ) {
|
||||
$( this ).data( 'priority', last_priority + 1 );
|
||||
}
|
||||
last_priority = $( this ).data( 'priority' );
|
||||
} );
|
||||
|
||||
// Sort the fields.
|
||||
rows.sort( function( a, b ) {
|
||||
var asort = parseInt( $( a ).data( 'priority' ), 10 ),
|
||||
bsort = parseInt( $( b ).data( 'priority' ), 10 );
|
||||
|
||||
if ( asort > bsort ) {
|
||||
return 1;
|
||||
}
|
||||
if ( asort < bsort ) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
|
||||
rows.detach().appendTo( wrapper );
|
||||
});
|
||||
})
|
||||
.trigger( 'wc_address_i18n_ready' );
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/address-i18n.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/address-i18n.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){if("undefined"==typeof wc_address_i18n_params)return!1;var a=wc_address_i18n_params.locale.replace(/"/g,'"'),i=JSON.parse(a);function d(e,a){a?(e.find("label .optional").remove(),e.addClass("validate-required"),0===e.find("label .required").length&&e.find("label").append(' <abbr class="required" title="'+wc_address_i18n_params.i18n_required_text+'">*</abbr>')):(e.find("label .required").remove(),e.removeClass("validate-required woocommerce-invalid woocommerce-invalid-required-field"),0===e.find("label .optional").length&&e.find("label").append(' <span class="optional">('+wc_address_i18n_params.i18n_optional_text+")</span>"))}e(document.body).on("country_to_state_changing",function(a,r,t){var l,n=t;l="undefined"!=typeof i[r]?i[r]:i["default"];var o=n.find("#billing_postcode_field, #shipping_postcode_field"),s=n.find("#billing_city_field, #shipping_city_field"),p=n.find("#billing_state_field, #shipping_state_field");o.attr("data-o_class")||(o.attr("data-o_class",o.attr("class")),s.attr("data-o_class",s.attr("class")),p.attr("data-o_class",p.attr("class")));var f=JSON.parse(wc_address_i18n_params.locale_fields);e.each(f,function(a,r){var t=n.find(r),o=e.extend(!0,{},i["default"][a],l[a]);"undefined"!=typeof o.label&&t.find("label").html(o.label),"undefined"!=typeof o.placeholder&&(t.find(":input").attr("placeholder",o.placeholder),t.find(":input").attr("data-placeholder",o.placeholder),t.find(".select2-selection__placeholder").text(o.placeholder)),"undefined"!=typeof o.placeholder||"undefined"==typeof o.label||t.find("label").length||(t.find(":input").attr("placeholder",o.label),t.find(":input").attr("data-placeholder",o.label),t.find(".select2-selection__placeholder").text(o.label)),"undefined"!=typeof o.required?d(t,o.required):d(t,!1),"undefined"!=typeof o.priority&&t.data("priority",o.priority),"state"!==a&&("undefined"!=typeof o.hidden&&!0===o.hidden?t.hide().find(":input").val(""):t.show()),Array.isArray(o["class"])&&(t.removeClass("form-row-first form-row-last form-row-wide"),t.addClass(o["class"].join(" ")))}),e(".woocommerce-billing-fields__field-wrapper,.woocommerce-shipping-fields__field-wrapper,.woocommerce-address-fields__field-wrapper,.woocommerce-additional-fields__field-wrapper .woocommerce-account-fields").each(function(a,i){var d=e(i).find(".form-row"),r=d.first().parent(),t=0;d.each(function(){e(this).data("priority")||e(this).data("priority",t+1),t=e(this).data("priority")}),d.sort(function(a,i){var d=parseInt(e(a).data("priority"),10),r=parseInt(e(i).data("priority"),10);return d>r?1:d<r?-1:0}),d.detach().appendTo(r)})}).trigger("wc_address_i18n_ready")});
|
||||
@@ -0,0 +1,187 @@
|
||||
/* global wc_cart_fragments_params, Cookies */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
// wc_cart_fragments_params is required to continue, ensure the object exists
|
||||
if ( typeof wc_cart_fragments_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Storage Handling */
|
||||
var $supports_html5_storage = true,
|
||||
cart_hash_key = wc_cart_fragments_params.cart_hash_key;
|
||||
|
||||
try {
|
||||
$supports_html5_storage = ( 'sessionStorage' in window && window.sessionStorage !== null );
|
||||
window.sessionStorage.setItem( 'wc', 'test' );
|
||||
window.sessionStorage.removeItem( 'wc' );
|
||||
window.localStorage.setItem( 'wc', 'test' );
|
||||
window.localStorage.removeItem( 'wc' );
|
||||
} catch( err ) {
|
||||
$supports_html5_storage = false;
|
||||
}
|
||||
|
||||
/* Cart session creation time to base expiration on */
|
||||
function set_cart_creation_timestamp() {
|
||||
if ( $supports_html5_storage ) {
|
||||
sessionStorage.setItem( 'wc_cart_created', ( new Date() ).getTime() );
|
||||
}
|
||||
}
|
||||
|
||||
/** Set the cart hash in both session and local storage */
|
||||
function set_cart_hash( cart_hash ) {
|
||||
if ( $supports_html5_storage ) {
|
||||
localStorage.setItem( cart_hash_key, cart_hash );
|
||||
sessionStorage.setItem( cart_hash_key, cart_hash );
|
||||
}
|
||||
}
|
||||
|
||||
var $fragment_refresh = {
|
||||
url: wc_cart_fragments_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_refreshed_fragments' ),
|
||||
type: 'POST',
|
||||
data: {
|
||||
time: new Date().getTime()
|
||||
},
|
||||
timeout: wc_cart_fragments_params.request_timeout,
|
||||
success: function( data ) {
|
||||
if ( data && data.fragments ) {
|
||||
|
||||
$.each( data.fragments, function( key, value ) {
|
||||
$( key ).replaceWith( value );
|
||||
});
|
||||
|
||||
if ( $supports_html5_storage ) {
|
||||
sessionStorage.setItem( wc_cart_fragments_params.fragment_name, JSON.stringify( data.fragments ) );
|
||||
set_cart_hash( data.cart_hash );
|
||||
|
||||
if ( data.cart_hash ) {
|
||||
set_cart_creation_timestamp();
|
||||
}
|
||||
}
|
||||
|
||||
$( document.body ).trigger( 'wc_fragments_refreshed' );
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
$( document.body ).trigger( 'wc_fragments_ajax_error' );
|
||||
}
|
||||
};
|
||||
|
||||
/* Named callback for refreshing cart fragment */
|
||||
function refresh_cart_fragment() {
|
||||
$.ajax( $fragment_refresh );
|
||||
}
|
||||
|
||||
/* Cart Handling */
|
||||
if ( $supports_html5_storage ) {
|
||||
|
||||
var cart_timeout = null,
|
||||
day_in_ms = ( 24 * 60 * 60 * 1000 );
|
||||
|
||||
$( document.body ).on( 'wc_fragment_refresh updated_wc_div', function() {
|
||||
refresh_cart_fragment();
|
||||
});
|
||||
|
||||
$( document.body ).on( 'added_to_cart removed_from_cart', function( event, fragments, cart_hash ) {
|
||||
var prev_cart_hash = sessionStorage.getItem( cart_hash_key );
|
||||
|
||||
if ( prev_cart_hash === null || prev_cart_hash === undefined || prev_cart_hash === '' ) {
|
||||
set_cart_creation_timestamp();
|
||||
}
|
||||
|
||||
sessionStorage.setItem( wc_cart_fragments_params.fragment_name, JSON.stringify( fragments ) );
|
||||
set_cart_hash( cart_hash );
|
||||
});
|
||||
|
||||
$( document.body ).on( 'wc_fragments_refreshed', function() {
|
||||
clearTimeout( cart_timeout );
|
||||
cart_timeout = setTimeout( refresh_cart_fragment, day_in_ms );
|
||||
} );
|
||||
|
||||
// Refresh when storage changes in another tab
|
||||
$( window ).on( 'storage onstorage', function ( e ) {
|
||||
if (
|
||||
cart_hash_key === e.originalEvent.key && localStorage.getItem( cart_hash_key ) !== sessionStorage.getItem( cart_hash_key )
|
||||
) {
|
||||
refresh_cart_fragment();
|
||||
}
|
||||
});
|
||||
|
||||
// Refresh when page is shown after back button (safari)
|
||||
$( window ).on( 'pageshow' , function( e ) {
|
||||
if ( e.originalEvent.persisted ) {
|
||||
$( '.widget_shopping_cart_content' ).empty();
|
||||
$( document.body ).trigger( 'wc_fragment_refresh' );
|
||||
}
|
||||
} );
|
||||
|
||||
try {
|
||||
var wc_fragments = JSON.parse( sessionStorage.getItem( wc_cart_fragments_params.fragment_name ) ),
|
||||
cart_hash = sessionStorage.getItem( cart_hash_key ),
|
||||
cookie_hash = Cookies.get( 'woocommerce_cart_hash'),
|
||||
cart_created = sessionStorage.getItem( 'wc_cart_created' );
|
||||
|
||||
if ( cart_hash === null || cart_hash === undefined || cart_hash === '' ) {
|
||||
cart_hash = '';
|
||||
}
|
||||
|
||||
if ( cookie_hash === null || cookie_hash === undefined || cookie_hash === '' ) {
|
||||
cookie_hash = '';
|
||||
}
|
||||
|
||||
if ( cart_hash && ( cart_created === null || cart_created === undefined || cart_created === '' ) ) {
|
||||
throw 'No cart_created';
|
||||
}
|
||||
|
||||
if ( cart_created ) {
|
||||
var cart_expiration = ( ( 1 * cart_created ) + day_in_ms ),
|
||||
timestamp_now = ( new Date() ).getTime();
|
||||
if ( cart_expiration < timestamp_now ) {
|
||||
throw 'Fragment expired';
|
||||
}
|
||||
cart_timeout = setTimeout( refresh_cart_fragment, ( cart_expiration - timestamp_now ) );
|
||||
}
|
||||
|
||||
if ( wc_fragments && wc_fragments['div.widget_shopping_cart_content'] && cart_hash === cookie_hash ) {
|
||||
|
||||
$.each( wc_fragments, function( key, value ) {
|
||||
$( key ).replaceWith(value);
|
||||
});
|
||||
|
||||
$( document.body ).trigger( 'wc_fragments_loaded' );
|
||||
} else {
|
||||
throw 'No fragment';
|
||||
}
|
||||
|
||||
} catch( err ) {
|
||||
refresh_cart_fragment();
|
||||
}
|
||||
|
||||
} else {
|
||||
refresh_cart_fragment();
|
||||
}
|
||||
|
||||
/* Cart Hiding */
|
||||
if ( Cookies.get( 'woocommerce_items_in_cart' ) > 0 ) {
|
||||
$( '.hide_cart_widget_if_empty' ).closest( '.widget_shopping_cart' ).show();
|
||||
} else {
|
||||
$( '.hide_cart_widget_if_empty' ).closest( '.widget_shopping_cart' ).hide();
|
||||
}
|
||||
|
||||
$( document.body ).on( 'adding_to_cart', function() {
|
||||
$( '.hide_cart_widget_if_empty' ).closest( '.widget_shopping_cart' ).show();
|
||||
});
|
||||
|
||||
// Customiser support.
|
||||
var hasSelectiveRefresh = (
|
||||
'undefined' !== typeof wp &&
|
||||
wp.customize &&
|
||||
wp.customize.selectiveRefresh &&
|
||||
wp.customize.widgetsPreview &&
|
||||
wp.customize.widgetsPreview.WidgetPartial
|
||||
);
|
||||
if ( hasSelectiveRefresh ) {
|
||||
wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function() {
|
||||
refresh_cart_fragment();
|
||||
} );
|
||||
}
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){if("undefined"==typeof wc_cart_fragments_params)return!1;var t=!0,r=wc_cart_fragments_params.cart_hash_key;try{t="sessionStorage"in window&&null!==window.sessionStorage,window.sessionStorage.setItem("wc","test"),window.sessionStorage.removeItem("wc"),window.localStorage.setItem("wc","test"),window.localStorage.removeItem("wc")}catch(f){t=!1}function n(){t&&sessionStorage.setItem("wc_cart_created",(new Date).getTime())}function o(e){t&&(localStorage.setItem(r,e),sessionStorage.setItem(r,e))}var a={url:wc_cart_fragments_params.wc_ajax_url.toString().replace("%%endpoint%%","get_refreshed_fragments"),type:"POST",data:{time:(new Date).getTime()},timeout:wc_cart_fragments_params.request_timeout,success:function(r){r&&r.fragments&&(e.each(r.fragments,function(t,r){e(t).replaceWith(r)}),t&&(sessionStorage.setItem(wc_cart_fragments_params.fragment_name,JSON.stringify(r.fragments)),o(r.cart_hash),r.cart_hash&&n()),e(document.body).trigger("wc_fragments_refreshed"))},error:function(){e(document.body).trigger("wc_fragments_ajax_error")}};function s(){e.ajax(a)}if(t){var i=null;e(document.body).on("wc_fragment_refresh updated_wc_div",function(){s()}),e(document.body).on("added_to_cart removed_from_cart",function(e,t,a){var s=sessionStorage.getItem(r);null!==s&&s!==undefined&&""!==s||n(),sessionStorage.setItem(wc_cart_fragments_params.fragment_name,JSON.stringify(t)),o(a)}),e(document.body).on("wc_fragments_refreshed",function(){clearTimeout(i),i=setTimeout(s,864e5)}),e(window).on("storage onstorage",function(e){r===e.originalEvent.key&&localStorage.getItem(r)!==sessionStorage.getItem(r)&&s()}),e(window).on("pageshow",function(t){t.originalEvent.persisted&&(e(".widget_shopping_cart_content").empty(),e(document.body).trigger("wc_fragment_refresh"))});try{var c=JSON.parse(sessionStorage.getItem(wc_cart_fragments_params.fragment_name)),_=sessionStorage.getItem(r),g=Cookies.get("woocommerce_cart_hash"),m=sessionStorage.getItem("wc_cart_created");if(null!==_&&_!==undefined&&""!==_||(_=""),null!==g&&g!==undefined&&""!==g||(g=""),_&&(null===m||m===undefined||""===m))throw"No cart_created";if(m){var d=1*m+864e5,w=(new Date).getTime();if(d<w)throw"Fragment expired";i=setTimeout(s,d-w)}if(!c||!c["div.widget_shopping_cart_content"]||_!==g)throw"No fragment";e.each(c,function(t,r){e(t).replaceWith(r)}),e(document.body).trigger("wc_fragments_loaded")}catch(f){s()}}else s();Cookies.get("woocommerce_items_in_cart")>0?e(".hide_cart_widget_if_empty").closest(".widget_shopping_cart").show():e(".hide_cart_widget_if_empty").closest(".widget_shopping_cart").hide(),e(document.body).on("adding_to_cart",function(){e(".hide_cart_widget_if_empty").closest(".widget_shopping_cart").show()}),"undefined"!=typeof wp&&wp.customize&&wp.customize.selectiveRefresh&&wp.customize.widgetsPreview&&wp.customize.widgetsPreview.WidgetPartial&&wp.customize.selectiveRefresh.bind("partial-content-rendered",function(){s()})});
|
||||
668
wp/wp-content/plugins/woocommerce/assets/js/frontend/cart.js
Normal file
668
wp/wp-content/plugins/woocommerce/assets/js/frontend/cart.js
Normal file
@@ -0,0 +1,668 @@
|
||||
/* global wc_cart_params */
|
||||
jQuery( function ( $ ) {
|
||||
// wc_cart_params is required to continue, ensure the object exists
|
||||
if ( typeof wc_cart_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Utility functions for the file.
|
||||
|
||||
/**
|
||||
* Gets a url for a given AJAX endpoint.
|
||||
*
|
||||
* @param {String} endpoint The AJAX Endpoint
|
||||
* @return {String} The URL to use for the request
|
||||
*/
|
||||
var get_url = function ( endpoint ) {
|
||||
return wc_cart_params.wc_ajax_url
|
||||
.toString()
|
||||
.replace( '%%endpoint%%', endpoint );
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if a node is blocked for processing.
|
||||
*
|
||||
* @param {JQuery Object} $node
|
||||
* @return {bool} True if the DOM Element is UI Blocked, false if not.
|
||||
*/
|
||||
var is_blocked = function ( $node ) {
|
||||
return (
|
||||
$node.is( '.processing' ) || $node.parents( '.processing' ).length
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Block a node visually for processing.
|
||||
*
|
||||
* @param {JQuery Object} $node
|
||||
*/
|
||||
var block = function ( $node ) {
|
||||
if ( ! is_blocked( $node ) ) {
|
||||
$node.addClass( 'processing' ).block( {
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6,
|
||||
},
|
||||
} );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Unblock a node after processing is complete.
|
||||
*
|
||||
* @param {JQuery Object} $node
|
||||
*/
|
||||
var unblock = function ( $node ) {
|
||||
$node.removeClass( 'processing' ).unblock();
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes duplicate notices.
|
||||
*
|
||||
* @param {JQuery Object} $notices
|
||||
*/
|
||||
var remove_duplicate_notices = function ( $notices ) {
|
||||
var seen = new Set();
|
||||
var deduplicated_notices = [];
|
||||
|
||||
$notices.each( function () {
|
||||
const text = $( this ).text();
|
||||
|
||||
if ( ! seen.has( text ) ) {
|
||||
seen.add( text );
|
||||
deduplicated_notices.push( this );
|
||||
}
|
||||
} );
|
||||
|
||||
return $( deduplicated_notices );
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the .woocommerce div with a string of html.
|
||||
*
|
||||
* @param {String} html_str The HTML string with which to replace the div.
|
||||
* @param {bool} preserve_notices Should notices be kept? False by default.
|
||||
*/
|
||||
var update_wc_div = function ( html_str, preserve_notices ) {
|
||||
var $html = $.parseHTML( html_str );
|
||||
var $new_form = $( '.woocommerce-cart-form', $html );
|
||||
var $new_totals = $( '.cart_totals', $html );
|
||||
var $notices = remove_duplicate_notices(
|
||||
$(
|
||||
'.woocommerce-error, .woocommerce-message, .woocommerce-info, .is-error, .is-info, .is-success',
|
||||
$html
|
||||
)
|
||||
);
|
||||
|
||||
// No form, cannot do this.
|
||||
if ( $( '.woocommerce-cart-form' ).length === 0 ) {
|
||||
window.location.reload();
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove errors
|
||||
if ( ! preserve_notices ) {
|
||||
$(
|
||||
'.woocommerce-error, .woocommerce-message, .woocommerce-info, .is-error, .is-info, .is-success'
|
||||
).remove();
|
||||
}
|
||||
|
||||
if ( $new_form.length === 0 ) {
|
||||
// If the checkout is also displayed on this page, trigger reload instead.
|
||||
if ( $( '.woocommerce-checkout' ).length ) {
|
||||
window.location.reload();
|
||||
return;
|
||||
}
|
||||
|
||||
// No items to display now! Replace all cart content.
|
||||
var $cart_html = $( '.wc-empty-cart-message', $html ).closest(
|
||||
'.woocommerce'
|
||||
);
|
||||
$( '.woocommerce-cart-form__contents' )
|
||||
.closest( '.woocommerce' )
|
||||
.replaceWith( $cart_html );
|
||||
|
||||
// Display errors
|
||||
if ( $notices.length > 0 ) {
|
||||
show_notice( $notices );
|
||||
}
|
||||
|
||||
// Notify plugins that the cart was emptied.
|
||||
$( document.body ).trigger( 'wc_cart_emptied' );
|
||||
} else {
|
||||
// If the checkout is also displayed on this page, trigger update event.
|
||||
if ( $( '.woocommerce-checkout' ).length ) {
|
||||
$( document.body ).trigger( 'update_checkout' );
|
||||
}
|
||||
|
||||
$( '.woocommerce-cart-form' ).replaceWith( $new_form );
|
||||
$( '.woocommerce-cart-form' )
|
||||
.find( ':input[name="update_cart"]' )
|
||||
.prop( 'disabled', true );
|
||||
|
||||
if ( $notices.length > 0 ) {
|
||||
show_notice( $notices );
|
||||
}
|
||||
|
||||
update_cart_totals_div( $new_totals );
|
||||
}
|
||||
|
||||
$( document.body ).trigger( 'updated_wc_div' );
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the .cart_totals div with a string of html.
|
||||
*
|
||||
* @param {String} html_str The HTML string with which to replace the div.
|
||||
*/
|
||||
var update_cart_totals_div = function ( html_str ) {
|
||||
$( '.cart_totals' ).replaceWith( html_str );
|
||||
$( document.body ).trigger( 'updated_cart_totals' );
|
||||
};
|
||||
|
||||
/**
|
||||
* Shows new notices on the page.
|
||||
*
|
||||
* @param {Object} The Notice HTML Element in string or object form.
|
||||
*/
|
||||
var show_notice = function ( html_element, $target ) {
|
||||
if ( ! $target ) {
|
||||
$target =
|
||||
$( '.woocommerce-notices-wrapper:first' ) ||
|
||||
$( '.wc-empty-cart-message' ).closest( '.woocommerce' ) ||
|
||||
$( '.woocommerce-cart-form' );
|
||||
}
|
||||
$target.prepend( html_element );
|
||||
};
|
||||
|
||||
/**
|
||||
* Object to handle AJAX calls for cart shipping changes.
|
||||
*/
|
||||
var cart_shipping = {
|
||||
/**
|
||||
* Initialize event handlers and UI state.
|
||||
*/
|
||||
init: function ( cart ) {
|
||||
this.cart = cart;
|
||||
this.toggle_shipping = this.toggle_shipping.bind( this );
|
||||
this.shipping_method_selected =
|
||||
this.shipping_method_selected.bind( this );
|
||||
this.shipping_calculator_submit =
|
||||
this.shipping_calculator_submit.bind( this );
|
||||
|
||||
$( document ).on(
|
||||
'click',
|
||||
'.shipping-calculator-button',
|
||||
this.toggle_shipping
|
||||
);
|
||||
$( document ).on(
|
||||
'change',
|
||||
'select.shipping_method, :input[name^=shipping_method]',
|
||||
this.shipping_method_selected
|
||||
);
|
||||
$( document ).on(
|
||||
'submit',
|
||||
'form.woocommerce-shipping-calculator',
|
||||
this.shipping_calculator_submit
|
||||
);
|
||||
|
||||
$( '.shipping-calculator-form' ).hide();
|
||||
},
|
||||
|
||||
/**
|
||||
* Toggle Shipping Calculator panel
|
||||
*/
|
||||
toggle_shipping: function () {
|
||||
$( '.shipping-calculator-form' ).slideToggle( 'slow' );
|
||||
$( 'select.country_to_state, input.country_to_state' ).trigger(
|
||||
'change'
|
||||
);
|
||||
$( document.body ).trigger( 'country_to_state_changed' ); // Trigger select2 to load.
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles when a shipping method is selected.
|
||||
*/
|
||||
shipping_method_selected: function () {
|
||||
var shipping_methods = {};
|
||||
|
||||
// eslint-disable-next-line max-len
|
||||
$(
|
||||
'select.shipping_method, :input[name^=shipping_method][type=radio]:checked, :input[name^=shipping_method][type=hidden]'
|
||||
).each( function () {
|
||||
shipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();
|
||||
} );
|
||||
|
||||
block( $( 'div.cart_totals' ) );
|
||||
|
||||
var data = {
|
||||
security: wc_cart_params.update_shipping_method_nonce,
|
||||
shipping_method: shipping_methods,
|
||||
};
|
||||
|
||||
$.ajax( {
|
||||
type: 'post',
|
||||
url: get_url( 'update_shipping_method' ),
|
||||
data: data,
|
||||
dataType: 'html',
|
||||
success: function ( response ) {
|
||||
update_cart_totals_div( response );
|
||||
},
|
||||
complete: function () {
|
||||
unblock( $( 'div.cart_totals' ) );
|
||||
$( document.body ).trigger( 'updated_shipping_method' );
|
||||
},
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles a shipping calculator form submit.
|
||||
*
|
||||
* @param {Object} evt The JQuery event.
|
||||
*/
|
||||
shipping_calculator_submit: function ( evt ) {
|
||||
evt.preventDefault();
|
||||
|
||||
var $form = $( evt.currentTarget );
|
||||
|
||||
block( $( 'div.cart_totals' ) );
|
||||
block( $form );
|
||||
|
||||
// Provide the submit button value because wc-form-handler expects it.
|
||||
$( '<input />' )
|
||||
.attr( 'type', 'hidden' )
|
||||
.attr( 'name', 'calc_shipping' )
|
||||
.attr( 'value', 'x' )
|
||||
.appendTo( $form );
|
||||
|
||||
// Make call to actual form post URL.
|
||||
$.ajax( {
|
||||
type: $form.attr( 'method' ),
|
||||
url: $form.attr( 'action' ),
|
||||
data: $form.serialize(),
|
||||
dataType: 'html',
|
||||
success: function ( response ) {
|
||||
update_wc_div( response );
|
||||
},
|
||||
complete: function () {
|
||||
unblock( $form );
|
||||
unblock( $( 'div.cart_totals' ) );
|
||||
},
|
||||
} );
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Object to handle cart UI.
|
||||
*/
|
||||
var cart = {
|
||||
/**
|
||||
* Initialize cart UI events.
|
||||
*/
|
||||
init: function () {
|
||||
this.update_cart_totals = this.update_cart_totals.bind( this );
|
||||
this.input_keypress = this.input_keypress.bind( this );
|
||||
this.cart_submit = this.cart_submit.bind( this );
|
||||
this.submit_click = this.submit_click.bind( this );
|
||||
this.apply_coupon = this.apply_coupon.bind( this );
|
||||
this.remove_coupon_clicked =
|
||||
this.remove_coupon_clicked.bind( this );
|
||||
this.quantity_update = this.quantity_update.bind( this );
|
||||
this.item_remove_clicked = this.item_remove_clicked.bind( this );
|
||||
this.item_restore_clicked = this.item_restore_clicked.bind( this );
|
||||
this.update_cart = this.update_cart.bind( this );
|
||||
|
||||
$( document ).on( 'wc_update_cart added_to_cart', function () {
|
||||
cart.update_cart.apply( cart, [].slice.call( arguments, 1 ) );
|
||||
} );
|
||||
$( document ).on(
|
||||
'click',
|
||||
'.woocommerce-cart-form :input[type=submit]',
|
||||
this.submit_click
|
||||
);
|
||||
$( document ).on(
|
||||
'keypress',
|
||||
'.woocommerce-cart-form :input[type=number]',
|
||||
this.input_keypress
|
||||
);
|
||||
$( document ).on(
|
||||
'submit',
|
||||
'.woocommerce-cart-form',
|
||||
this.cart_submit
|
||||
);
|
||||
$( document ).on(
|
||||
'click',
|
||||
'a.woocommerce-remove-coupon',
|
||||
this.remove_coupon_clicked
|
||||
);
|
||||
$( document ).on(
|
||||
'click',
|
||||
'.woocommerce-cart-form .product-remove > a',
|
||||
this.item_remove_clicked
|
||||
);
|
||||
$( document ).on(
|
||||
'click',
|
||||
'.woocommerce-cart .restore-item',
|
||||
this.item_restore_clicked
|
||||
);
|
||||
$( document ).on(
|
||||
'change input',
|
||||
'.woocommerce-cart-form .cart_item :input',
|
||||
this.input_changed
|
||||
);
|
||||
|
||||
$( '.woocommerce-cart-form :input[name="update_cart"]' ).prop(
|
||||
'disabled',
|
||||
true
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* After an input is changed, enable the update cart button.
|
||||
*/
|
||||
input_changed: function () {
|
||||
$( '.woocommerce-cart-form :input[name="update_cart"]' ).prop(
|
||||
'disabled',
|
||||
false
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Update entire cart via ajax.
|
||||
*/
|
||||
update_cart: function ( preserve_notices ) {
|
||||
var $form = $( '.woocommerce-cart-form' );
|
||||
|
||||
block( $form );
|
||||
block( $( 'div.cart_totals' ) );
|
||||
|
||||
// Make call to actual form post URL.
|
||||
$.ajax( {
|
||||
type: $form.attr( 'method' ),
|
||||
url: $form.attr( 'action' ),
|
||||
data: $form.serialize(),
|
||||
dataType: 'html',
|
||||
success: function ( response ) {
|
||||
update_wc_div( response, preserve_notices );
|
||||
},
|
||||
complete: function () {
|
||||
unblock( $form );
|
||||
unblock( $( 'div.cart_totals' ) );
|
||||
$.scroll_to_notices( $( '[role="alert"]' ) );
|
||||
},
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Update the cart after something has changed.
|
||||
*/
|
||||
update_cart_totals: function () {
|
||||
block( $( 'div.cart_totals' ) );
|
||||
|
||||
$.ajax( {
|
||||
url: get_url( 'get_cart_totals' ),
|
||||
dataType: 'html',
|
||||
success: function ( response ) {
|
||||
update_cart_totals_div( response );
|
||||
},
|
||||
complete: function () {
|
||||
unblock( $( 'div.cart_totals' ) );
|
||||
},
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle the <ENTER> key for quantity fields.
|
||||
*
|
||||
* @param {Object} evt The JQuery event
|
||||
*
|
||||
* For IE, if you hit enter on a quantity field, it makes the
|
||||
* document.activeElement the first submit button it finds.
|
||||
* For us, that is the Apply Coupon button. This is required
|
||||
* to catch the event before that happens.
|
||||
*/
|
||||
input_keypress: function ( evt ) {
|
||||
// Catch the enter key and don't let it submit the form.
|
||||
if ( 13 === evt.keyCode ) {
|
||||
var $form = $( evt.currentTarget ).parents( 'form' );
|
||||
|
||||
try {
|
||||
// If there are no validation errors, handle the submit.
|
||||
if ( $form[ 0 ].checkValidity() ) {
|
||||
evt.preventDefault();
|
||||
this.cart_submit( evt );
|
||||
}
|
||||
} catch ( err ) {
|
||||
evt.preventDefault();
|
||||
this.cart_submit( evt );
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle cart form submit and route to correct logic.
|
||||
*
|
||||
* @param {Object} evt The JQuery event
|
||||
*/
|
||||
cart_submit: function ( evt ) {
|
||||
var $submit = $( document.activeElement ),
|
||||
$clicked = $( ':input[type=submit][clicked=true]' ),
|
||||
$form = $( evt.currentTarget );
|
||||
|
||||
// For submit events, currentTarget is form.
|
||||
// For keypress events, currentTarget is input.
|
||||
if ( ! $form.is( 'form' ) ) {
|
||||
$form = $( evt.currentTarget ).parents( 'form' );
|
||||
}
|
||||
|
||||
if (
|
||||
0 === $form.find( '.woocommerce-cart-form__contents' ).length
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_blocked( $form ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (
|
||||
$clicked.is( ':input[name="update_cart"]' ) ||
|
||||
$submit.is( 'input.qty' )
|
||||
) {
|
||||
evt.preventDefault();
|
||||
this.quantity_update( $form );
|
||||
} else if (
|
||||
$clicked.is( ':input[name="apply_coupon"]' ) ||
|
||||
$submit.is( '#coupon_code' )
|
||||
) {
|
||||
evt.preventDefault();
|
||||
this.apply_coupon( $form );
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Special handling to identify which submit button was clicked.
|
||||
*
|
||||
* @param {Object} evt The JQuery event
|
||||
*/
|
||||
submit_click: function ( evt ) {
|
||||
$(
|
||||
':input[type=submit]',
|
||||
$( evt.target ).parents( 'form' )
|
||||
).removeAttr( 'clicked' );
|
||||
$( evt.target ).attr( 'clicked', 'true' );
|
||||
},
|
||||
|
||||
/**
|
||||
* Apply Coupon code
|
||||
*
|
||||
* @param {JQuery Object} $form The cart form.
|
||||
*/
|
||||
apply_coupon: function ( $form ) {
|
||||
block( $form );
|
||||
|
||||
var cart = this;
|
||||
var $text_field = $( '#coupon_code' );
|
||||
var coupon_code = $text_field.val();
|
||||
|
||||
var data = {
|
||||
security: wc_cart_params.apply_coupon_nonce,
|
||||
coupon_code: coupon_code,
|
||||
};
|
||||
|
||||
$.ajax( {
|
||||
type: 'POST',
|
||||
url: get_url( 'apply_coupon' ),
|
||||
data: data,
|
||||
dataType: 'html',
|
||||
success: function ( response ) {
|
||||
$(
|
||||
'.woocommerce-error, .woocommerce-message, .woocommerce-info, .is-error, .is-info, .is-success'
|
||||
).remove();
|
||||
show_notice( response );
|
||||
$( document.body ).trigger( 'applied_coupon', [
|
||||
coupon_code,
|
||||
] );
|
||||
},
|
||||
complete: function () {
|
||||
unblock( $form );
|
||||
$text_field.val( '' );
|
||||
cart.update_cart( true );
|
||||
},
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle when a remove coupon link is clicked.
|
||||
*
|
||||
* @param {Object} evt The JQuery event
|
||||
*/
|
||||
remove_coupon_clicked: function ( evt ) {
|
||||
evt.preventDefault();
|
||||
|
||||
var cart = this;
|
||||
var $wrapper = $( evt.currentTarget ).closest( '.cart_totals' );
|
||||
var coupon = $( evt.currentTarget ).attr( 'data-coupon' );
|
||||
|
||||
block( $wrapper );
|
||||
|
||||
var data = {
|
||||
security: wc_cart_params.remove_coupon_nonce,
|
||||
coupon: coupon,
|
||||
};
|
||||
|
||||
$.ajax( {
|
||||
type: 'POST',
|
||||
url: get_url( 'remove_coupon' ),
|
||||
data: data,
|
||||
dataType: 'html',
|
||||
success: function ( response ) {
|
||||
$(
|
||||
'.woocommerce-error, .woocommerce-message, .woocommerce-info, .is-error, .is-info, .is-success'
|
||||
).remove();
|
||||
show_notice( response );
|
||||
$( document.body ).trigger( 'removed_coupon', [ coupon ] );
|
||||
unblock( $wrapper );
|
||||
},
|
||||
complete: function () {
|
||||
cart.update_cart( true );
|
||||
},
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle a cart Quantity Update
|
||||
*
|
||||
* @param {JQuery Object} $form The cart form.
|
||||
*/
|
||||
quantity_update: function ( $form ) {
|
||||
block( $form );
|
||||
block( $( 'div.cart_totals' ) );
|
||||
|
||||
// Provide the submit button value because wc-form-handler expects it.
|
||||
$( '<input />' )
|
||||
.attr( 'type', 'hidden' )
|
||||
.attr( 'name', 'update_cart' )
|
||||
.attr( 'value', 'Update Cart' )
|
||||
.appendTo( $form );
|
||||
|
||||
// Make call to actual form post URL.
|
||||
$.ajax( {
|
||||
type: $form.attr( 'method' ),
|
||||
url: $form.attr( 'action' ),
|
||||
data: $form.serialize(),
|
||||
dataType: 'html',
|
||||
success: function ( response ) {
|
||||
update_wc_div( response );
|
||||
},
|
||||
complete: function () {
|
||||
unblock( $form );
|
||||
unblock( $( 'div.cart_totals' ) );
|
||||
$.scroll_to_notices( $( '[role="alert"]' ) );
|
||||
},
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle when a remove item link is clicked.
|
||||
*
|
||||
* @param {Object} evt The JQuery event
|
||||
*/
|
||||
item_remove_clicked: function ( evt ) {
|
||||
evt.preventDefault();
|
||||
|
||||
var $a = $( evt.currentTarget );
|
||||
var $form = $a.parents( 'form' );
|
||||
|
||||
block( $form );
|
||||
block( $( 'div.cart_totals' ) );
|
||||
|
||||
$.ajax( {
|
||||
type: 'GET',
|
||||
url: $a.attr( 'href' ),
|
||||
dataType: 'html',
|
||||
success: function ( response ) {
|
||||
update_wc_div( response );
|
||||
},
|
||||
complete: function () {
|
||||
unblock( $form );
|
||||
unblock( $( 'div.cart_totals' ) );
|
||||
$.scroll_to_notices( $( '[role="alert"]' ) );
|
||||
},
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle when a restore item link is clicked.
|
||||
*
|
||||
* @param {Object} evt The JQuery event
|
||||
*/
|
||||
item_restore_clicked: function ( evt ) {
|
||||
evt.preventDefault();
|
||||
|
||||
var $a = $( evt.currentTarget );
|
||||
var $form = $( 'form.woocommerce-cart-form' );
|
||||
|
||||
block( $form );
|
||||
block( $( 'div.cart_totals' ) );
|
||||
|
||||
$.ajax( {
|
||||
type: 'GET',
|
||||
url: $a.attr( 'href' ),
|
||||
dataType: 'html',
|
||||
success: function ( response ) {
|
||||
update_wc_div( response );
|
||||
},
|
||||
complete: function () {
|
||||
unblock( $form );
|
||||
unblock( $( 'div.cart_totals' ) );
|
||||
},
|
||||
} );
|
||||
},
|
||||
};
|
||||
|
||||
cart_shipping.init( cart );
|
||||
cart.init();
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/cart.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/cart.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
732
wp/wp-content/plugins/woocommerce/assets/js/frontend/checkout.js
Normal file
732
wp/wp-content/plugins/woocommerce/assets/js/frontend/checkout.js
Normal file
@@ -0,0 +1,732 @@
|
||||
/* global wc_checkout_params */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
// wc_checkout_params is required to continue, ensure the object exists
|
||||
if ( typeof wc_checkout_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$.blockUI.defaults.overlayCSS.cursor = 'default';
|
||||
|
||||
var wc_checkout_form = {
|
||||
updateTimer: false,
|
||||
dirtyInput: false,
|
||||
selectedPaymentMethod: false,
|
||||
xhr: false,
|
||||
$order_review: $( '#order_review' ),
|
||||
$checkout_form: $( 'form.checkout' ),
|
||||
init: function() {
|
||||
$( document.body ).on( 'update_checkout', this.update_checkout );
|
||||
$( document.body ).on( 'init_checkout', this.init_checkout );
|
||||
|
||||
// Payment methods
|
||||
this.$checkout_form.on( 'click', 'input[name="payment_method"]', this.payment_method_selected );
|
||||
|
||||
if ( $( document.body ).hasClass( 'woocommerce-order-pay' ) ) {
|
||||
this.$order_review.on( 'click', 'input[name="payment_method"]', this.payment_method_selected );
|
||||
this.$order_review.on( 'submit', this.submitOrder );
|
||||
this.$order_review.attr( 'novalidate', 'novalidate' );
|
||||
}
|
||||
|
||||
// Prevent HTML5 validation which can conflict.
|
||||
this.$checkout_form.attr( 'novalidate', 'novalidate' );
|
||||
|
||||
// Form submission
|
||||
this.$checkout_form.on( 'submit', this.submit );
|
||||
|
||||
// Inline validation
|
||||
this.$checkout_form.on( 'input validate change', '.input-text, select, input:checkbox', this.validate_field );
|
||||
|
||||
// Manual trigger
|
||||
this.$checkout_form.on( 'update', this.trigger_update_checkout );
|
||||
|
||||
// Inputs/selects which update totals
|
||||
this.$checkout_form.on( 'change', 'select.shipping_method, input[name^="shipping_method"], #ship-to-different-address input, .update_totals_on_change select, .update_totals_on_change input[type="radio"], .update_totals_on_change input[type="checkbox"]', this.trigger_update_checkout ); // eslint-disable-line max-len
|
||||
this.$checkout_form.on( 'change', '.address-field select', this.input_changed );
|
||||
this.$checkout_form.on( 'change', '.address-field input.input-text, .update_totals_on_change input.input-text', this.maybe_input_changed ); // eslint-disable-line max-len
|
||||
this.$checkout_form.on( 'keydown', '.address-field input.input-text, .update_totals_on_change input.input-text', this.queue_update_checkout ); // eslint-disable-line max-len
|
||||
|
||||
// Address fields
|
||||
this.$checkout_form.on( 'change', '#ship-to-different-address input', this.ship_to_different_address );
|
||||
|
||||
// Trigger events
|
||||
this.$checkout_form.find( '#ship-to-different-address input' ).trigger( 'change' );
|
||||
this.init_payment_methods();
|
||||
|
||||
// Update on page load
|
||||
if ( wc_checkout_params.is_checkout === '1' ) {
|
||||
$( document.body ).trigger( 'init_checkout' );
|
||||
}
|
||||
if ( wc_checkout_params.option_guest_checkout === 'yes' ) {
|
||||
$( 'input#createaccount' ).on( 'change', this.toggle_create_account ).trigger( 'change' );
|
||||
}
|
||||
},
|
||||
init_payment_methods: function() {
|
||||
var $payment_methods = $( '.woocommerce-checkout' ).find( 'input[name="payment_method"]' );
|
||||
|
||||
// If there is one method, we can hide the radio input
|
||||
if ( 1 === $payment_methods.length ) {
|
||||
$payment_methods.eq(0).hide();
|
||||
}
|
||||
|
||||
// If there was a previously selected method, check that one.
|
||||
if ( wc_checkout_form.selectedPaymentMethod ) {
|
||||
$( '#' + wc_checkout_form.selectedPaymentMethod ).prop( 'checked', true );
|
||||
}
|
||||
|
||||
// If there are none selected, select the first.
|
||||
if ( 0 === $payment_methods.filter( ':checked' ).length ) {
|
||||
$payment_methods.eq(0).prop( 'checked', true );
|
||||
}
|
||||
|
||||
// Get name of new selected method.
|
||||
var checkedPaymentMethod = $payment_methods.filter( ':checked' ).eq(0).prop( 'id' );
|
||||
|
||||
if ( $payment_methods.length > 1 ) {
|
||||
// Hide open descriptions.
|
||||
$( 'div.payment_box:not(".' + checkedPaymentMethod + '")' ).filter( ':visible' ).slideUp( 0 );
|
||||
}
|
||||
|
||||
// Trigger click event for selected method
|
||||
$payment_methods.filter( ':checked' ).eq(0).trigger( 'click' );
|
||||
},
|
||||
get_payment_method: function() {
|
||||
return wc_checkout_form.$checkout_form.find( 'input[name="payment_method"]:checked' ).val();
|
||||
},
|
||||
payment_method_selected: function( e ) {
|
||||
e.stopPropagation();
|
||||
|
||||
if ( $( '.payment_methods input.input-radio' ).length > 1 ) {
|
||||
var target_payment_box = $( 'div.payment_box.' + $( this ).attr( 'ID' ) ),
|
||||
is_checked = $( this ).is( ':checked' );
|
||||
|
||||
if ( is_checked && ! target_payment_box.is( ':visible' ) ) {
|
||||
$( 'div.payment_box' ).filter( ':visible' ).slideUp( 230 );
|
||||
|
||||
if ( is_checked ) {
|
||||
target_payment_box.slideDown( 230 );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$( 'div.payment_box' ).show();
|
||||
}
|
||||
|
||||
if ( $( this ).data( 'order_button_text' ) ) {
|
||||
$( '#place_order' ).text( $( this ).data( 'order_button_text' ) );
|
||||
} else {
|
||||
$( '#place_order' ).text( $( '#place_order' ).data( 'value' ) );
|
||||
}
|
||||
|
||||
var selectedPaymentMethod = $( '.woocommerce-checkout input[name="payment_method"]:checked' ).attr( 'id' );
|
||||
|
||||
if ( selectedPaymentMethod !== wc_checkout_form.selectedPaymentMethod ) {
|
||||
$( document.body ).trigger( 'payment_method_selected' );
|
||||
}
|
||||
|
||||
wc_checkout_form.selectedPaymentMethod = selectedPaymentMethod;
|
||||
},
|
||||
toggle_create_account: function() {
|
||||
$( 'div.create-account' ).hide();
|
||||
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
// Ensure password is not pre-populated.
|
||||
$( '#account_password' ).val( '' ).trigger( 'change' );
|
||||
$( 'div.create-account' ).slideDown();
|
||||
}
|
||||
},
|
||||
init_checkout: function() {
|
||||
$( document.body ).trigger( 'update_checkout' );
|
||||
},
|
||||
maybe_input_changed: function( e ) {
|
||||
if ( wc_checkout_form.dirtyInput ) {
|
||||
wc_checkout_form.input_changed( e );
|
||||
}
|
||||
},
|
||||
input_changed: function( e ) {
|
||||
wc_checkout_form.dirtyInput = e.target;
|
||||
wc_checkout_form.maybe_update_checkout();
|
||||
},
|
||||
queue_update_checkout: function( e ) {
|
||||
var code = e.keyCode || e.which || 0;
|
||||
|
||||
if ( code === 9 ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
wc_checkout_form.dirtyInput = this;
|
||||
wc_checkout_form.reset_update_checkout_timer();
|
||||
wc_checkout_form.updateTimer = setTimeout( wc_checkout_form.maybe_update_checkout, '1000' );
|
||||
},
|
||||
trigger_update_checkout: function() {
|
||||
wc_checkout_form.reset_update_checkout_timer();
|
||||
wc_checkout_form.dirtyInput = false;
|
||||
$( document.body ).trigger( 'update_checkout' );
|
||||
},
|
||||
maybe_update_checkout: function() {
|
||||
var update_totals = true;
|
||||
|
||||
if ( $( wc_checkout_form.dirtyInput ).length ) {
|
||||
var $required_inputs = $( wc_checkout_form.dirtyInput ).closest( 'div' ).find( '.address-field.validate-required' );
|
||||
|
||||
if ( $required_inputs.length ) {
|
||||
$required_inputs.each( function() {
|
||||
if ( $( this ).find( 'input.input-text' ).val() === '' ) {
|
||||
update_totals = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
if ( update_totals ) {
|
||||
wc_checkout_form.trigger_update_checkout();
|
||||
}
|
||||
},
|
||||
ship_to_different_address: function() {
|
||||
$( 'div.shipping_address' ).hide();
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
$( 'div.shipping_address' ).slideDown();
|
||||
}
|
||||
},
|
||||
reset_update_checkout_timer: function() {
|
||||
clearTimeout( wc_checkout_form.updateTimer );
|
||||
},
|
||||
is_valid_json: function( raw_json ) {
|
||||
try {
|
||||
var json = JSON.parse( raw_json );
|
||||
|
||||
return ( json && 'object' === typeof json );
|
||||
} catch ( e ) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
validate_field: function( e ) {
|
||||
var $this = $( this ),
|
||||
$parent = $this.closest( '.form-row' ),
|
||||
validated = true,
|
||||
validate_required = $parent.is( '.validate-required' ),
|
||||
validate_email = $parent.is( '.validate-email' ),
|
||||
validate_phone = $parent.is( '.validate-phone' ),
|
||||
pattern = '',
|
||||
event_type = e.type;
|
||||
|
||||
if ( 'input' === event_type ) {
|
||||
$parent.removeClass( 'woocommerce-invalid woocommerce-invalid-required-field woocommerce-invalid-email woocommerce-invalid-phone woocommerce-validated' ); // eslint-disable-line max-len
|
||||
}
|
||||
|
||||
if ( 'validate' === event_type || 'change' === event_type ) {
|
||||
|
||||
if ( validate_required ) {
|
||||
if ( 'checkbox' === $this.attr( 'type' ) && ! $this.is( ':checked' ) ) {
|
||||
$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-required-field' );
|
||||
validated = false;
|
||||
} else if ( $this.val() === '' ) {
|
||||
$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-required-field' );
|
||||
validated = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( validate_email ) {
|
||||
if ( $this.val() ) {
|
||||
/* https://stackoverflow.com/questions/2855865/jquery-validate-e-mail-address-regex */
|
||||
pattern = new RegExp( /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[0-9a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i ); // eslint-disable-line max-len
|
||||
|
||||
if ( ! pattern.test( $this.val() ) ) {
|
||||
$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-email woocommerce-invalid-phone' ); // eslint-disable-line max-len
|
||||
validated = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( validate_phone ) {
|
||||
pattern = new RegExp( /[\s\#0-9_\-\+\/\(\)\.]/g );
|
||||
|
||||
if ( 0 < $this.val().replace( pattern, '' ).length ) {
|
||||
$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-phone' );
|
||||
validated = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( validated ) {
|
||||
$parent.removeClass( 'woocommerce-invalid woocommerce-invalid-required-field woocommerce-invalid-email woocommerce-invalid-phone' ).addClass( 'woocommerce-validated' ); // eslint-disable-line max-len
|
||||
}
|
||||
}
|
||||
},
|
||||
update_checkout: function( event, args ) {
|
||||
// Small timeout to prevent multiple requests when several fields update at the same time
|
||||
wc_checkout_form.reset_update_checkout_timer();
|
||||
wc_checkout_form.updateTimer = setTimeout( wc_checkout_form.update_checkout_action, '5', args );
|
||||
},
|
||||
update_checkout_action: function( args ) {
|
||||
if ( wc_checkout_form.xhr ) {
|
||||
wc_checkout_form.xhr.abort();
|
||||
}
|
||||
|
||||
if ( $( 'form.checkout' ).length === 0 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
args = typeof args !== 'undefined' ? args : {
|
||||
update_shipping_method: true
|
||||
};
|
||||
|
||||
var country = $( '#billing_country' ).val(),
|
||||
state = $( '#billing_state' ).val(),
|
||||
postcode = $( ':input#billing_postcode' ).val(),
|
||||
city = $( '#billing_city' ).val(),
|
||||
address = $( ':input#billing_address_1' ).val(),
|
||||
address_2 = $( ':input#billing_address_2' ).val(),
|
||||
s_country = country,
|
||||
s_state = state,
|
||||
s_postcode = postcode,
|
||||
s_city = city,
|
||||
s_address = address,
|
||||
s_address_2 = address_2,
|
||||
$required_inputs = $( wc_checkout_form.$checkout_form ).find( '.address-field.validate-required:visible' ),
|
||||
has_full_address = true;
|
||||
|
||||
if ( $required_inputs.length ) {
|
||||
$required_inputs.each( function() {
|
||||
if ( $( this ).find( ':input' ).val() === '' ) {
|
||||
has_full_address = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if ( $( '#ship-to-different-address' ).find( 'input' ).is( ':checked' ) ) {
|
||||
s_country = $( '#shipping_country' ).val();
|
||||
s_state = $( '#shipping_state' ).val();
|
||||
s_postcode = $( ':input#shipping_postcode' ).val();
|
||||
s_city = $( '#shipping_city' ).val();
|
||||
s_address = $( ':input#shipping_address_1' ).val();
|
||||
s_address_2 = $( ':input#shipping_address_2' ).val();
|
||||
}
|
||||
|
||||
var data = {
|
||||
security : wc_checkout_params.update_order_review_nonce,
|
||||
payment_method : wc_checkout_form.get_payment_method(),
|
||||
country : country,
|
||||
state : state,
|
||||
postcode : postcode,
|
||||
city : city,
|
||||
address : address,
|
||||
address_2 : address_2,
|
||||
s_country : s_country,
|
||||
s_state : s_state,
|
||||
s_postcode : s_postcode,
|
||||
s_city : s_city,
|
||||
s_address : s_address,
|
||||
s_address_2 : s_address_2,
|
||||
has_full_address: has_full_address,
|
||||
post_data : $( 'form.checkout' ).serialize()
|
||||
};
|
||||
|
||||
if ( false !== args.update_shipping_method ) {
|
||||
var shipping_methods = {};
|
||||
|
||||
// eslint-disable-next-line max-len
|
||||
$( 'select.shipping_method, input[name^="shipping_method"][type="radio"]:checked, input[name^="shipping_method"][type="hidden"]' ).each( function() {
|
||||
shipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();
|
||||
} );
|
||||
|
||||
data.shipping_method = shipping_methods;
|
||||
}
|
||||
|
||||
$( '.woocommerce-checkout-payment, .woocommerce-checkout-review-order-table' ).block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
|
||||
wc_checkout_form.xhr = $.ajax({
|
||||
type: 'POST',
|
||||
url: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'update_order_review' ),
|
||||
data: data,
|
||||
success: function( data ) {
|
||||
|
||||
// Reload the page if requested
|
||||
if ( data && true === data.reload ) {
|
||||
window.location.reload();
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove any notices added previously
|
||||
$( '.woocommerce-NoticeGroup-updateOrderReview' ).remove();
|
||||
|
||||
var termsCheckBoxChecked = $( '#terms' ).prop( 'checked' );
|
||||
|
||||
// Save payment details to a temporary object
|
||||
var paymentDetails = {};
|
||||
$( '.payment_box :input' ).each( function() {
|
||||
var ID = $( this ).attr( 'id' );
|
||||
|
||||
if ( ID ) {
|
||||
if ( $.inArray( $( this ).attr( 'type' ), [ 'checkbox', 'radio' ] ) !== -1 ) {
|
||||
paymentDetails[ ID ] = $( this ).prop( 'checked' );
|
||||
} else {
|
||||
paymentDetails[ ID ] = $( this ).val();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Always update the fragments
|
||||
if ( data && data.fragments ) {
|
||||
$.each( data.fragments, function ( key, value ) {
|
||||
if ( ! wc_checkout_form.fragments || wc_checkout_form.fragments[ key ] !== value ) {
|
||||
$( key ).replaceWith( value );
|
||||
}
|
||||
$( key ).unblock();
|
||||
} );
|
||||
wc_checkout_form.fragments = data.fragments;
|
||||
}
|
||||
|
||||
// Recheck the terms and conditions box, if needed
|
||||
if ( termsCheckBoxChecked ) {
|
||||
$( '#terms' ).prop( 'checked', true );
|
||||
}
|
||||
|
||||
// Fill in the payment details if possible without overwriting data if set.
|
||||
if ( ! $.isEmptyObject( paymentDetails ) ) {
|
||||
$( '.payment_box :input' ).each( function() {
|
||||
var ID = $( this ).attr( 'id' );
|
||||
if ( ID ) {
|
||||
if ( $.inArray( $( this ).attr( 'type' ), [ 'checkbox', 'radio' ] ) !== -1 ) {
|
||||
$( this ).prop( 'checked', paymentDetails[ ID ] ).trigger( 'change' );
|
||||
} else if ( $.inArray( $( this ).attr( 'type' ), [ 'select' ] ) !== -1 ) {
|
||||
$( this ).val( paymentDetails[ ID ] ).trigger( 'change' );
|
||||
} else if ( null !== $( this ).val() && 0 === $( this ).val().length ) {
|
||||
$( this ).val( paymentDetails[ ID ] ).trigger( 'change' );
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Check for error
|
||||
if ( data && 'failure' === data.result ) {
|
||||
|
||||
var $form = $( 'form.checkout' );
|
||||
|
||||
// Remove notices from all sources
|
||||
$( '.woocommerce-error, .woocommerce-message, .is-error, .is-success' ).remove();
|
||||
|
||||
// Add new errors returned by this event
|
||||
if ( data.messages ) {
|
||||
$form.prepend( '<div class="woocommerce-NoticeGroup woocommerce-NoticeGroup-updateOrderReview">' + data.messages + '</div>' ); // eslint-disable-line max-len
|
||||
} else {
|
||||
$form.prepend( data );
|
||||
}
|
||||
|
||||
// Lose focus for all fields
|
||||
$form.find( '.input-text, select, input:checkbox' ).trigger( 'validate' ).trigger( 'blur' );
|
||||
|
||||
wc_checkout_form.scroll_to_notices();
|
||||
}
|
||||
|
||||
// Re-init methods
|
||||
wc_checkout_form.init_payment_methods();
|
||||
|
||||
// Fire updated_checkout event.
|
||||
$( document.body ).trigger( 'updated_checkout', [ data ] );
|
||||
}
|
||||
|
||||
});
|
||||
},
|
||||
handleUnloadEvent: function( e ) {
|
||||
// Modern browsers have their own standard generic messages that they will display.
|
||||
// Confirm, alert, prompt or custom message are not allowed during the unload event
|
||||
// Browsers will display their own standard messages
|
||||
|
||||
// Check if the browser is Internet Explorer
|
||||
if((navigator.userAgent.indexOf('MSIE') !== -1 ) || (!!document.documentMode)) {
|
||||
// IE handles unload events differently than modern browsers
|
||||
e.preventDefault();
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
attachUnloadEventsOnSubmit: function() {
|
||||
$( window ).on('beforeunload', this.handleUnloadEvent);
|
||||
},
|
||||
detachUnloadEventsOnSubmit: function() {
|
||||
$( window ).off('beforeunload', this.handleUnloadEvent);
|
||||
},
|
||||
blockOnSubmit: function( $form ) {
|
||||
var isBlocked = $form.data( 'blockUI.isBlocked' );
|
||||
|
||||
if ( 1 !== isBlocked ) {
|
||||
$form.block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
submitOrder: function() {
|
||||
wc_checkout_form.blockOnSubmit( $( this ) );
|
||||
},
|
||||
submit: function() {
|
||||
wc_checkout_form.reset_update_checkout_timer();
|
||||
var $form = $( this );
|
||||
|
||||
if ( $form.is( '.processing' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Trigger a handler to let gateways manipulate the checkout if needed
|
||||
// eslint-disable-next-line max-len
|
||||
if ( $form.triggerHandler( 'checkout_place_order', [ wc_checkout_form ] ) !== false && $form.triggerHandler( 'checkout_place_order_' + wc_checkout_form.get_payment_method(), [ wc_checkout_form ] ) !== false ) {
|
||||
|
||||
$form.addClass( 'processing' );
|
||||
|
||||
wc_checkout_form.blockOnSubmit( $form );
|
||||
|
||||
// Attach event to block reloading the page when the form has been submitted
|
||||
wc_checkout_form.attachUnloadEventsOnSubmit();
|
||||
|
||||
// ajaxSetup is global, but we use it to ensure JSON is valid once returned.
|
||||
$.ajaxSetup( {
|
||||
dataFilter: function( raw_response, dataType ) {
|
||||
// We only want to work with JSON
|
||||
if ( 'json' !== dataType ) {
|
||||
return raw_response;
|
||||
}
|
||||
|
||||
if ( wc_checkout_form.is_valid_json( raw_response ) ) {
|
||||
return raw_response;
|
||||
} else {
|
||||
// Attempt to fix the malformed JSON
|
||||
var maybe_valid_json = raw_response.match( /{"result.*}/ );
|
||||
|
||||
if ( null === maybe_valid_json ) {
|
||||
console.log( 'Unable to fix malformed JSON' );
|
||||
} else if ( wc_checkout_form.is_valid_json( maybe_valid_json[0] ) ) {
|
||||
console.log( 'Fixed malformed JSON. Original:' );
|
||||
console.log( raw_response );
|
||||
raw_response = maybe_valid_json[0];
|
||||
} else {
|
||||
console.log( 'Unable to fix malformed JSON' );
|
||||
}
|
||||
}
|
||||
|
||||
return raw_response;
|
||||
}
|
||||
} );
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: wc_checkout_params.checkout_url,
|
||||
data: $form.serialize(),
|
||||
dataType: 'json',
|
||||
success: function( result ) {
|
||||
// Detach the unload handler that prevents a reload / redirect
|
||||
wc_checkout_form.detachUnloadEventsOnSubmit();
|
||||
|
||||
try {
|
||||
if ( 'success' === result.result && $form.triggerHandler( 'checkout_place_order_success', [ result, wc_checkout_form ] ) !== false ) {
|
||||
if ( -1 === result.redirect.indexOf( 'https://' ) || -1 === result.redirect.indexOf( 'http://' ) ) {
|
||||
window.location = result.redirect;
|
||||
} else {
|
||||
window.location = decodeURI( result.redirect );
|
||||
}
|
||||
} else if ( 'failure' === result.result ) {
|
||||
throw 'Result failure';
|
||||
} else {
|
||||
throw 'Invalid response';
|
||||
}
|
||||
} catch( err ) {
|
||||
// Reload page
|
||||
if ( true === result.reload ) {
|
||||
window.location.reload();
|
||||
return;
|
||||
}
|
||||
|
||||
// Trigger update in case we need a fresh nonce
|
||||
if ( true === result.refresh ) {
|
||||
$( document.body ).trigger( 'update_checkout' );
|
||||
}
|
||||
|
||||
// Add new errors
|
||||
if ( result.messages ) {
|
||||
wc_checkout_form.submit_error( result.messages );
|
||||
} else {
|
||||
wc_checkout_form.submit_error( '<div class="woocommerce-error">' + wc_checkout_params.i18n_checkout_error + '</div>' ); // eslint-disable-line max-len
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function( jqXHR, textStatus, errorThrown ) {
|
||||
// Detach the unload handler that prevents a reload / redirect
|
||||
wc_checkout_form.detachUnloadEventsOnSubmit();
|
||||
|
||||
wc_checkout_form.submit_error(
|
||||
'<div class="woocommerce-error">' +
|
||||
( errorThrown || wc_checkout_params.i18n_checkout_error ) +
|
||||
'</div>'
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
submit_error: function( error_message ) {
|
||||
$( '.woocommerce-NoticeGroup-checkout, .woocommerce-error, .woocommerce-message, .is-error, .is-success' ).remove();
|
||||
wc_checkout_form.$checkout_form.prepend( '<div class="woocommerce-NoticeGroup woocommerce-NoticeGroup-checkout">' + error_message + '</div>' ); // eslint-disable-line max-len
|
||||
wc_checkout_form.$checkout_form.removeClass( 'processing' ).unblock();
|
||||
wc_checkout_form.$checkout_form.find( '.input-text, select, input:checkbox' ).trigger( 'validate' ).trigger( 'blur' );
|
||||
wc_checkout_form.scroll_to_notices();
|
||||
$( document.body ).trigger( 'checkout_error' , [ error_message ] );
|
||||
},
|
||||
scroll_to_notices: function() {
|
||||
var scrollElement = $( '.woocommerce-NoticeGroup-updateOrderReview, .woocommerce-NoticeGroup-checkout' );
|
||||
|
||||
if ( ! scrollElement.length ) {
|
||||
scrollElement = $( 'form.checkout' );
|
||||
}
|
||||
$.scroll_to_notices( scrollElement );
|
||||
}
|
||||
};
|
||||
|
||||
var wc_checkout_coupons = {
|
||||
init: function() {
|
||||
$( document.body ).on( 'click', 'a.showcoupon', this.show_coupon_form );
|
||||
$( document.body ).on( 'click', '.woocommerce-remove-coupon', this.remove_coupon );
|
||||
$( 'form.checkout_coupon' ).hide().on( 'submit', this.submit );
|
||||
},
|
||||
show_coupon_form: function() {
|
||||
$( '.checkout_coupon' ).slideToggle( 400, function() {
|
||||
$( '.checkout_coupon' ).find( ':input:eq(0)' ).trigger( 'focus' );
|
||||
});
|
||||
return false;
|
||||
},
|
||||
submit: function() {
|
||||
var $form = $( this );
|
||||
|
||||
if ( $form.is( '.processing' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$form.addClass( 'processing' ).block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
|
||||
var data = {
|
||||
security: wc_checkout_params.apply_coupon_nonce,
|
||||
coupon_code: $form.find('input[name="coupon_code"]').val(),
|
||||
billing_email: wc_checkout_form.$checkout_form.find('input[name="billing_email"]').val()
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'apply_coupon' ),
|
||||
data: data,
|
||||
success: function( code ) {
|
||||
$( '.woocommerce-error, .woocommerce-message, .is-error, .is-success' ).remove();
|
||||
$form.removeClass( 'processing' ).unblock();
|
||||
|
||||
if ( code ) {
|
||||
$form.before( code );
|
||||
$form.slideUp();
|
||||
|
||||
$( document.body ).trigger( 'applied_coupon_in_checkout', [ data.coupon_code ] );
|
||||
$( document.body ).trigger( 'update_checkout', { update_shipping_method: false } );
|
||||
}
|
||||
},
|
||||
dataType: 'html'
|
||||
});
|
||||
|
||||
return false;
|
||||
},
|
||||
remove_coupon: function( e ) {
|
||||
e.preventDefault();
|
||||
|
||||
var container = $( this ).parents( '.woocommerce-checkout-review-order' ),
|
||||
coupon = $( this ).data( 'coupon' );
|
||||
|
||||
container.addClass( 'processing' ).block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
|
||||
var data = {
|
||||
security: wc_checkout_params.remove_coupon_nonce,
|
||||
coupon: coupon
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'remove_coupon' ),
|
||||
data: data,
|
||||
success: function( code ) {
|
||||
$( '.woocommerce-error, .woocommerce-message, .is-error, .is-success' ).remove();
|
||||
container.removeClass( 'processing' ).unblock();
|
||||
|
||||
if ( code ) {
|
||||
$( 'form.woocommerce-checkout' ).before( code );
|
||||
|
||||
$( document.body ).trigger( 'removed_coupon_in_checkout', [ data.coupon ] );
|
||||
$( document.body ).trigger( 'update_checkout', { update_shipping_method: false } );
|
||||
|
||||
// Remove coupon code from coupon field
|
||||
$( 'form.checkout_coupon' ).find( 'input[name="coupon_code"]' ).val( '' );
|
||||
}
|
||||
},
|
||||
error: function ( jqXHR ) {
|
||||
if ( wc_checkout_params.debug_mode ) {
|
||||
/* jshint devel: true */
|
||||
console.log( jqXHR.responseText );
|
||||
}
|
||||
},
|
||||
dataType: 'html'
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var wc_checkout_login_form = {
|
||||
init: function() {
|
||||
$( document.body ).on( 'click', 'a.showlogin', this.show_login_form );
|
||||
},
|
||||
show_login_form: function() {
|
||||
$( 'form.login, form.woocommerce-form--login' ).slideToggle();
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
var wc_terms_toggle = {
|
||||
init: function() {
|
||||
$( document.body ).on( 'click', 'a.woocommerce-terms-and-conditions-link', this.toggle_terms );
|
||||
},
|
||||
|
||||
toggle_terms: function() {
|
||||
if ( $( '.woocommerce-terms-and-conditions' ).length ) {
|
||||
$( '.woocommerce-terms-and-conditions' ).slideToggle( function() {
|
||||
var link_toggle = $( '.woocommerce-terms-and-conditions-link' );
|
||||
|
||||
if ( $( '.woocommerce-terms-and-conditions' ).is( ':visible' ) ) {
|
||||
link_toggle.addClass( 'woocommerce-terms-and-conditions-link--open' );
|
||||
link_toggle.removeClass( 'woocommerce-terms-and-conditions-link--closed' );
|
||||
} else {
|
||||
link_toggle.removeClass( 'woocommerce-terms-and-conditions-link--open' );
|
||||
link_toggle.addClass( 'woocommerce-terms-and-conditions-link--closed' );
|
||||
}
|
||||
} );
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
wc_checkout_form.init();
|
||||
wc_checkout_coupons.init();
|
||||
wc_checkout_login_form.init();
|
||||
wc_terms_toggle.init();
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/checkout.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/checkout.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,181 @@
|
||||
/*global wc_country_select_params */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
// wc_country_select_params is required to continue, ensure the object exists
|
||||
if ( typeof wc_country_select_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Select2 Enhancement if it exists
|
||||
if ( $().selectWoo ) {
|
||||
var getEnhancedSelectFormatString = function() {
|
||||
return {
|
||||
'language': {
|
||||
errorLoading: function() {
|
||||
// Workaround for https://github.com/select2/select2/issues/4355 instead of i18n_ajax_error.
|
||||
return wc_country_select_params.i18n_searching;
|
||||
},
|
||||
inputTooLong: function( args ) {
|
||||
var overChars = args.input.length - args.maximum;
|
||||
|
||||
if ( 1 === overChars ) {
|
||||
return wc_country_select_params.i18n_input_too_long_1;
|
||||
}
|
||||
|
||||
return wc_country_select_params.i18n_input_too_long_n.replace( '%qty%', overChars );
|
||||
},
|
||||
inputTooShort: function( args ) {
|
||||
var remainingChars = args.minimum - args.input.length;
|
||||
|
||||
if ( 1 === remainingChars ) {
|
||||
return wc_country_select_params.i18n_input_too_short_1;
|
||||
}
|
||||
|
||||
return wc_country_select_params.i18n_input_too_short_n.replace( '%qty%', remainingChars );
|
||||
},
|
||||
loadingMore: function() {
|
||||
return wc_country_select_params.i18n_load_more;
|
||||
},
|
||||
maximumSelected: function( args ) {
|
||||
if ( args.maximum === 1 ) {
|
||||
return wc_country_select_params.i18n_selection_too_long_1;
|
||||
}
|
||||
|
||||
return wc_country_select_params.i18n_selection_too_long_n.replace( '%qty%', args.maximum );
|
||||
},
|
||||
noResults: function() {
|
||||
return wc_country_select_params.i18n_no_matches;
|
||||
},
|
||||
searching: function() {
|
||||
return wc_country_select_params.i18n_searching;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
var wc_country_select_select2 = function() {
|
||||
$( 'select.country_select:visible, select.state_select:visible' ).each( function() {
|
||||
var $this = $( this );
|
||||
|
||||
var select2_args = $.extend({
|
||||
placeholder: $this.attr( 'data-placeholder' ) || $this.attr( 'placeholder' ) || '',
|
||||
label: $this.attr( 'data-label' ) || null,
|
||||
width: '100%'
|
||||
}, getEnhancedSelectFormatString() );
|
||||
|
||||
$( this )
|
||||
.on( 'select2:select', function() {
|
||||
$( this ).trigger( 'focus' ); // Maintain focus after select https://github.com/select2/select2/issues/4384
|
||||
} )
|
||||
.selectWoo( select2_args );
|
||||
});
|
||||
};
|
||||
|
||||
wc_country_select_select2();
|
||||
|
||||
$( document.body ).on( 'country_to_state_changed', function() {
|
||||
wc_country_select_select2();
|
||||
});
|
||||
}
|
||||
|
||||
/* State/Country select boxes */
|
||||
var states_json = wc_country_select_params.countries.replace( /"/g, '"' ),
|
||||
states = JSON.parse( states_json ),
|
||||
wrapper_selectors = '.woocommerce-billing-fields,' +
|
||||
'.woocommerce-shipping-fields,' +
|
||||
'.woocommerce-address-fields,' +
|
||||
'.woocommerce-shipping-calculator';
|
||||
|
||||
$( document.body ).on( 'change refresh', 'select.country_to_state, input.country_to_state', function() {
|
||||
// Grab wrapping element to target only stateboxes in same 'group'
|
||||
var $wrapper = $( this ).closest( wrapper_selectors );
|
||||
|
||||
if ( ! $wrapper.length ) {
|
||||
$wrapper = $( this ).closest('.form-row').parent();
|
||||
}
|
||||
|
||||
var country = $( this ).val(),
|
||||
$statebox = $wrapper.find( '#billing_state, #shipping_state, #calc_shipping_state' ),
|
||||
$parent = $statebox.closest( '.form-row' ),
|
||||
input_name = $statebox.attr( 'name' ),
|
||||
input_id = $statebox.attr('id'),
|
||||
input_classes = $statebox.attr('data-input-classes'),
|
||||
value = $statebox.val(),
|
||||
placeholder = $statebox.attr( 'placeholder' ) || $statebox.attr( 'data-placeholder' ) || '',
|
||||
$newstate;
|
||||
|
||||
if ( states[ country ] ) {
|
||||
if ( $.isEmptyObject( states[ country ] ) ) {
|
||||
$newstate = $( '<input type="hidden" />' )
|
||||
.prop( 'id', input_id )
|
||||
.prop( 'name', input_name )
|
||||
.prop( 'placeholder', placeholder )
|
||||
.attr( 'data-input-classes', input_classes )
|
||||
.addClass( 'hidden ' + input_classes );
|
||||
$parent.hide().find( '.select2-container' ).remove();
|
||||
$statebox.replaceWith( $newstate );
|
||||
$( document.body ).trigger( 'country_to_state_changed', [ country, $wrapper ] );
|
||||
} else {
|
||||
var state = states[ country ],
|
||||
$defaultOption = $( '<option value=""></option>' ).text( wc_country_select_params.i18n_select_state_text );
|
||||
|
||||
if ( ! placeholder ) {
|
||||
placeholder = wc_country_select_params.i18n_select_state_text;
|
||||
}
|
||||
|
||||
$parent.show();
|
||||
|
||||
if ( $statebox.is( 'input' ) ) {
|
||||
$newstate = $( '<select></select>' )
|
||||
.prop( 'id', input_id )
|
||||
.prop( 'name', input_name )
|
||||
.data( 'placeholder', placeholder )
|
||||
.attr( 'data-input-classes', input_classes )
|
||||
.addClass( 'state_select ' + input_classes );
|
||||
$statebox.replaceWith( $newstate );
|
||||
$statebox = $wrapper.find( '#billing_state, #shipping_state, #calc_shipping_state' );
|
||||
}
|
||||
|
||||
$statebox.empty().append( $defaultOption );
|
||||
|
||||
$.each( state, function( index ) {
|
||||
var $option = $( '<option></option>' )
|
||||
.prop( 'value', index )
|
||||
.text( state[ index ] );
|
||||
$statebox.append( $option );
|
||||
} );
|
||||
|
||||
$statebox.val( value ).trigger( 'change' );
|
||||
|
||||
$( document.body ).trigger( 'country_to_state_changed', [country, $wrapper ] );
|
||||
}
|
||||
} else {
|
||||
if ( $statebox.is( 'select, input[type="hidden"]' ) ) {
|
||||
$newstate = $( '<input type="text" />' )
|
||||
.prop( 'id', input_id )
|
||||
.prop( 'name', input_name )
|
||||
.prop('placeholder', placeholder)
|
||||
.attr('data-input-classes', input_classes )
|
||||
.addClass( 'input-text ' + input_classes );
|
||||
$parent.show().find( '.select2-container' ).remove();
|
||||
$statebox.replaceWith( $newstate );
|
||||
$( document.body ).trigger( 'country_to_state_changed', [country, $wrapper ] );
|
||||
}
|
||||
}
|
||||
|
||||
$( document.body ).trigger( 'country_to_state_changing', [country, $wrapper ] );
|
||||
});
|
||||
|
||||
$( document.body ).on( 'wc_address_i18n_ready', function() {
|
||||
// Init country selects with their default value once the page loads.
|
||||
$( wrapper_selectors ).each( function() {
|
||||
var $country_input = $( this ).find( '#billing_country, #shipping_country, #calc_shipping_country' );
|
||||
|
||||
if ( 0 === $country_input.length || 0 === $country_input.val().length ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$country_input.trigger( 'refresh' );
|
||||
});
|
||||
});
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/country-select.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/country-select.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(t){if("undefined"==typeof wc_country_select_params)return!1;if(t().selectWoo){var e=function(){t("select.country_select:visible, select.state_select:visible").each(function(){var e=t(this),n=t.extend({placeholder:e.attr("data-placeholder")||e.attr("placeholder")||"",label:e.attr("data-label")||null,width:"100%"},{language:{errorLoading:function(){return wc_country_select_params.i18n_searching},inputTooLong:function(t){var e=t.input.length-t.maximum;return 1===e?wc_country_select_params.i18n_input_too_long_1:wc_country_select_params.i18n_input_too_long_n.replace("%qty%",e)},inputTooShort:function(t){var e=t.minimum-t.input.length;return 1===e?wc_country_select_params.i18n_input_too_short_1:wc_country_select_params.i18n_input_too_short_n.replace("%qty%",e)},loadingMore:function(){return wc_country_select_params.i18n_load_more},maximumSelected:function(t){return 1===t.maximum?wc_country_select_params.i18n_selection_too_long_1:wc_country_select_params.i18n_selection_too_long_n.replace("%qty%",t.maximum)},noResults:function(){return wc_country_select_params.i18n_no_matches},searching:function(){return wc_country_select_params.i18n_searching}}});t(this).on("select2:select",function(){t(this).trigger("focus")}).selectWoo(n)})};e(),t(document.body).on("country_to_state_changed",function(){e()})}var n=wc_country_select_params.countries.replace(/"/g,'"'),o=JSON.parse(n),a=".woocommerce-billing-fields,.woocommerce-shipping-fields,.woocommerce-address-fields,.woocommerce-shipping-calculator";t(document.body).on("change refresh","select.country_to_state, input.country_to_state",function(){var e=t(this).closest(a);e.length||(e=t(this).closest(".form-row").parent());var n,c=t(this).val(),r=e.find("#billing_state, #shipping_state, #calc_shipping_state"),i=r.closest(".form-row"),s=r.attr("name"),_=r.attr("id"),l=r.attr("data-input-classes"),p=r.val(),u=r.attr("placeholder")||r.attr("data-placeholder")||"";if(o[c])if(t.isEmptyObject(o[c]))n=t('<input type="hidden" />').prop("id",_).prop("name",s).prop("placeholder",u).attr("data-input-classes",l).addClass("hidden "+l),i.hide().find(".select2-container").remove(),r.replaceWith(n),t(document.body).trigger("country_to_state_changed",[c,e]);else{var d=o[c],h=t('<option value=""></option>').text(wc_country_select_params.i18n_select_state_text);u||(u=wc_country_select_params.i18n_select_state_text),i.show(),r.is("input")&&(n=t("<select></select>").prop("id",_).prop("name",s).data("placeholder",u).attr("data-input-classes",l).addClass("state_select "+l),r.replaceWith(n),r=e.find("#billing_state, #shipping_state, #calc_shipping_state")),r.empty().append(h),t.each(d,function(e){var n=t("<option></option>").prop("value",e).text(d[e]);r.append(n)}),r.val(p).trigger("change"),t(document.body).trigger("country_to_state_changed",[c,e])}else r.is('select, input[type="hidden"]')&&(n=t('<input type="text" />').prop("id",_).prop("name",s).prop("placeholder",u).attr("data-input-classes",l).addClass("input-text "+l),i.show().find(".select2-container").remove(),r.replaceWith(n),t(document.body).trigger("country_to_state_changed",[c,e]));t(document.body).trigger("country_to_state_changing",[c,e])}),t(document.body).on("wc_address_i18n_ready",function(){t(a).each(function(){var e=t(this).find("#billing_country, #shipping_country, #calc_shipping_country");0!==e.length&&0!==e.val().length&&e.trigger("refresh")})})});
|
||||
@@ -0,0 +1,13 @@
|
||||
jQuery( function( $ ) {
|
||||
$( '.wc-credit-card-form-card-number' ).payment( 'formatCardNumber' );
|
||||
$( '.wc-credit-card-form-card-expiry' ).payment( 'formatCardExpiry' );
|
||||
$( '.wc-credit-card-form-card-cvc' ).payment( 'formatCardCVC' );
|
||||
|
||||
$( document.body )
|
||||
.on( 'updated_checkout wc-credit-card-form-init', function() {
|
||||
$( '.wc-credit-card-form-card-number' ).payment( 'formatCardNumber' );
|
||||
$( '.wc-credit-card-form-card-expiry' ).payment( 'formatCardExpiry' );
|
||||
$( '.wc-credit-card-form-card-cvc' ).payment( 'formatCardCVC' );
|
||||
})
|
||||
.trigger( 'wc-credit-card-form-init' );
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/credit-card-form.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/credit-card-form.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(r){r(".wc-credit-card-form-card-number").payment("formatCardNumber"),r(".wc-credit-card-form-card-expiry").payment("formatCardExpiry"),r(".wc-credit-card-form-card-cvc").payment("formatCardCVC"),r(document.body).on("updated_checkout wc-credit-card-form-init",function(){r(".wc-credit-card-form-card-number").payment("formatCardNumber"),r(".wc-credit-card-form-card-expiry").payment("formatCardExpiry"),r(".wc-credit-card-form-card-cvc").payment("formatCardCVC")}).trigger("wc-credit-card-form-init")});
|
||||
@@ -0,0 +1,142 @@
|
||||
/*global wc_geolocation_params */
|
||||
jQuery( function( $ ) {
|
||||
/**
|
||||
* Contains the current geo hash (or false if the hash
|
||||
* is not set/cannot be determined).
|
||||
*
|
||||
* @type {boolean|string}
|
||||
*/
|
||||
var geo_hash = false;
|
||||
|
||||
/**
|
||||
* Obtains the current geo hash from the `woocommerce_geo_hash` cookie, if set.
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function get_geo_hash() {
|
||||
var geo_hash_cookie = Cookies.get( 'woocommerce_geo_hash' );
|
||||
|
||||
if ( 'string' === typeof geo_hash_cookie && geo_hash_cookie.length ) {
|
||||
geo_hash = geo_hash_cookie;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* If we have an active geo hash value but it does not match the `?v=` query var in
|
||||
* current page URL, that indicates that we need to refresh the page.
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function needs_refresh() {
|
||||
return geo_hash && ( new URLSearchParams( window.location.search ) ).get( 'v' ) !== geo_hash;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends (or replaces) the geo hash used for links on the current page.
|
||||
*/
|
||||
var $append_hashes = function() {
|
||||
if ( ! geo_hash ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$( 'a[href^="' + wc_geolocation_params.home_url + '"]:not(a[href*="v="]), a[href^="/"]:not(a[href*="v="])' ).each( function() {
|
||||
var $this = $( this ),
|
||||
href = $this.attr( 'href' ),
|
||||
href_parts = href.split( '#' );
|
||||
|
||||
href = href_parts[0];
|
||||
|
||||
if ( href.indexOf( '?' ) > 0 ) {
|
||||
href = href + '&v=' + geo_hash;
|
||||
} else {
|
||||
href = href + '?v=' + geo_hash;
|
||||
}
|
||||
|
||||
if ( typeof href_parts[1] !== 'undefined' && href_parts[1] !== null ) {
|
||||
href = href + '#' + href_parts[1];
|
||||
}
|
||||
|
||||
$this.attr( 'href', href );
|
||||
});
|
||||
};
|
||||
|
||||
var $geolocate_customer = {
|
||||
url: wc_geolocation_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_customer_location' ),
|
||||
type: 'GET',
|
||||
success: function( response ) {
|
||||
if ( response.success && response.data.hash && response.data.hash !== geo_hash ) {
|
||||
$geolocation_redirect( response.data.hash );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Once we have a new hash, we redirect so a new version of the current page
|
||||
* (with correct pricing for the current region, etc) is displayed.
|
||||
*
|
||||
* @param {string} hash
|
||||
*/
|
||||
var $geolocation_redirect = function( hash ) {
|
||||
// Updates our (cookie-based) cache of the hash value. Expires in 1 hour.
|
||||
Cookies.set( 'woocommerce_geo_hash', hash, { expires: 1 / 24 } );
|
||||
|
||||
const urlQuery = new URL( window.location ).searchParams;
|
||||
const existingHash = urlQuery.get( 'v' );
|
||||
|
||||
// If the current URL does not contain the expected hash, redirect.
|
||||
if ( existingHash !== hash ) {
|
||||
urlQuery.set( 'v', hash );
|
||||
window.location.search = '?' + urlQuery.toString();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Updates any forms on the page so they use the current geo hash.
|
||||
*/
|
||||
function update_forms() {
|
||||
if ( ! geo_hash ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$( 'form' ).each( function () {
|
||||
var $this = $( this );
|
||||
var method = $this.attr( 'method' );
|
||||
var hasField = $this.find( 'input[name="v"]' ).length > 0;
|
||||
|
||||
if ( method && 'get' === method.toLowerCase() && ! hasField ) {
|
||||
$this.append( '<input type="hidden" name="v" value="' + geo_hash + '" />' );
|
||||
} else {
|
||||
var href = $this.attr( 'action' );
|
||||
if ( href ) {
|
||||
if ( href.indexOf( '?' ) > 0 ) {
|
||||
$this.attr( 'action', href + '&v=' + geo_hash );
|
||||
} else {
|
||||
$this.attr( 'action', href + '?v=' + geo_hash );
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Get the current geo hash. If it doesn't exist, or if it doesn't match the current
|
||||
// page URL, perform a geolocation request.
|
||||
if ( ! get_geo_hash() || needs_refresh() ) {
|
||||
$.ajax( $geolocate_customer );
|
||||
}
|
||||
|
||||
// Page updates.
|
||||
update_forms();
|
||||
$append_hashes();
|
||||
|
||||
$( document.body ).on( 'added_to_cart', function() {
|
||||
$append_hashes();
|
||||
});
|
||||
|
||||
// Enable user to trigger manual append hashes on AJAX operations
|
||||
$( document.body ).on( 'woocommerce_append_geo_hashes', function() {
|
||||
$append_hashes();
|
||||
});
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/geolocation.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/geolocation.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){var t=!1;var o,a=function(){t&&e('a[href^="'+wc_geolocation_params.home_url+'"]:not(a[href*="v="]), a[href^="/"]:not(a[href*="v="])').each(function(){var o=e(this),a=o.attr("href"),n=a.split("#");a=(a=n[0]).indexOf("?")>0?a+"&v="+t:a+"?v="+t,"undefined"!=typeof n[1]&&null!==n[1]&&(a=a+"#"+n[1]),o.attr("href",a)})},n={url:wc_geolocation_params.wc_ajax_url.toString().replace("%%endpoint%%","get_customer_location"),type:"GET",success:function(e){e.success&&e.data.hash&&e.data.hash!==t&&c(e.data.hash)}},c=function(e){Cookies.set("woocommerce_geo_hash",e,{expires:1/24});const t=new URL(window.location).searchParams;t.get("v")!==e&&(t.set("v",e),window.location.search="?"+t.toString())};("string"!=typeof(o=Cookies.get("woocommerce_geo_hash"))||!o.length||(t=o,0)||t&&new URLSearchParams(window.location.search).get("v")!==t)&&e.ajax(n),t&&e("form").each(function(){var o=e(this),a=o.attr("method"),n=o.find('input[name="v"]').length>0;if(a&&"get"===a.toLowerCase()&&!n)o.append('<input type="hidden" name="v" value="'+t+'" />');else{var c=o.attr("action");c&&(c.indexOf("?")>0?o.attr("action",c+"&v="+t):o.attr("action",c+"?v="+t))}}),a(),e(document.body).on("added_to_cart",function(){a()}),e(document.body).on("woocommerce_append_geo_hashes",function(){a()})});
|
||||
@@ -0,0 +1,5 @@
|
||||
jQuery( function( $ ) {
|
||||
$( '.lost_reset_password' ).on( 'submit', function () {
|
||||
$( 'button[type="submit"]', this ).attr( 'disabled', 'disabled' );
|
||||
});
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/lost-password.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/lost-password.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(t){t(".lost_reset_password").on("submit",function(){t('button[type="submit"]',this).attr("disabled","disabled")})});
|
||||
@@ -0,0 +1,186 @@
|
||||
( function ( wc_order_attribution ) {
|
||||
'use strict';
|
||||
// Cache params reference for shorter reusability.
|
||||
const params = wc_order_attribution.params;
|
||||
|
||||
// Helper functions.
|
||||
const $ = document.querySelector.bind( document );
|
||||
const propertyAccessor = ( obj, path ) => path.split( '.' ).reduce( ( acc, part ) => acc && acc[ part ], obj );
|
||||
const returnNull = () => null;
|
||||
const stringifyFalsyInputValue = ( value ) => value === null || value === undefined ? '' : value;
|
||||
|
||||
// Hardcode Checkout store key (`wc.wcBlocksData.CHECKOUT_STORE_KEY`), as we no longer have `wc-blocks-checkout` as a dependency.
|
||||
const CHECKOUT_STORE_KEY = 'wc/store/checkout';
|
||||
|
||||
/**
|
||||
* Get the order attribution data.
|
||||
*
|
||||
* Returns object full of `null`s if tracking is disabled.
|
||||
*
|
||||
* @returns {Object} Schema compatible object.
|
||||
*/
|
||||
function getData() {
|
||||
const accessor = params.allowTracking ? propertyAccessor : returnNull;
|
||||
const entries = Object.entries( wc_order_attribution.fields )
|
||||
.map( ( [ key, property ] ) => [ key, accessor( sbjs.get, property ) ] );
|
||||
return Object.fromEntries( entries );
|
||||
}
|
||||
|
||||
/**
|
||||
* Update `wc_order_attribution` input elements' values.
|
||||
*
|
||||
* @param {Object} values Object containing field values.
|
||||
*/
|
||||
function updateFormValues( values ) {
|
||||
// Update `<wc-order-attribution-inputs>` elements if any exist.
|
||||
for( const element of document.querySelectorAll( 'wc-order-attribution-inputs' ) ) {
|
||||
element.values = values;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Update Checkout extension data.
|
||||
*
|
||||
* @param {Object} values Object containing field values.
|
||||
*/
|
||||
function updateCheckoutBlockData( values ) {
|
||||
// Update Checkout block data if available.
|
||||
if ( window.wp && window.wp.data && window.wp.data.dispatch && window.wc && window.wc.wcBlocksData ) {
|
||||
window.wp.data.dispatch( window.wc.wcBlocksData.CHECKOUT_STORE_KEY ).__internalSetExtensionData(
|
||||
'woocommerce/order-attribution',
|
||||
values,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize sourcebuster & set data, or clear cookies & data.
|
||||
*
|
||||
* @param {boolean} allow Whether to allow tracking or disable it.
|
||||
*/
|
||||
wc_order_attribution.setOrderTracking = function( allow ) {
|
||||
params.allowTracking = allow;
|
||||
if ( ! allow ) {
|
||||
// Reset cookies, and clear form data.
|
||||
removeTrackingCookies();
|
||||
} else {
|
||||
// If not done yet, initialize sourcebuster.js which populates `sbjs.get` object.
|
||||
sbjs.init( {
|
||||
lifetime: Number( params.lifetime ),
|
||||
session_length: Number( params.session ),
|
||||
timezone_offset: '0', // utc
|
||||
} );
|
||||
}
|
||||
const values = getData();
|
||||
updateFormValues( values );
|
||||
updateCheckoutBlockData( values );
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove sourcebuster.js cookies.
|
||||
* To be called whenever tracking is disabled or consent is revoked.
|
||||
*/
|
||||
function removeTrackingCookies() {
|
||||
const domain = window.location.hostname;
|
||||
const sbCookies = [
|
||||
'sbjs_current',
|
||||
'sbjs_current_add',
|
||||
'sbjs_first',
|
||||
'sbjs_first_add',
|
||||
'sbjs_session',
|
||||
'sbjs_udata',
|
||||
'sbjs_migrations',
|
||||
'sbjs_promo'
|
||||
];
|
||||
|
||||
// Remove cookies
|
||||
sbCookies.forEach( ( name ) => {
|
||||
document.cookie = `${name}=; path=/; max-age=-999; domain=.${domain};`;
|
||||
} );
|
||||
}
|
||||
|
||||
// Run init.
|
||||
wc_order_attribution.setOrderTracking( params.allowTracking );
|
||||
|
||||
// Work around the lack of explicit script dependency for the checkout block.
|
||||
// Conditionally, wait for and use 'wp-data' & 'wc-blocks-checkout.
|
||||
|
||||
// Wait for (async) block checkout initialization and set source values once loaded.
|
||||
function eventuallyInitializeCheckoutBlock() {
|
||||
if (
|
||||
window.wp && window.wp.data && typeof window.wp.data.subscribe === 'function'
|
||||
) {
|
||||
// Update checkout block data once more if the checkout store was loaded after this script.
|
||||
const unsubscribe = window.wp.data.subscribe( function () {
|
||||
unsubscribe();
|
||||
updateCheckoutBlockData( getData() );
|
||||
}, CHECKOUT_STORE_KEY );
|
||||
}
|
||||
};
|
||||
// Wait for DOMContentLoaded to make sure wp.data is in place, if applicable for the page.
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", eventuallyInitializeCheckoutBlock);
|
||||
} else {
|
||||
eventuallyInitializeCheckoutBlock();
|
||||
}
|
||||
|
||||
/**
|
||||
* Define an element to contribute order attribute values to the enclosing form.
|
||||
* To be used with the classic checkout.
|
||||
*/
|
||||
window.customElements.define( 'wc-order-attribution-inputs', class extends HTMLElement {
|
||||
// Our bundler version does not support private class members, so we use a convention of `_` prefix.
|
||||
// #values
|
||||
// #fieldNames
|
||||
constructor(){
|
||||
super();
|
||||
// Cache fieldNames available at the construction time, to avoid malformed behavior if they change in runtime.
|
||||
this._fieldNames = Object.keys( wc_order_attribution.fields );
|
||||
// Allow values to be lazily set before CE upgrade.
|
||||
if ( this.hasOwnProperty( '_values' ) ) {
|
||||
let values = this.values;
|
||||
// Restore the setter.
|
||||
delete this.values;
|
||||
this.values = values || {};
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Stamp input elements to the element's light DOM.
|
||||
*
|
||||
* We could use `.elementInternals.setFromValue` and avoid sprouting `<input>` elements,
|
||||
* but it's not yet supported in Safari.
|
||||
*/
|
||||
connectedCallback() {
|
||||
let inputs = '';
|
||||
for( const fieldName of this._fieldNames ) {
|
||||
const value = stringifyFalsyInputValue( this.values[ fieldName ] );
|
||||
inputs += `<input type="hidden" name="${params.prefix}${fieldName}" value="${value}"/>`;
|
||||
}
|
||||
this.innerHTML = inputs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update form values.
|
||||
*/
|
||||
set values( values ) {
|
||||
this._values = values;
|
||||
if( this.isConnected ) {
|
||||
for( const fieldName of this._fieldNames ) {
|
||||
const input = this.querySelector( `input[name="${params.prefix}${fieldName}"]` );
|
||||
if( input ) {
|
||||
input.value = stringifyFalsyInputValue( this.values[ fieldName ] );
|
||||
} else {
|
||||
console.warn( `Field "${fieldName}" not found. Most likely, the '<wc-order-attribution-inputs>' element was manipulated.`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
get values() {
|
||||
return this._values;
|
||||
}
|
||||
} );
|
||||
|
||||
|
||||
}( window.wc_order_attribution ) );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(t){"use strict";const e=t.params,n=(document.querySelector.bind(document),(t,e)=>e.split(".").reduce((t,e)=>t&&t[e],t)),s=()=>null,i=t=>null===t||t===undefined?"":t,o="wc/store/checkout";function a(){const i=e.allowTracking?n:s,o=Object.entries(t.fields).map(([t,e])=>[t,i(sbjs.get,e)]);return Object.fromEntries(o)}function c(t){window.wp&&window.wp.data&&window.wp.data.dispatch&&window.wc&&window.wc.wcBlocksData&&window.wp.data.dispatch(window.wc.wcBlocksData.CHECKOUT_STORE_KEY).__internalSetExtensionData("woocommerce/order-attribution",t,!0)}function r(){if(window.wp&&window.wp.data&&"function"==typeof window.wp.data.subscribe){const t=window.wp.data.subscribe(function(){t(),c(a())},o)}}t.setOrderTracking=function(t){e.allowTracking=t,t?sbjs.init({lifetime:Number(e.lifetime),session_length:Number(e.session),timezone_offset:"0"}):function(){const t=window.location.hostname;["sbjs_current","sbjs_current_add","sbjs_first","sbjs_first_add","sbjs_session","sbjs_udata","sbjs_migrations","sbjs_promo"].forEach(e=>{document.cookie=`${e}=; path=/; max-age=-999; domain=.${t};`})}();const n=a();!function(t){for(const e of document.querySelectorAll("wc-order-attribution-inputs"))e.values=t}(n),c(n)},t.setOrderTracking(e.allowTracking),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",r):r(),window.customElements.define("wc-order-attribution-inputs",class extends HTMLElement{constructor(){if(super(),this._fieldNames=Object.keys(t.fields),this.hasOwnProperty("_values")){let t=this.values;delete this.values,this.values=t||{}}}connectedCallback(){let t="";for(const n of this._fieldNames){const s=i(this.values[n]);t+=`<input type="hidden" name="${e.prefix}${n}" value="${s}"/>`}this.innerHTML=t}set values(t){if(this._values=t,this.isConnected)for(const t of this._fieldNames){const n=this.querySelector(`input[name="${e.prefix}${t}"]`);n?n.value=i(this.values[t]):console.warn(`Field "${t}" not found. Most likely, the '<wc-order-attribution-inputs>' element was manipulated.`)}}get values(){return this._values}})}(window.wc_order_attribution);
|
||||
@@ -0,0 +1,132 @@
|
||||
/* global wp, pwsL10n, wc_password_strength_meter_params */
|
||||
jQuery( function( $ ) {
|
||||
'use strict';
|
||||
/**
|
||||
* Password Strength Meter class.
|
||||
*/
|
||||
var wc_password_strength_meter = {
|
||||
|
||||
/**
|
||||
* Initialize strength meter actions.
|
||||
*/
|
||||
init: function() {
|
||||
$( document.body )
|
||||
.on(
|
||||
'keyup change',
|
||||
'form.register #reg_password, form.checkout #account_password, ' +
|
||||
'form.edit-account #password_1, form.lost_reset_password #password_1',
|
||||
this.strengthMeter
|
||||
);
|
||||
$( 'form.checkout #createaccount' ).trigger( 'change' );
|
||||
},
|
||||
|
||||
/**
|
||||
* Strength Meter.
|
||||
*/
|
||||
strengthMeter: function() {
|
||||
var wrapper = $( 'form.register, form.checkout, form.edit-account, form.lost_reset_password' ),
|
||||
submit = $( 'button[type="submit"]', wrapper ),
|
||||
field = $( '#reg_password, #account_password, #password_1', wrapper ),
|
||||
strength = 1,
|
||||
fieldValue = field.val(),
|
||||
stop_checkout = ! wrapper.is( 'form.checkout' ); // By default is disabled on checkout.
|
||||
|
||||
wc_password_strength_meter.includeMeter( wrapper, field );
|
||||
|
||||
strength = wc_password_strength_meter.checkPasswordStrength( wrapper, field );
|
||||
|
||||
// Allow password strength meter stop checkout.
|
||||
if ( wc_password_strength_meter_params.stop_checkout ) {
|
||||
stop_checkout = true;
|
||||
}
|
||||
|
||||
if (
|
||||
fieldValue.length > 0 &&
|
||||
strength < wc_password_strength_meter_params.min_password_strength &&
|
||||
-1 !== strength &&
|
||||
stop_checkout
|
||||
) {
|
||||
submit.attr( 'disabled', 'disabled' ).addClass( 'disabled' );
|
||||
} else {
|
||||
submit.prop( 'disabled', false ).removeClass( 'disabled' );
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Include meter HTML.
|
||||
*
|
||||
* @param {Object} wrapper
|
||||
* @param {Object} field
|
||||
*/
|
||||
includeMeter: function( wrapper, field ) {
|
||||
var meter = wrapper.find( '.woocommerce-password-strength' );
|
||||
|
||||
if ( '' === field.val() ) {
|
||||
meter.hide();
|
||||
$( document.body ).trigger( 'wc-password-strength-hide' );
|
||||
} else if ( 0 === meter.length ) {
|
||||
field.after( '<div class="woocommerce-password-strength" aria-live="polite"></div>' );
|
||||
$( document.body ).trigger( 'wc-password-strength-added' );
|
||||
} else {
|
||||
meter.show();
|
||||
$( document.body ).trigger( 'wc-password-strength-show' );
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Check password strength.
|
||||
*
|
||||
* @param {Object} field
|
||||
*
|
||||
* @return {Int}
|
||||
*/
|
||||
checkPasswordStrength: function( wrapper, field ) {
|
||||
var meter = wrapper.find( '.woocommerce-password-strength' ),
|
||||
hint = wrapper.find( '.woocommerce-password-hint' ),
|
||||
hint_html = '<small class="woocommerce-password-hint">' + wc_password_strength_meter_params.i18n_password_hint + '</small>',
|
||||
strength = wp.passwordStrength.meter( field.val(), wp.passwordStrength.userInputDisallowedList() ),
|
||||
error = '';
|
||||
|
||||
// Reset.
|
||||
meter.removeClass( 'short bad good strong' );
|
||||
hint.remove();
|
||||
|
||||
if ( meter.is( ':hidden' ) ) {
|
||||
return strength;
|
||||
}
|
||||
|
||||
// Error to append
|
||||
if ( strength < wc_password_strength_meter_params.min_password_strength ) {
|
||||
error = ' - ' + wc_password_strength_meter_params.i18n_password_error;
|
||||
}
|
||||
|
||||
switch ( strength ) {
|
||||
case 0 :
|
||||
meter.addClass( 'short' ).html( pwsL10n['short'] + error );
|
||||
meter.after( hint_html );
|
||||
break;
|
||||
case 1 :
|
||||
meter.addClass( 'bad' ).html( pwsL10n.bad + error );
|
||||
meter.after( hint_html );
|
||||
break;
|
||||
case 2 :
|
||||
meter.addClass( 'bad' ).html( pwsL10n.bad + error );
|
||||
meter.after( hint_html );
|
||||
break;
|
||||
case 3 :
|
||||
meter.addClass( 'good' ).html( pwsL10n.good + error );
|
||||
break;
|
||||
case 4 :
|
||||
meter.addClass( 'strong' ).html( pwsL10n.strong + error );
|
||||
break;
|
||||
case 5 :
|
||||
meter.addClass( 'short' ).html( pwsL10n.mismatch );
|
||||
break;
|
||||
}
|
||||
|
||||
return strength;
|
||||
}
|
||||
};
|
||||
|
||||
wc_password_strength_meter.init();
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/password-strength-meter.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/password-strength-meter.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(s){"use strict";var r={init:function(){s(document.body).on("keyup change","form.register #reg_password, form.checkout #account_password, form.edit-account #password_1, form.lost_reset_password #password_1",this.strengthMeter),s("form.checkout #createaccount").trigger("change")},strengthMeter:function(){var e,t=s("form.register, form.checkout, form.edit-account, form.lost_reset_password"),o=s('button[type="submit"]',t),a=s("#reg_password, #account_password, #password_1",t),d=a.val(),n=!t.is("form.checkout");r.includeMeter(t,a),e=r.checkPasswordStrength(t,a),wc_password_strength_meter_params.stop_checkout&&(n=!0),d.length>0&&e<wc_password_strength_meter_params.min_password_strength&&-1!==e&&n?o.attr("disabled","disabled").addClass("disabled"):o.prop("disabled",!1).removeClass("disabled")},includeMeter:function(r,e){var t=r.find(".woocommerce-password-strength");""===e.val()?(t.hide(),s(document.body).trigger("wc-password-strength-hide")):0===t.length?(e.after('<div class="woocommerce-password-strength" aria-live="polite"></div>'),s(document.body).trigger("wc-password-strength-added")):(t.show(),s(document.body).trigger("wc-password-strength-show"))},checkPasswordStrength:function(s,r){var e=s.find(".woocommerce-password-strength"),t=s.find(".woocommerce-password-hint"),o='<small class="woocommerce-password-hint">'+wc_password_strength_meter_params.i18n_password_hint+"</small>",a=wp.passwordStrength.meter(r.val(),wp.passwordStrength.userInputDisallowedList()),d="";if(e.removeClass("short bad good strong"),t.remove(),e.is(":hidden"))return a;switch(a<wc_password_strength_meter_params.min_password_strength&&(d=" - "+wc_password_strength_meter_params.i18n_password_error),a){case 0:e.addClass("short").html(pwsL10n.short+d),e.after(o);break;case 1:case 2:e.addClass("bad").html(pwsL10n.bad+d),e.after(o);break;case 3:e.addClass("good").html(pwsL10n.good+d);break;case 4:e.addClass("strong").html(pwsL10n.strong+d);break;case 5:e.addClass("short").html(pwsL10n.mismatch)}return a}};r.init()});
|
||||
@@ -0,0 +1,83 @@
|
||||
/* global woocommerce_price_slider_params, accounting */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
// woocommerce_price_slider_params is required to continue, ensure the object exists
|
||||
if ( typeof woocommerce_price_slider_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$( document.body ).on( 'price_slider_create price_slider_slide', function( event, min, max ) {
|
||||
|
||||
$( '.price_slider_amount span.from' ).html( accounting.formatMoney( min, {
|
||||
symbol: woocommerce_price_slider_params.currency_format_symbol,
|
||||
decimal: woocommerce_price_slider_params.currency_format_decimal_sep,
|
||||
thousand: woocommerce_price_slider_params.currency_format_thousand_sep,
|
||||
precision: woocommerce_price_slider_params.currency_format_num_decimals,
|
||||
format: woocommerce_price_slider_params.currency_format
|
||||
} ) );
|
||||
|
||||
$( '.price_slider_amount span.to' ).html( accounting.formatMoney( max, {
|
||||
symbol: woocommerce_price_slider_params.currency_format_symbol,
|
||||
decimal: woocommerce_price_slider_params.currency_format_decimal_sep,
|
||||
thousand: woocommerce_price_slider_params.currency_format_thousand_sep,
|
||||
precision: woocommerce_price_slider_params.currency_format_num_decimals,
|
||||
format: woocommerce_price_slider_params.currency_format
|
||||
} ) );
|
||||
|
||||
$( document.body ).trigger( 'price_slider_updated', [ min, max ] );
|
||||
});
|
||||
|
||||
function init_price_filter() {
|
||||
$( 'input#min_price, input#max_price' ).hide();
|
||||
$( '.price_slider, .price_label' ).show();
|
||||
|
||||
var min_price = $( '.price_slider_amount #min_price' ).data( 'min' ),
|
||||
max_price = $( '.price_slider_amount #max_price' ).data( 'max' ),
|
||||
step = $( '.price_slider_amount' ).data( 'step' ) || 1,
|
||||
current_min_price = $( '.price_slider_amount #min_price' ).val(),
|
||||
current_max_price = $( '.price_slider_amount #max_price' ).val();
|
||||
|
||||
$( '.price_slider:not(.ui-slider)' ).slider({
|
||||
range: true,
|
||||
animate: true,
|
||||
min: min_price,
|
||||
max: max_price,
|
||||
step: step,
|
||||
values: [ current_min_price, current_max_price ],
|
||||
create: function() {
|
||||
|
||||
$( '.price_slider_amount #min_price' ).val( current_min_price );
|
||||
$( '.price_slider_amount #max_price' ).val( current_max_price );
|
||||
|
||||
$( document.body ).trigger( 'price_slider_create', [ current_min_price, current_max_price ] );
|
||||
},
|
||||
slide: function( event, ui ) {
|
||||
|
||||
$( 'input#min_price' ).val( ui.values[0] );
|
||||
$( 'input#max_price' ).val( ui.values[1] );
|
||||
|
||||
$( document.body ).trigger( 'price_slider_slide', [ ui.values[0], ui.values[1] ] );
|
||||
},
|
||||
change: function( event, ui ) {
|
||||
|
||||
$( document.body ).trigger( 'price_slider_change', [ ui.values[0], ui.values[1] ] );
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
init_price_filter();
|
||||
$( document.body ).on( 'init_price_filter', init_price_filter );
|
||||
|
||||
var hasSelectiveRefresh = (
|
||||
'undefined' !== typeof wp &&
|
||||
wp.customize &&
|
||||
wp.customize.selectiveRefresh &&
|
||||
wp.customize.widgetsPreview &&
|
||||
wp.customize.widgetsPreview.WidgetPartial
|
||||
);
|
||||
if ( hasSelectiveRefresh ) {
|
||||
wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function() {
|
||||
init_price_filter();
|
||||
} );
|
||||
}
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/price-slider.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/price-slider.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){if("undefined"==typeof woocommerce_price_slider_params)return!1;function r(){e("input#min_price, input#max_price").hide(),e(".price_slider, .price_label").show();var r=e(".price_slider_amount #min_price").data("min"),i=e(".price_slider_amount #max_price").data("max"),c=e(".price_slider_amount").data("step")||1,o=e(".price_slider_amount #min_price").val(),_=e(".price_slider_amount #max_price").val();e(".price_slider:not(.ui-slider)").slider({range:!0,animate:!0,min:r,max:i,step:c,values:[o,_],create:function(){e(".price_slider_amount #min_price").val(o),e(".price_slider_amount #max_price").val(_),e(document.body).trigger("price_slider_create",[o,_])},slide:function(r,i){e("input#min_price").val(i.values[0]),e("input#max_price").val(i.values[1]),e(document.body).trigger("price_slider_slide",[i.values[0],i.values[1]])},change:function(r,i){e(document.body).trigger("price_slider_change",[i.values[0],i.values[1]])}})}e(document.body).on("price_slider_create price_slider_slide",function(r,i,c){e(".price_slider_amount span.from").html(accounting.formatMoney(i,{symbol:woocommerce_price_slider_params.currency_format_symbol,decimal:woocommerce_price_slider_params.currency_format_decimal_sep,thousand:woocommerce_price_slider_params.currency_format_thousand_sep,precision:woocommerce_price_slider_params.currency_format_num_decimals,format:woocommerce_price_slider_params.currency_format})),e(".price_slider_amount span.to").html(accounting.formatMoney(c,{symbol:woocommerce_price_slider_params.currency_format_symbol,decimal:woocommerce_price_slider_params.currency_format_decimal_sep,thousand:woocommerce_price_slider_params.currency_format_thousand_sep,precision:woocommerce_price_slider_params.currency_format_num_decimals,format:woocommerce_price_slider_params.currency_format})),e(document.body).trigger("price_slider_updated",[i,c])}),r(),e(document.body).on("init_price_filter",r),"undefined"!=typeof wp&&wp.customize&&wp.customize.selectiveRefresh&&wp.customize.widgetsPreview&&wp.customize.widgetsPreview.WidgetPartial&&wp.customize.selectiveRefresh.bind("partial-content-rendered",function(){r()})});
|
||||
@@ -0,0 +1,346 @@
|
||||
/*global wc_single_product_params, PhotoSwipe, PhotoSwipeUI_Default */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
// wc_single_product_params is required to continue.
|
||||
if ( typeof wc_single_product_params === 'undefined' ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$( 'body' )
|
||||
// Tabs
|
||||
.on( 'init', '.wc-tabs-wrapper, .woocommerce-tabs', function() {
|
||||
$( this ).find( '.wc-tab, .woocommerce-tabs .panel:not(.panel .panel)' ).hide();
|
||||
|
||||
var hash = window.location.hash;
|
||||
var url = window.location.href;
|
||||
var $tabs = $( this ).find( '.wc-tabs, ul.tabs' ).first();
|
||||
|
||||
if ( hash.toLowerCase().indexOf( 'comment-' ) >= 0 || hash === '#reviews' || hash === '#tab-reviews' ) {
|
||||
$tabs.find( 'li.reviews_tab a' ).trigger( 'click' );
|
||||
} else if ( url.indexOf( 'comment-page-' ) > 0 || url.indexOf( 'cpage=' ) > 0 ) {
|
||||
$tabs.find( 'li.reviews_tab a' ).trigger( 'click' );
|
||||
} else if ( hash === '#tab-additional_information' ) {
|
||||
$tabs.find( 'li.additional_information_tab a' ).trigger( 'click' );
|
||||
} else {
|
||||
$tabs.find( 'li:first a' ).trigger( 'click' );
|
||||
}
|
||||
} )
|
||||
.on( 'click', '.wc-tabs li a, ul.tabs li a', function( e ) {
|
||||
e.preventDefault();
|
||||
var $tab = $( this );
|
||||
var $tabs_wrapper = $tab.closest( '.wc-tabs-wrapper, .woocommerce-tabs' );
|
||||
var $tabs = $tabs_wrapper.find( '.wc-tabs, ul.tabs' );
|
||||
|
||||
$tabs.find( 'li' ).removeClass( 'active' );
|
||||
$tabs_wrapper.find( '.wc-tab, .panel:not(.panel .panel)' ).hide();
|
||||
|
||||
$tab.closest( 'li' ).addClass( 'active' );
|
||||
$tabs_wrapper.find( '#' + $tab.attr( 'href' ).split( '#' )[1] ).show();
|
||||
} )
|
||||
// Review link
|
||||
.on( 'click', 'a.woocommerce-review-link', function() {
|
||||
$( '.reviews_tab a' ).trigger( 'click' );
|
||||
return true;
|
||||
} )
|
||||
// Star ratings for comments
|
||||
.on( 'init', '#rating', function() {
|
||||
$( '#rating' )
|
||||
.hide()
|
||||
.before(
|
||||
'<p class="stars">\
|
||||
<span>\
|
||||
<a class="star-1" href="#">1</a>\
|
||||
<a class="star-2" href="#">2</a>\
|
||||
<a class="star-3" href="#">3</a>\
|
||||
<a class="star-4" href="#">4</a>\
|
||||
<a class="star-5" href="#">5</a>\
|
||||
</span>\
|
||||
</p>'
|
||||
);
|
||||
} )
|
||||
.on( 'click', '#respond p.stars a', function() {
|
||||
var $star = $( this ),
|
||||
$rating = $( this ).closest( '#respond' ).find( '#rating' ),
|
||||
$container = $( this ).closest( '.stars' );
|
||||
|
||||
$rating.val( $star.text() );
|
||||
$star.siblings( 'a' ).removeClass( 'active' );
|
||||
$star.addClass( 'active' );
|
||||
$container.addClass( 'selected' );
|
||||
|
||||
return false;
|
||||
} )
|
||||
.on( 'click', '#respond #submit', function() {
|
||||
var $rating = $( this ).closest( '#respond' ).find( '#rating' ),
|
||||
rating = $rating.val();
|
||||
|
||||
if ( $rating.length > 0 && ! rating && wc_single_product_params.review_rating_required === 'yes' ) {
|
||||
window.alert( wc_single_product_params.i18n_required_rating_text );
|
||||
|
||||
return false;
|
||||
}
|
||||
} );
|
||||
|
||||
// Init Tabs and Star Ratings
|
||||
$( '.wc-tabs-wrapper, .woocommerce-tabs, #rating' ).trigger( 'init' );
|
||||
|
||||
/**
|
||||
* Product gallery class.
|
||||
*/
|
||||
var ProductGallery = function( $target, args ) {
|
||||
this.$target = $target;
|
||||
this.$images = $( '.woocommerce-product-gallery__image', $target );
|
||||
|
||||
// No images? Abort.
|
||||
if ( 0 === this.$images.length ) {
|
||||
this.$target.css( 'opacity', 1 );
|
||||
return;
|
||||
}
|
||||
|
||||
// Make this object available.
|
||||
$target.data( 'product_gallery', this );
|
||||
|
||||
// Pick functionality to initialize...
|
||||
this.flexslider_enabled = 'function' === typeof $.fn.flexslider && wc_single_product_params.flexslider_enabled;
|
||||
this.zoom_enabled = 'function' === typeof $.fn.zoom && wc_single_product_params.zoom_enabled;
|
||||
this.photoswipe_enabled = typeof PhotoSwipe !== 'undefined' && wc_single_product_params.photoswipe_enabled;
|
||||
|
||||
// ...also taking args into account.
|
||||
if ( args ) {
|
||||
this.flexslider_enabled = false === args.flexslider_enabled ? false : this.flexslider_enabled;
|
||||
this.zoom_enabled = false === args.zoom_enabled ? false : this.zoom_enabled;
|
||||
this.photoswipe_enabled = false === args.photoswipe_enabled ? false : this.photoswipe_enabled;
|
||||
}
|
||||
|
||||
// ...and what is in the gallery.
|
||||
if ( 1 === this.$images.length ) {
|
||||
this.flexslider_enabled = false;
|
||||
}
|
||||
|
||||
// Bind functions to this.
|
||||
this.initFlexslider = this.initFlexslider.bind( this );
|
||||
this.initZoom = this.initZoom.bind( this );
|
||||
this.initZoomForTarget = this.initZoomForTarget.bind( this );
|
||||
this.initPhotoswipe = this.initPhotoswipe.bind( this );
|
||||
this.onResetSlidePosition = this.onResetSlidePosition.bind( this );
|
||||
this.getGalleryItems = this.getGalleryItems.bind( this );
|
||||
this.openPhotoswipe = this.openPhotoswipe.bind( this );
|
||||
|
||||
if ( this.flexslider_enabled ) {
|
||||
this.initFlexslider( args.flexslider );
|
||||
$target.on( 'woocommerce_gallery_reset_slide_position', this.onResetSlidePosition );
|
||||
} else {
|
||||
this.$target.css( 'opacity', 1 );
|
||||
}
|
||||
|
||||
if ( this.zoom_enabled ) {
|
||||
this.initZoom();
|
||||
$target.on( 'woocommerce_gallery_init_zoom', this.initZoom );
|
||||
}
|
||||
|
||||
if ( this.photoswipe_enabled ) {
|
||||
this.initPhotoswipe();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize flexSlider.
|
||||
*/
|
||||
ProductGallery.prototype.initFlexslider = function( args ) {
|
||||
var $target = this.$target,
|
||||
gallery = this;
|
||||
|
||||
var options = $.extend( {
|
||||
selector: '.woocommerce-product-gallery__wrapper > .woocommerce-product-gallery__image',
|
||||
start: function() {
|
||||
$target.css( 'opacity', 1 );
|
||||
},
|
||||
after: function( slider ) {
|
||||
gallery.initZoomForTarget( gallery.$images.eq( slider.currentSlide ) );
|
||||
}
|
||||
}, args );
|
||||
|
||||
$target.flexslider( options );
|
||||
|
||||
// Trigger resize after main image loads to ensure correct gallery size.
|
||||
$( '.woocommerce-product-gallery__wrapper .woocommerce-product-gallery__image:eq(0) .wp-post-image' ).one( 'load', function() {
|
||||
var $image = $( this );
|
||||
|
||||
if ( $image ) {
|
||||
setTimeout( function() {
|
||||
var setHeight = $image.closest( '.woocommerce-product-gallery__image' ).height();
|
||||
var $viewport = $image.closest( '.flex-viewport' );
|
||||
|
||||
if ( setHeight && $viewport ) {
|
||||
$viewport.height( setHeight );
|
||||
}
|
||||
}, 100 );
|
||||
}
|
||||
} ).each( function() {
|
||||
if ( this.complete ) {
|
||||
$( this ).trigger( 'load' );
|
||||
}
|
||||
} );
|
||||
};
|
||||
|
||||
/**
|
||||
* Init zoom.
|
||||
*/
|
||||
ProductGallery.prototype.initZoom = function() {
|
||||
this.initZoomForTarget( this.$images.first() );
|
||||
};
|
||||
|
||||
/**
|
||||
* Init zoom.
|
||||
*/
|
||||
ProductGallery.prototype.initZoomForTarget = function( zoomTarget ) {
|
||||
if ( ! this.zoom_enabled ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var galleryWidth = this.$target.width(),
|
||||
zoomEnabled = false;
|
||||
|
||||
$( zoomTarget ).each( function( index, target ) {
|
||||
var image = $( target ).find( 'img' );
|
||||
|
||||
if ( image.data( 'large_image_width' ) > galleryWidth ) {
|
||||
zoomEnabled = true;
|
||||
return false;
|
||||
}
|
||||
} );
|
||||
|
||||
// But only zoom if the img is larger than its container.
|
||||
if ( zoomEnabled ) {
|
||||
var zoom_options = $.extend( {
|
||||
touch: false
|
||||
}, wc_single_product_params.zoom_options );
|
||||
|
||||
if ( 'ontouchstart' in document.documentElement ) {
|
||||
zoom_options.on = 'click';
|
||||
}
|
||||
|
||||
zoomTarget.trigger( 'zoom.destroy' );
|
||||
zoomTarget.zoom( zoom_options );
|
||||
|
||||
setTimeout( function() {
|
||||
if ( zoomTarget.find(':hover').length ) {
|
||||
zoomTarget.trigger( 'mouseover' );
|
||||
}
|
||||
}, 100 );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Init PhotoSwipe.
|
||||
*/
|
||||
ProductGallery.prototype.initPhotoswipe = function() {
|
||||
if ( this.zoom_enabled && this.$images.length > 0 ) {
|
||||
this.$target.prepend( '<a href="#" class="woocommerce-product-gallery__trigger">🔍</a>' );
|
||||
this.$target.on( 'click', '.woocommerce-product-gallery__trigger', this.openPhotoswipe );
|
||||
this.$target.on( 'click', '.woocommerce-product-gallery__image a', function( e ) {
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
// If flexslider is disabled, gallery images also need to trigger photoswipe on click.
|
||||
if ( ! this.flexslider_enabled ) {
|
||||
this.$target.on( 'click', '.woocommerce-product-gallery__image a', this.openPhotoswipe );
|
||||
}
|
||||
} else {
|
||||
this.$target.on( 'click', '.woocommerce-product-gallery__image a', this.openPhotoswipe );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset slide position to 0.
|
||||
*/
|
||||
ProductGallery.prototype.onResetSlidePosition = function() {
|
||||
this.$target.flexslider( 0 );
|
||||
};
|
||||
|
||||
/**
|
||||
* Get product gallery image items.
|
||||
*/
|
||||
ProductGallery.prototype.getGalleryItems = function() {
|
||||
var $slides = this.$images,
|
||||
items = [];
|
||||
|
||||
if ( $slides.length > 0 ) {
|
||||
$slides.each( function( i, el ) {
|
||||
var img = $( el ).find( 'img' );
|
||||
|
||||
if ( img.length ) {
|
||||
var large_image_src = img.attr( 'data-large_image' ),
|
||||
large_image_w = img.attr( 'data-large_image_width' ),
|
||||
large_image_h = img.attr( 'data-large_image_height' ),
|
||||
alt = img.attr( 'alt' ),
|
||||
item = {
|
||||
alt : alt,
|
||||
src : large_image_src,
|
||||
w : large_image_w,
|
||||
h : large_image_h,
|
||||
title: img.attr( 'data-caption' ) ? img.attr( 'data-caption' ) : img.attr( 'title' )
|
||||
};
|
||||
items.push( item );
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
return items;
|
||||
};
|
||||
|
||||
/**
|
||||
* Open photoswipe modal.
|
||||
*/
|
||||
ProductGallery.prototype.openPhotoswipe = function( e ) {
|
||||
e.preventDefault();
|
||||
|
||||
var pswpElement = $( '.pswp' )[0],
|
||||
items = this.getGalleryItems(),
|
||||
eventTarget = $( e.target ),
|
||||
clicked;
|
||||
|
||||
if ( 0 < eventTarget.closest( '.woocommerce-product-gallery__trigger' ).length ) {
|
||||
clicked = this.$target.find( '.flex-active-slide' );
|
||||
} else {
|
||||
clicked = eventTarget.closest( '.woocommerce-product-gallery__image' );
|
||||
}
|
||||
|
||||
var options = $.extend( {
|
||||
index: $( clicked ).index(),
|
||||
addCaptionHTMLFn: function( item, captionEl ) {
|
||||
if ( ! item.title ) {
|
||||
captionEl.children[0].textContent = '';
|
||||
return false;
|
||||
}
|
||||
captionEl.children[0].textContent = item.title;
|
||||
return true;
|
||||
}
|
||||
}, wc_single_product_params.photoswipe_options );
|
||||
|
||||
// Initializes and opens PhotoSwipe.
|
||||
var photoswipe = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options );
|
||||
photoswipe.init();
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to call wc_product_gallery on jquery selector.
|
||||
*/
|
||||
$.fn.wc_product_gallery = function( args ) {
|
||||
new ProductGallery( this, args || wc_single_product_params );
|
||||
return this;
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialize all galleries on page.
|
||||
*/
|
||||
$( '.woocommerce-product-gallery' ).each( function() {
|
||||
|
||||
$( this ).trigger( 'wc-product-gallery-before-init', [ this, wc_single_product_params ] );
|
||||
|
||||
$( this ).wc_product_gallery( wc_single_product_params );
|
||||
|
||||
$( this ).trigger( 'wc-product-gallery-after-init', [ this, wc_single_product_params ] );
|
||||
|
||||
} );
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/single-product.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/single-product.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,117 @@
|
||||
/*global wc_tokenization_form_params */
|
||||
jQuery( function( $ ) {
|
||||
|
||||
/**
|
||||
* WCTokenizationForm class.
|
||||
*/
|
||||
var TokenizationForm = function( $target ) {
|
||||
this.$target = $target;
|
||||
this.$formWrap = $target.closest( '.payment_box' );
|
||||
|
||||
// Params.
|
||||
this.params = $.extend( {}, {
|
||||
'is_registration_required': false,
|
||||
'is_logged_in' : false
|
||||
}, wc_tokenization_form_params );
|
||||
|
||||
// Bind functions to this.
|
||||
this.onDisplay = this.onDisplay.bind( this );
|
||||
this.hideForm = this.hideForm.bind( this );
|
||||
this.showForm = this.showForm.bind( this );
|
||||
this.showSaveNewCheckbox = this.showSaveNewCheckbox.bind( this );
|
||||
this.hideSaveNewCheckbox = this.hideSaveNewCheckbox.bind( this );
|
||||
|
||||
// When a radio button is changed, make sure to show/hide our new CC info area.
|
||||
this.$target.on(
|
||||
'click change',
|
||||
':input.woocommerce-SavedPaymentMethods-tokenInput',
|
||||
{ tokenizationForm: this },
|
||||
this.onTokenChange
|
||||
);
|
||||
|
||||
// OR if create account is checked.
|
||||
$( 'input#createaccount' ).on( 'change', { tokenizationForm: this }, this.onCreateAccountChange );
|
||||
|
||||
// First display.
|
||||
this.onDisplay();
|
||||
};
|
||||
|
||||
TokenizationForm.prototype.onDisplay = function() {
|
||||
// Make sure a radio button is selected if there is no is_default for this payment method..
|
||||
if ( 0 === $( ':input.woocommerce-SavedPaymentMethods-tokenInput:checked', this.$target ).length ) {
|
||||
$( ':input.woocommerce-SavedPaymentMethods-tokenInput:last', this.$target ).prop( 'checked', true );
|
||||
}
|
||||
|
||||
// Don't show the "use new" radio button if we only have one method..
|
||||
if ( 0 === this.$target.data( 'count' ) ) {
|
||||
$( '.woocommerce-SavedPaymentMethods-new', this.$target ).remove();
|
||||
}
|
||||
|
||||
// Hide "save card" if "Create Account" is not checked and registration is not forced.
|
||||
var hasCreateAccountCheckbox = 0 < $( 'input#createaccount' ).length,
|
||||
createAccount = hasCreateAccountCheckbox && $( 'input#createaccount' ).is( ':checked' );
|
||||
|
||||
if ( createAccount || this.params.is_logged_in || this.params.is_registration_required ) {
|
||||
this.showSaveNewCheckbox();
|
||||
} else {
|
||||
this.hideSaveNewCheckbox();
|
||||
}
|
||||
|
||||
// Trigger change event
|
||||
$( ':input.woocommerce-SavedPaymentMethods-tokenInput:checked', this.$target ).trigger( 'change' );
|
||||
};
|
||||
|
||||
TokenizationForm.prototype.onTokenChange = function( event ) {
|
||||
if ( 'new' === $( this ).val() ) {
|
||||
event.data.tokenizationForm.showForm();
|
||||
event.data.tokenizationForm.showSaveNewCheckbox();
|
||||
} else {
|
||||
event.data.tokenizationForm.hideForm();
|
||||
event.data.tokenizationForm.hideSaveNewCheckbox();
|
||||
}
|
||||
};
|
||||
|
||||
TokenizationForm.prototype.onCreateAccountChange = function( event ) {
|
||||
if ( $( this ).is( ':checked' ) ) {
|
||||
event.data.tokenizationForm.showSaveNewCheckbox();
|
||||
} else {
|
||||
event.data.tokenizationForm.hideSaveNewCheckbox();
|
||||
}
|
||||
};
|
||||
|
||||
TokenizationForm.prototype.hideForm = function() {
|
||||
$( '.wc-payment-form', this.$formWrap ).hide();
|
||||
};
|
||||
|
||||
TokenizationForm.prototype.showForm = function() {
|
||||
$( '.wc-payment-form', this.$formWrap ).show();
|
||||
};
|
||||
|
||||
TokenizationForm.prototype.showSaveNewCheckbox = function() {
|
||||
$( '.woocommerce-SavedPaymentMethods-saveNew', this.$formWrap ).show();
|
||||
};
|
||||
|
||||
TokenizationForm.prototype.hideSaveNewCheckbox = function() {
|
||||
$( '.woocommerce-SavedPaymentMethods-saveNew', this.$formWrap ).hide();
|
||||
};
|
||||
|
||||
/**
|
||||
* Function to call wc_product_gallery on jquery selector.
|
||||
*/
|
||||
$.fn.wc_tokenization_form = function( args ) {
|
||||
new TokenizationForm( this, args );
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize.
|
||||
*/
|
||||
$( document.body ).on( 'updated_checkout wc-credit-card-form-init', function() {
|
||||
// Loop over gateways with saved payment methods
|
||||
var $saved_payment_methods = $( 'ul.woocommerce-SavedPaymentMethods' );
|
||||
|
||||
$saved_payment_methods.each( function() {
|
||||
$( this ).wc_tokenization_form();
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/tokenization-form.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/tokenization-form.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(e){var t=function(t){this.$target=t,this.$formWrap=t.closest(".payment_box"),this.params=e.extend({},{is_registration_required:!1,is_logged_in:!1},wc_tokenization_form_params),this.onDisplay=this.onDisplay.bind(this),this.hideForm=this.hideForm.bind(this),this.showForm=this.showForm.bind(this),this.showSaveNewCheckbox=this.showSaveNewCheckbox.bind(this),this.hideSaveNewCheckbox=this.hideSaveNewCheckbox.bind(this),this.$target.on("click change",":input.woocommerce-SavedPaymentMethods-tokenInput",{tokenizationForm:this},this.onTokenChange),e("input#createaccount").on("change",{tokenizationForm:this},this.onCreateAccountChange),this.onDisplay()};t.prototype.onDisplay=function(){0===e(":input.woocommerce-SavedPaymentMethods-tokenInput:checked",this.$target).length&&e(":input.woocommerce-SavedPaymentMethods-tokenInput:last",this.$target).prop("checked",!0),0===this.$target.data("count")&&e(".woocommerce-SavedPaymentMethods-new",this.$target).remove(),0<e("input#createaccount").length&&e("input#createaccount").is(":checked")||this.params.is_logged_in||this.params.is_registration_required?this.showSaveNewCheckbox():this.hideSaveNewCheckbox(),e(":input.woocommerce-SavedPaymentMethods-tokenInput:checked",this.$target).trigger("change")},t.prototype.onTokenChange=function(t){"new"===e(this).val()?(t.data.tokenizationForm.showForm(),t.data.tokenizationForm.showSaveNewCheckbox()):(t.data.tokenizationForm.hideForm(),t.data.tokenizationForm.hideSaveNewCheckbox())},t.prototype.onCreateAccountChange=function(t){e(this).is(":checked")?t.data.tokenizationForm.showSaveNewCheckbox():t.data.tokenizationForm.hideSaveNewCheckbox()},t.prototype.hideForm=function(){e(".wc-payment-form",this.$formWrap).hide()},t.prototype.showForm=function(){e(".wc-payment-form",this.$formWrap).show()},t.prototype.showSaveNewCheckbox=function(){e(".woocommerce-SavedPaymentMethods-saveNew",this.$formWrap).show()},t.prototype.hideSaveNewCheckbox=function(){e(".woocommerce-SavedPaymentMethods-saveNew",this.$formWrap).hide()},e.fn.wc_tokenization_form=function(e){return new t(this,e),this},e(document.body).on("updated_checkout wc-credit-card-form-init",function(){e("ul.woocommerce-SavedPaymentMethods").each(function(){e(this).wc_tokenization_form()})})});
|
||||
@@ -0,0 +1,102 @@
|
||||
/* global Cookies */
|
||||
jQuery( function( $ ) {
|
||||
// Orderby
|
||||
$( '.woocommerce-ordering' ).on( 'change', 'select.orderby', function() {
|
||||
$( this ).closest( 'form' ).trigger( 'submit' );
|
||||
});
|
||||
|
||||
// Target quantity inputs on product pages
|
||||
$( 'input.qty:not(.product-quantity input.qty)' ).each( function() {
|
||||
var min = parseFloat( $( this ).attr( 'min' ) );
|
||||
|
||||
if ( min >= 0 && parseFloat( $( this ).val() ) < min ) {
|
||||
$( this ).val( min );
|
||||
}
|
||||
});
|
||||
|
||||
var noticeID = $( '.woocommerce-store-notice' ).data( 'noticeId' ) || '',
|
||||
cookieName = 'store_notice' + noticeID;
|
||||
|
||||
// Check the value of that cookie and show/hide the notice accordingly
|
||||
if ( 'hidden' === Cookies.get( cookieName ) ) {
|
||||
$( '.woocommerce-store-notice' ).hide();
|
||||
} else {
|
||||
$( '.woocommerce-store-notice' ).show();
|
||||
}
|
||||
|
||||
// Set a cookie and hide the store notice when the dismiss button is clicked
|
||||
$( '.woocommerce-store-notice__dismiss-link' ).on( 'click', function( event ) {
|
||||
Cookies.set( cookieName, 'hidden', { path: '/' } );
|
||||
$( '.woocommerce-store-notice' ).hide();
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
// Make form field descriptions toggle on focus.
|
||||
if ( $( '.woocommerce-input-wrapper span.description' ).length ) {
|
||||
$( document.body ).on( 'click', function() {
|
||||
$( '.woocommerce-input-wrapper span.description:visible' ).prop( 'aria-hidden', true ).slideUp( 250 );
|
||||
} );
|
||||
}
|
||||
|
||||
$( '.woocommerce-input-wrapper' ).on( 'click', function( event ) {
|
||||
event.stopPropagation();
|
||||
} );
|
||||
|
||||
$( '.woocommerce-input-wrapper :input' )
|
||||
.on( 'keydown', function( event ) {
|
||||
var input = $( this ),
|
||||
parent = input.parent(),
|
||||
description = parent.find( 'span.description' );
|
||||
|
||||
if ( 27 === event.which && description.length && description.is( ':visible' ) ) {
|
||||
description.prop( 'aria-hidden', true ).slideUp( 250 );
|
||||
event.preventDefault();
|
||||
return false;
|
||||
}
|
||||
} )
|
||||
.on( 'click focus', function() {
|
||||
var input = $( this ),
|
||||
parent = input.parent(),
|
||||
description = parent.find( 'span.description' );
|
||||
|
||||
parent.addClass( 'currentTarget' );
|
||||
|
||||
$( '.woocommerce-input-wrapper:not(.currentTarget) span.description:visible' ).prop( 'aria-hidden', true ).slideUp( 250 );
|
||||
|
||||
if ( description.length && description.is( ':hidden' ) ) {
|
||||
description.prop( 'aria-hidden', false ).slideDown( 250 );
|
||||
}
|
||||
|
||||
parent.removeClass( 'currentTarget' );
|
||||
} );
|
||||
|
||||
// Common scroll to element code.
|
||||
$.scroll_to_notices = function( scrollElement ) {
|
||||
if ( scrollElement.length ) {
|
||||
$( 'html, body' ).animate( {
|
||||
scrollTop: ( scrollElement.offset().top - 100 )
|
||||
}, 1000 );
|
||||
}
|
||||
};
|
||||
|
||||
// Show password visibility hover icon on woocommerce forms
|
||||
$( '.woocommerce form .woocommerce-Input[type="password"]' ).wrap( '<span class="password-input"></span>' );
|
||||
// Add 'password-input' class to the password wrapper in checkout page.
|
||||
$( '.woocommerce form input' ).filter(':password').parent('span').addClass('password-input');
|
||||
$( '.password-input' ).append( '<span class="show-password-input"></span>' );
|
||||
|
||||
$( '.show-password-input' ).on( 'click',
|
||||
function() {
|
||||
if ( $( this ).hasClass( 'display-password' ) ) {
|
||||
$( this ).removeClass( 'display-password' );
|
||||
} else {
|
||||
$( this ).addClass( 'display-password' );
|
||||
}
|
||||
if ( $( this ).hasClass( 'display-password' ) ) {
|
||||
$( this ).siblings( ['input[type="password"]'] ).prop( 'type', 'text' );
|
||||
} else {
|
||||
$( this ).siblings( 'input[type="text"]' ).prop( 'type', 'password' );
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(function(o){o(".woocommerce-ordering").on("change","select.orderby",function(){o(this).closest("form").trigger("submit")}),o("input.qty:not(.product-quantity input.qty)").each(function(){var e=parseFloat(o(this).attr("min"));e>=0&&parseFloat(o(this).val())<e&&o(this).val(e)});var e="store_notice"+(o(".woocommerce-store-notice").data("noticeId")||"");"hidden"===Cookies.get(e)?o(".woocommerce-store-notice").hide():o(".woocommerce-store-notice").show(),o(".woocommerce-store-notice__dismiss-link").on("click",function(s){Cookies.set(e,"hidden",{path:"/"}),o(".woocommerce-store-notice").hide(),s.preventDefault()}),o(".woocommerce-input-wrapper span.description").length&&o(document.body).on("click",function(){o(".woocommerce-input-wrapper span.description:visible").prop("aria-hidden",!0).slideUp(250)}),o(".woocommerce-input-wrapper").on("click",function(o){o.stopPropagation()}),o(".woocommerce-input-wrapper :input").on("keydown",function(e){var s=o(this).parent().find("span.description");if(27===e.which&&s.length&&s.is(":visible"))return s.prop("aria-hidden",!0).slideUp(250),e.preventDefault(),!1}).on("click focus",function(){var e=o(this).parent(),s=e.find("span.description");e.addClass("currentTarget"),o(".woocommerce-input-wrapper:not(.currentTarget) span.description:visible").prop("aria-hidden",!0).slideUp(250),s.length&&s.is(":hidden")&&s.prop("aria-hidden",!1).slideDown(250),e.removeClass("currentTarget")}),o.scroll_to_notices=function(e){e.length&&o("html, body").animate({scrollTop:e.offset().top-100},1e3)},o('.woocommerce form .woocommerce-Input[type="password"]').wrap('<span class="password-input"></span>'),o(".woocommerce form input").filter(":password").parent("span").addClass("password-input"),o(".password-input").append('<span class="show-password-input"></span>'),o(".show-password-input").on("click",function(){o(this).hasClass("display-password")?o(this).removeClass("display-password"):o(this).addClass("display-password"),o(this).hasClass("display-password")?o(this).siblings(['input[type="password"]']).prop("type","text"):o(this).siblings('input[type="text"]').prop("type","password")})});
|
||||
@@ -0,0 +1,19 @@
|
||||
( function () {
|
||||
'use strict';
|
||||
|
||||
// Set order attribution on consent change.
|
||||
document.addEventListener( 'wp_listen_for_consent_change', ( e ) => {
|
||||
const changedConsentCategory = e.detail;
|
||||
for ( const key in changedConsentCategory ) {
|
||||
if ( changedConsentCategory.hasOwnProperty( key ) && key === window.wc_order_attribution.params.consentCategory ) {
|
||||
window.wc_order_attribution.setOrderTracking( changedConsentCategory[ key ] === 'allow' );
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
||||
// Set order attribution as soon as consent type is defined.
|
||||
document.addEventListener( 'wp_consent_type_defined', () => {
|
||||
window.wc_order_attribution.setOrderTracking( wp_has_consent( window.wc_order_attribution.params.consentCategory ) );
|
||||
} );
|
||||
}() );
|
||||
|
||||
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/wp-consent-api-integration.min.js
vendored
Normal file
1
wp/wp-content/plugins/woocommerce/assets/js/frontend/wp-consent-api-integration.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(){"use strict";document.addEventListener("wp_listen_for_consent_change",t=>{const n=t.detail;for(const t in n)n.hasOwnProperty(t)&&t===window.wc_order_attribution.params.consentCategory&&window.wc_order_attribution.setOrderTracking("allow"===n[t])}),document.addEventListener("wp_consent_type_defined",()=>{window.wc_order_attribution.setOrderTracking(wp_has_consent(window.wc_order_attribution.params.consentCategory))})}();
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user