96 lines
2.4 KiB
JavaScript
Executable File
96 lines
2.4 KiB
JavaScript
Executable File
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
define([
|
|
'jquery',
|
|
'mage/apply/main'
|
|
], function ($, mage) {
|
|
'use strict';
|
|
|
|
/**
|
|
* Main namespace for Magento extensions
|
|
* @type {Object}
|
|
*/
|
|
$.mage = $.mage || {};
|
|
|
|
/**
|
|
* Plugin mage, initialize components on elements
|
|
* @param {String} name - Components' path.
|
|
* @param {Object} config - Components' config.
|
|
* @returns {JQuery} Chainable.
|
|
*/
|
|
$.fn.mage = function (name, config) {
|
|
config = config || {};
|
|
|
|
this.each(function (index, el) {
|
|
mage.applyFor(el, config, name);
|
|
});
|
|
|
|
return this;
|
|
};
|
|
|
|
$.extend($.mage, {
|
|
/**
|
|
* Handle all components declared via data attribute
|
|
* @return {Object} $.mage
|
|
*/
|
|
init: function () {
|
|
mage.apply();
|
|
|
|
return this;
|
|
},
|
|
|
|
/**
|
|
* Method handling redirects and page refresh
|
|
* @param {String} url - redirect URL
|
|
* @param {(undefined|String)} type - 'assign', 'reload', 'replace'
|
|
* @param {(undefined|Number)} timeout - timeout in milliseconds before processing the redirect or reload
|
|
* @param {(undefined|Boolean)} forced - true|false used for 'reload' only
|
|
*/
|
|
redirect: function (url, type, timeout, forced) {
|
|
var _redirect;
|
|
|
|
forced = !!forced;
|
|
timeout = timeout || 0;
|
|
type = type || 'assign';
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
_redirect = function () {
|
|
window.location[type](type === 'reload' ? forced : url);
|
|
};
|
|
|
|
timeout ? setTimeout(_redirect, timeout) : _redirect();
|
|
},
|
|
|
|
/**
|
|
* Checks if provided string is a valid selector.
|
|
* @param {String} selector - Selector to check.
|
|
* @returns {Boolean}
|
|
*/
|
|
isValidSelector: function (selector) {
|
|
try {
|
|
document.querySelector(selector);
|
|
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Init components inside of dynamically updated elements
|
|
*/
|
|
$(document).on('contentUpdated', 'body', function () {
|
|
if (mage) {
|
|
mage.apply();
|
|
}
|
|
});
|
|
|
|
return $.mage;
|
|
});
|