{"version":3,"file":"kendo.mobile.drawer.min.js","names":["factory","define","amd","$","kendo","mobile","os","Transition","roleSelector","AXIS","ui","SWIPE_TO_OPEN","BEFORE_SHOW","INIT","SHOW","HIDE","AFTER_HIDE","NULL_VIEW","Drawer","window","jQuery","support","mobileOS","effects","ios","majorVersion","appMode","enable","noop","View","extend","init","element","options","parent","prepend","Widget","fn","call","this","$angular","_layout","_scroller","_model","userEvents","pane","closest","data","bind","e","drawer","_viewShow","hide","UserEvents","fastTap","filter","allowSelection","currentView","container","Error","_attachTransition","visible","preventDefault","swipeToOpen","transition","cancel","_start","_update","_end","leftPositioned","position","addClass","trigger","name","views","swipeToOpenViews","title","events","show","_activate","_show","current","_moveViewTo","view","openFor","destroy","_currentViewIncludedIn","_setAsCurrent","_invokeNgController","length","inArray","id","replace","attr","offset","width","last","moveTo","location","duration","ease","easeOutExpo","that","movable","currentOffset","x","moveAxis","Movable","axis","onEnd","style","cssText","animationFrame","removeClass","sender","Math","abs","velocity","y","triggeredByInput","event","canMoveLeft","canMoveRight","leftSwipe","capture","limitedPosition","newPosition","delta","min","max","stopPropagation","pastHalf","velocityThreshold","plugin"],"sources":["kendo.mobile.drawer.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.mobile.view', 'kendo.userevents'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"mobile.drawer\",\n name: \"Drawer\",\n category: \"mobile\",\n description: \"The Kendo Mobile Drawer widget provides slide to reveal global application toolbox\",\n depends: [ \"mobile.view\", \"userevents\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n mobile = kendo.mobile,\n os = kendo.support.mobileOS,\n Transition = kendo.effects.Transition,\n roleSelector = kendo.roleSelector,\n AXIS = \"x\",\n ui = mobile.ui,\n SWIPE_TO_OPEN = !(os.ios && os.majorVersion == 7 && !os.appMode),\n BEFORE_SHOW = \"beforeShow\",\n INIT = \"init\",\n SHOW = \"show\",\n HIDE = \"hide\",\n AFTER_HIDE = \"afterHide\",\n NULL_VIEW = { enable: $.noop };\n\n var Drawer = ui.View.extend({\n init: function(element, options) {\n // move the drawer to the top, in order to hide it\n $(element).parent().prepend(element);\n\n mobile.ui.Widget.fn.init.call(this, element, options);\n\n if (!this.options.$angular) {\n this._layout();\n this._scroller();\n }\n\n this._model();\n\n var pane = this.element.closest(roleSelector(\"pane\")).data(\"kendoMobilePane\"),\n userEvents;\n\n if (pane) {\n this.pane = pane;\n this.pane.bind(\"viewShow\", function(e) {\n drawer._viewShow(e);\n });\n\n this.pane.bind(\"sameViewRequested\", function() {\n drawer.hide();\n });\n\n userEvents = this.userEvents = new kendo.UserEvents(pane.element, {\n fastTap: true,\n filter: roleSelector(\"view splitview\"),\n allowSelection: true\n });\n\n } else {\n this.currentView = NULL_VIEW;\n var container = $(this.options.container);\n\n if (!container) {\n throw new Error(\"The drawer needs a container configuration option set.\");\n }\n\n userEvents = this.userEvents = new kendo.UserEvents(container, { fastTap: true, allowSelection: true });\n this._attachTransition(container);\n }\n\n var drawer = this;\n\n var hide = function(e) {\n if (drawer.visible) {\n drawer.hide();\n e.preventDefault();\n }\n };\n\n if (this.options.swipeToOpen && SWIPE_TO_OPEN) {\n userEvents.bind(\"press\", function() { drawer.transition.cancel(); });\n userEvents.bind(\"start\", function(e) { drawer._start(e); });\n userEvents.bind(\"move\", function(e) { drawer._update(e); });\n userEvents.bind(\"end\", function(e) { drawer._end(e); });\n userEvents.bind(\"tap\", hide);\n } else {\n userEvents.bind(\"press\", hide);\n }\n\n this.leftPositioned = this.options.position === \"left\";\n\n this.visible = false;\n\n this.element.hide().addClass(\"km-drawer\").addClass(this.leftPositioned ? \"km-left-drawer\" : \"km-right-drawer\");\n this.trigger(INIT);\n },\n\n options: {\n name: \"Drawer\",\n position: \"left\",\n views: [],\n swipeToOpenViews: [],\n swipeToOpen: true,\n title: \"\",\n container: null\n },\n\n events: [\n BEFORE_SHOW,\n HIDE,\n AFTER_HIDE,\n INIT,\n SHOW\n ],\n\n show: function() {\n if (this._activate()) {\n this._show();\n }\n },\n\n hide: function() {\n if (!this.currentView) {\n return;\n }\n\n this.currentView.enable();\n\n Drawer.current = null;\n this._moveViewTo(0);\n this.trigger(HIDE, { view: this });\n },\n\n // Alias in order to support popover/modalview etc. interface\n openFor: function() {\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n },\n\n destroy: function() {\n ui.View.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n\n _activate: function() {\n if (this.visible) {\n return true;\n }\n\n var visibleOnCurrentView = this._currentViewIncludedIn(this.options.views);\n\n if (!visibleOnCurrentView || this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n\n this._setAsCurrent();\n this.element.show();\n\n this.trigger(SHOW, { view: this });\n this._invokeNgController();\n return true;\n },\n\n _currentViewIncludedIn: function(views) {\n if (!this.pane || !views.length) {\n return true;\n }\n\n var view = this.pane.view();\n return $.inArray(view.id.replace('#', ''), views) > -1 || $.inArray(view.element.attr(\"id\"), views) > -1;\n },\n\n _show: function() {\n this.currentView.enable(false);\n\n this.visible = true;\n var offset = this.element.width();\n\n if (!this.leftPositioned) {\n offset = -offset;\n }\n\n this._moveViewTo(offset);\n },\n\n _setAsCurrent: function() {\n if (Drawer.last !== this) {\n if (Drawer.last) {\n Drawer.last.element.hide();\n }\n this.element.show();\n }\n\n Drawer.last = this;\n Drawer.current = this;\n },\n\n _moveViewTo: function(offset) {\n this.userEvents.cancel();\n this.transition.moveTo({ location: offset, duration: 400, ease: Transition.easeOutExpo });\n },\n\n _viewShow: function(e) {\n if (this.currentView) {\n this.currentView.enable();\n }\n\n if (this.currentView === e.view) {\n this.hide();\n return;\n }\n\n this.currentView = e.view;\n this._attachTransition(e.view.element);\n },\n\n _attachTransition: function(element) {\n var that = this,\n movable = this.movable,\n currentOffset = movable && movable.x;\n\n\n if (this.transition) {\n this.transition.cancel();\n this.movable.moveAxis(\"x\", 0);\n }\n\n movable = this.movable = new kendo.ui.Movable(element);\n\n this.transition = new Transition({\n axis: AXIS,\n movable: this.movable,\n onEnd: function() {\n if (movable[AXIS] === 0) {\n element[0].style.cssText = \"\";\n that.element.hide();\n that.trigger(AFTER_HIDE);\n that.visible = false;\n }\n }\n });\n\n if (currentOffset) {\n element.addClass(\"k-fx-hidden\");\n kendo.animationFrame(function() {\n element.removeClass(\"k-fx-hidden\");\n that.movable.moveAxis(AXIS, currentOffset);\n that.hide();\n });\n }\n },\n\n _start: function(e) {\n var userEvents = e.sender;\n\n // ignore non-horizontal swipes\n if (Math.abs(e.x.velocity) < Math.abs(e.y.velocity) || kendo.triggeredByInput(e.event) || !this._currentViewIncludedIn(this.options.swipeToOpenViews)) {\n userEvents.cancel();\n return;\n }\n\n var leftPositioned = this.leftPositioned,\n visible = this.visible,\n canMoveLeft = leftPositioned && visible || !leftPositioned && !Drawer.current,\n canMoveRight = !leftPositioned && visible || leftPositioned && !Drawer.current,\n leftSwipe = e.x.velocity < 0;\n\n if ((canMoveLeft && leftSwipe) || (canMoveRight && !leftSwipe)) {\n if (this._activate()) {\n userEvents.capture();\n return;\n }\n }\n\n userEvents.cancel();\n },\n\n _update: function(e) {\n var movable = this.movable,\n newPosition = movable.x + e.x.delta,\n limitedPosition;\n\n if (this.leftPositioned) {\n limitedPosition = Math.min(Math.max(0, newPosition), this.element.width());\n } else {\n limitedPosition = Math.max(Math.min(0, newPosition), -this.element.width());\n }\n\n this.movable.moveAxis(AXIS, limitedPosition);\n e.event.preventDefault();\n e.event.stopPropagation();\n },\n\n _end: function(e) {\n var velocity = e.x.velocity,\n pastHalf = Math.abs(this.movable.x) > this.element.width() / 2,\n velocityThreshold = 0.8,\n shouldShow;\n\n if (this.leftPositioned) {\n shouldShow = velocity > -velocityThreshold && (velocity > velocityThreshold || pastHalf);\n } else {\n shouldShow = velocity < velocityThreshold && (velocity < -velocityThreshold || pastHalf);\n }\n\n if (shouldShow) {\n this._show();\n } else {\n this.hide();\n }\n }\n });\n\n ui.plugin(Drawer);\n })(window.kendo.jQuery);\n\n}));\n"]}