GridMenu.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. (function (global, factory) {
  2. if (typeof define === "function" && define.amd) {
  3. define('/Section/GridMenu', ['exports', 'jquery', 'Component'], factory);
  4. } else if (typeof exports !== "undefined") {
  5. factory(exports, require('jquery'), require('Component'));
  6. } else {
  7. var mod = {
  8. exports: {}
  9. };
  10. factory(mod.exports, global.jQuery, global.Component);
  11. global.SectionGridMenu = mod.exports;
  12. }
  13. })(this, function (exports, _jquery, _Component2) {
  14. 'use strict';
  15. Object.defineProperty(exports, "__esModule", {
  16. value: true
  17. });
  18. var _jquery2 = babelHelpers.interopRequireDefault(_jquery);
  19. var _Component3 = babelHelpers.interopRequireDefault(_Component2);
  20. var $BODY = (0, _jquery2.default)('body');
  21. var $HTML = (0, _jquery2.default)('html');
  22. var Scrollable = function () {
  23. function Scrollable($el) {
  24. babelHelpers.classCallCheck(this, Scrollable);
  25. this.$el = $el;
  26. this.api = null;
  27. this.init();
  28. }
  29. babelHelpers.createClass(Scrollable, [{
  30. key: 'init',
  31. value: function init() {
  32. this.api = this.$el.asScrollable({
  33. namespace: 'scrollable',
  34. skin: 'scrollable-inverse',
  35. direction: 'vertical',
  36. contentSelector: '>',
  37. containerSelector: '>'
  38. }).data('asScrollable');
  39. }
  40. }, {
  41. key: 'update',
  42. value: function update() {
  43. if (this.api) {
  44. this.api.update();
  45. }
  46. }
  47. }, {
  48. key: 'enable',
  49. value: function enable() {
  50. if (!this.api) {
  51. this.init();
  52. }
  53. if (this.api) {
  54. this.api.enable();
  55. }
  56. }
  57. }, {
  58. key: 'disable',
  59. value: function disable() {
  60. if (this.api) {
  61. this.api.disable();
  62. }
  63. }
  64. }]);
  65. return Scrollable;
  66. }();
  67. var GridMenu = function (_Component) {
  68. babelHelpers.inherits(GridMenu, _Component);
  69. function GridMenu() {
  70. var _ref;
  71. babelHelpers.classCallCheck(this, GridMenu);
  72. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  73. args[_key] = arguments[_key];
  74. }
  75. var _this = babelHelpers.possibleConstructorReturn(this, (_ref = GridMenu.__proto__ || Object.getPrototypeOf(GridMenu)).call.apply(_ref, [this].concat(args)));
  76. _this.isOpened = false;
  77. _this.scrollable = new Scrollable(_this.$el);
  78. return _this;
  79. }
  80. babelHelpers.createClass(GridMenu, [{
  81. key: 'open',
  82. value: function open() {
  83. this.animate(function () {
  84. this.$el.addClass('active');
  85. (0, _jquery2.default)('[data-toggle="gridmenu"]').addClass('active').attr('aria-expanded', true);
  86. $BODY.addClass('site-gridmenu-active');
  87. $HTML.addClass('disable-scrolling');
  88. }, function () {
  89. this.scrollable.enable();
  90. });
  91. this.isOpened = true;
  92. }
  93. }, {
  94. key: 'close',
  95. value: function close() {
  96. this.animate(function () {
  97. this.$el.removeClass('active');
  98. (0, _jquery2.default)('[data-toggle="gridmenu"]').addClass('active').attr('aria-expanded', true);
  99. $BODY.removeClass('site-gridmenu-active');
  100. $HTML.removeClass('disable-scrolling');
  101. }, function () {
  102. this.scrollable.disable();
  103. });
  104. this.isOpened = false;
  105. }
  106. }, {
  107. key: 'toggle',
  108. value: function toggle(opened) {
  109. if (opened) {
  110. this.open();
  111. } else {
  112. this.close();
  113. }
  114. }
  115. }, {
  116. key: 'animate',
  117. value: function animate(doing, callback) {
  118. var _this2 = this;
  119. doing.call(this);
  120. this.$el.trigger('changing.site.gridmenu');
  121. setTimeout(function () {
  122. callback.call(_this2);
  123. _this2.$el.trigger('changed.site.gridmenu');
  124. }, 500);
  125. }
  126. }]);
  127. return GridMenu;
  128. }(_Component3.default);
  129. exports.default = GridMenu;
  130. });