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