123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- define([
- 'jquery',
- 'jquery/ui'
- ], 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;
- });
|