1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- $.define(["jQuery", "util", "doc"], "dropdown", function($, util, doc) {
- var dd_bg = "dd_bg",
- q_dd_bg = ".dd_bg",
- dd_ctn = ".dd-ctn",
- q_dd_ctn = ".dd-ctn",
- dd_hand = "dd-hand",
- q_dd_hand = ".dd-hand",
- open = "open",
- dd_clean = "dd-clean",
- dd_drop = "dd-drop",
- q_dd_drop = ".dd-drop",
- dd_hold = "dd-hold",
- dd_hold_once = "dd-hold-once",
- readOnly = "readOnly",
- showOnly = "showOnly",
- clearMenus = function(e) {
- if(e && e.which === 3) return
- $(q_dd_bg).remove();
- $(q_dd_ctn).each(function() {
- var $this = $(this),cls = util.classCheck(this, [open, dd_hold, dd_hold_once, dd_clean]);
- relatedTarget = {
- relatedTarget: this
- };
- if(!cls[open]) return;
- if(cls[dd_hold]) return;
- if(cls[dd_hold_once]) {
- $this.removeClass(dd_hold_once);
- return;
- }
- $this.trigger(evt = $.Event('hide.dropdown', relatedTarget));
- if(evt.isDefaultPrevented()) return;
- $this.removeClass(open).trigger('hidden.dropdown', relatedTarget);
- if(cls[dd_clean]) {
- $this.find(q_dd_drop).remove();
- }
- });
- },
- toggle = function(e) {
- var $this = $(this),
- $ddc = $this.parents(q_dd_ctn);
- if(!$ddc.length) return;
- var cls = util.classCheck($ddc[0], [open, readOnly, showOnly, dd_hold, dd_hold_once]);
- clearMenus();
- if(!cls[open]) {
- if(cls[readOnly] || cls[showOnly]) return;
- if(cls[dd_hold]) return false;
- if(cls[dd_hold_once]) {
- $ddc.removeClass(dd_hold_once);
- return false;
- }
- var relatedTarget = {
- relatedTarget: this
- }
- $ddc.trigger(e = $.Event('show.dropdown', relatedTarget));
- if(e.isDefaultPrevented()) return
- $ddc.addClass(open).trigger('shown.dropdown', relatedTarget);
- }
- return false;
- };
- $(doc).on("click.dropdown", clearMenus).on("click.dropdown", q_dd_hand, toggle);
- return {
- hold: function($e) {
- var $p = $e.parents(q_dd_ctn);
- if($p.length) {
- $($p[0]).addClass(dd_hold);
- }
- },
- holdOnce: function($e) {
- var $p = $e.parents(q_dd_ctn);
- if($p.length) {
- $($p[0]).addClass(dd_hold_once);
- }
- }
- };
- });
|