{"version":3,"sources":["fastclick.js","activeLinks.js","capture.js","outerClick.js","sharedState.js","touchmoveDefaults.js","mobile-angular-ui.core.js","overthrow-detect.js","overthrow-init.js","overthrow-polyfill.js","modals.js","navbars.js","scrollable.js","sidebars.js","switch.js","mobile-angular-ui.components.js","mobile-angular-ui.js"],"names":["FastClick","layer","options","bind","method","context","apply","arguments","oldOnClick","this","trackingClick","trackingClickStart","targetElement","touchStartX","touchStartY","lastTouchIdentifier","touchBoundary","tapDelay","tapTimeout","notNeeded","methods","i","l","length","deviceIsAndroid","addEventListener","onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","Event","prototype","stopImmediatePropagation","removeEventListener","type","callback","capture","rmv","Node","call","hijacked","adv","event","propagationStopped","onclick","deviceIsWindowsPhone","navigator","userAgent","indexOf","deviceIsIOS","test","deviceIsIOS4","deviceIsIOSWithBadTarget","deviceIsBlackBerry10","needsClick","target","nodeName","toLowerCase","disabled","className","needsFocus","readOnly","sendClick","clickEvent","touch","document","activeElement","blur","changedTouches","createEvent","initMouseEvent","determineEventType","window","screenX","screenY","clientX","clientY","forwardedTouchEvent","dispatchEvent","tagName","focus","setSelectionRange","value","updateScrollParent","scrollParent","parentElement","fastClickScrollParent","contains","scrollHeight","offsetHeight","fastClickLastScrollTop","scrollTop","getTargetElementFromEventTarget","eventTarget","nodeType","TEXT_NODE","parentNode","selection","targetTouches","getSelection","rangeCount","isCollapsed","identifier","preventDefault","timeStamp","pageX","pageY","lastClickTime","touchHasMoved","boundary","Math","abs","findControl","labelElement","undefined","control","htmlFor","getElementById","querySelector","forElement","targetTagName","cancelNextClick","elementFromPoint","pageXOffset","pageYOffset","top","cancelable","stopPropagation","permitted","detail","destroy","metaViewport","chromeVersion","blackberryVersion","firefoxVersion","ontouchstart","exec","content","documentElement","scrollWidth","outerWidth","match","style","msTouchAction","touchAction","attach","define","amd","module","exports","angular","provider","$locationProvider","$get","$document","$location","currentPath","path","links","link","element","href","attr","removeClass","html5Mode","enabled","linkPrefix","hashPrefix","slice","charAt","split","addClass","run","$rootScope","setupActiveLinks","$on","Capture","resetAll","factory","$compile","yielders","name","hasOwnProperty","resetYielder","b","setContentFor","defaultContent","defaultScope","putYielder","yielder","getYielder","removeYielder","scope","html","contents","directive","compile","tElem","tAttrs","rawContent","uiDuplicate","remove","elem","attrs","uiContentFor","uiYieldTo","on","$window","orgHandler","body","forEach","directiveName","restrict","parent","$timeout","isAncestorOrSelf","outerClickFn","outerClickIf","handleOuterClick","$apply","$event","stopWatching","noop","t","$watch","cancel","unbind","bindOuterClick","$parse","uiOuterClick","uiOuterClickIf","$log","values","statusesMeta","scopes","exclusionGroups","initialize","id","isNewScope","defaultValue","exclusionGroup","$id","push","references","extend","$broadcast","setOne","ids","status","Object","keys","prev","warn","setMany","map","set","idOrMap","isObject","turnOn","eg","egStatuses","item","turnOff","toggle","get","isActive","Boolean","active","isUndefined","has","referenceCount","equals","eq","uiBindEvent","eventNames","fn","SharedState","priority","uiSharedState","defaultValueExpr","uiDefault","$eval","uiExclusionGroup","uiState","methodName","toUpperCase","$interpolate","needsInterpolation","exprFn","$scope","res","interpolateFn","arg","uiTriggers","parseScopeContext","vars","trim","Error","mixScopeContext","scopeVars","key","alias","reduce","nextKey","parseUiCondition","expr","parseFn","uiScopeContext","$animate","getBlockNodes","nodes","node","endNode","blockNodes","nextSibling","multiElement","transclude","terminal","$$tlb","$element","$attr","ctrl","$transclude","block","childScope","previousElements","uiIfFn","clone","newScope","createComment","uiIf","enter","$destroy","done","nga","leave","then","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","uiHideFn","tempClasses","uiShowFn","uiClassFn","classesToAdd","classesToRemove","Ui","preventTouchmoveDefaultsCb","e","allowTouchmoveEventFlag","originalEvent","allowTouchmoveDefault","fnTrue","condition","allowTouchmoveDefaultCallback","off","w","doc","docElem","enabledClassName","canBeFilledWithPoly","nativeOverflow","screen","width","ua","webkit","wkversion","wkLte534","RegExp","$1","blackberry","parseFloat","overthrow","replace","forget","support","o","scrollIndicatorClassName","configure","closest","ascend","start","lastDown","lastRight","inputs","lastTops","lastLefts","resetVertTracking","resetHorTracking","setPointers","val","querySelectorAll","il","pointerEvents","changeScrollTarget","startEvent","tEnd","newTarget","touchchild","initEvent","intercept","touches","touchStartE","scrollT","scrollL","scrollLeft","height","offsetWidth","startY","startX","move","ty","tx","down","right","unshift","pop","end","setTimeout","$rootElement","hasClass","side","getTouchY","controller","scrollableContent","scrollable","allowUp","allowDown","lastY","setupTouchstart","clientHeight","currY","up","scrollTo","elementOrNumber","marginTop","isNumber","offsetParent","offsetTop","require","h1","h2","scrollableHeader","getBoundingClientRect","bottom","uiScrollTop","uiScrollBottom","reached","Top","Bottom","el","parentStyle","adjustParentPadding","styles","getComputedStyle","margin","parseInt","marginBottom","interval","setInterval","clearInterval","defaultStateName","parentClass","visibleClass","activeClass","stateName","trackAsSearchParam","uiTrackAsSearchParam","outerClickCb","defaultActive","search","closeOnOuterClicks","$injector","$drag","model","changeExpr","unwatchDisabled","handle","append","unwatch","setModel","$parent","clickCb","transform","TRANSLATE_INSIDE","removeAttr","rh","re","left"],"mappings":"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","file":"mobile-angular-ui.min.js","sourcesContent":["(function() {\n 'use strict';\n var module = angular.module('mobile-angular-ui.core.fastclick', []);\n\n module.run(['$window', function($window) {\n\n // Temporarly bugfix in overthrow/fastclick:\n var orgHandler = FastClick.prototype.onTouchEnd;\n\n // Some old versions of Android don't have Function.prototype.bind\n function bind(method, context) {\n return function() {\n return method.apply(context, arguments);\n };\n }\n\n FastClick.prototype.onTouchEnd = function(event) {\n\n if (!event.changedTouches) {\n event.changedTouches = [{}];\n }\n\n orgHandler = bind(orgHandler, this);\n orgHandler(event);\n };\n\n FastClick.attach($window.document.body);\n\n }]);\n\n angular.forEach(['select', 'input', 'textarea'], function(directiveName) {\n\n module.directive(directiveName, function() {\n return {\n restrict: 'E',\n compile: function(elem) {\n elem.addClass('needsclick');\n }\n };\n });\n });\n})();\n","/**\n * @module mobile-angular-ui.core.activeLinks\n * @description\n *\n * `mobile-angular-ui.activeLinks` module sets up `.active` class for `a`\n * elements those `href` attribute matches the current angular `$location` url.\n * It takes care of excluding both search part and hash part from comparison.\n *\n * `.active` classes are added/removed each time one of `$locationChangeSuccess`\n * or `$includeContentLoaded` is fired.\n *\n * ## Usage\n *\n * Just declare it as a dependency to your app unless you have already included\n * one of its super-modules.\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui.core.activeLinks']);\n * ```\n *\n * **NOTE:** if you are using it without Bootstrap you may need to add some css\n * to your stylesheets to reflect the activation state of links. I.e.\n *\n * ``` css\n * a.active {\n * color: blue;\n * }\n * ```\n */\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui.core.activeLinks', [])\n .provider('setupActiveLinks', ['$locationProvider', function($locationProvider) {\n this.$get = [\n '$document',\n '$location',\n function($document, $location) {\n return function() {\n var currentPath = $location.path();\n var links = $document[0].links;\n\n for (var i = 0; i < links.length; i++) {\n var link = angular.element(links[i]);\n var href = link.attr('href');\n\n if (!href) {\n return link.removeClass('active');\n }\n\n var html5Mode = $locationProvider.html5Mode().enabled;\n if (!html5Mode) {\n var linkPrefix = '#' + $locationProvider.hashPrefix();\n if (href.slice(0, linkPrefix.length) === linkPrefix) {\n href = href.slice(linkPrefix.length);\n } else {\n return link.removeClass('active');\n }\n }\n\n if (href.charAt(0) !== '/') {\n return link.removeClass('active');\n }\n\n href = href.split('#')[0].split('?')[0];\n\n if (href === currentPath) {\n link.addClass('active');\n } else {\n link.removeClass('active');\n }\n }\n };\n }];\n }])\n .run(['$rootScope', 'setupActiveLinks', function($rootScope, setupActiveLinks) {\n $rootScope.$on('$locationChangeSuccess', setupActiveLinks);\n $rootScope.$on('$includeContentLoaded', setupActiveLinks);\n }]);\n})();\n","/**\n * @module mobile-angular-ui.core.capture\n * @description\n *\n * The `capture` module exposes directives to var you extract markup which can\n * be used in other parts of a template using `uiContentFor` and `uiYieldTo`\n * directives.\n *\n * It provides a way to move or clone a block of markup to other parts of the document.\n *\n * This method is particularly useful to setup parts of the layout within an\n * angular view. Since blocks of html are transplanted within their original\n * `$scope` is easy to create layout interactions depending on the context.\n * Some tipical task you can accomplish with these directives are: _setup\n * the navbar title depending on the view_ or _place a submit button for a\n * form inside a navbar_.\n *\n * ## Usage\n *\n * Declare it as a dependency to your app unless you have already included some\n * of its super-modules.\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui']);\n * ```\n *\n * Or\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui']);\n * ```\n *\n * Or\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui.core.capture']);\n * ```\n *\n * Use `ui-yield-to` as a placeholder.\n *\n * ``` html\n * \n *\n *
\n *
\n * Default Title\n *
\n *
\n *\n *
\n * \n *
\n * ```\n *\n * Use `ui-content-for` inside any view to populate the `ui-yield-to` content.\n *\n * ``` html\n * \n *\n *
\n * My View Title\n *
\n * ```\n *\n * Since the original scope is preserved you can use directives inside\n * `ui-content-for` blocks to interact with the current scope. In the following\n * example we will add a navbar button to submit a form inside a nested view.\n *\n * ``` html\n * \n *\n *
\n *
\n *
\n *
\n *\n *
\n * \n *
\n * ```\n *\n * ``` html\n * \n *\n *
\n *\n *
\n * \n *
\n *\n *
\n * \n *
\n *\n *
\n * ```\n *\n * ``` javascript\n * app.controller('newCustomerController', function($scope, Store){\n * $scope.customer = {};\n * $scope.createCustomer = function(){\n * Store.create($scope.customer);\n * // ...\n * }\n * });\n * ```\n *\n * If you wish you can also duplicate markup instead of move it. Just add `duplicate` parameter to `uiContentFor` directive to specify this behaviour.\n *\n * ``` html\n *
\n * \n *
\n * ```\n */\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui.core.capture', [])\n\n .run([\n 'Capture',\n '$rootScope',\n function(Capture, $rootScope) {\n $rootScope.$on('$routeChangeSuccess', function() {\n Capture.resetAll();\n });\n }\n ])\n\n .factory('Capture', [\n '$compile',\n function($compile) {\n var yielders = {};\n\n return {\n yielders: yielders,\n\n resetAll: function() {\n for (var name in yielders) {\n if (yielders.hasOwnProperty(name)) {\n this.resetYielder(name);\n }\n }\n },\n\n resetYielder: function(name) {\n var b = yielders[name];\n this.setContentFor(name, b.defaultContent, b.defaultScope);\n },\n\n putYielder: function(name, element, defaultScope, defaultContent) {\n var yielder = {};\n yielder.name = name;\n yielder.element = element;\n yielder.defaultContent = defaultContent || '';\n yielder.defaultScope = defaultScope;\n yielders[name] = yielder;\n },\n\n getYielder: function(name) {\n return yielders[name];\n },\n\n removeYielder: function(name) {\n delete yielders[name];\n },\n\n setContentFor: function(name, content, scope) {\n var b = yielders[name];\n if (!b) {\n return;\n }\n b.element.html(content);\n $compile(b.element.contents())(scope);\n }\n\n };\n }\n ])\n\n /**\n * @directive uiContentFor\n * @restrict A\n * @description\n *\n * `ui-content-for` makes inner contents to replace the corresponding\n * `ui-yield-to` placeholder contents.\n *\n * `uiContentFor` is intended to be used inside a view in order to populate outer placeholders.\n * Any content you send to placeholders via `ui-content-for` is\n * reverted to placeholder defaults after view changes (ie. on `$routeChangeStart`).\n *\n * @param {string} uiContentFor The id of the placeholder to be replaced\n * @param {boolean} uiDuplicate If present duplicates the content instead of moving it (default to `false`)\n *\n */\n .directive('uiContentFor', [\n 'Capture',\n function(Capture) {\n return {\n compile: function(tElem, tAttrs) {\n var rawContent = tElem.html();\n if (tAttrs.uiDuplicate === null || tAttrs.uiDuplicate === undefined) {\n // no need to compile anything!\n tElem.html('');\n tElem.remove();\n }\n return function(scope, elem, attrs) {\n Capture.setContentFor(attrs.uiContentFor, rawContent, scope);\n };\n }\n };\n }\n ])\n\n /**\n * @directive uiYieldTo\n * @restrict A\n * @description\n *\n * `ui-yield-to` defines a placeholder which contents will be further replaced by `ui-content-for` directive.\n *\n * Inner html is considered to be a default. Default is restored any time `$routeChangeStart` happens.\n *\n * @param {string} uiYieldTo The unique id of this placeholder.\n *\n */\n .directive('uiYieldTo', [\n '$compile', 'Capture', function($compile, Capture) {\n return {\n link: function(scope, element, attr) {\n Capture.putYielder(attr.uiYieldTo, element, scope, element.html());\n\n element.on('$destroy', function() {\n Capture.removeYielder(attr.uiYieldTo);\n });\n\n scope.$on('$destroy', function() {\n Capture.removeYielder(attr.uiYieldTo);\n });\n }\n };\n }\n ]);\n\n})();\n","/**\n *\n * @module mobile-angular-ui.core.outerClick\n * @description\n *\n * Provides a directive to specifiy a behaviour when click/tap events\n * happen outside an element. This can be easily used\n * to implement eg. __close on outer click__ feature for a dropdown.\n *\n * ## Usage\n *\n * Declare it as a dependency to your app unless you have already\n * included some of its super-modules.\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui']);\n * ```\n *\n * Or\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui.core']);\n * ```\n *\n * Or\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui.core.outerClick']);\n * ```\n *\n * Use `ui-outer-click` to define an expression to evaluate when an _Outer Click_ event happens.\n * Use `ui-outer-click-if` parameter to define a condition to enable/disable the listener.\n *\n * ``` html\n *
\n * \n * \n * \n * \n *\n *
  • Action
  • \n *
  • Another action
  • \n *
  • Something else here
  • \n *
  • \n *
  • Separated link
  • \n * \n *
    \n * ```\n */\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui.core.outerClick', [])\n\n .factory('_mauiIsAncestorOrSelf', function() {\n return function(element, target) {\n var parent = element;\n while (parent.length > 0) {\n if (parent[0] === target[0]) {\n parent = null;\n return true;\n }\n parent = parent.parent();\n }\n parent = null;\n return false;\n };\n })\n\n /**\n * @service bindOuterClick\n * @as function\n *\n * @description\n * This is a service function that binds a callback to be conditionally executed\n * when a click event happens outside a specified element.\n *\n * Ie.\n *\n * ``` js\n * app.directive('myDirective', function('bindOuterClick'){\n * return {\n * link: function(scope, element) {\n * bindOuterClick(element, function(scope, extra){\n * alert('You clicked ouside me!');\n * }, function(e){\n * return element.hasClass('disabled') ? true : false;\n * });\n * }\n * };\n * });\n * ```\n * @scope {scope} the scope to eval callbacks\n * @param {DomElement|$element} element The element to bind to.\n * @param {function} callback A `function(scope, options)`, usually the result of `$parse`, that is called when an _outer click_ event happens.\n * @param {string|function} condition Angular `$watch` expression to decide whether to run `callback` or not.\n */\n .factory('bindOuterClick', [\n '$document',\n '$timeout',\n '_mauiIsAncestorOrSelf',\n function($document, $timeout, isAncestorOrSelf) {\n\n return function(scope, element, outerClickFn, outerClickIf) {\n var handleOuterClick = function(event) {\n if (!isAncestorOrSelf(angular.element(event.target), element)) {\n scope.$apply(function() {\n outerClickFn(scope, {$event: event});\n });\n }\n };\n\n var stopWatching = angular.noop;\n var t = null;\n\n if (outerClickIf) {\n stopWatching = scope.$watch(outerClickIf, function(value) {\n $timeout.cancel(t);\n\n if (value) {\n // prevents race conditions\n // activating with other click events\n t = $timeout(function() {\n $document.on('click tap', handleOuterClick);\n }, 0);\n\n } else {\n $document.unbind('click tap', handleOuterClick);\n }\n });\n } else {\n $timeout.cancel(t);\n $document.on('click tap', handleOuterClick);\n }\n\n scope.$on('$destroy', function() {\n stopWatching();\n $document.unbind('click tap', handleOuterClick);\n });\n };\n }\n ])\n\n /**\n * @directive outerClick\n *\n * @description\n * Evaluates an expression when an _Outer Click_ event happens.\n *\n * @param {expression} uiOuterClick Expression to evaluate when an _Outer Click_ event happens.\n * @param {expression} uiOuterClickIf Condition to enable/disable the listener. Defaults to `true`.\n */\n .directive('uiOuterClick', [\n 'bindOuterClick',\n '$parse',\n function(bindOuterClick, $parse) {\n return {\n restrict: 'A',\n compile: function(elem, attrs) {\n var outerClickFn = $parse(attrs.uiOuterClick);\n var outerClickIf = attrs.uiOuterClickIf;\n return function(scope, elem) {\n bindOuterClick(scope, elem, outerClickFn, outerClickIf);\n };\n }\n };\n }\n ]);\n})();\n","(function() {\n 'use strict';\n /**\n * @module mobile-angular-ui.core.sharedState\n *\n * @description\n * `mobile-angular-ui.core.sharedState` is expose the homonymous service\n * `SharedState` and a group of directives to access it.\n *\n * `SharedState` allows to use elementary angular or angularish directives\n * to create interactive components.\n *\n * Ie.\n *\n * ``` html\n *
    \n * Tab1\n * Tab2\n * Tab3\n *
    \n *
    \n *
    Tab1
    \n *
    Tab2
    \n *
    Tab3
    \n *
    \n * ```\n *\n * Using `SharedState` you will be able to:\n *\n * - Create interactive components without having to write javascript code\n * - Have your controller free from UI logic\n * - Separe `ng-click` triggering application logic from those having a visual effect only\n * - Export state of components to urls\n * - Easily make components comunicate each other\n *\n * Also note that:\n *\n * Data structures retaining statuses will stay outside angular scopes\n * thus they are not evaluated against digest cycle until its necessary.\n * Also although statuses are sort of global variables `SharedState` will\n * take care of disposing them when no scopes are requiring them anymore.\n *\n * A set of `ui-*` directives are available to interact with `SharedState`\n * module and will hopefully var you spare your controllers and your time\n * for something that is more meaningful than this:\n *\n * ``` js\n * $scope.activeTab = 1;\n *\n * $scope.setActiveTab = function(n) {\n * $scope.activeTab = n;\n * };\n * ```\n *\n * ## Usage\n *\n * Declare it as a dependency to your app unless you have already included some\n * of its super-modules.\n *\n * ```\n * angular.module('myApp', ['mobile-angular-ui.core.sharedState']);\n * ```\n *\n * Use `ui-shared-state` directive to require/initialize a state from the target element scope\n *\n * **Example.** Tabs\n *\n * \n *\n * **Example.** Custom components\n *\n * \n *\n * NOTE: `ui-toggle/set/turnOn/turnOff` responds to `click/tap` without\n * stopping propagation so you can use them along with ng-click too.\n * You can also change events to respond to with `ui-triggers` attribute.\n *\n * Any `SharedState` method is exposed through `Ui` object in `$rootScope`.\n * So you could always do `ng-click=\"Ui.turnOn('myVar')\"`.\n *\n * Since `SharedState` is a service you can initialize/set statuses through\n * controllers too:\n *\n * ``` js\n * app.controller('myController', function($scope, SharedState){\n * SharedState.initialize($scope, \"activeTab\", 3);\n * });\n * ```\n *\n * As well as you can use `ui-default` for that:\n *\n * ``` html\n *
    \n * ```\n *\n */\n var module = angular.module('mobile-angular-ui.core.sharedState', []);\n\n /**\n * @ngdoc service\n * @class SharedState\n *\n * @description\n *\n * A `SharedState` state can be considered as a global variable identified by an `id`.\n *\n * `SharedState` service exposes methods to interact with statuses to create,\n * read and update states.\n *\n * It acts as a BUS between UI elements to share UI related state that is\n * automatically disposed when all scopes requiring it are destroyed.\n *\n * eg.\n *\n * ``` js\n * app.controller('controller1', function($scope, SharedState){\n * SharedState.initialize($scope, 'myId');\n * });\n *\n * app.controller('controller2', function(SharedState){\n * SharedState.toggle('myId');\n * });\n * ```\n *\n * Data structures retaining statuses will stay outside angular scopes thus\n * they are not evaluated against digest cycle until its necessary. Also\n * although statuses are sort of global variables `SharedState` will take\n * care of disposing them when no scopes are requiring them anymore.\n *\n * A set of `ui-*` directives are available to interact with `SharedState`\n * module and will hopefully var you spare your controllers and your time for\n * something that is more meaningful than this:\n *\n * ``` js\n * $scope.activeTab = 1;\n *\n * $scope.setActiveTab = function(n) {\n * $scope.activeTab = n;\n * };\n * ```\n *\n */\n\n /**\n * @event 'mobile-angular-ui.state.initialized.ID'\n * @shortname initialized\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Broadcasted on `$rootScope` when `#initialize` is called for a new state not\n * referenced by any scope currently.\n *\n * @param {any} currentValue The value with which this state has been initialized\n *\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n\n /**\n * @event 'mobile-angular-ui.state.destroyed.ID'\n * @shortname destroyed\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Broadcasted on `$rootScope` when a state is destroyed.\n *\n */\n\n /**\n * @event 'mobile-angular-ui.state.changed.ID'\n * @shortname changed\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Broadcasted on `$rootScope` the value of a state changes.\n *\n * ``` js\n * $scope.$on('mobile-angular-ui.state.changed.uiSidebarLeft', function(e, newVal, oldVal) {\n * if (newVal === true) {\n * console.log('sidebar opened');\n * } else {\n * console.log('sidebar closed');\n * }\n * });\n * ```\n *\n * @param {any} newValue\n * @param {any} oldValue\n *\n */\n\n module.factory('SharedState', [\n '$rootScope', '$log',\n function($rootScope, $log) {\n var values = {}; // values, context object for evals\n var statusesMeta = {}; // status info\n var scopes = {}; // scopes references\n var exclusionGroups = {}; // support exclusive boolean sets\n\n return {\n /**\n * @function initialize\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Initialize, or require if already intialized, a state identified by `id` within the provided `scope`, making it available to the rest of application.\n *\n * A `SharedState` is bound to one or more scopes. Each time\n * `initialize` is called for an angular `scope` this will be bound to\n * the `SharedState` and a reference count is incremented to allow\n * garbage collection.\n *\n * Reference count is decremented once the scope is destroyed. When the counter reach 0 the state will be disposed.\n *\n * @param {scope} scope The scope to bound this state\n * @param {string} id The unique name of this state\n * @param {object} [options] Options\n * @param {object} [options.defaultValue] the initialization value, it is taken into account only if the state `id` is not already initialized\n * @param {string} [options.exclusionGroup] Specifies an exclusion group\n * for the state. This means that for boolean operations (ie. toggle,\n * turnOn, turnOf) when this state is set to `true`, any other state\n * that is in the same `exclusionGroup` will be set to `false`.\n */\n initialize: function(scope, id, options) {\n options = options || {};\n\n var isNewScope = scopes[scope] === undefined;\n var defaultValue = options.defaultValue;\n var exclusionGroup = options.exclusionGroup;\n\n scopes[scope.$id] = scopes[scope.$id] || [];\n scopes[scope.$id].push(id);\n\n if (!statusesMeta[id]) { // is a brand new state\n // not referenced by any\n // scope currently\n\n statusesMeta[id] = angular.extend({}, options, {references: 1});\n\n $rootScope.$broadcast('mobile-angular-ui.state.initialized.' + id, defaultValue);\n\n if (defaultValue !== undefined) {\n this.setOne(id, defaultValue);\n }\n\n if (exclusionGroup) {\n // Exclusion groups are sets of statuses references\n exclusionGroups[exclusionGroup] = exclusionGroups[exclusionGroup] || {};\n exclusionGroups[exclusionGroup][id] = true;\n }\n\n } else if (isNewScope) { // is a new reference from\n // a different scope\n statusesMeta[id].references++;\n }\n scope.$on('$destroy', function() {\n var ids = scopes[scope.$id] || [];\n for (var i = 0; i < ids.length; i++) {\n var status = statusesMeta[ids[i]];\n\n if (status.exclusionGroup) {\n delete exclusionGroups[status.exclusionGroup][ids[i]];\n if (Object.keys(exclusionGroups[status.exclusionGroup]).length === 0) {\n delete exclusionGroups[status.exclusionGroup];\n }\n }\n\n status.references--;\n if (status.references <= 0) {\n delete statusesMeta[ids[i]];\n delete values[ids[i]];\n $rootScope.$broadcast('mobile-angular-ui.state.destroyed.' + id);\n }\n }\n delete scopes[scope.$id];\n });\n },\n\n /**\n * @function setOne\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Set the value of the state identified by `id` to the `value` parameter.\n *\n * @param {string} id Unique identifier for state\n * @param {any} value New value for this state\n */\n setOne: function(id, value) {\n if (statusesMeta[id] !== undefined) {\n var prev = values[id];\n values[id] = value;\n if (prev !== value) {\n $rootScope.$broadcast('mobile-angular-ui.state.changed.' + id, value, prev);\n }\n return value;\n }\n $log.warn('Warning: Attempt to set uninitialized shared state: ' + id);\n },\n\n /**\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @function setMany\n * @description\n *\n * Set multiple statuses at once. ie.\n *\n * ```\n * SharedState.setMany({ activeTab: 'firstTab', sidebarIn: false });\n * ```\n *\n * @param {object} object An object of the form `{state1: value1, ..., stateN: valueN}`\n */\n setMany: function(map) {\n angular.forEach(map, function(value, id) {\n this.setOne(id, value);\n }, this);\n },\n\n /**\n * @function set\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * A shorthand for both `setOne` and `setMany`.\n * When called with only one parameter that is an object\n * it is the same of `setMany`, otherwise is the\n * same of `setOne`.\n *\n * @param {string|object} idOrMap A state id or a `{state: value}` map object.\n * @param {any} [value] The value to assign in case idOrMap is a string.\n */\n set: function(idOrMap, value) {\n if (!idOrMap) {\n return;\n } else if (angular.isObject(idOrMap)) {\n this.setMany(idOrMap);\n } else {\n this.setOne(idOrMap, value);\n }\n },\n\n /**\n * @function turnOn\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Set shared state identified by `id` to `true`. If the\n * shared state has been initialized with `exclusionGroup`\n * option it will also turn off (set to `false`) all other\n * statuses from the same exclusion group.\n *\n * @param {string} id The unique name of this state\n */\n turnOn: function(id) {\n // Turns off other statuses belonging to the same exclusion group.\n var eg = statusesMeta[id] && statusesMeta[id].exclusionGroup;\n if (eg) {\n var egStatuses = Object.keys(exclusionGroups[eg]);\n for (var i = 0; i < egStatuses.length; i++) {\n var item = egStatuses[i];\n if (item !== id) {\n this.turnOff(item);\n }\n }\n }\n return this.setOne(id, true);\n },\n\n /**\n * @function turnOff\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Set shared state identified by `id` to `false`.\n *\n * @param {string} id The unique name of this state\n */\n turnOff: function(id) {\n return this.setOne(id, false);\n },\n\n /**\n * @function toggle\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * If current value for shared state identified by `id` evaluates\n * to `true` it calls `turnOff` on it otherwise calls `turnOn`.\n * Be aware that it will take into account `exclusionGroup` option.\n * See `#turnOn` and `#initialize` for more.\n *\n * @param {string} id The unique name of this state\n */\n toggle: function(id) {\n return this.get(id) ? this.turnOff(id) : this.turnOn(id);\n },\n\n /**\n * @function get\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n *\n * @description\n * Returns the current value of the state identified by `id`.\n *\n * @param {string} id The unique name of this state\n * @returns {any}\n */\n get: function(id) {\n return statusesMeta[id] && values[id];\n },\n\n /**\n * @function isActive\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Return `true` if the boolean conversion of `#get(id)` evaluates to `true`.\n *\n * @param {string} id The unique name of this state\n * @returns {bool}\n */\n isActive: function(id) {\n return Boolean(this.get(id));\n },\n\n /**\n * @function active\n * @alias mobile-angular-ui.core.sharedState~SharedState.isActive\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Alias for `#isActive`.\n *\n * @param {string} id The unique name of this state\n * @returns {bool}\n */\n active: function(id) {\n return this.isActive(id);\n },\n\n /**\n * @function isUndefined\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @description\n *\n * Return `true` if state identified by `id` is not defined.\n *\n * @param {string} id The unique name of this state\n * @returns {bool}\n */\n isUndefined: function(id) {\n return statusesMeta[id] === undefined || this.get(id) === undefined;\n },\n\n /**\n * Returns `true` if state identified by `id` exsists.\n *\n * @param {string} id The unique name of this state\n * @returns {bool}\n *\n * @function has\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n has: function(id) {\n return statusesMeta[id] !== undefined;\n },\n\n /**\n * Returns the number of references of a status.\n *\n * @param {string} id The unique name of this state\n * @returns {integer}\n *\n * @function referenceCount\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n referenceCount: function(id) {\n var status = statusesMeta[id];\n return status === undefined ? 0 : status.references;\n },\n\n /**\n * Returns `true` if `#get(id)` is exactly equal (`===`) to `value` param.\n *\n * @param {string} id The unique name of this state\n * @param {any} value The value for comparison\n * @returns {bool}\n *\n * @function equals\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n equals: function(id, value) {\n return this.get(id) === value;\n },\n\n /**\n * Alias for `#equals`\n *\n * @param {string} id The unique name of this state\n * @param {any} value The value for comparison\n * @returns {bool}\n *\n * @function eq\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n * @alias mobile-angular-ui.core.sharedState~SharedState.equals\n */\n eq: function(id, value) {\n return this.equals(id, value);\n },\n\n /**\n * Returns an object with all the status values currently stored.\n * It has the form of `{statusId: statusValue}`.\n *\n * Bear in mind that in order to spare resources it currently\n * returns just the internal object retaining statuses values.\n * Thus it is not intended to be modified and direct changes to it will be not tracked or notified.\n *\n * Just clone before apply any change to it.\n *\n * @returns {object}\n *\n * @function values\n * @memberOf mobile-angular-ui.core.sharedState~SharedState\n */\n values: function() {\n return values;\n },\n\n exclusionGroups: function() {\n return exclusionGroups;\n }\n };\n }\n ]);\n\n var uiBindEvent = function(scope, element, eventNames, fn) {\n eventNames = eventNames || 'click tap';\n element.on(eventNames, function(event) {\n scope.$apply(function() {\n fn(scope, {$event: event});\n });\n });\n };\n\n /**\n * Calls `SharedState#initialize` on the scope relative to the element using it.\n *\n * @param {string} uiState The shared state id\n * @param {expression} [uiDefault] the default value\n *\n * @directive uiSharedState\n */\n module.directive('uiSharedState', [\n 'SharedState', function(SharedState) {\n return {\n restrict: 'EA',\n priority: 601, // more than ng-if\n link: function(scope, elem, attrs) {\n var id = attrs.uiSharedState || attrs.id;\n var defaultValueExpr = attrs.uiDefault || attrs.default;\n var defaultValue = defaultValueExpr ? scope.$eval(defaultValueExpr) : undefined;\n\n SharedState.initialize(scope, id, {\n defaultValue: defaultValue,\n exclusionGroup: attrs.uiExclusionGroup\n });\n }\n };\n }\n ]);\n\n /**\n * Alias for uiSharedState. **Deprecated** since it clashes with\n * [UI-Router](https://ui-router.github.io/) `uiState` directive.\n *\n * @deprecated\n * @param {string} uiState The shared state id\n * @param {expression} [uiDefault] the default value\n *\n * @directive uiState\n */\n module.directive('uiState', [\n 'SharedState', function(SharedState) {\n return {\n restrict: 'EA',\n priority: 601, // more than ng-if\n link: function(scope, elem, attrs) {\n var id = attrs.uiState || attrs.id;\n var defaultValueExpr = attrs.uiDefault || attrs.default;\n var defaultValue = defaultValueExpr ? scope.$eval(defaultValueExpr) : undefined;\n\n SharedState.initialize(scope, id, {\n defaultValue: defaultValue,\n exclusionGroup: attrs.uiExclusionGroup\n });\n }\n };\n }\n ]);\n\n angular.forEach(['toggle', 'turnOn', 'turnOff', 'set'],\n function(methodName) {\n var directiveName = 'ui' + methodName[0].toUpperCase() + methodName.slice(1);\n\n /**\n * Calls `SharedState#toggle` when triggering events happens on the element using it.\n *\n * @param {string} uiToggle the target shared state\n * @param {expression} uiDefault the default value\n *\n * @directive uiToggle\n */\n\n /**\n * @function uiTurnOn\n *\n * @description\n * Calls `SharedState#turnOn` when triggering events happens on the element using it.\n *\n *\n * @ngdoc directive\n *\n * @param {string} uiTurnOn the target shared state\n * @param {expression} uiDefault the default value\n */\n\n /**\n * @function uiTurnOff\n *\n * @description\n * Calls `SharedState#turnOff` when triggering events happens on the element using it.\n *\n * @ngdoc directive\n *\n * @param {string} uiTurnOff the target shared state\n * @param {string} [uiTriggers='click tap'] the event triggering the call.\n */\n\n /**\n * @function uiSet\n *\n * @description\n * Calls `SharedState#set` when triggering events happens on the element using it.\n *\n * @ngdoc directive\n *\n * @param {object} uiSet The object to pass to SharedState#set\n * @param {string} [uiTriggers='click tap'] the event triggering the call.\n */\n\n module.directive(directiveName, [\n '$parse',\n '$interpolate',\n 'SharedState',\n function($parse, $interpolate, SharedState) {\n var method = SharedState[methodName];\n return {\n restrict: 'A',\n priority: 1, // This would make postLink calls happen after ngClick\n // (and similar) ones, thus intercepting events after them.\n //\n // This will prevent eventual ng-if to detach elements\n // before ng-click fires.\n\n compile: function(elem, attrs) {\n var attr = attrs[directiveName];\n var needsInterpolation = attr.match(/\\{\\{/);\n\n var exprFn = function($scope) {\n var res = attr;\n if (needsInterpolation) {\n var interpolateFn = $interpolate(res);\n res = interpolateFn($scope);\n }\n if (methodName === 'set') {\n res = ($parse(res))($scope);\n }\n return res;\n };\n\n return function(scope, elem, attrs) {\n var callback = function() {\n var arg = exprFn(scope);\n return method.call(SharedState, arg);\n };\n uiBindEvent(scope, elem, attrs.uiTriggers, callback);\n };\n }\n };\n }\n ]);\n });\n\n /**\n * @name uiScopeContext\n * @inner\n * @description\n *\n * `uiScopeContext` is not a directive, but a parameter common to any of the\n * `ui-*` directives in this module.\n *\n * By default all `ui-*` conditions in this module evaluates in the context of\n * `SharedState` only, thus scope variable are not accessible. To use them you have\n * two options:\n *\n * #### 1. pre-interpolation\n *\n * You can use pre-interpolation in expression attribute. For instance the following syntax\n * is ligit:\n *\n * ``` html\n *
    \n * ```\n *\n * In this case `idx` value is taken from scope and embedded into\n * conditions before parse them.\n *\n * This works as expected and is fine for the most cases, but it has a little caveat:\n *\n * The condition has to be re-parsed at each digest loop and has to walk scopes\n * in watchers.\n *\n * #### 2. uiScopeContext\n *\n * If you are concerned about performance issues using the first approach\n * `uiScopeContext` is a more verbose but also lightweight alternative\n * to accomplish the same.\n *\n * It allows to use current scope vars inside `ui-*` conditions, leaving\n * other scope vars (or the entire scope if not present) apart from the\n * condition evaluation process.\n *\n * Hopefully this will keep evaluation running against a flat and small data\n * structure instead of taking into account the whole scope.\n *\n * It is a list `scopeVar[ as aliasName] [, ...]` specifing one of more scope\n * variables to take into account when evaluating conditions. ie:\n *\n * ``` html\n * \n *
    \n *
    \n * \n *
    \n *
    \n * ```\n *\n * ``` html\n *
    \n *
    \n * ```\n *\n * Be aware that scope vars will take precedence over sharedStates so,\n * in order to avoid name clashes you can use 'as' to refer to scope vars\n * with a different name in conditions:\n *\n * ``` html\n *
    \n *
    \n * ```\n */\n var parseScopeContext = function(attr) {\n if (!attr || attr === '') {\n return [];\n }\n var vars = attr ? attr.trim().split(/ *, */) : [];\n var res = [];\n for (var i = 0; i < vars.length; i++) {\n var item = vars[i].split(/ *as */);\n if (item.length > 2 || item.length < 1) {\n throw new Error('Error parsing uiScopeContext=\"' + attr + '\"');\n }\n res.push(item);\n }\n return res;\n };\n\n var mixScopeContext = function(context, scopeVars, scope) {\n for (var i = 0; i < scopeVars.length; i++) {\n var key = scopeVars[i][0];\n var alias = scopeVars[i][1] || key;\n context[alias] = key.split('.').reduce(function(scope, nextKey) {\n return scope[nextKey];\n }, scope);\n }\n };\n\n var parseUiCondition = function(name, attrs, $scope, SharedState, $parse, $interpolate) {\n var expr = attrs[name];\n var needsInterpolation = expr.match(/\\{\\{/);\n var exprFn;\n\n if (needsInterpolation) {\n exprFn = function(context) {\n var interpolateFn = $interpolate(expr);\n var parseFn = $parse(interpolateFn($scope));\n return parseFn(context);\n };\n } else {\n exprFn = $parse(expr);\n }\n\n var uiScopeContext = parseScopeContext(attrs.uiScopeContext);\n return function() {\n var context;\n if (uiScopeContext.length) {\n context = angular.extend({}, SharedState.values());\n mixScopeContext(context, uiScopeContext, $scope);\n } else {\n context = SharedState.values();\n }\n return exprFn(context);\n };\n };\n\n /**\n * @ngdoc directive\n * @function uiIf\n *\n * @description\n * Same as `ngIf` but evaluates condition against `SharedState` statuses too\n *\n * @param {expression} uiIf A condition to decide wether to attach the\n * element to the dom\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]`\n * specifing one of more scope variables to take into account when\n * evaluating condition.\n */\n module.directive('uiIf', ['$animate', 'SharedState', '$parse', '$interpolate', function($animate, SharedState, $parse, $interpolate) {\n function getBlockNodes(nodes) {\n var node = nodes[0];\n var endNode = nodes[nodes.length - 1];\n var blockNodes = [node];\n do {\n node = node.nextSibling;\n if (!node) {\n break;\n }\n blockNodes.push(node);\n } while (node !== endNode);\n\n return angular.element(blockNodes);\n }\n\n return {\n multiElement: true,\n transclude: 'element',\n priority: 600,\n terminal: true,\n restrict: 'A',\n $$tlb: true,\n link: function($scope, $element, $attr, ctrl, $transclude) {\n var block;\n var childScope;\n var previousElements;\n var uiIfFn = parseUiCondition('uiIf', $attr, $scope, SharedState, $parse, $interpolate);\n\n $scope.$watch(uiIfFn, function uiIfWatchAction(value) {\n if (value) {\n if (!childScope) {\n $transclude(function(clone, newScope) {\n childScope = newScope;\n clone[clone.length++] = document.createComment(' end uiIf: ' + $attr.uiIf + ' ');\n // Note: We only need the first/last node of the cloned nodes.\n // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n // by a directive with templateUrl when its template arrives.\n block = {\n clone: clone\n };\n $animate.enter(clone, $element.parent(), $element);\n });\n }\n } else {\n if (previousElements) {\n previousElements.remove();\n previousElements = null;\n }\n if (childScope) {\n childScope.$destroy();\n childScope = null;\n }\n if (block) {\n previousElements = getBlockNodes(block.clone);\n var done = function() {\n previousElements = null;\n };\n var nga = $animate.leave(previousElements, done);\n if (nga) {\n nga.then(done);\n }\n block = null;\n }\n }\n });\n }\n };\n }]);\n\n /**\n * @ngdoc directive\n * @function uiHide\n *\n * @description\n * Same as `ngHide` but evaluates condition against `SharedState` statuses\n *\n * @param {expression} uiShow A condition to decide wether to hide the element\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]`\n * specifing one of more scope variables to take into account when evaluating condition.\n */\n module.directive('uiHide', ['$animate', 'SharedState', '$parse', '$interpolate', function($animate, SharedState, $parse, $interpolate) {\n var NG_HIDE_CLASS = 'ng-hide';\n var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';\n\n return {\n restrict: 'A',\n multiElement: true,\n link: function(scope, element, attr) {\n var uiHideFn = parseUiCondition('uiHide', attr, scope, SharedState, $parse, $interpolate);\n scope.$watch(uiHideFn, function uiHideWatchAction(value) {\n $animate[value ? 'addClass' : 'removeClass'](element, NG_HIDE_CLASS, {\n tempClasses: NG_HIDE_IN_PROGRESS_CLASS\n });\n });\n }\n };\n }]);\n\n /**\n * @ngdoc directive\n * @function uiShow\n *\n * @description\n * Same as `ngShow` but evaluates condition against `SharedState` statuses\n *\n * @param {expression} uiShow A condition to decide wether to show the element\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]`\n * specifing one of more scope variables to take into account when evaluating condition.\n */\n module.directive('uiShow', ['$animate', 'SharedState', '$parse', '$interpolate', function($animate, SharedState, $parse) {\n var NG_HIDE_CLASS = 'ng-hide';\n var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';\n\n return {\n restrict: 'A',\n multiElement: true,\n link: function(scope, element, attr) {\n var uiShowFn = parseUiCondition('uiShow', attr, scope, SharedState, $parse);\n scope.$watch(uiShowFn, function uiShowWatchAction(value) {\n $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {\n tempClasses: NG_HIDE_IN_PROGRESS_CLASS\n });\n });\n }\n };\n }]);\n\n /**\n * @ngdoc directive\n * @function uiClass\n *\n * @description\n * A simplified version of `ngClass` that evaluates in context of `SharedState`, it only suppors the `{'className': expr}` syntax.\n *\n * @param {expression} uiClass An expression that has to evaluate to an object\n * of the form `{'className': expr}`, where `expr` decides wether the class\n * should appear to element's class list.\n * @param {list} [uiScopeContext] A list `scopeVar[ as aliasName] [, ...]`\n * specifing one of more scope variables to take into account when evaluating\n * condition.\n */\n module.directive('uiClass', ['SharedState', '$parse', '$interpolate', function(SharedState, $parse) {\n return {\n restrict: 'A',\n link: function(scope, element, attr) {\n var uiClassFn = parseUiCondition('uiClass', attr, scope, SharedState, $parse);\n scope.$watch(uiClassFn, function uiClassWatchAction(value) {\n var classesToAdd = '';\n var classesToRemove = '';\n angular.forEach(value, function(expr, className) {\n if (expr) {\n classesToAdd += ' ' + className;\n } else {\n classesToRemove += ' ' + className;\n }\n classesToAdd = classesToAdd.trim();\n classesToRemove = classesToRemove.trim();\n if (classesToAdd.length) {\n element.addClass(classesToAdd);\n }\n if (classesToRemove.length) {\n element.removeClass(classesToRemove);\n }\n });\n }, true);\n }\n };\n }]);\n\n module.run([\n '$rootScope',\n 'SharedState',\n function($rootScope, SharedState) {\n $rootScope.Ui = SharedState;\n }\n ]);\n\n})();\n","/**\n * Provides directives and service to prevent touchmove default behaviour\n * for touch devices (ie. bounce on overscroll in IOS).\n *\n * #### Usage\n *\n * Use `ui-prevent-touchmove-defaults` directive on root element of your app:\n *\n * ``` html\n * \n * \n * \n * ```\n *\n * Doing so `touchmove.preventDefault` logic for inner elements is inverted,\n * so any `touchmove` default behaviour is automatically prevented.\n *\n * If you wish to allow the default behaviour, for example to allow\n * inner elements to scroll, you have to explicitly mark an event to allow\n * touchmove default.\n *\n * Mobile Angular UI already handles this for `scrollable` elements, so you don't have\n * to do anything in order to support scroll.\n *\n * If you wish to allow touchmove defaults for certain element under certain conditions\n * you can use the `allowTouchmoveDefault` service.\n *\n * ie.\n *\n * ``` js\n * // always allow touchmove default for an element\n * allowTouchmoveDefault(myelem);\n * ```\n *\n * ``` js\n * // allow touchmove default for an element only under certain conditions\n * allowTouchmoveDefault(myelem, function(touchmove){\n * return touchmove.pageY > 100;\n * });\n * ```\n *\n * @module mobile-angular-ui.core.touchmoveDefaults\n */\n(function() {\n 'use strict';\n var module = angular.module('mobile-angular-ui.core.touchmoveDefaults', []);\n\n module.directive('uiPreventTouchmoveDefaults', function() {\n var preventTouchmoveDefaultsCb = function(e) {\n // Get this flag from either the saved event if jQuery is being used, otherwise get it from the event itself.\n var allowTouchmoveEventFlag = e.originalEvent ? e.originalEvent.allowTouchmoveDefault : e.allowTouchmoveDefault;\n if (allowTouchmoveEventFlag !== true) {\n e.preventDefault();\n }\n };\n\n return {\n compile: function(element) {\n if ('ontouchmove' in document) {\n element.on('touchmove', preventTouchmoveDefaultsCb);\n }\n }\n };\n });\n\n /**\n * Bind a listener to an element to allow `touchmove` default behaviour\n * when `touchmove` happens inside the bound element.\n *\n * You can also provide a function to decide when to allow and\n * when to prevent it.\n *\n * ``` js\n * // always allow touchmove default\n * allowTouchmoveDefault(myelem);\n *\n * // allow touchmove default only under certain conditions\n * allowTouchmoveDefault(myelem, function(touchmove){\n * return touchmove.pageY > 100;\n * });\n * ```\n *\n * @param {Element|$element} element The element to bind.\n * @param {function} condition A `function(touchmove)⟶boolean` to decide\n * whether to allow default behavior or not.\n *\n * @service allowTouchmoveDefault\n * @as function\n * @returns function Function to unbind the listener\n */\n\n module.factory('allowTouchmoveDefault', function() {\n var fnTrue = function() {\n return true;\n };\n\n if ('ontouchmove' in document) {\n return function($element, condition) {\n condition = condition || fnTrue;\n\n var allowTouchmoveDefaultCallback = function(e) {\n if (condition(e)) {\n e.allowTouchmoveDefault = true;\n // jQuery normalizes the event object, need to put this property on the copied originalEvent.\n if (e.originalEvent) {\n e.originalEvent.allowTouchmoveDefault = true;\n }\n }\n };\n\n $element = angular.element($element);\n $element.on('touchmove', allowTouchmoveDefaultCallback);\n\n $element.on('$destroy', function() {\n $element.off('touchmove', allowTouchmoveDefaultCallback);\n $element = null;\n });\n\n return function() {\n if ($element) {\n $element.off('touchmove', allowTouchmoveDefaultCallback);\n }\n };\n };\n }\n\n return angular.noop;\n });\n\n})();\n","/**\n * @module mobile-angular-ui.core\n *\n * @description\n *\n * It has all the core functionalities of Mobile Angular UI. It aims to act as a common base\n * for an UI framework providing services and directives to create components and implement\n * UI interactions with angular.\n *\n *
    \n * NOTE\n * \n *
    \n *\n * ## Standalone Usage\n *\n * Although `.core` module is required by `mobile-angular-ui` by default you can use it alone.\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.core']);\n * ```\n */\n(function() {\n 'use strict';\n angular.module('mobile-angular-ui.core', [\n 'mobile-angular-ui.core.fastclick',\n 'mobile-angular-ui.core.activeLinks',\n 'mobile-angular-ui.core.capture',\n 'mobile-angular-ui.core.outerClick',\n 'mobile-angular-ui.core.sharedState',\n 'mobile-angular-ui.core.touchmoveDefaults'\n ]);\n})();\n","/*! Overthrow. An overflow:auto polyfill for responsive design. (c) 2012: Scott Jehl, Filament Group, Inc. http://filamentgroup.github.com/Overthrow/license.txt */\n(function( w, undefined ){\n\t\n\tvar doc = w.document,\n\t\tdocElem = doc.documentElement,\n\t\tenabledClassName = \"overthrow-enabled\",\n\n\t\t// Touch events are used in the polyfill, and thus are a prerequisite\n\t\tcanBeFilledWithPoly = \"ontouchmove\" in doc,\n\t\t\n\t\t// The following attempts to determine whether the browser has native overflow support\n\t\t// so we can enable it but not polyfill\n\t\tnativeOverflow = \n\t\t\t// Features-first. iOS5 overflow scrolling property check - no UA needed here. thanks Apple :)\n\t\t\t\"WebkitOverflowScrolling\" in docElem.style ||\n\t\t\t// Test the windows scrolling property as well\n\t\t\t\"msOverflowStyle\" in docElem.style ||\n\t\t\t// Touch events aren't supported and screen width is greater than X\n\t\t\t// ...basically, this is a loose \"desktop browser\" check. \n\t\t\t// It may wrongly opt-in very large tablets with no touch support.\n\t\t\t( !canBeFilledWithPoly && w.screen.width > 800 ) ||\n\t\t\t// Hang on to your hats.\n\t\t\t// Whitelist some popular, overflow-supporting mobile browsers for now and the future\n\t\t\t// These browsers are known to get overlow support right, but give us no way of detecting it.\n\t\t\t(function(){\n\t\t\t\tvar ua = w.navigator.userAgent,\n\t\t\t\t\t// Webkit crosses platforms, and the browsers on our list run at least version 534\n\t\t\t\t\twebkit = ua.match( /AppleWebKit\\/([0-9]+)/ ),\n\t\t\t\t\twkversion = webkit && webkit[1],\n\t\t\t\t\twkLte534 = webkit && wkversion >= 534;\n\t\t\t\t\t\n\t\t\t\treturn (\n\t\t\t\t\t/* Android 3+ with webkit gte 534\n\t\t\t\t\t~: Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13 */\n\t\t\t\t\tua.match( /Android ([0-9]+)/ ) && RegExp.$1 >= 3 && wkLte534 ||\n\t\t\t\t\t/* Blackberry 7+ with webkit gte 534\n\t\t\t\t\t~: Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0 Mobile Safari/534.11+ */\n\t\t\t\t\tua.match( / Version\\/([0-9]+)/ ) && RegExp.$1 >= 0 && w.blackberry && wkLte534 ||\n\t\t\t\t\t/* Blackberry Playbook with webkit gte 534\n\t\t\t\t\t~: Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+ */ \n\t\t\t\t\tua.indexOf( \"PlayBook\" ) > -1 && wkLte534 && !ua.indexOf( \"Android 2\" ) === -1 ||\n\t\t\t\t\t/* Firefox Mobile (Fennec) 4 and up\n\t\t\t\t\t~: Mozilla/5.0 (Mobile; rv:15.0) Gecko/15.0 Firefox/15.0 */\n\t\t\t\t\tua.match(/Firefox\\/([0-9]+)/) && RegExp.$1 >= 4 ||\n\t\t\t\t\t/* WebOS 3 and up (TouchPad too)\n\t\t\t\t\t~: Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.48 Safari/534.6 TouchPad/1.0 */\n\t\t\t\t\tua.match( /wOSBrowser\\/([0-9]+)/ ) && RegExp.$1 >= 233 && wkLte534 ||\n\t\t\t\t\t/* Nokia Browser N8\n\t\t\t\t\t~: Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/012.002; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.0 Mobile Safari/533.4 3gpp-gba \n\t\t\t\t\t~: Note: the N9 doesn't have native overflow with one-finger touch. wtf */\n\t\t\t\t\tua.match( /NokiaBrowser\\/([0-9\\.]+)/ ) && parseFloat(RegExp.$1) === 7.3 && webkit && wkversion >= 533\n\t\t\t\t);\n\t\t\t})();\n\n\t// Expose overthrow API\n\tw.overthrow = {};\n\n\tw.overthrow.enabledClassName = enabledClassName;\n\n\tw.overthrow.addClass = function(){\n\t\tif( docElem.className.indexOf( w.overthrow.enabledClassName ) === -1 ){\n\t\t\tdocElem.className += \" \" + w.overthrow.enabledClassName;\n\t\t}\n\t};\n\n\tw.overthrow.removeClass = function(){\n\t\tdocElem.className = docElem.className.replace( w.overthrow.enabledClassName, \"\" );\n\t};\n\n\t// Enable and potentially polyfill overflow\n\tw.overthrow.set = function(){\n\t\t\t\n\t\t// If nativeOverflow or at least the element canBeFilledWithPoly, add a class to cue CSS that assumes overflow scrolling will work (setting height on elements and such)\n\t\tif( nativeOverflow ){\n\t\t\tw.overthrow.addClass();\n\t\t}\n\n\t};\n\n\t// expose polyfillable \n\tw.overthrow.canBeFilledWithPoly = canBeFilledWithPoly;\n\n\t// Destroy everything later. If you want to.\n\tw.overthrow.forget = function(){\n\n\t\tw.overthrow.removeClass();\n\t\t\n\t};\n\t\t\n\t// Expose overthrow API\n\tw.overthrow.support = nativeOverflow ? \"native\" : \"none\";\n\t\t\n})( this );\n","/*! Overthrow. An overflow:auto polyfill for responsive design. (c) 2012: Scott Jehl, Filament Group, Inc. http://filamentgroup.github.com/Overthrow/license.txt */\n(function( w, undefined ){\n\t\n\t// Auto-init\n\tw.overthrow.set();\n\n}( this ));","/*! Overthrow. An overflow:auto polyfill for responsive design. (c) 2012: Scott Jehl, Filament Group, Inc. http://filamentgroup.github.com/Overthrow/license.txt */\n(function( w, o, undefined ){\n\n\t// o is overthrow reference from overthrow-polyfill.js\n\tif( o === undefined ){\n\t\treturn;\n\t}\n\n\to.scrollIndicatorClassName = \"overthrow\";\n\t\n\tvar doc = w.document,\n\t\tdocElem = doc.documentElement,\n\t\t// o api\n\t\tnativeOverflow = o.support === \"native\",\n\t\tcanBeFilledWithPoly = o.canBeFilledWithPoly,\n\t\tconfigure = o.configure,\n\t\tset = o.set,\n\t\tforget = o.forget,\n\t\tscrollIndicatorClassName = o.scrollIndicatorClassName;\n\n\t// find closest overthrow (elem or a parent)\n\to.closest = function( target, ascend ){\n\t\treturn !ascend && target.className && target.className.indexOf( scrollIndicatorClassName ) > -1 && target || o.closest( target.parentNode );\n\t};\n\t\t\n\t// polyfill overflow\n\tvar enabled = false;\n\to.set = function(){\n\t\t\t\n\t\tset();\n\n\t\t// If nativeOverflow or it doesn't look like the browser canBeFilledWithPoly, our job is done here. Exit viewport left.\n\t\tif( enabled || nativeOverflow || !canBeFilledWithPoly ){\n\t\t\treturn;\n\t\t}\n\n\t\tw.overthrow.addClass();\n\n\t\tenabled = true;\n\n\t\to.support = \"polyfilled\";\n\n\t\to.forget = function(){\n\t\t\tforget();\n\t\t\tenabled = false;\n\t\t\t// Remove touch binding (check for method support since this part isn't qualified by touch support like the rest)\n\t\t\tif( doc.removeEventListener ){\n\t\t\t\tdoc.removeEventListener( \"touchstart\", start, false );\n\t\t\t}\n\t\t};\n\n\t\t// Fill 'er up!\n\t\t// From here down, all logic is associated with touch scroll handling\n\t\t\t// elem references the overthrow element in use\n\t\tvar elem,\n\t\t\t\n\t\t\t// The last several Y values are kept here\n\t\t\tlastTops = [],\n\t\n\t\t\t// The last several X values are kept here\n\t\t\tlastLefts = [],\n\t\t\t\n\t\t\t// lastDown will be true if the last scroll direction was down, false if it was up\n\t\t\tlastDown,\n\t\t\t\n\t\t\t// lastRight will be true if the last scroll direction was right, false if it was left\n\t\t\tlastRight,\n\t\t\t\n\t\t\t// For a new gesture, or change in direction, reset the values from last scroll\n\t\t\tresetVertTracking = function(){\n\t\t\t\tlastTops = [];\n\t\t\t\tlastDown = null;\n\t\t\t},\n\t\t\t\n\t\t\tresetHorTracking = function(){\n\t\t\t\tlastLefts = [];\n\t\t\t\tlastRight = null;\n\t\t\t},\n\t\t\n\t\t\t// On webkit, touch events hardly trickle through textareas and inputs\n\t\t\t// Disabling CSS pointer events makes sure they do, but it also makes the controls innaccessible\n\t\t\t// Toggling pointer events at the right moments seems to do the trick\n\t\t\t// Thanks Thomas Bachem http://stackoverflow.com/a/5798681 for the following\n\t\t\tinputs,\n\t\t\tsetPointers = function( val ){\n\t\t\t\tinputs = elem.querySelectorAll( \"textarea, input\" );\n\t\t\t\tfor( var i = 0, il = inputs.length; i < il; i++ ) {\n\t\t\t\t\tinputs[ i ].style.pointerEvents = val;\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\t// For nested overthrows, changeScrollTarget restarts a touch event cycle on a parent or child overthrow\n\t\t\tchangeScrollTarget = function( startEvent, ascend ){\n\t\t\t\tif( doc.createEvent ){\n\t\t\t\t\tvar newTarget = ( !ascend || ascend === undefined ) && elem.parentNode || elem.touchchild || elem,\n\t\t\t\t\t\ttEnd;\n\t\t\t\t\t\t\t\n\t\t\t\t\tif( newTarget !== elem ){\n\t\t\t\t\t\ttEnd = doc.createEvent( \"HTMLEvents\" );\n\t\t\t\t\t\ttEnd.initEvent( \"touchend\", true, true );\n\t\t\t\t\t\telem.dispatchEvent( tEnd );\n\t\t\t\t\t\tnewTarget.touchchild = elem;\n\t\t\t\t\t\telem = newTarget;\n\t\t\t\t\t\tnewTarget.dispatchEvent( startEvent );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\t// Touchstart handler\n\t\t\t// On touchstart, touchmove and touchend are freshly bound, and all three share a bunch of vars set by touchstart\n\t\t\t// Touchend unbinds them again, until next time\n\t\t\tstart = function( e ){\n\n\t\t\t\t// Stop any throw in progress\n\t\t\t\tif( o.intercept ){\n\t\t\t\t\to.intercept();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Reset the distance and direction tracking\n\t\t\t\tresetVertTracking();\n\t\t\t\tresetHorTracking();\n\t\t\t\t\n\t\t\t\telem = o.closest( e.target );\n\t\t\t\t\t\n\t\t\t\tif( !elem || elem === docElem || e.touches.length > 1 ){\n\t\t\t\t\treturn;\n\t\t\t\t}\t\t\t\n\n\t\t\t\tsetPointers( \"none\" );\n\t\t\t\tvar touchStartE = e,\n\t\t\t\t\tscrollT = elem.scrollTop,\n\t\t\t\t\tscrollL = elem.scrollLeft,\n\t\t\t\t\theight = elem.offsetHeight,\n\t\t\t\t\twidth = elem.offsetWidth,\n\t\t\t\t\tstartY = e.touches[ 0 ].pageY,\n\t\t\t\t\tstartX = e.touches[ 0 ].pageX,\n\t\t\t\t\tscrollHeight = elem.scrollHeight,\n\t\t\t\t\tscrollWidth = elem.scrollWidth,\n\t\t\t\t\n\t\t\t\t\t// Touchmove handler\n\t\t\t\t\tmove = function( e ){\n\t\t\t\t\t\n\t\t\t\t\t\tvar ty = scrollT + startY - e.touches[ 0 ].pageY,\n\t\t\t\t\t\t\ttx = scrollL + startX - e.touches[ 0 ].pageX,\n\t\t\t\t\t\t\tdown = ty >= ( lastTops.length ? lastTops[ 0 ] : 0 ),\n\t\t\t\t\t\t\tright = tx >= ( lastLefts.length ? lastLefts[ 0 ] : 0 );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t// If there's room to scroll the current container, prevent the default window scroll\n\t\t\t\t\t\tif( ( ty > 0 && ty < scrollHeight - height ) || ( tx > 0 && tx < scrollWidth - width ) ){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// This bubbling is dumb. Needs a rethink.\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tchangeScrollTarget( touchStartE );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// If down and lastDown are inequal, the y scroll has changed direction. Reset tracking.\n\t\t\t\t\t\tif( lastDown && down !== lastDown ){\n\t\t\t\t\t\t\tresetVertTracking();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// If right and lastRight are inequal, the x scroll has changed direction. Reset tracking.\n\t\t\t\t\t\tif( lastRight && right !== lastRight ){\n\t\t\t\t\t\t\tresetHorTracking();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// remember the last direction in which we were headed\n\t\t\t\t\t\tlastDown = down;\n\t\t\t\t\t\tlastRight = right;\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t// set the container's scroll\n\t\t\t\t\t\telem.scrollTop = ty;\n\t\t\t\t\t\telem.scrollLeft = tx;\n\t\t\t\t\t\n\t\t\t\t\t\tlastTops.unshift( ty );\n\t\t\t\t\t\tlastLefts.unshift( tx );\n\t\t\t\t\t\n\t\t\t\t\t\tif( lastTops.length > 3 ){\n\t\t\t\t\t\t\tlastTops.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( lastLefts.length > 3 ){\n\t\t\t\t\t\t\tlastLefts.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\n\t\t\t\t\t// Touchend handler\n\t\t\t\t\tend = function( e ){\n\n\t\t\t\t\t\t// Bring the pointers back\n\t\t\t\t\t\tsetPointers( \"auto\" );\n\t\t\t\t\t\tsetTimeout( function(){\n\t\t\t\t\t\t\tsetPointers( \"none\" );\n\t\t\t\t\t\t}, 450 );\n\t\t\t\t\t\telem.removeEventListener( \"touchmove\", move, false );\n\t\t\t\t\t\telem.removeEventListener( \"touchend\", end, false );\n\t\t\t\t\t};\n\t\t\t\t\n\t\t\t\telem.addEventListener( \"touchmove\", move, false );\n\t\t\t\telem.addEventListener( \"touchend\", end, false );\n\t\t\t};\n\t\t\t\n\t\t// Bind to touch, handle move and end within\n\t\tdoc.addEventListener( \"touchstart\", start, false );\n\t};\n\t\t\n})( this, this.overthrow );\n","/**\n * This module will provide directives to create modals and overlays components.\n *\n * @module mobile-angular-ui.components.modals\n */\n(function() {\n 'use strict';\n angular.module('mobile-angular-ui.components.modals', [])\n\n /**\n * A directive to create modals and overlays components.\n *\n * Modals are basically the same of Bootstrap 3 but you have to use uiSharedState\n * with `ngIf/uiIf` or `ngHide/uiHide` to `activate/dismiss` it.\n *\n * By default both modals and overlay are made always showing up by\n * css rule `.modal {display:block}`, so you can use it with\n * `ngAnimate` and other angular directives in a simpler way.\n *\n * Overlay are a style of modal that looks more native in mobile devices providing a blurred\n * overlay as background.\n *\n * You can create an overlay adding `.modal-overlay` class to a modal.\n *\n * ### Note\n *\n * For modals and overlays to cover the entire page you have to attach them\n * as child of `body` element. To achieve this from a view is a common use for\n * `contentFor/yieldTo` directives contained from\n * [capture module](/docs/module:mobile-angular-ui/module:core/module:capture):\n *\n * ``` html\n * \n *\n * \n * \n *
    \n *\n * \n * ```\n *\n * Then you can wrap your modals and overlays in `contentFor`:\n *\n * ``` html\n *
    \n * *
    \n *
    \n * ```\n *\n * **Example.** Create a Modal.\n *\n * ``` html\n *
    \n *
    \n *
    \n *
    \n *
    \n *
    \n * \n *

    Modal title

    \n *
    \n *
    \n *

    Lorem ipsum ...

    \n *
    \n *
    \n * \n * \n *
    \n *
    \n *
    \n *
    \n *
    \n * ```\n *\n * **Example.** Create an Overlay.\n *\n * ``` html\n *
    \n *
    \n *
    \n *
    \n *
    \n * \n *

    Modal title

    \n *
    \n *
    \n *

    Lorem ipsum ...

    \n *
    \n *
    \n * \n * \n *
    \n *
    \n *
    \n *
    \n *
    \n * ```\n *\n * @directive modal\n * @restrict C\n */\n .directive('modal', [\n '$rootElement',\n function($rootElement) {\n return {\n restrict: 'C',\n link: function(scope, elem) {\n $rootElement.addClass('has-modal');\n elem.on('$destroy', function() {\n $rootElement.removeClass('has-modal');\n });\n scope.$on('$destroy', function() {\n $rootElement.removeClass('has-modal');\n });\n\n if (elem.hasClass('modal-overlay')) {\n $rootElement.addClass('has-modal-overlay');\n elem.on('$destroy', function() {\n $rootElement.removeClass('has-modal-overlay');\n });\n scope.$on('$destroy', function() {\n $rootElement.removeClass('has-modal-overlay');\n });\n }\n }\n };\n }]);\n})();\n","/**\n * @module mobile-angular-ui.components.navbars\n * @description\n *\n * Bootstrap default navbars are awesome for responsive websites, but are not the\n * best with a small screen. Also fixed positioning is yet not an option to create\n * navbars standing in top or bottom of the screen.\n *\n * Mobile Angular Ui offers an alternative to bootstrap navbars that is more\n * suitable for mobile.\n *\n * It uses scrollable areas to avoid scroll issues. In the following figure you can\n * see the difference between fixed navbars and navbars with absolute positioning.\n *\n *
    \n * \"\"/\n *
    \n *\n * Here is the basic markup to achieve this.\n *\n * ``` html\n *
    \n *
    \n * \n *
    \n *\n *
    \n * \n *
    \n *\n *
    \n * \n *
    \n *
    \n * ```\n *\n * As you can notice the base class is `.navbar-app` while the positioning is\n * obtained adding either `.navbar-absolute-top` or `.navbar-absolute-bottom`\n * class.\n *\n * ### Mobile Navbar Layout\n *\n * Top navbar in mobile design most of the times follows a clear pattern: a\n * centered title surrounded by one or two action buttons, the _back_ or the\n * _menu_ buttons are two common examples.\n *\n * Twitter Bootstrap ships with a different arrangement of components for navbars\n * since they are supposed to host an horizontal navigation menu.\n *\n * `.navbar-app` is specifically designed to support this different type of\n * `.interaction and arrangement.\n *\n * Consider the following example:\n *\n * ``` html\n *
    \n *\n *
    \n * Navbar Brand\n *
    \n *\n *
    \n *
    \n * Left Action\n *
    \n *
    \n *\n *
    \n *
    \n * Right Action\n *
    \n *
    \n *
    \n * ```\n *\n * `.navbar-brand-center` is a specialization of BS3's `.navbar-brand`. It will\n * render the title centered and below the two button groups. Note that `.navbar-\n * brand-center` will position the title with absolute positioning ensuring that\n * it will never cover the buttons, which would cause interaction problems.\n *\n */\n\n(function() {\n 'use strict';\n\n var module = angular.module('mobile-angular-ui.components.navbars', []);\n\n /**\n * @directive navbarAbsoluteTop\n * @restrict C\n * @description\n *\n * Setup absolute positioned top navbar.\n *\n * ``` html\n *
    \n * \n *
    \n * ```\n */\n\n /**\n * @directive navbarAbsoluteBottom\n * @restrict C\n * @description\n *\n * Setup absolute positioned bottom navbar.\n *\n * ``` html\n *
    \n * \n *
    \n * ```\n */\n angular.forEach(['top', 'bottom'], function(side) {\n var directiveName = 'navbarAbsolute' + side.charAt(0).toUpperCase() + side.slice(1);\n module.directive(directiveName, [\n '$rootElement',\n function($rootElement) {\n return {\n restrict: 'C',\n link: function(scope) {\n $rootElement.addClass('has-navbar-' + side);\n scope.$on('$destroy', function() {\n $rootElement.removeClass('has-navbar-' + side);\n });\n }\n };\n }\n ]);\n });\n})();\n","/**\n * @module mobile-angular-ui.components.scrollable\n * @description\n *\n * One thing you'll always have to deal with approaching mobile web app\n * development is scroll and `position:fixed` bugs.\n *\n * Due to the lack of support in some devices fixed positioned elements may\n * bounce or disappear during scroll. Also mobile interaction often leverages\n * horizontal scroll eg. in carousels or sliders.\n *\n * We use `overflow:auto` to create scrollable areas and solve any problems\n * related to scroll.\n *\n * Since `overflow:auto` is not always available in touch devices we use [Overthrow](http://filamentgroup.github.io/Overthrow/) to polyfill that.\n *\n * Markup for any scrollable areas is as simple as:\n *\n * ``` html\n *
    \n *
    ...
    \n *
    \n * ```\n *\n * This piece of code will trigger a directive that properly setup a new `Overthrow`\n * instance for the `.scrollable` node.\n *\n * #### Headers and footers\n *\n * `.scrollable-header/.scrollable-footer` can be used to add fixed header/footer\n * to a scrollable area without having to deal with css height and positioning to\n * avoid breaking scroll.\n *\n * ``` html\n *
    \n *
    \n *
    \n *
    \n *
    \n * ```\n *\n * #### scrollTo\n *\n * `.scrollable-content` controller exposes a `scrollTo` function: `scrollTo(offsetOrElement, margin)`\n *\n * You have to require it in your directives to use it or obtain through `element().controller`:\n *\n * ``` js\n * var elem = element(document.getElementById('myScrollableContent'));\n * var scrollableContentController = elem.controller('scrollableContent');\n *\n * // - Scroll to top of containedElement\n * scrollableContentController.scrollTo(containedElement);\n *\n * // - Scroll to top of containedElement with a margin of 10px;\n * scrollableContentController.scrollTo(containedElement, 10);\n *\n * // - Scroll top by 200px;\n * scrollableContentController.scrollTo(200);\n * ```\n *\n * #### `ui-scroll-bottom/ui-scroll-top`\n *\n * You can use `ui-scroll-bottom/ui-scroll-top` directives handle that events and implement features like _infinite scroll_.\n *\n * ``` html\n *
    \n *
    \n * \n *
    \n *
    \n * ```\n */\n(function() {\n 'use strict';\n var module = angular.module('mobile-angular-ui.components.scrollable',\n ['mobile-angular-ui.core.touchmoveDefaults']);\n\n var getTouchY = function(event) {\n var touches = event.touches && event.touches.length ? event.touches : [event];\n var e = (event.changedTouches && event.changedTouches[0]) ||\n (event.originalEvent && event.originalEvent.changedTouches &&\n event.originalEvent.changedTouches[0]) ||\n touches[0].originalEvent || touches[0];\n\n return e.clientY;\n };\n\n module.directive('scrollableContent', function() {\n return {\n restrict: 'C',\n controller: ['$element', '$document', 'allowTouchmoveDefault', function($element, $document, allowTouchmoveDefault) {\n var scrollableContent = $element[0];\n var scrollable = $element.parent()[0];\n\n // Handle nobounce behaviour\n if ('ontouchmove' in $document[0]) {\n var allowUp;\n var allowDown;\n var lastY;\n var setupTouchstart = function(event) {\n allowUp = (scrollableContent.scrollTop > 0);\n\n allowDown = (scrollableContent.scrollTop < scrollableContent.scrollHeight - scrollableContent.clientHeight);\n lastY = getTouchY(event);\n };\n\n $element.on('touchstart', setupTouchstart);\n $element.on('$destroy', function() {\n $element.off('touchstart');\n });\n\n allowTouchmoveDefault($element, function(event) {\n var currY = getTouchY(event);\n var up = (currY > lastY);\n var down = !up;\n lastY = currY;\n return (up && allowUp) || (down && allowDown);\n });\n }\n\n this.scrollableContent = scrollableContent;\n\n this.scrollTo = function(elementOrNumber, marginTop) {\n marginTop = marginTop || 0;\n\n if (angular.isNumber(elementOrNumber)) {\n scrollableContent.scrollTop = elementOrNumber - marginTop;\n } else {\n var target = angular.element(elementOrNumber)[0];\n if ((!target.offsetParent) || target.offsetParent === scrollable) {\n scrollableContent.scrollTop = target.offsetTop - marginTop;\n } else {\n // recursively subtract offsetTop from marginTop until it reaches scrollable element.\n this.scrollTo(target.offsetParent, marginTop - target.offsetTop);\n }\n }\n };\n }],\n link: function(scope, element) {\n if (overthrow.support !== 'native') {\n element.addClass('overthrow');\n overthrow.forget();\n overthrow.set();\n }\n }\n };\n });\n\n angular.forEach(['input', 'textarea'], function(directiveName) {\n module.directive(directiveName, ['$rootScope', '$timeout', function($rootScope, $timeout) {\n return {\n require: '?^^scrollableContent',\n link: function(scope, elem, attrs, scrollable) {\n // Workaround to avoid soft keyboard hiding inputs\n elem.on('focus', function() {\n if (scrollable && scrollable.scrollableContent) {\n var h1 = scrollable.scrollableContent.offsetHeight;\n $timeout(function() {\n var h2 = scrollable.scrollableContent.offsetHeight;\n //\n // if scrollableContent height is reduced in half second\n // since an input got focus we assume soft keyboard is showing.\n //\n if (h1 > h2) {\n var marginTop = 10;\n // if scrollableHeader is present increase the marginTop to compensate for scrollableHeader's height.\n var scrollableHeader = scrollable.scrollableContent.parentElement.querySelector('.scrollable-header');\n if (scrollableHeader) {\n marginTop = (scrollableHeader.getBoundingClientRect().bottom - scrollableHeader.getBoundingClientRect().top) + marginTop;\n }\n scrollable.scrollTo(elem, marginTop);\n }\n }, 500);\n }\n });\n }\n };\n }]);\n });\n\n /**\n * @directive uiScrollTop\n * @restrict A\n *\n * @param {expression} uiScrollTop The expression to be evaluated when scroll\n * reaches top of element.\n */\n\n /**\n * @directive uiScrollBottom\n * @restrict A\n *\n * @param {expression} uiScrollBottom The expression to be evaluated when scroll\n * reaches bottom of element.\n */\n angular.forEach(\n {\n uiScrollTop: function(elem) {\n return elem.scrollTop === 0;\n },\n uiScrollBottom: function(elem) {\n return elem.scrollHeight === elem.scrollTop + elem.clientHeight;\n }\n },\n function(reached, directiveName) {\n module.directive(directiveName, [function() {\n return {\n restrict: 'A',\n link: function(scope, elem, attrs) {\n elem.on('scroll', function() {\n /* If reached bottom */\n if (reached(elem[0])) {\n /* Do what is specified by onScrollBottom */\n scope.$apply(function() {\n scope.$eval(attrs[directiveName]);\n });\n }\n });\n }\n };\n }]);\n });\n\n /**\n * @directive uiScrollableHeader\n * @restrict C\n */\n\n /**\n * @directive uiScrollableFooter\n * @restrict C\n */\n angular.forEach({Top: 'scrollableHeader', Bottom: 'scrollableFooter'},\n function(directiveName, side) {\n module.directive(directiveName, [\n '$window',\n function($window) {\n return {\n restrict: 'C',\n link: function(scope, element) {\n var el = element[0];\n var parentStyle = element.parent()[0].style;\n\n var adjustParentPadding = function() {\n var styles = $window.getComputedStyle(el);\n var margin = parseInt(styles.marginTop, 10) + parseInt(styles.marginBottom, 10);\n parentStyle['padding' + side] = el.offsetHeight + margin + 'px';\n };\n\n var interval = setInterval(adjustParentPadding, 30);\n\n element.on('$destroy', function() {\n parentStyle['padding' + side] = null;\n clearInterval(interval);\n interval = adjustParentPadding = element = null;\n });\n }\n };\n }\n ]);\n });\n})();\n","/**\n * @module mobile-angular-ui.components.sidebars\n *\n * @description\n *\n * Sidebars can be placed either in left side or right side adding respectively\n * `.sidebar-left` and `.sidebar-right` classes.\n *\n * ``` html\n *
    \n *
    \n *

    My App

    \n *
    \n *
    \n * Link 1\n * \n * Link 2\n * \n *
    \n *
    \n *
    \n *
    \n *\n *
    \n * \n *
    \n * ```\n *\n * #### Interacting with sidebars\n *\n * Under the hood sidebar uses `SharedState` exposing respective statuses:\n * `uiSidebarLeft` and `uiSidebarRight` unless you define different state name\n * through `id` attribute on sidebar elements.\n *\n * ``` html\n * Toggle sidebar left\n *\n * Toggle sidebar right\n * ```\n *\n * You can put `ui-turn-off='uiSidebarLeft'` or `ui-turn-off='uiSidebarLeft'`\n * inside the sidebar to make it close after clicking links inside them.\n *\n * By default sidebar are closed by clicking/tapping outside them.\n */\n(function() {\n 'use strict';\n\n var module = angular.module(\n 'mobile-angular-ui.components.sidebars', [\n 'mobile-angular-ui.core.sharedState',\n 'mobile-angular-ui.core.outerClick'\n ]\n );\n\n angular.forEach(['left', 'right'], function(side) {\n var directiveName = 'sidebar' + side.charAt(0).toUpperCase() + side.slice(1);\n var defaultStateName = 'ui' + directiveName.charAt(0).toUpperCase() + directiveName.slice(1);\n\n module.directive(directiveName, [\n '$rootElement',\n 'SharedState',\n 'bindOuterClick',\n '$location',\n function(\n $rootElement,\n SharedState,\n bindOuterClick,\n $location\n ) {\n return {\n restrict: 'C',\n link: function(scope, elem, attrs) {\n var parentClass = 'has-sidebar-' + side;\n var visibleClass = 'sidebar-' + side + '-visible';\n var activeClass = 'sidebar-' + side + '-in';\n var stateName = attrs.id ? attrs.id : defaultStateName;\n var trackAsSearchParam = attrs.uiTrackAsSearchParam === '' || attrs.uiTrackAsSearchParam;\n\n var outerClickCb = function() {\n SharedState.turnOff(stateName);\n };\n\n var outerClickIf = function() {\n return SharedState.isActive(stateName);\n };\n\n $rootElement.addClass(parentClass);\n scope.$on('$destroy', function() {\n $rootElement\n .removeClass(parentClass);\n $rootElement\n .removeClass(visibleClass);\n $rootElement\n .removeClass(activeClass);\n });\n\n var defaultActive = attrs.active !== undefined && attrs.active !== 'false';\n SharedState.initialize(scope, stateName, {defaultValue: defaultActive});\n\n scope.$on('mobile-angular-ui.state.changed.' + stateName, function(e, active) {\n if (trackAsSearchParam) {\n $location.search(stateName, active || null);\n }\n\n if (active) {\n $rootElement\n .addClass(visibleClass);\n $rootElement\n .addClass(activeClass);\n } else {\n $rootElement\n .removeClass(activeClass);\n // Note: .removeClass(visibleClass) is called on 'mobile-angular-ui.app.transitionend'\n }\n });\n\n scope.$on('$routeChangeSuccess', function() {\n SharedState.turnOff(stateName);\n });\n\n scope.$on('$routeUpdate', function() {\n if (trackAsSearchParam) {\n if (($location.search())[stateName]) {\n SharedState.turnOn(stateName);\n } else {\n SharedState.turnOff(stateName);\n }\n }\n });\n\n scope.$on('mobile-angular-ui.app.transitionend', function() {\n if (!SharedState.isActive(stateName)) {\n $rootElement.removeClass(visibleClass);\n }\n });\n\n if (attrs.closeOnOuterClicks !== 'false') {\n bindOuterClick(scope, elem, outerClickCb, outerClickIf);\n }\n }\n };\n }\n ]);\n });\n\n module.directive('app', ['$rootScope', function($rootScope) {\n return {\n restrict: 'C',\n link: function(scope, element) {\n\n element.on('transitionend webkitTransitionEnd oTransitionEnd otransitionend', function() {\n $rootScope.$broadcast('mobile-angular-ui.app.transitionend');\n });\n\n }\n };\n }]);\n})();\n","/**\n * A module with just a directive to create a switch input component.\n *\n * @module mobile-angular-ui.components.switch\n */\n(function() {\n 'use strict';\n angular.module('mobile-angular-ui.components.switch', [])\n\n /**\n * @directive uiSwitch\n * @restrict EA\n * @requires ngModel\n * @description\n *\n * The `ui-switch` directive (not to be confused with `ng-switch`) lets\n * you create a toggle switch control bound to a boolean `ngModel` value.\n *\n *
    \n * \"\"/\n *
    \n *\n * It requires `ngModel`. It supports `ngChange` and `ngDisabled`.\n *\n * ``` html\n * \n * ```\n *\n * ``` html\n * \n * ```\n *\n * ``` html\n * \n * ```\n *\n * Note that if `$drag` service from `mobile-angular-ui.gestures` is available\n * `ui-switch` will support drag too.\n *\n * @param {expression} ngModel The model bound to this component.\n * @param {boolean} [disabled] Whether this component should be disabled.\n * @param {expression} [ngChange] An expression to be evaluated when model changes.\n */\n .directive('uiSwitch', ['$injector', function($injector) {\n var $drag = $injector.has('$drag') && $injector.get('$drag');\n\n return {\n restrict: 'EA',\n scope: {\n model: '=ngModel',\n changeExpr: '@ngChange'\n },\n link: function(scope, elem, attrs) {\n elem.addClass('switch');\n\n var disabled = attrs.disabled || elem.attr('disabled');\n\n var unwatchDisabled = scope.$watch(\n function() {\n return attrs.disabled || elem.attr('disabled');\n },\n function(value) {\n if (!value || value === 'false' || value === '0') {\n disabled = false;\n } else {\n disabled = true;\n }\n }\n );\n\n var handle = angular.element('
    ');\n elem.append(handle);\n\n if (scope.model) {\n elem.addClass('active');\n }\n elem.addClass('switch-transition-enabled');\n\n var unwatch = scope.$watch('model', function(value) {\n if (value) {\n elem.addClass('active');\n } else {\n elem.removeClass('active');\n }\n });\n\n var setModel = function(value) {\n if (!disabled && (value !== scope.model)) {\n scope.model = value;\n scope.$apply();\n if (scope.changeExpr !== null && scope.changeExpr !== undefined) {\n scope.$parent.$eval(scope.changeExpr);\n }\n }\n };\n\n var clickCb = function() {\n setModel(!scope.model);\n };\n\n elem.on('click tap', clickCb);\n\n var unbind = angular.noop;\n\n if ($drag) {\n unbind = $drag.bind(handle, {\n transform: $drag.TRANSLATE_INSIDE(elem),\n start: function() {\n elem.off('click tap', clickCb);\n },\n cancel: function() {\n handle.removeAttr('style');\n elem.off('click tap', clickCb);\n elem.on('click tap', clickCb);\n },\n end: function() {\n var rh = handle[0].getBoundingClientRect();\n var re = elem[0].getBoundingClientRect();\n if (rh.left - re.left < rh.width / 3) {\n setModel(false);\n handle.removeAttr('style');\n } else if (re.right - rh.right < rh.width / 3) {\n setModel(true);\n handle.removeAttr('style');\n } else {\n handle.removeAttr('style');\n }\n elem.on('click tap', clickCb);\n }\n });\n }\n\n elem.on('$destroy', function() {\n unbind();\n unwatchDisabled();\n unwatch();\n setModel = unbind = unwatch = unwatchDisabled = clickCb = null;\n });\n }\n };\n }]);\n})();\n","/**\n * @module mobile-angular-ui.components\n *\n * @description\n *\n * It has directives and services providing mobile friendly\n * components like navbars and sidebars.\n * It requires `mobile-angular-ui.base.css`\n * in order to work properly.\n *\n * ## Standalone Usage\n *\n * Although `.components` module is required by `mobile-angular-ui` by default\n * you can use it alone. Some submodules requires `mobile-angular-ui.core` to work,\n * so be sure its sources are available.\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui.components']);\n * ```\n *\n */\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui.components', [\n 'mobile-angular-ui.components.modals',\n 'mobile-angular-ui.components.navbars',\n 'mobile-angular-ui.components.sidebars',\n 'mobile-angular-ui.components.scrollable',\n 'mobile-angular-ui.components.switch'\n ]);\n})();\n","/**\n * @module mobile-angular-ui\n * @position 0\n * @description\n *\n * This is the main angular module of `mobile-angular-ui` framework.\n *\n * By requiring this module you will have all `mobile-angular-ui.core`\n * and `mobile-angular-ui.components` features required as well.\n *\n * ## Usage\n *\n * Declare it as a dependency for your application:\n *\n * ``` js\n * angular.module('myApp', ['mobile-angular-ui']);\n * ```\n */\n(function() {\n 'use strict';\n\n angular.module('mobile-angular-ui', [\n 'mobile-angular-ui.core',\n 'mobile-angular-ui.components'\n ]);\n\n})();\n"],"sourceRoot":"/source/"}