{"version":3,"sources":["offCanvas.js"],"names":["$","pluginName","defaults","htmlClass","Plugin","element","options","this","eventController","extend","initialized","init","prototype","offCanvas","bind","find","on","event","preventDefault","eventDetails","subMenuId","attr","subMenuEl","length","subMenu","menuId","removeClass","addClass","hasClass","scrollTop","open","close","disableEvent","destroy","removeData","name","handler","eventBinder","call","type","details","Error","fn","instance","data","window","jQuery"],"mappings":"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","file":"offCanvas.min.js","sourcesContent":["(function ($, pluginName) {\n  var defaults = {\n    htmlClass: true\n  }\n\n  function Plugin (element, options) {\n    this.element = element\n    this.eventController = eventController\n    this.options = $.extend({}, defaults, options)\n    this.options.initialized = false\n\n    this.init()\n  }\n\n  Plugin.prototype.init = function () {\n    var offCanvas = this.element\n    var options = this.options\n    var eventController = this.eventController.bind(this)\n\n    // exit if already initialized\n    if (options.initialized === true) return\n\n    eventController('loading')\n\n    // handle subMenu links/triggers click events\n    offCanvas.find('[data-submenu]').on('click', function (event) {\n      event.preventDefault()\n\n      var self = $(this)\n      var subMenuId = self.attr('data-submenu')\n      var subMenuEl = $('#' + subMenuId)\n\n      // if subMenu not found, do nothing\n      if (!subMenuEl.length) return\n\n      var eventDetails = {\n        subMenu: true,\n        menuId: subMenuId\n      }\n\n      eventController('opening', eventDetails)\n\n      // open the subMenu\n      offCanvas.find('.submenu.current').removeClass('current')\n      subMenuEl.addClass('opened current')\n      !offCanvas.hasClass('submenu-opened') && offCanvas.addClass('submenu-opened')\n\n      // scroll to top before submenu transition\n      offCanvas.scrollTop(0)\n\n      eventController('opened', eventDetails)\n    })\n\n    // handle subMenu closers click events\n    offCanvas.find('[data-submenu-close]').on('click', function (event) {\n      event.preventDefault()\n\n      var self = $(this)\n      var subMenuId = self.attr('data-submenu-close')\n      var subMenuEl = $('#' + subMenuId)\n\n      // if subMenu not found, do nothing\n      if (!subMenuEl.length) return\n\n      var eventDetails = {\n        subMenu: true,\n        menuId: subMenuId\n      }\n\n      eventController('closing', eventDetails)\n\n      // close subMenu\n      subMenuEl.removeClass('opened current')\n      offCanvas.find('.submenu.opened:last').addClass('current')\n      !offCanvas.find('.submenu.opened').length && offCanvas.removeClass('submenu-opened')\n\n      // scroll to top between submenu transitions\n      subMenuEl.scrollTop(0)\n\n      eventController('closed', eventDetails)\n    })\n\n    eventController('load')\n\n    // offCanvasjs successfully initialized\n    this.options.htmlClass && !$('html').hasClass('offCanvas-initialized') && $('html').addClass('offCanvas-initialized')\n\n    options.initialized = true\n  }\n\n  Plugin.prototype.open = function () {\n    this.eventController(\n      'opening',\n      { subMenu: false }\n    )\n\n    // offCanvasjs menu is opened\n    this.element.addClass('opened')\n    this.options.htmlClass && $('html').addClass('offCanvas-opened')\n\n    this.eventController(\n      'opened',\n      { subMenu: false }\n    )\n  }\n\n  Plugin.prototype.close = function (disableEvent) {\n    !disableEvent && this.eventController('closing', { subMenu: false })\n\n    // offCanvasjs menu is opened\n    this.element.removeClass('opened')\n    this.options.htmlClass && $('html').removeClass('offCanvas-opened')\n\n    !disableEvent && this.eventController('closed', { subMenu: false })\n  }\n\n  Plugin.prototype.destroy = function () {\n    this.eventController('destroying')\n\n    // close the menu without firing any event\n    this.close(true)\n\n    // close submenus\n    this.element.find('.submenu.opened').removeClass('opened')\n\n    // clear/remove the instance on the element\n    this.element.removeData(pluginName)\n\n    this.eventController('destroyed')\n\n    // reset options\n    this.options = defaults\n\n    this.options.htmlClass && $('html').removeClass('offCanvas-initialized')\n\n    delete this.element\n    delete this.options\n    delete this.eventController\n  }\n\n  Plugin.prototype.on = function (name, handler) {\n    eventBinder.call(this, name, handler)\n  }\n\n  var eventController = function (type, details) {\n    if (!this.options[type]) return\n    if (typeof this.options[type] !== 'function') throw Error('event handler must be a function: ' + type)\n\n    // call the event\n    this.options[type].call(this, this.element, this.options, details)\n  }\n\n  var getInstance = function (element, options) {\n    var instance = null\n\n    if (!element.data(pluginName)) {\n      // offCanvasjs is not initialized for the element\n      // crceate a new instance\n      instance = new Plugin(element, options || {})\n\n      // put the instance on element\n      element.data(pluginName, instance)\n    } else {\n      // return the already initialized instance\n      instance = element.data(pluginName)\n    }\n\n    return instance\n  }\n\n  var eventBinder = function (name, handler) {\n    if (typeof name !== 'string') throw Error('event name is expected to be a string but got: ' + typeof name)\n    if (typeof handler !== 'function') throw Error('event handler is not a function for: ' + name)\n\n    // update options\n    this.options[name] = handler\n  }\n\n  // a really lightweight plugin wrapper around the constructor\n  // preventing against multiple instantiations\n  $.fn[pluginName] = function (options) {\n    // get a offCanvasjs instance\n    var instance = getInstance($(this[0]), options)\n\n    return instance\n  }\n})(window.jQuery, 'offCanvas')\n"]}