/** * @file * CKEditor Accordion functionality. */ (function ($, Drupal, drupalSettings) { 'use strict'; Drupal.behaviors.ckeditorAccordion = { attach: function (context, settings) { // Create accordion functionality if the required elements exist is available. var $ckeditorAccordion = $('.ckeditor-accordion'); if ($ckeditorAccordion.length > 0) { // Create simple accordion mechanism for each tab. $ckeditorAccordion.each(function () { var $accordion = $(this); if ($accordion.hasClass('styled')) { return; } // The first one is the correct one. if (!drupalSettings.ckeditorAccordion.accordionStyle.collapseAll) { $accordion.children('dt:first').addClass('active'); $accordion.children('dd:first').addClass('active'); $accordion.children('dd:first').css('display', 'block'); } // Turn the accordion tabs to links so that the content is accessible & can be traversed using keyboard. $accordion.children('dt').each(function () { var $tab = $(this); var tabText = $tab.text().trim(); var toggleClass = $tab.hasClass('active') ? ' active' : ''; $tab.html('' + tabText + ''); }); // Wrap the accordion in a div element so that quick edit function shows the source correctly. $accordion.addClass('styled').removeClass('ckeditor-accordion').wrap('
'); // Trigger an ckeditorAccordionAttached event to let other frameworks know that the accordion has been attached. $accordion.trigger('ckeditorAccordionAttached'); }); // Add click event to body once because quick edits & ajax calls might reset the HTML. $('body').once('ckeditorAccordionToggleEvent').on('click', '.ckeditor-accordion-toggler', function (e) { var $t = $(this).parent(); var $parent = $t.parent(); // Clicking on open element, close it. if ($t.hasClass('active')) { $t.removeClass('active'); $t.next().slideUp(); } else { if(!drupalSettings.ckeditorAccordion.accordionStyle.keepRowsOpen) { // Remove active classes. $parent.children('dt.active').removeClass('active').children('a').removeClass('active'); $parent.children('dd.active').slideUp(function () { $(this).removeClass('active'); }); } // Show the selected tab. $t.addClass('active'); $t.next().slideDown(300).addClass('active'); } // Don't add hash to url. e.preventDefault(); }); } } }; })(jQuery, Drupal, drupalSettings); ; /* * Superfish v1.4.8 - jQuery menu widget * Copyright (c) 2008 Joel Birch * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt */ /* * This is not the original jQuery Superfish plugin. * Please refer to the README for more information. */ (function ($) { $.fn.superfish = function (op) { var sf = $.fn.superfish, c = sf.c, $arrow = $([' »'].join('')), over = function () { var $$ = $(this), menu = getMenu($$); clearTimeout(menu.sfTimer); $$.showSuperfishUl().siblings().hideSuperfishUl(); }, out = function () { var $$ = $(this), menu = getMenu($$), o = sf.op; clearTimeout(menu.sfTimer); menu.sfTimer = setTimeout(function () { if ($$.children('.sf-clicked').length == 0) { o.retainPath = ($.inArray($$[0], o.$path) > -1); $$.hideSuperfishUl(); if (o.$path.length && $$.parents(['li.', o.hoverClass].join('')).length < 1) { over.call(o.$path); } } }, o.delay); }, getMenu = function ($menu) { var menu = $menu.parents(['ul.', c.menuClass, ':first'].join(''))[0]; sf.op = sf.o[menu.serial]; return menu; }, addArrow = function ($a) { $a.addClass(c.anchorClass).append($arrow.clone()); }; return this.each(function () { var s = this.serial = sf.o.length; var o = $.extend({}, sf.defaults, op); o.$path = $('li.' + o.pathClass, this).slice(0, o.pathLevels), p = o.$path; for (var l = 0; l < p.length; l++) { p.eq(l).addClass([o.hoverClass, c.bcClass].join(' ')).filter('li:has(ul)').removeClass(o.pathClass); } sf.o[s] = sf.op = o; $('li:has(ul)', this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over, out).each(function () { if (o.autoArrows) { addArrow($(this).children('a:first-child, span.nolink:first-child')); } }) .not('.' + c.bcClass) .hideSuperfishUl(); var $a = $('a, span.nolink', this); $a.each(function (i) { var $li = $a.eq(i).parents('li'); $a.eq(i).focus(function () { over.call($li); }).blur(function () { out.call($li); }); }); o.onInit.call(this); }).each(function () { var menuClasses = [c.menuClass]; if (sf.op.dropShadows) { menuClasses.push(c.shadowClass); } $(this).addClass(menuClasses.join(' ')); }); }; var sf = $.fn.superfish; sf.o = []; sf.op = {}; sf.c = { bcClass: 'sf-breadcrumb', menuClass: 'sf-js-enabled', anchorClass: 'sf-with-ul', arrowClass: 'sf-sub-indicator', shadowClass: 'sf-shadow' }; sf.defaults = { hoverClass: 'sfHover', pathClass: 'overideThisToUse', pathLevels: 1, delay: 800, animation: {opacity: 'show'}, speed: 'fast', autoArrows: true, dropShadows: true, disableHI: false, // true disables hoverIntent detection onInit: function () { }, // callback functions onBeforeShow: function () { }, onShow: function () { }, onHide: function () { } }; $.fn.extend({ hideSuperfishUl: function () { var o = sf.op, not = (o.retainPath === true) ? o.$path : ''; o.retainPath = false; var $ul = $(['li.', o.hoverClass].join(''), this).add(this).not(not).removeClass(o.hoverClass) .children('ul').addClass('sf-hidden'); o.onHide.call($ul); return this; }, showSuperfishUl: function () { var o = sf.op, sh = sf.c.shadowClass + '-off', $ul = this.addClass(o.hoverClass) .children('ul.sf-hidden').hide().removeClass('sf-hidden'); o.onBeforeShow.call($ul); $ul.animate(o.animation, o.speed, function () { o.onShow.call($ul); }); return this; } }); })(jQuery); ; /*! * hoverIntent v1.8.0 // 2014.06.29 // jQuery v1.9.1+ * http://cherne.net/brian/resources/jquery.hoverIntent.html * * You may use hoverIntent under the terms of the MIT license. Basically that * means you are free to use hoverIntent as long as this header is left intact. * Copyright 2007, 2014 Brian Cherne */ (function($){$.fn.hoverIntent=function(handlerIn,handlerOut,selector){var cfg={interval:100,sensitivity:6,timeout:0};if(typeof handlerIn==="object"){cfg=$.extend(cfg,handlerIn)}else{if($.isFunction(handlerOut)){cfg=$.extend(cfg,{over:handlerIn,out:handlerOut,selector:selector})}else{cfg=$.extend(cfg,{over:handlerIn,out:handlerIn,selector:handlerOut})}}var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if(Math.sqrt((pX-cX)*(pX-cX)+(pY-cY)*(pY-cY)) 0 && parent.children('ul').children('.sf-clone-parent').length == 0) { var // Cloning the hyperlink of the parent menu item. cloneLink = parent.children('a.menuparent,span.nolink.menuparent').clone(), // Wrapping the hyerplinks in
  • . cloneLink = $('
  • ').html(cloneLink); // Removing unnecessary stuff. cloneLink.find('.sf-sub-indicator').remove(), // Adding a helper class and attaching them to the sub-menus. parent.children('ul').addClass('sf-has-clone-parent').prepend(cloneLink); } } // No .toggle() here as it's not possible to reset it. item.bind(eventHandler[0], function (event) { // Already clicked? if (item.hasClass('sf-clicked')) { // Depending on the preferred behaviour, either proceed to the URL. if (options.behaviour == 0) { url = item.attr('href'); if (typeof (url) != 'undefined') { window.location = url; } } // or collapse the sub-menu. else if (options.behaviour == 1 || options.behaviour == 2) { event.preventDefault(); item.removeClass('sf-clicked'); parent.hideSuperfishUl().find('a,span.nolink').removeClass('sf-clicked'); } } // Prevent the default action otherwise. else { event.preventDefault(); item.addClass('sf-clicked'); parent.showSuperfishUl().siblings('li:has(ul)').hideSuperfishUl().find('.sf-clicked').removeClass('sf-clicked'); } }); }); $(document).bind(eventHandler[1], function (event) { if (menu.not(event.target) && menu.has(event.target).length === 0) { menu.find('.sf-clicked').removeClass('sf-clicked'); menu.find('li:has(ul)').hideSuperfishUl(); } }); } // Return original object to support chaining. // This is not necessary actually because of the way the module uses these // plugins. for (var b = 0; b < this.length; b++) { var menu = $(this).eq(b), mode = options.mode; // The rest is crystal clear, isn't it? :) if (mode == 'always_active') { activate(menu); } else if (mode == 'window_width') { var breakpoint = (options.breakpointUnit == 'em') ? (options.breakpoint * parseFloat($('body').css('font-size'))) : options.breakpoint, windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, timer; if ((typeof Modernizr === 'undefined' || typeof Modernizr.mq !== 'function') && windowWidth < breakpoint) { activate(menu); } else if (typeof Modernizr !== 'undefined' && typeof Modernizr.mq === 'function' && Modernizr.mq('(max-width:' + (breakpoint - 1) + 'px)')) { activate(menu); } $(window).resize(function () { clearTimeout(timer); timer = setTimeout(function () { var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; if ((typeof Modernizr === 'undefined' || typeof Modernizr.mq !== 'function') && windowWidth < breakpoint) { activate(menu); } else if (typeof Modernizr !== 'undefined' && typeof Modernizr.mq === 'function' && Modernizr.mq('(max-width:' + (breakpoint - 1) + 'px)')) { activate(menu); } }, 50); }); } else if (mode == 'useragent_custom') { if (options.useragent != '') { var ua = RegExp(options.useragent, 'i'); if (navigator.userAgent.match(ua)) { activate(menu); } } } else if (mode == 'useragent_predefined' && navigator.userAgent.match(/(android|bb\d+|meego)|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i)) { activate(menu); } } return this; } })(jQuery); ; /* * sf-Smallscreen v1.3b - Provides small-screen compatibility for the jQuery Superfish plugin. * * Developer's note: * Built as a part of the Superfish project for Drupal (http://drupal.org/project/superfish) * Found any bug? have any cool ideas? contact me right away! http://drupal.org/user/619294/contact * * jQuery version: 1.3.x or higher. * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ (function ($) { $.fn.sfsmallscreen = function (options) { options = $.extend( { mode: "inactive", type: "accordion", breakpoint: 768, breakpointUnit: "px", useragent: "", title: "", addSelected: false, menuClasses: false, hyperlinkClasses: false, excludeClass_menu: "", excludeClass_hyperlink: "", includeClass_menu: "", includeClass_hyperlink: "", accordionButton: 1, expandText: "Expand", collapseText: "Collapse", }, options ); // We need to clean up the menu from anything unnecessary. function refine(menu) { var refined = menu.clone(), // Things that should not be in the small-screen menus. rm = refined.find("span.sf-sub-indicator"), // This is a helper class for those who need to add extra markup that // shouldn't exist in the small-screen versions. rh = refined.find(".sf-smallscreen-remove"), // Mega-menus has to be removed too. mm = refined.find("ul.sf-multicolumn"); for (var a = 0; a < rh.length; a++) { rh.eq(a).replaceWith(rh.eq(a).html()); } if (options.accordionButton == 2 || options.type == "select") { for (var b = 0; b < rm.length; b++) { rm.eq(b).remove(); } } if (mm.length > 0) { mm.removeClass("sf-multicolumn"); var ol = refined.find("div.sf-multicolumn-column > ol"); for (var o = 0; o < ol.length; o++) { ol.eq(o).replaceWith(""); } var elements = [ "div.sf-multicolumn-column", ".sf-multicolumn-wrapper > ol", "li.sf-multicolumn-wrapper", ]; for (var i = 0; i < elements.length; i++) { obj = refined.find(elements[i]); for (var t = 0; t < obj.length; t++) { obj.eq(t).replaceWith(obj.eq(t).html()); } } refined .find(".sf-multicolumn-column") .removeClass("sf-multicolumn-column"); } refined.add(refined.find("*")).css({width: ""}); return refined; } // Creating "), (childUL = list.find("> ul")); // Using the function for the sub-menu of this item. for (var u = 0; u < childUL.length; u++) { items += toSelect(childUL.eq(u), level + 1); } } } return items; } // Create the new version, hide the original. function convert(menu) { var menuID = menu.attr("id"), // Creating a refined version of the menu. refinedMenu = refine(menu); // Currently the plugin provides two reactions to small screens. // Converting the menu to a element does not exist already. if ($("#" + menuID + "-select").length == 0) { // Creating the " + newMenu) // Attaching an event then. .change(function () { // Except for the first option that is the menu title and not a // real menu item. if ($("option:selected", this).index()) { window.location = selectList.val(); } }); // Applying the addSelected option to it. if (options.addSelected) { selectList.find(".active").attr("selected", !0); } // Finally inserting the