Chris@0: /** Chris@0: * DO NOT EDIT THIS FILE. Chris@0: * See the following change record for more information, Chris@0: * https://www.drupal.org/node/2815083 Chris@0: * @preserve Chris@0: **/ Chris@0: Chris@0: (function ($, Drupal) { Chris@0: function DropButton(dropbutton, settings) { Chris@0: var options = $.extend({ title: Drupal.t('List additional actions') }, settings); Chris@0: var $dropbutton = $(dropbutton); Chris@0: Chris@0: this.$dropbutton = $dropbutton; Chris@0: Chris@0: this.$list = $dropbutton.find('.dropbutton'); Chris@0: Chris@0: this.$actions = this.$list.find('li').addClass('dropbutton-action'); Chris@0: Chris@0: if (this.$actions.length > 1) { Chris@0: var $primary = this.$actions.slice(0, 1); Chris@0: Chris@0: var $secondary = this.$actions.slice(1); Chris@0: $secondary.addClass('secondary-action'); Chris@0: Chris@0: $primary.after(Drupal.theme('dropbuttonToggle', options)); Chris@0: Chris@0: this.$dropbutton.addClass('dropbutton-multiple').on({ Chris@0: 'mouseleave.dropbutton': $.proxy(this.hoverOut, this), Chris@0: Chris@0: 'mouseenter.dropbutton': $.proxy(this.hoverIn, this), Chris@0: Chris@0: 'focusout.dropbutton': $.proxy(this.focusOut, this), Chris@0: Chris@0: 'focusin.dropbutton': $.proxy(this.focusIn, this) Chris@0: }); Chris@0: } else { Chris@0: this.$dropbutton.addClass('dropbutton-single'); Chris@0: } Chris@0: } Chris@0: Chris@17: function dropbuttonClickHandler(e) { Chris@17: e.preventDefault(); Chris@17: $(e.target).closest('.dropbutton-wrapper').toggleClass('open'); Chris@17: } Chris@17: Chris@17: Drupal.behaviors.dropButton = { Chris@17: attach: function attach(context, settings) { Chris@17: var $dropbuttons = $(context).find('.dropbutton-wrapper').once('dropbutton'); Chris@17: if ($dropbuttons.length) { Chris@17: var $body = $('body').once('dropbutton-click'); Chris@17: if ($body.length) { Chris@17: $body.on('click', '.dropbutton-toggle', dropbuttonClickHandler); Chris@17: } Chris@17: Chris@17: var il = $dropbuttons.length; Chris@17: for (var i = 0; i < il; i++) { Chris@17: DropButton.dropbuttons.push(new DropButton($dropbuttons[i], settings.dropbutton)); Chris@17: } Chris@17: } Chris@17: } Chris@17: }; Chris@17: Chris@0: $.extend(DropButton, { Chris@0: dropbuttons: [] Chris@0: }); Chris@0: Chris@0: $.extend(DropButton.prototype, { Chris@0: toggle: function toggle(show) { Chris@0: var isBool = typeof show === 'boolean'; Chris@0: show = isBool ? show : !this.$dropbutton.hasClass('open'); Chris@0: this.$dropbutton.toggleClass('open', show); Chris@0: }, Chris@0: hoverIn: function hoverIn() { Chris@0: if (this.timerID) { Chris@0: window.clearTimeout(this.timerID); Chris@0: } Chris@0: }, Chris@0: hoverOut: function hoverOut() { Chris@0: this.timerID = window.setTimeout($.proxy(this, 'close'), 500); Chris@0: }, Chris@0: open: function open() { Chris@0: this.toggle(true); Chris@0: }, Chris@0: close: function close() { Chris@0: this.toggle(false); Chris@0: }, Chris@0: focusOut: function focusOut(e) { Chris@0: this.hoverOut.call(this, e); Chris@0: }, Chris@0: focusIn: function focusIn(e) { Chris@0: this.hoverIn.call(this, e); Chris@0: } Chris@0: }); Chris@0: Chris@0: $.extend(Drupal.theme, { Chris@0: dropbuttonToggle: function dropbuttonToggle(options) { Chris@0: return '
  • '; Chris@0: } Chris@0: }); Chris@0: Chris@0: Drupal.DropButton = DropButton; Chris@0: })(jQuery, Drupal);