From bbb97a8660639002e70b1786e595ef9171bfecc6 Mon Sep 17 00:00:00 2001 From: fat Date: Sun, 10 May 2015 13:47:11 -0700 Subject: [PATCH] add dropdown --- Gruntfile.js | 11 +- js/dist/dropdown.js | 254 +++++++++++++++++++++++++++++++++ js/dist/dropdown.js.map | Bin 0 -> 13515 bytes js/src/dropdown.js | 261 ++++++++++++++++++++++++++++++++++ js/tests/index.html | 2 +- js/tests/visual/dropdown.html | 48 +++---- 6 files changed, 543 insertions(+), 33 deletions(-) create mode 100644 js/dist/dropdown.js create mode 100644 js/dist/dropdown.js.map create mode 100644 js/src/dropdown.js diff --git a/Gruntfile.js b/Gruntfile.js index ffc660958..5c29acf03 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -63,11 +63,12 @@ module.exports = function (grunt) { }, dist: { files: { - 'js/dist/util.js': 'js/src/util.js', - 'js/dist/alert.js': 'js/src/alert.js', - 'js/dist/button.js': 'js/src/button.js', - 'js/dist/carousel.js': 'js/src/carousel.js', - 'js/dist/collapse.js': 'js/src/collapse.js', + 'js/dist/util.js' : 'js/src/util.js', + 'js/dist/alert.js' : 'js/src/alert.js', + 'js/dist/button.js' : 'js/src/button.js', + 'js/dist/carousel.js' : 'js/src/carousel.js', + 'js/dist/collapse.js' : 'js/src/collapse.js', + 'js/dist/dropdown.js' : 'js/src/dropdown.js' } } }, diff --git a/js/dist/dropdown.js b/js/dist/dropdown.js new file mode 100644 index 000000000..a22e3ce39 --- /dev/null +++ b/js/dist/dropdown.js @@ -0,0 +1,254 @@ +'use strict'; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): dropdown.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Dropdown = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'dropdown'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.dropdown'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var Event = { + HIDE: 'hide.bs.dropdown', + HIDDEN: 'hidden.bs.dropdown', + SHOW: 'show.bs.dropdown', + SHOWN: 'shown.bs.dropdown', + CLICK: 'click.bs.dropdown', + KEYDOWN: 'keydown.bs.dropdown.data-api', + CLICK_DATA: 'click.bs.dropdown.data-api' + }; + + var ClassName = { + BACKDROP: 'dropdown-backdrop', + DISABLED: 'disabled', + OPEN: 'open' + }; + + var Selector = { + BACKDROP: '.dropdown-backdrop', + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: '.dropdown form', + ROLE_MENU: '[role="menu"]', + ROLE_LISTBOX: '[role="listbox"]', + NAVBAR_NAV: '.navbar-nav', + VISIBLE_ITEMS: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Dropdown = (function () { + function Dropdown(element) { + _classCallCheck(this, Dropdown); + + $(element).on(Event.CLICK, this.toggle); + } + + _createClass(Dropdown, [{ + key: 'toggle', + + // public + + value: function toggle() { + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this); + var isActive = $(parent).hasClass(ClassName.OPEN); + + Dropdown._clearMenus(); + + if (isActive) { + return false; + } + + if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) { + + // if mobile we use a backdrop because click events don't delegate + var dropdown = document.createElement('div'); + dropdown.className = ClassName.BACKDROP; + $(dropdown).insertBefore(this); + $(dropdown).on('click', Dropdown._clearMenus); + } + + var relatedTarget = { 'relatedTarget': this }; + var showEvent = $.Event(Event.SHOW, relatedTarget); + + $(parent).trigger(showEvent); + + if (showEvent.isDefaultPrevented()) { + return; + } + + this.focus(); + this.setAttribute('aria-expanded', 'true'); + + $(parent).toggleClass(ClassName.OPEN); + $(parent).trigger(Event.SHOWN, relatedTarget); + + return false; + } + }], [{ + key: '_jQueryInterface', + + // static + + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + + if (!data) { + $(this).data(DATA_KEY, data = new Dropdown(this)); + } + + if (typeof config === 'string') { + data[config].call(this); + } + }); + } + }, { + key: '_clearMenus', + value: function _clearMenus(event) { + if (event && event.which === 3) { + return; + } + + var backdrop = $(Selector.BACKDROP)[0]; + if (backdrop) { + backdrop.parentNode.removeChild(backdrop); + } + + var toggles = $.makeArray($(Selector.DATA_TOGGLE)); + + for (var i = 0; i < toggles.length; i++) { + var _parent = Dropdown._getParentFromElement(toggles[i]); + var relatedTarget = { 'relatedTarget': toggles[i] }; + + if (!$(_parent).hasClass(ClassName.OPEN)) { + continue; + } + + if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(_parent, event.target)) { + continue; + } + + var hideEvent = $.Event(Event.HIDE, relatedTarget); + $(_parent).trigger(hideEvent); + if (hideEvent.isDefaultPrevented()) { + continue; + } + + toggles[i].setAttribute('aria-expanded', 'false'); + + $(_parent).removeClass(ClassName.OPEN).trigger(Event.HIDDEN, relatedTarget); + } + } + }, { + key: '_getParentFromElement', + value: function _getParentFromElement(element) { + var parent = undefined; + var selector = Util.getSelectorFromElement(element); + + if (selector) { + parent = $(selector)[0]; + } + + return parent || element.parentNode; + } + }, { + key: '_dataApiKeydownHandler', + value: function _dataApiKeydownHandler(event) { + if (!/(38|40|27|32)/.test(event.which) || /input|textarea/i.test(event.target.tagName)) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this); + var isActive = $(parent).hasClass(ClassName.OPEN); + + if (!isActive && event.which !== 27 || isActive && event.which === 27) { + + if (event.which === 27) { + var toggle = $(parent).find(Selector.DATA_TOGGLE)[0]; + $(toggle).trigger('focus'); + } + + $(this).trigger('click'); + return; + } + + var items = $.makeArray($(Selector.VISIBLE_ITEMS)); + + items = items.filter(function (item) { + return item.offsetWidth || item.offsetHeight; + }); + + if (!items.length) { + return; + } + + var index = items.indexOf(event.target); + + if (event.which === 38 && index > 0) index--; // up + if (event.which === 40 && index < items.length - 1) index++; // down + if (! ~index) index = 0; + + items[index].focus(); + } + }]); + + return Dropdown; + })(); + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + $(document).on(Event.KEYDOWN, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA, Dropdown._clearMenus).on(Event.CLICK_DATA, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA, Selector.FORM_CHILD, function (e) { + e.stopPropagation(); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Dropdown._jQueryInterface; + $.fn[NAME].Constructor = Dropdown; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Dropdown._jQueryInterface; + }; + + return Dropdown; +})(jQuery); +//# sourceMappingURL=dropdown.js.map \ No newline at end of file diff --git a/js/dist/dropdown.js.map b/js/dist/dropdown.js.map new file mode 100644 index 0000000000000000000000000000000000000000..16e6332a8d5aad9cb991c77a58e1baa68da99a53 GIT binary patch literal 13515 zcmds7jdIgS5`L8-MXl{c$XVbDmMm8#%TDly#0d^?kflz*0)NKqDU3#zWpR5_BSr+>cw)tEmvF5|pNvUKC&U2mhv*7+@7y*>$o39ZK-U)klh2D|i?BvLU3+E3#|s!G@`)dD7E9>%2#gCte0o*?=Cu z39qA`5>HScdKaL+VCwVGyXNr=Vhid$?*XVEF!kNgn-NTSyyM-&<9maxogn;)K@PUa zfT0EsOsAFp=L7F0iREn~`)Btt!B6VvgG&7gvmyb@fyUMmV4>fkO^b^Ep@YOK^x`0R zL1K5kO=!ExMnGF@#GZGC$7dD^IB`nU6WSLOV_-}aFX`#n!G7uTAm0=5{ehQ&IMQ~$ zgHPXuz#z;+ufR2niA?JzBq^=IrR9780m=TXPf|hg|A?1HwZt3TU)T;*Bz}9X&42E`)oJkd_Xvl z9Ukn3S{R4UDl=yizT%i@JY(aa;qODnZf|QEga;;&SQcxE4ALm+ym<$d-*HGZq;c-1 zL#<^MA$k)FuG!3qa;R5Dx0*FNrr!)X3JfU{gJX(8)&wO-@>qM$n)He-nrQ4HJs{go zUE5|sFw<}eNHG$2I_Ftd%Vh2W4Pas+Q8aDWcP8dZVo)P@_VD3CQA z5;?3mSS*Je1}l zvs)M_RvB3TjBv&l6Ao+~tIQi?!kMpF3BIzn-Vb#I*&;U4Qkl6RBUi#f5M*8?z8n%p zu1A;;e~AwT#%kl=Oi;;^=_jl!eSv+5N<>BHYT~c}$$MrC`d8XCUKK~g6&ke+(b0{9 zd94M4x~O^8tEhn2au5szP*J-DPywc@rw-|7(H!ax0gt+2OqMKY13b9EZR6?$Br%y9I{L-qH23h9eNRj ztDy<_87a@evO5`0-fa~D9Msp0jy0dVCAB6e*n)@;1FB-%RYC+?0RJ&JicvD~s4_d< zhEV-r!kCp{h7CW zqQcE8WP%j8jNH$rYj8TU0xT!4%0?RpCSeYg6}Is-Bw*uS6-_Qk0-;2qV;8A^ND+DD z#(Z0lNzAd5=&hLQD83M{tc>uNP?VGq%YX$XM~DI>Mo4t9C2VsW8{Ta7M?GxUpN$r$ zvl!tfSFAG2VvksL*jI=m1enpW0k0S%@M1IXL%*3(u*k|a{pO151g6^~tvcLBO{zwzhTIx-;-@aoJ)n)1p0tdAr0F-`2jk2%!=a&!O&XtR^cW za&0l=8offz!Zbg+hsw{)7%6KlUT9e}USU`9l~^XY$`w)p`~FHMS+V_=;RW8>)d
`<7j;&jHMg+48!W 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 literal 0 HcmV?d00001 diff --git a/js/src/dropdown.js b/js/src/dropdown.js new file mode 100644 index 000000000..c5e29d8f1 --- /dev/null +++ b/js/src/dropdown.js @@ -0,0 +1,261 @@ +import Util from './util' + + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): dropdown.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +const Dropdown = (($) => { + + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + const NAME = 'dropdown' + const VERSION = '4.0.0' + const DATA_KEY = 'bs.dropdown' + const JQUERY_NO_CONFLICT = $.fn[NAME] + + const Event = { + HIDE   : 'hide.bs.dropdown', + HIDDEN   : 'hidden.bs.dropdown', + SHOW   : 'show.bs.dropdown', + SHOWN   : 'shown.bs.dropdown', + CLICK   : 'click.bs.dropdown', + KEYDOWN   : 'keydown.bs.dropdown.data-api', + CLICK_DATA : 'click.bs.dropdown.data-api' + } + + const ClassName = { + BACKDROP : 'dropdown-backdrop', + DISABLED : 'disabled', + OPEN : 'open' + } + + const Selector = { + BACKDROP : '.dropdown-backdrop', + DATA_TOGGLE : '[data-toggle="dropdown"]', + FORM_CHILD : '.dropdown form', + ROLE_MENU : '[role="menu"]', + ROLE_LISTBOX : '[role="listbox"]', + NAVBAR_NAV : '.navbar-nav', + VISIBLE_ITEMS : '[role="menu"] li:not(.disabled) a, ' + + '[role="listbox"] li:not(.disabled) a' + } + + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + class Dropdown { + + constructor(element) { + $(element).on(Event.CLICK, this.toggle) + } + + // public + + toggle() { + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return + } + + let parent = Dropdown._getParentFromElement(this) + let isActive = $(parent).hasClass(ClassName.OPEN) + + Dropdown._clearMenus() + + if (isActive) { + return false + } + + if ('ontouchstart' in document.documentElement && + (!$(parent).closest(Selector.NAVBAR_NAV).length)) { + + // if mobile we use a backdrop because click events don't delegate + let dropdown = document.createElement('div') + dropdown.className = ClassName.BACKDROP + $(dropdown).insertBefore(this) + $(dropdown).on('click', Dropdown._clearMenus) + } + + let relatedTarget = { relatedTarget : this } + let showEvent = $.Event(Event.SHOW, relatedTarget) + + $(parent).trigger(showEvent) + + if (showEvent.isDefaultPrevented()) { + return + } + + this.focus() + this.setAttribute('aria-expanded', 'true') + + $(parent).toggleClass(ClassName.OPEN) + $(parent).trigger(Event.SHOWN, relatedTarget) + + return false + } + + + // static + + static _jQueryInterface(config) { + return this.each(function () { + let data = $(this).data(DATA_KEY) + + if (!data) { + $(this).data(DATA_KEY, (data = new Dropdown(this))) + } + + if (typeof config === 'string') { + data[config].call(this) + } + }) + } + + static _clearMenus(event) { + if (event && event.which === 3) { + return + } + + let backdrop = $(Selector.BACKDROP)[0] + if (backdrop) { + backdrop.parentNode.removeChild(backdrop) + } + + let toggles = $.makeArray($(Selector.DATA_TOGGLE)) + + for (let i = 0; i < toggles.length; i++) { + let parent = Dropdown._getParentFromElement(toggles[i]) + let relatedTarget = { relatedTarget : toggles[i] } + + if (!$(parent).hasClass(ClassName.OPEN)) { + continue + } + + if (event && event.type === 'click' && + (/input|textarea/i.test(event.target.tagName)) && + ($.contains(parent, event.target))) { + continue + } + + let hideEvent = $.Event(Event.HIDE, relatedTarget) + $(parent).trigger(hideEvent) + if (hideEvent.isDefaultPrevented()) { + continue + } + + toggles[i].setAttribute('aria-expanded', 'false') + + $(parent) + .removeClass(ClassName.OPEN) + .trigger(Event.HIDDEN, relatedTarget) + } + } + + static _getParentFromElement(element) { + let parent + let selector = Util.getSelectorFromElement(element) + + if (selector) { + parent = $(selector)[0] + } + + return parent || element.parentNode + } + + static _dataApiKeydownHandler(event) { + if (!/(38|40|27|32)/.test(event.which) || + /input|textarea/i.test(event.target.tagName)) { + return + } + + event.preventDefault() + event.stopPropagation() + + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return + } + + let parent = Dropdown._getParentFromElement(this) + let isActive = $(parent).hasClass(ClassName.OPEN) + + if ((!isActive && event.which !== 27) || + (isActive && event.which === 27)) { + + if (event.which === 27) { + let toggle = $(parent).find(Selector.DATA_TOGGLE)[0] + $(toggle).trigger('focus') + } + + $(this).trigger('click') + return + } + + let items = $.makeArray($(Selector.VISIBLE_ITEMS)) + + items = items.filter((item) => { + return item.offsetWidth || item.offsetHeight + }) + + if (!items.length) { + return + } + + let index = items.indexOf(event.target) + + if (event.which === 38 && index > 0) index-- // up + if (event.which === 40 && index < items.length - 1) index++ // down + if (!~index) index = 0 + + items[index].focus() + } + + } + + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + $(document) + .on(Event.KEYDOWN, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler) + .on(Event.KEYDOWN, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler) + .on(Event.KEYDOWN, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler) + .on(Event.CLICK_DATA, Dropdown._clearMenus) + .on(Event.CLICK_DATA, Selector.DATA_TOGGLE, Dropdown.prototype.toggle) + .on(Event.CLICK_DATA, Selector.FORM_CHILD, function (e) { + e.stopPropagation() + }) + + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Dropdown._jQueryInterface + $.fn[NAME].Constructor = Dropdown + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT + return Dropdown._jQueryInterface + } + + return Dropdown + +})(jQuery) + +export default Dropdown diff --git a/js/tests/index.html b/js/tests/index.html index cc008152f..fa25ed883 100644 --- a/js/tests/index.html +++ b/js/tests/index.html @@ -135,9 +135,9 @@ + - diff --git a/js/tests/visual/dropdown.html b/js/tests/visual/dropdown.html index 02090b6cc..a51267de8 100644 --- a/js/tests/visual/dropdown.html +++ b/js/tests/visual/dropdown.html @@ -22,21 +22,15 @@

Dropdown Bootstrap Visual Test

-