164 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
| /**
 | |
|  * Copyright © Magento, Inc. All rights reserved.
 | |
|  * See COPYING.txt for license details.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * @deprecated since version 2.2.0
 | |
|  */
 | |
| define([
 | |
|     'jquery'
 | |
| ], function ($) {
 | |
|     'use strict';
 | |
| 
 | |
|     /**
 | |
|      * @param {*} args
 | |
|      */
 | |
|     $.fn.terms = function (args) {
 | |
| 
 | |
|         // default
 | |
|         var defaults = {
 | |
|                 start: 0,
 | |
|                 wrapper: '',
 | |
|                 showAnchor: '',
 | |
|                 effects: 'slide'
 | |
|             },
 | |
|             options = $.extend(defaults, args);
 | |
| 
 | |
|         this.each(function () {
 | |
|             var obj = $(this),
 | |
|                 wrapper = options.wrapper !== '' ? '> ' + options.wrapper : '',
 | |
|                 switches = $(wrapper + '> [data-section="title"] > [data-toggle="switch"]', obj),
 | |
|                 terms = $(wrapper + '> [data-section="content"]', obj),
 | |
|                 t = switches.length,
 | |
|                 marginTop = $(switches[0]).closest('[data-section="title"]').css('position') == 'absolute' ? 0 : null, //eslint-disable-line
 | |
|                 title,
 | |
|                 current,
 | |
| 
 | |
|                 /**
 | |
|                  * @param {*} item
 | |
|                  */
 | |
|                 showItem = function (item) {
 | |
|                     if (item != current && !$(switches[item]).closest('[data-section="title"]').hasClass('disabled')) { //eslint-disable-line
 | |
|                         $(switches).closest('[data-section="title"]').removeClass('active');
 | |
| 
 | |
|                         if (options.wrapper !== '') {
 | |
|                             $(switches).parent().parent().removeClass('active');
 | |
|                         }
 | |
|                         $(terms).removeClass('active');
 | |
|                         $(switches[item]).closest('[data-section="title"]').addClass('active');
 | |
| 
 | |
|                         if (options.wrapper !== '') {
 | |
|                             $(switches[current]).parent().parent().addClass('active');
 | |
|                         }
 | |
|                         $(terms[item]).addClass('active');
 | |
|                         current = item;
 | |
|                     } else if (
 | |
|                         // Check if this is accordion width as criteria for now
 | |
|                         (obj.attr('data-sections') == 'accordion' || $(switches[item]).closest('[data-section="title"]').css('width') == obj.css('width')) && //eslint-disable-line
 | |
|                         item == current && !$(switches[item]).closest('[data-section="title"]').hasClass('disabled') //eslint-disable-line
 | |
|                     ) {
 | |
|                         $(switches).closest('[data-section="title"]').removeClass('active');
 | |
| 
 | |
|                         if (options.wrapper !== '') {
 | |
|                             $(switches).parent().parent().removeClass('active');
 | |
|                         }
 | |
|                         $(terms).removeClass('active');
 | |
|                         current = -1;
 | |
|                     }
 | |
|                 },
 | |
| 
 | |
|                 /**
 | |
|                  * Init.
 | |
|                  */
 | |
|                 init = function () {
 | |
|                     var linksList, i, classes, dataSection, itemHref, itemClass, fromUrl;
 | |
| 
 | |
|                     if (t > 0) {
 | |
|                         if ($(switches[0]).closest('[data-section="title"]').css('display') == 'table-cell') { //eslint-disable-line
 | |
|                             obj.addClass('adjusted');
 | |
| 
 | |
|                             if (obj[0].tagName == 'DL') { //eslint-disable-line eqeqeq, max-depth
 | |
|                                 linksList = $('<dd>');
 | |
|                             } else {
 | |
|                                 linksList = $('<div>');
 | |
|                             }
 | |
|                             linksList.addClass('sections-nav');
 | |
|                             obj.prepend(linksList);
 | |
| 
 | |
|                             for (i = 0; i < t; i++) { //eslint-disable-line max-depth
 | |
|                                 title = $(switches[i]).html();
 | |
|                                 classes = $(switches[i]).closest('[data-section="title"]').attr('class');
 | |
|                                 dataSection = $(switches[i]).closest('[data-section="title"]').attr('data-section');
 | |
|                                 itemHref = $(switches[i]).attr('href');
 | |
|                                 itemClass = $(switches[i]).attr('class');
 | |
|                                 $(switches[i]).parent('[data-section="title"]').hide();
 | |
|                                 switches[i] = $('<a/>', {
 | |
|                                     href: itemHref,
 | |
|                                     'class': itemClass,
 | |
|                                     html: title
 | |
|                                 }).appendTo(linksList);
 | |
|                                 $(switches[i]).wrap(
 | |
|                                     '<strong class="' + classes + '" data-section="' + dataSection + '" />'
 | |
|                                 );
 | |
|                             }
 | |
|                         }
 | |
|                         $(switches).each(function (ind, el) {
 | |
|                             $(el).on('click', function (event) {
 | |
|                                 event.preventDefault();
 | |
|                                 showItem(ind);
 | |
|                             });
 | |
| 
 | |
|                             if (marginTop !== null) {
 | |
|                                 $(el).closest('[data-section="title"]').css({
 | |
|                                     'top': marginTop + 'px'
 | |
|                                 });
 | |
|                                 marginTop += $(el).closest('[data-section="title"]').outerHeight(true);
 | |
|                                 obj.css({
 | |
|                                     'min-height': marginTop + 'px'
 | |
|                                 });
 | |
|                             }
 | |
|                         });
 | |
| 
 | |
|                         fromUrl = false;
 | |
| 
 | |
|                         if (window.location.hash.length > 0) {
 | |
|                             $(terms).each(function (ind, el) {
 | |
|                                 if ('#info-' + $(el).attr('id') == window.location.hash) { //eslint-disable-line eqeqeq
 | |
|                                     showItem(ind);
 | |
|                                     $('html, body').animate({
 | |
|                                         scrollTop: $(switches[ind]).offset().top
 | |
|                                     }, 700);
 | |
|                                     fromUrl = true;
 | |
|                                 }
 | |
|                             });
 | |
|                         }
 | |
| 
 | |
|                         if (fromUrl === false) {
 | |
|                             if (options.start % 1 === 0) { //eslint-disable-line max-depth
 | |
|                                 current = options.start + 1;
 | |
|                                 showItem(options.start);
 | |
|                             } else {
 | |
|                                 $(terms).each(function (ind, el) {
 | |
|                                     if ($(el).attr('id') == options.start) { //eslint-disable-line eqeqeq
 | |
|                                         current = ind + 1;
 | |
|                                         showItem(ind);
 | |
|                                         $('html, body').animate({
 | |
|                                             scrollTop: $(switches[ind]).offset().top
 | |
|                                         }, 700);
 | |
|                                     }
 | |
|                                 });
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 };
 | |
| 
 | |
|             init();
 | |
|         });
 | |
|     };
 | |
| 
 | |
|     return function (data, el) {
 | |
|         $(el).terms(data);
 | |
|     };
 | |
| });
 |