UNPKG

doevisualizations

Version:

Data Visualization Library based on RequireJS and D3.js (v4+)

135 lines (120 loc) 5.78 kB
define(["jquery", "jqueryuiwidget","hammerjs"], function ($, jquerywidget, Hammer) { $.widget("vwidgets.slideoutmenu", { options: { animationType: 'slideout', hamburgerMarkup: '<span id="vwidgetsslideoutmenutriggerelement" class="glyphicon glyphicon-menu-hamburger btn-lg vwidgetsslideoutmenutriggerelement" aria-hidden="true"></span>', hamburgerTarget: '#hamburgerwrapper', pageWrapperElement: 'body', menuListDataElement: '#primary_nav_wrap', ajaxLoad: false, ajaxUrl: 'menu.html', defaultHeader: true, headerMarkup: 'Hamburger Menu', headerTitle: 'Welcome Suzanne' }, _privateState: { isSlideOutMenuOpen: false, hammerEle: null, hammerInstance: {} }, _create: function () { $(this.options.hamburgerTarget).html(this.options.hamburgerMarkup); var arrHtml = []; arrHtml.push('<div id="slideoutmenuwrapper" class="slideoutmenuwrapper">'); arrHtml.push(' <div id="slideoutmenuheader" class="slideoutmenuheader">'); if (this.options.headerTitle === '' || this.options.headerTitle === undefined || this.options.headerTitle === null) { arrHtml.push(this.options.headerMarkup); } else { arrHtml.push('<h4>' + this.options.headerTitle + '</h4>'); } arrHtml.push(' </div>'); arrHtml.push(' <nav id="slideoutmenuoptions" class="slideoutmenuoptions">'); arrHtml.push(' </nav>'); arrHtml.push('</div>'); $(arrHtml.join('')).insertBefore(this.options.pageWrapperElement); if (this.options.ajaxLoad) { $.get(this.options.ajaxUrl, function (data) { $("#slideoutmenumenuoptions").html(data); this._bindEvents(); }); } else { $('#slideoutmenuoptions').html($(this.options.menuListDataElement).html()); this._bindEvents(); } }, _setOptions: function () { // _super and _superApply handle keeping the right this-context this._superApply(arguments); }, _setOption: function (key, value) { // prevent invalid color values this._super(key, value); }, _bindEvents: function () { this._on(this.element, { "click .vwidgetsslideoutmenutriggerelement": function (event) { event.stopPropagation(); this.openSlideOutMenu(); }, "touchend .vwidgetsslideoutmenutriggerelement": function (event) { event.stopPropagation(); this.openSlideOutMenu(); }, "touchend": function (event) { event.stopPropagation(); this.closeSlideOutMenu(); }, "click": function (event) { event.stopPropagation(); this.closeSlideOutMenu(); } }); var that = this; var mc = new Hammer(this.element[0]); mc.get('pan').set({ direction: Hammer.DIRECTION_ALL }); mc.on("panleft", function (ev) { that.closeSlideOutMenu(); }); this._privateState.hammerInstance = mc; // $('#slideoutmenuwrapper').hammer().on('panleft.vwidgetsslideoutmenu', function () { // that.closeSlideOutMenu(); // }); }, openSlideOutMenu: function () { if (!this._privateState.isSlideOutMenuOpen) { $('#slideoutmenuwrapper').addClass('showslidemenu'); $(this.options.pageWrapperElement).addClass('slidemenuopenwrapperdeactivatepagewrapper'); this._privateState.isSlideOutMenuOpen = true; this._trigger("open", null, {}); } }, closeSlideOutMenu: function () { if (this._privateState.isSlideOutMenuOpen) { $(this.options.pageWrapperElement).removeClass('slidemenuopenwrapperdeactivatepagewrapper'); $('#slideoutmenuwrapper').removeClass('showslidemenu'); this._privateState.isSlideOutMenuOpen = false; this._trigger("closed", null, {}); } }, toggleSlideOutMenu: function (event) { if (this._privateState.isSlideOutMenuOpen) { $(this.options.pageWrapperElement).removeClass('slidemenuopenwrapperdeactivatepagewrapper'); $('#slideoutmenuwrapper').removeClass('showslidemenu'); this._privateState.isSlideOutMenuOpen = false; this._trigger("closed", null, {}); } else { $('#slideoutmenuwrapper').addClass('showslidemenu'); $(this.options.pageWrapperElement).addClass('slidemenuopenwrapperdeactivatepagewrapper'); this._privateState.isSlideOutMenuOpen = true; this._trigger("open", null, {}); } }, _destroy: function () { this._off(this.element, "click.slideoutmenu"); $('#slideoutmenuwrapper').remove(); $('#vwidgetsslideoutmenutriggerelement').remove(); this._privateState.hammerInstance.destroy(); //$('#slideoutmenuwrapper').hammer().off('panleft.vwidgetsslideoutmenu'); } }); });