189 lines
5.6 KiB
JavaScript
Executable File
189 lines
5.6 KiB
JavaScript
Executable File
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
define([
|
|
'jquery',
|
|
'jquery-ui-modules/widget'
|
|
], function ($) {
|
|
'use strict';
|
|
|
|
$.widget('mage.toggleAdvanced', {
|
|
options: {
|
|
baseToggleClass: 'active' // Class used to be toggled on clicked element
|
|
},
|
|
|
|
/**
|
|
* Toggle creation
|
|
* @private
|
|
*/
|
|
_create: function () {
|
|
this.beforeCreate();
|
|
this._bindCore();
|
|
this.afterCreate();
|
|
},
|
|
|
|
/**
|
|
* Core bound events & setup
|
|
* @protected
|
|
*/
|
|
_bindCore: function () {
|
|
var widget = this;
|
|
|
|
this.element.on('click', $.proxy(function (e) {
|
|
widget._onClick();
|
|
e.preventDefault();
|
|
}, this));
|
|
},
|
|
|
|
/**
|
|
* Binding Click event
|
|
*
|
|
* @protected
|
|
*/
|
|
_onClick: function () {
|
|
this._prepareOptions();
|
|
this._toggleSelectors();
|
|
},
|
|
|
|
/**
|
|
* Method used to look for data attributes to override default options
|
|
*
|
|
* @protected
|
|
*/
|
|
_prepareOptions: function () {
|
|
this.options.baseToggleClass = this.element.data('base-toggle-class') ?
|
|
this.element.data('base-toggle-class') : this.options.baseToggleClass;
|
|
},
|
|
|
|
/**
|
|
* Method responsible for hiding and revealing specified DOM elements
|
|
* Toggle the class on clicked element
|
|
*
|
|
* @protected
|
|
*/
|
|
_toggleSelectors: function () {
|
|
this.element.toggleClass(this.options.baseToggleClass);
|
|
},
|
|
|
|
/**
|
|
* Method used to inject 3rd party functionality before create
|
|
* @public
|
|
*/
|
|
beforeCreate: function () {},
|
|
|
|
/**
|
|
* Method used to inject 3rd party functionality after create
|
|
* @public
|
|
*/
|
|
afterCreate: function () {}
|
|
});
|
|
|
|
// Extension for mage.toggle - Adding selectors support for other DOM elements we wish to toggle
|
|
$.widget('mage.toggleAdvanced', $.mage.toggleAdvanced, {
|
|
|
|
options: {
|
|
selectorsToggleClass: 'hidden', // Class used to be toggled on selectors DOM elements
|
|
toggleContainers: null
|
|
},
|
|
|
|
/**
|
|
* Method responsible for hiding and revealing specified DOM elements
|
|
* If data-toggle-selectors attribute is present - toggle will be done on these selectors
|
|
* Otherwise we toggle the class on clicked element
|
|
*
|
|
* @protected
|
|
* @override
|
|
*/
|
|
_toggleSelectors: function () {
|
|
this._super();
|
|
|
|
if (this.options.toggleContainers) {
|
|
$(this.options.toggleContainers).toggleClass(this.options.selectorsToggleClass);
|
|
} else {
|
|
this.element.toggleClass(this.options.baseToggleClass);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Method used to look for data attributes to override default options
|
|
*
|
|
* @protected
|
|
* @override
|
|
*/
|
|
_prepareOptions: function () {
|
|
this.options.selectorsToggleClass = this.element.data('selectors-toggle-class') ?
|
|
this.element.data('selectors-toggle-class') : this.options.selectorsToggleClass;
|
|
this.options.toggleContainers = this.element.data('toggle-selectors') ?
|
|
this.element.data('toggle-selectors') : this.options.toggleContainers;
|
|
this._super();
|
|
}
|
|
});
|
|
|
|
// Extension for mage.toggle - Adding label toggle
|
|
$.widget('mage.toggleAdvanced', $.mage.toggleAdvanced, {
|
|
|
|
options: {
|
|
newLabel: null, // Text of the new label to be used on toggle
|
|
curLabel: null, // Text of the old label to be used on toggle
|
|
currentLabelElement: null // Current label container
|
|
},
|
|
|
|
/**
|
|
* Binding Click event
|
|
*
|
|
* @protected
|
|
* @override
|
|
*/
|
|
_onClick: function () {
|
|
this._super();
|
|
this._toggleLabel();
|
|
},
|
|
|
|
/**
|
|
* Method responsible for replacing clicked element labels
|
|
* @protected
|
|
*/
|
|
_toggleLabel: function () {
|
|
var cachedLabel, currentLabelSelector;
|
|
|
|
if (this.options.newLabel) {
|
|
cachedLabel = this.options.newLabel;
|
|
currentLabelSelector = this.options.currentLabelElement ?
|
|
$(this.options.currentLabelElement) : this.element;
|
|
|
|
this.element.data('toggle-label', this.options.curLabel);
|
|
currentLabelSelector.html(this.options.newLabel);
|
|
|
|
this.options.curLabel = this.options.newLabel;
|
|
this.options.newLabel = cachedLabel;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Method used to look for data attributes to override default options
|
|
*
|
|
* @protected
|
|
* @override
|
|
*/
|
|
_prepareOptions: function () {
|
|
this.options.newLabel = this.element.data('toggle-label') ?
|
|
this.element.data('toggle-label') : this.options.newLabel;
|
|
|
|
this.options.currentLabelElement = this.element.data('current-label-el') ?
|
|
this.element.data('current-label-el') : this.options.currentLabelElement;
|
|
|
|
if (!this.options.currentLabelElement) {
|
|
this.options.currentLabelElement = this.element;
|
|
}
|
|
|
|
this.options.curLabel = $(this.options.currentLabelElement).html();
|
|
|
|
this._super();
|
|
}
|
|
});
|
|
|
|
return $.mage.toggleAdvanced;
|
|
});
|