107 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
| /**
 | |
|  * Copyright © Magento, Inc. All rights reserved.
 | |
|  * See COPYING.txt for license details.
 | |
|  */
 | |
| 
 | |
| define([
 | |
|     'jquery',
 | |
|     'mage/tabs'
 | |
| ], function ($, tabs) {
 | |
|     'use strict';
 | |
| 
 | |
|     $.widget('mage.accordion', tabs, {
 | |
|         options: {
 | |
|             active: [0],
 | |
|             multipleCollapsible: false,
 | |
|             openOnFocus: false
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * @private
 | |
|          */
 | |
|         _callCollapsible: function () {
 | |
|             var self = this,
 | |
|                 disabled = false,
 | |
|                 active = false;
 | |
| 
 | |
|             if (typeof this.options.active === 'string') {
 | |
|                 this.options.active = this.options.active.split(' ').map(function (item) {
 | |
|                     return parseInt(item, 10);
 | |
|                 });
 | |
|             }
 | |
| 
 | |
|             $.each(this.collapsibles, function (i) {
 | |
|                 disabled = active = false;
 | |
| 
 | |
|                 if ($.inArray(i, self.options.disabled) !== -1) {
 | |
|                     disabled = true;
 | |
|                 }
 | |
| 
 | |
|                 if ($.inArray(i, self.options.active) !== -1) {
 | |
|                     active = true;
 | |
|                 }
 | |
|                 self._instantiateCollapsible(this, i, active, disabled);
 | |
|             });
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Overwrites default functionality to provide the option to activate/deactivate multiple sections simultaneous
 | |
|          * @param {*} action
 | |
|          * @param {*} index
 | |
|          * @private
 | |
|          */
 | |
|         _toggleActivate: function (action, index) {
 | |
|             var self = this;
 | |
| 
 | |
|             if (Array.isArray(index && this.options.multipleCollapsible)) {
 | |
|                 $.each(index, function () {
 | |
|                     self.collapsibles.eq(this).collapsible(action);
 | |
|                 });
 | |
|             } else if (index === undefined && this.options.multipleCollapsible) {
 | |
|                 this.collapsibles.collapsible(action);
 | |
|             } else {
 | |
|                 this._super(action, index);
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * If the Accordion allows multiple section to be active at the same time, if deep linking is used
 | |
|          * sections that don't contain the id from anchor shouldn't be closed, otherwise the accordion uses the
 | |
|          * tabs behavior
 | |
|          * @private
 | |
|          */
 | |
|         _handleDeepLinking: function () {
 | |
|             if (!this.options.multipleCollapsible) {
 | |
|                 this._super();
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Prevent default behavior that closes the other sections when one gets activated if the Accordion allows
 | |
|          * multiple sections simultaneous
 | |
|          * @private
 | |
|          */
 | |
|         _closeOthers: function () {
 | |
|             var self = this;
 | |
| 
 | |
|             if (!this.options.multipleCollapsible) {
 | |
|                 $.each(this.collapsibles, function () {
 | |
|                     $(this).on('beforeOpen', function () {
 | |
|                         self.collapsibles.not(this).collapsible('deactivate');
 | |
|                     });
 | |
|                 });
 | |
|             }
 | |
|             $.each(this.collapsibles, function () {
 | |
|                 $(this).on('beforeOpen', function () {
 | |
|                     var section = $(this);
 | |
| 
 | |
|                     section.addClass('allow').prevAll().addClass('allow');
 | |
|                     section.nextAll().removeClass('allow');
 | |
|                 });
 | |
|             });
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     return $.mage.accordion;
 | |
| });
 |