Nessuna descrizione

dropdown.js 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. $.define(["jQuery", "util", "doc"], "dropdown", function($, util, doc) {
  2. var dd_bg = "dd_bg",
  3. q_dd_bg = ".dd_bg",
  4. dd_ctn = ".dd-ctn",
  5. q_dd_ctn = ".dd-ctn",
  6. dd_hand = "dd-hand",
  7. q_dd_hand = ".dd-hand",
  8. open = "open",
  9. dd_clean = "dd-clean",
  10. dd_drop = "dd-drop",
  11. q_dd_drop = ".dd-drop",
  12. dd_hold = "dd-hold",
  13. dd_hold_once = "dd-hold-once",
  14. readOnly = "readOnly",
  15. showOnly = "showOnly",
  16. clearMenus = function(e) {
  17. if(e && e.which === 3) return
  18. $(q_dd_bg).remove();
  19. $(q_dd_ctn).each(function() {
  20. var $this = $(this),cls = util.classCheck(this, [open, dd_hold, dd_hold_once, dd_clean]);
  21. relatedTarget = {
  22. relatedTarget: this
  23. };
  24. if(!cls[open]) return; //hasClass('open')
  25. if(cls[dd_hold]) return; //hasClass('dd-hold')
  26. if(cls[dd_hold_once]) { //hasClass('dd-hold-once')
  27. $this.removeClass(dd_hold_once);
  28. return;
  29. }
  30. $this.trigger(evt = $.Event('hide.dropdown', relatedTarget));
  31. if(evt.isDefaultPrevented()) return;
  32. $this.removeClass(open).trigger('hidden.dropdown', relatedTarget);
  33. if(cls[dd_clean]) {
  34. $this.find(q_dd_drop).remove();
  35. }
  36. });
  37. },
  38. toggle = function(e) {
  39. var $this = $(this),
  40. $ddc = $this.parents(q_dd_ctn);
  41. if(!$ddc.length) return;
  42. var cls = util.classCheck($ddc[0], [open, readOnly, showOnly, dd_hold, dd_hold_once]);
  43. clearMenus();
  44. if(!cls[open]) {
  45. if(cls[readOnly] || cls[showOnly]) return;
  46. if(cls[dd_hold]) return false;
  47. if(cls[dd_hold_once]) {
  48. $ddc.removeClass(dd_hold_once);
  49. return false;
  50. }
  51. var relatedTarget = {
  52. relatedTarget: this
  53. }
  54. $ddc.trigger(e = $.Event('show.dropdown', relatedTarget));
  55. if(e.isDefaultPrevented()) return
  56. $ddc.addClass(open).trigger('shown.dropdown', relatedTarget);
  57. }
  58. return false;
  59. };
  60. $(doc).on("click.dropdown", clearMenus).on("click.dropdown", q_dd_hand, toggle);
  61. return {
  62. hold: function($e) {
  63. var $p = $e.parents(q_dd_ctn);
  64. if($p.length) {
  65. $($p[0]).addClass(dd_hold);
  66. }
  67. },
  68. holdOnce: function($e) {
  69. var $p = $e.parents(q_dd_ctn);
  70. if($p.length) {
  71. $($p[0]).addClass(dd_hold_once);
  72. }
  73. }
  74. };
  75. });