520 lines
14 KiB
JavaScript
Executable File
520 lines
14 KiB
JavaScript
Executable File
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
function setLocation(url) {
|
|
window.location.href = url;
|
|
}
|
|
|
|
function setElementDisable(element, disable) {
|
|
if ($(element)) {
|
|
$(element).disabled = disable;
|
|
}
|
|
}
|
|
|
|
function toggleParentVis(obj) {
|
|
obj = $(obj).parentNode;
|
|
|
|
if (obj.style.display == 'none') {
|
|
obj.style.display = '';
|
|
} else {
|
|
obj.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
// to fix new app/design/adminhtml/default/default/template/widget/form/renderer/fieldset.phtml
|
|
// with toggleParentVis
|
|
function toggleFieldsetVis(obj) {
|
|
id = obj;
|
|
obj = $(obj);
|
|
|
|
if (obj.style.display == 'none') {
|
|
obj.style.display = '';
|
|
} else {
|
|
obj.style.display = 'none';
|
|
}
|
|
obj = obj.parentNode.childElements();
|
|
|
|
for (var i = 0; i < obj.length; i++) {
|
|
if (obj[i].id != undefined &&
|
|
obj[i].id == id &&
|
|
obj[i - 1].classNames() == 'entry-edit-head') {
|
|
if (obj[i - 1].style.display == 'none') {
|
|
obj[i - 1].style.display = '';
|
|
} else {
|
|
obj[i - 1].style.display = 'none';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function toggleVis(obj) {
|
|
obj = $(obj);
|
|
|
|
if (obj.style.display == 'none') {
|
|
obj.style.display = '';
|
|
} else {
|
|
obj.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
function imagePreview(element) {
|
|
if ($(element)) {
|
|
var win = window.open('', 'preview', 'width=400,height=400,resizable=1,scrollbars=1');
|
|
|
|
win.document.open();
|
|
win.document.write('<body style="padding:0;margin:0"><img src="' + $(element).src + '" id="image_preview"/></body>');
|
|
win.document.close();
|
|
Event.observe(win, 'load', function () {
|
|
var img = win.document.getElementById('image_preview');
|
|
|
|
win.resizeTo(img.width + 40, img.height + 80);
|
|
});
|
|
}
|
|
}
|
|
|
|
function checkByProductPriceType(elem) {
|
|
if (elem.id == 'price_type') {
|
|
this.productPriceType = elem.value;
|
|
|
|
return false;
|
|
}
|
|
|
|
if (elem.id == 'price' && this.productPriceType == 0) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
function toggleSeveralValueElements(checkbox, containers, excludedElements, checked) {
|
|
'use strict';
|
|
|
|
if (containers && checkbox) {
|
|
if (Object.prototype.toString.call(containers) != '[object Array]') {
|
|
containers = [containers];
|
|
}
|
|
containers.each(function (container) {
|
|
toggleValueElements(checkbox, container, excludedElements, checked);
|
|
});
|
|
}
|
|
}
|
|
|
|
function toggleValueElements(checkbox, container, excludedElements, checked) {
|
|
if (container && checkbox) {
|
|
var ignoredElements = [checkbox];
|
|
|
|
if (typeof excludedElements != 'undefined') {
|
|
if (Object.prototype.toString.call(excludedElements) != '[object Array]') {
|
|
excludedElements = [excludedElements];
|
|
}
|
|
|
|
for (var i = 0; i < excludedElements.length; i++) {
|
|
ignoredElements.push(excludedElements[i]);
|
|
}
|
|
}
|
|
//var elems = container.select('select', 'input');
|
|
var elems = Element.select(container, ['select', 'input', 'textarea', 'button', 'img']).filter(function (el) {
|
|
return el.readAttribute('type') != 'hidden';
|
|
});
|
|
var isDisabled = checked != undefined ? checked : checkbox.checked;
|
|
|
|
elems.each(function (elem) {
|
|
if (checkByProductPriceType(elem)) {
|
|
var i = ignoredElements.length;
|
|
|
|
while (i-- && elem != ignoredElements[i]);
|
|
|
|
if (i != -1) {
|
|
return;
|
|
}
|
|
|
|
elem.disabled = isDisabled;
|
|
|
|
if (isDisabled) {
|
|
elem.addClassName('disabled');
|
|
} else {
|
|
elem.removeClassName('disabled');
|
|
}
|
|
|
|
if (elem.nodeName.toLowerCase() == 'img') {
|
|
isDisabled ? elem.hide() : elem.show();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @todo add validation for fields
|
|
*/
|
|
function submitAndReloadArea(area, url) {
|
|
if ($(area)) {
|
|
var fields = $(area).select('input', 'select', 'textarea');
|
|
var data = Form.serializeElements(fields, true);
|
|
|
|
url += url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true';
|
|
new Ajax.Request(url, {
|
|
parameters: $H(data),
|
|
loaderArea: area,
|
|
onSuccess: function (transport) {
|
|
try {
|
|
if (transport.responseText.isJSON()) {
|
|
var response = transport.responseText.evalJSON();
|
|
|
|
if (response.error) {
|
|
alert(response.message);
|
|
}
|
|
|
|
if (response.ajaxExpired && response.ajaxRedirect) {
|
|
setLocation(response.ajaxRedirect);
|
|
}
|
|
} else {
|
|
$(area).update(transport.responseText);
|
|
}
|
|
}
|
|
catch (e) {
|
|
$(area).update(transport.responseText);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
/********** MESSAGES ***********/
|
|
function syncOnchangeValue(baseElem, distElem) {
|
|
var compare = {
|
|
baseElem: baseElem, distElem: distElem
|
|
};
|
|
|
|
Event.observe(baseElem, 'change', function () {
|
|
if ($(this.baseElem) && $(this.distElem)) {
|
|
$(this.distElem).value = $(this.baseElem).value;
|
|
}
|
|
}.bind(compare));
|
|
}
|
|
|
|
// Insert some content to the cursor position of input element
|
|
function updateElementAtCursor(el, value, win) {
|
|
if (win == undefined) {
|
|
win = window.self;
|
|
}
|
|
|
|
if (document.selection) {
|
|
el.focus();
|
|
sel = win.document.selection.createRange();
|
|
sel.text = value;
|
|
} else if (el.selectionStart || el.selectionStart == '0') {
|
|
var startPos = el.selectionStart;
|
|
var endPos = el.selectionEnd;
|
|
|
|
el.value = el.value.substring(0, startPos) + value + el.value.substring(endPos, el.value.length);
|
|
} else {
|
|
el.value += value;
|
|
}
|
|
}
|
|
|
|
// Firebug detection
|
|
function firebugEnabled() {
|
|
if (window.console && window.console.firebug) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function disableElement(elem) {
|
|
elem.disabled = true;
|
|
elem.addClassName('disabled');
|
|
}
|
|
|
|
function enableElement(elem) {
|
|
elem.disabled = false;
|
|
elem.removeClassName('disabled');
|
|
}
|
|
|
|
function disableElements(search) {
|
|
$$('.' + search).each(disableElement);
|
|
}
|
|
|
|
function enableElements(search) {
|
|
$$('.' + search).each(enableElement);
|
|
}
|
|
|
|
/** Cookie Reading And Writing **/
|
|
|
|
var Cookie = {
|
|
all: function () {
|
|
var pairs = document.cookie.split(';');
|
|
var cookies = {};
|
|
|
|
pairs.each(function (item, index) {
|
|
var pair = item.strip().split('=');
|
|
|
|
cookies[unescape(pair[0])] = unescape(pair[1]);
|
|
});
|
|
|
|
return cookies;
|
|
},
|
|
read: function (cookieName) {
|
|
var cookies = this.all();
|
|
|
|
if (cookies[cookieName]) {
|
|
return cookies[cookieName];
|
|
}
|
|
|
|
return null;
|
|
},
|
|
write: function (cookieName, cookieValue, cookieLifeTime, samesite) {
|
|
var expires = '';
|
|
|
|
if (cookieLifeTime) {
|
|
var date = new Date();
|
|
|
|
date.setTime(date.getTime() + cookieLifeTime * 1000);
|
|
expires = '; expires=' + date.toUTCString();
|
|
}
|
|
var urlPath = '/' + BASE_URL.split('/').slice(3).join('/'); // Get relative path
|
|
|
|
samesite = '; samesite=' + (samesite ? samesite : 'lax');
|
|
|
|
document.cookie = escape(cookieName) + '=' + escape(cookieValue) + expires + '; path=' + urlPath + samesite;
|
|
},
|
|
clear: function (cookieName) {
|
|
this.write(cookieName, '', -1);
|
|
}
|
|
};
|
|
|
|
var Fieldset = {
|
|
cookiePrefix: 'fh-',
|
|
applyCollapse: function (containerId) {
|
|
if ($(containerId + '-state')) {
|
|
collapsed = $(containerId + '-state').value == 1 ? 0 : 1;
|
|
} else {
|
|
collapsed = $(containerId + '-head').collapsed;
|
|
}
|
|
|
|
if (collapsed == 1 || collapsed === undefined) {
|
|
$(containerId + '-head').removeClassName('open');
|
|
|
|
if ($(containerId + '-head').up('.section-config')) {
|
|
$(containerId + '-head').up('.section-config').removeClassName('active');
|
|
}
|
|
$(containerId).hide();
|
|
} else {
|
|
$(containerId + '-head').addClassName('open');
|
|
|
|
if ($(containerId + '-head').up('.section-config')) {
|
|
$(containerId + '-head').up('.section-config').addClassName('active');
|
|
}
|
|
$(containerId).show();
|
|
}
|
|
},
|
|
toggleCollapse: function (containerId, saveThroughAjax) {
|
|
if ($(containerId + '-state')) {
|
|
collapsed = $(containerId + '-state').value == 1 ? 0 : 1;
|
|
} else {
|
|
collapsed = $(containerId + '-head').collapsed;
|
|
}
|
|
//Cookie.read(this.cookiePrefix + containerId);
|
|
if (collapsed == 1 || collapsed === undefined) {
|
|
//Cookie.write(this.cookiePrefix + containerId, 0, 30*24*60*60);
|
|
if ($(containerId + '-state')) {
|
|
$(containerId + '-state').value = 1;
|
|
}
|
|
$(containerId + '-head').collapsed = 0;
|
|
} else {
|
|
//Cookie.clear(this.cookiePrefix + containerId);
|
|
if ($(containerId + '-state')) {
|
|
$(containerId + '-state').value = 0;
|
|
}
|
|
$(containerId + '-head').collapsed = 1;
|
|
}
|
|
|
|
this.applyCollapse(containerId);
|
|
|
|
if (typeof saveThroughAjax != 'undefined') {
|
|
this.saveState(saveThroughAjax, {
|
|
container: containerId, value: $(containerId + '-state').value
|
|
});
|
|
}
|
|
},
|
|
addToPrefix: function (value) {
|
|
this.cookiePrefix += value + '-';
|
|
},
|
|
saveState: function (url, parameters) {
|
|
new Ajax.Request(url, {
|
|
method: 'post',
|
|
parameters: Object.toQueryString(parameters),
|
|
loaderArea: false
|
|
});
|
|
}
|
|
};
|
|
|
|
var Base64 = {
|
|
// private property
|
|
_keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
|
|
//'+/=', '-_,'
|
|
// public method for encoding
|
|
encode: function (input) {
|
|
var output = '';
|
|
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
|
var i = 0;
|
|
|
|
input = Base64._utf8_encode(input);
|
|
|
|
if (typeof window.btoa === 'function') {
|
|
return window.btoa(input);
|
|
}
|
|
|
|
while (i < input.length) {
|
|
|
|
chr1 = input.charCodeAt(i++);
|
|
chr2 = input.charCodeAt(i++);
|
|
chr3 = input.charCodeAt(i++);
|
|
|
|
enc1 = chr1 >> 2;
|
|
enc2 = (chr1 & 3) << 4 | chr2 >> 4;
|
|
enc3 = (chr2 & 15) << 2 | chr3 >> 6;
|
|
enc4 = chr3 & 63;
|
|
|
|
if (isNaN(chr2)) {
|
|
enc3 = enc4 = 64;
|
|
} else if (isNaN(chr3)) {
|
|
enc4 = 64;
|
|
}
|
|
output = output +
|
|
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
|
|
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
|
|
}
|
|
|
|
return output;
|
|
},
|
|
|
|
// public method for decoding
|
|
decode: function (input) {
|
|
var output = '';
|
|
var chr1, chr2, chr3;
|
|
var enc1, enc2, enc3, enc4;
|
|
var i = 0;
|
|
|
|
if (typeof window.atob === 'function') {
|
|
return Base64._utf8_decode(window.atob(input));
|
|
}
|
|
|
|
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
|
|
|
|
while (i < input.length) {
|
|
|
|
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
|
|
|
chr1 = enc1 << 2 | enc2 >> 4;
|
|
chr2 = (enc2 & 15) << 4 | enc3 >> 2;
|
|
chr3 = (enc3 & 3) << 6 | enc4;
|
|
|
|
output += String.fromCharCode(chr1);
|
|
|
|
if (enc3 != 64) {
|
|
output += String.fromCharCode(chr2);
|
|
}
|
|
|
|
if (enc4 != 64) {
|
|
output += String.fromCharCode(chr3);
|
|
}
|
|
}
|
|
|
|
return Base64._utf8_decode(output);
|
|
},
|
|
|
|
mageEncode: function (input) {
|
|
return this.encode(input).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ',');
|
|
},
|
|
|
|
mageDecode: function (output) {
|
|
output = output.replace(/\-/g, '+').replace(/_/g, '/').replace(/,/g, '=');
|
|
|
|
return this.decode(output);
|
|
},
|
|
|
|
idEncode: function (input) {
|
|
return this.encode(input).replace(/\+/g, ':').replace(/\//g, '_').replace(/=/g, '-');
|
|
},
|
|
|
|
idDecode: function (output) {
|
|
output = output.replace(/\-/g, '=').replace(/_/g, '/').replace(/\:/g, '\+');
|
|
|
|
return this.decode(output);
|
|
},
|
|
|
|
// private method for UTF-8 encoding
|
|
_utf8_encode: function (string) {
|
|
string = string.replace(/\r\n/g, '\n');
|
|
var utftext = '';
|
|
|
|
for (var n = 0; n < string.length; n++) {
|
|
|
|
var c = string.charCodeAt(n);
|
|
|
|
if (c < 128) {
|
|
utftext += String.fromCharCode(c);
|
|
} else if (c > 127 && c < 2048) {
|
|
utftext += String.fromCharCode(c >> 6 | 192);
|
|
utftext += String.fromCharCode(c & 63 | 128);
|
|
} else {
|
|
utftext += String.fromCharCode(c >> 12 | 224);
|
|
utftext += String.fromCharCode(c >> 6 & 63 | 128);
|
|
utftext += String.fromCharCode(c & 63 | 128);
|
|
}
|
|
}
|
|
|
|
return utftext;
|
|
},
|
|
|
|
// private method for UTF-8 decoding
|
|
_utf8_decode: function (utftext) {
|
|
var string = '';
|
|
var i = 0;
|
|
var c = c1 = c2 = 0;
|
|
|
|
while (i < utftext.length) {
|
|
|
|
c = utftext.charCodeAt(i);
|
|
|
|
if (c < 128) {
|
|
string += String.fromCharCode(c);
|
|
i++;
|
|
} else if (c > 191 && c < 224) {
|
|
c2 = utftext.charCodeAt(i + 1);
|
|
string += String.fromCharCode((c & 31) << 6 | c2 & 63);
|
|
i += 2;
|
|
} else {
|
|
c2 = utftext.charCodeAt(i + 1);
|
|
c3 = utftext.charCodeAt(i + 2);
|
|
string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
|
|
i += 3;
|
|
}
|
|
}
|
|
|
|
return string;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Array functions
|
|
*/
|
|
|
|
/**
|
|
* Callback function for sort numeric values
|
|
*
|
|
* @param val1
|
|
* @param val2
|
|
*/
|
|
function sortNumeric(val1, val2) {
|
|
return val1 - val2;
|
|
}
|