aboutsummaryrefslogtreecommitdiffstats
path: root/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav
diff options
context:
space:
mode:
Diffstat (limited to 'vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav')
-rw-r--r--vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav-default-theme.css8
-rw-r--r--vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav-default-theme.min.css6
-rw-r--r--vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.css110
-rw-r--r--vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.js560
-rw-r--r--vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.min.css6
-rw-r--r--vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.min.js7
6 files changed, 697 insertions, 0 deletions
diff --git a/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav-default-theme.css b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav-default-theme.css
new file mode 100644
index 00000000..bd1ba4d4
--- /dev/null
+++ b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav-default-theme.css
@@ -0,0 +1,8 @@
+/*!
+ * Angular Material Design
+ * https://github.com/angular/material
+ * @license MIT
+ * v1.1.3
+ */
+md-sidenav.md-THEME_NAME-theme, md-sidenav.md-THEME_NAME-theme md-content {
+ background-color: '{{background-hue-1}}'; }
diff --git a/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav-default-theme.min.css b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav-default-theme.min.css
new file mode 100644
index 00000000..a70a77c1
--- /dev/null
+++ b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav-default-theme.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Angular Material Design
+ * https://github.com/angular/material
+ * @license MIT
+ * v1.1.2-master-a9ba340
+ */md-sidenav.md-THEME_NAME-theme,md-sidenav.md-THEME_NAME-theme md-content{background-color:"{{background-hue-1}}"} \ No newline at end of file
diff --git a/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.css b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.css
new file mode 100644
index 00000000..9f44fd03
--- /dev/null
+++ b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.css
@@ -0,0 +1,110 @@
+/*!
+ * Angular Material Design
+ * https://github.com/angular/material
+ * @license MIT
+ * v1.1.3
+ */
+md-sidenav {
+ box-sizing: border-box;
+ position: absolute;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+ z-index: 60;
+ width: 320px;
+ max-width: 320px;
+ bottom: 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch; }
+ md-sidenav ul {
+ list-style: none; }
+ md-sidenav.md-closed {
+ display: none; }
+ md-sidenav.md-closed-add, md-sidenav.md-closed-remove {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-transition: 0.2s ease-in all;
+ transition: 0.2s ease-in all; }
+ md-sidenav.md-closed-add.md-closed-add-active, md-sidenav.md-closed-remove.md-closed-remove-active {
+ -webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+ transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
+ md-sidenav.md-locked-open-add, md-sidenav.md-locked-open-remove {
+ position: static;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ md-sidenav.md-locked-open, md-sidenav.md-locked-open.md-closed, md-sidenav.md-locked-open.md-closed.md-sidenav-left, md-sidenav.md-locked-open.md-closed, md-sidenav.md-locked-open.md-closed.md-sidenav-right {
+ position: static;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ md-sidenav.md-locked-open-remove.md-closed {
+ position: static;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ md-sidenav.md-closed.md-locked-open-add {
+ position: static;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-transform: translate3d(0%, 0, 0);
+ transform: translate3d(0%, 0, 0); }
+ md-sidenav.md-closed.md-locked-open-add:not(.md-locked-open-add-active) {
+ -webkit-transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+ transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+ width: 0 !important;
+ min-width: 0 !important; }
+ md-sidenav.md-closed.md-locked-open-add-active {
+ -webkit-transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+ transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2); }
+ md-sidenav.md-locked-open-remove-active {
+ -webkit-transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+ transition: width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2), min-width 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
+ width: 0 !important;
+ min-width: 0 !important; }
+
+.md-sidenav-backdrop.md-locked-open {
+ display: none; }
+
+.md-sidenav-left, md-sidenav {
+ left: 0;
+ top: 0;
+ -webkit-transform: translate3d(0%, 0, 0);
+ transform: translate3d(0%, 0, 0); }
+ .md-sidenav-left.md-closed, md-sidenav.md-closed {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0); }
+
+.md-sidenav-right {
+ left: 100%;
+ top: 0;
+ -webkit-transform: translate(-100%, 0);
+ transform: translate(-100%, 0); }
+ .md-sidenav-right.md-closed {
+ -webkit-transform: translate(0%, 0);
+ transform: translate(0%, 0); }
+
+@media (min-width: 600px) {
+ md-sidenav {
+ max-width: 400px; } }
+
+@media (max-width: 456px) {
+ md-sidenav {
+ width: calc(100% - 56px);
+ min-width: calc(100% - 56px);
+ max-width: calc(100% - 56px); } }
+
+@media screen and (-ms-high-contrast: active) {
+ .md-sidenav-left, md-sidenav {
+ border-right: 1px solid #fff; }
+ .md-sidenav-right {
+ border-left: 1px solid #fff; } }
diff --git a/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.js b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.js
new file mode 100644
index 00000000..f82c9fc0
--- /dev/null
+++ b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.js
@@ -0,0 +1,560 @@
+/*!
+ * Angular Material Design
+ * https://github.com/angular/material
+ * @license MIT
+ * v1.1.3
+ */
+goog.provide('ngmaterial.components.sidenav');
+goog.require('ngmaterial.components.backdrop');
+goog.require('ngmaterial.core');
+/**
+ * @ngdoc module
+ * @name material.components.sidenav
+ *
+ * @description
+ * A Sidenav QP component.
+ */
+SidenavService['$inject'] = ["$mdComponentRegistry", "$mdUtil", "$q", "$log"];
+SidenavDirective['$inject'] = ["$mdMedia", "$mdUtil", "$mdConstant", "$mdTheming", "$mdInteraction", "$animate", "$compile", "$parse", "$log", "$q", "$document", "$window", "$$rAF"];
+SidenavController['$inject'] = ["$scope", "$attrs", "$mdComponentRegistry", "$q", "$interpolate"];
+angular
+ .module('material.components.sidenav', [
+ 'material.core',
+ 'material.components.backdrop'
+ ])
+ .factory('$mdSidenav', SidenavService )
+ .directive('mdSidenav', SidenavDirective)
+ .directive('mdSidenavFocus', SidenavFocusDirective)
+ .controller('$mdSidenavController', SidenavController);
+
+
+/**
+ * @ngdoc service
+ * @name $mdSidenav
+ * @module material.components.sidenav
+ *
+ * @description
+ * `$mdSidenav` makes it easy to interact with multiple sidenavs
+ * in an app. When looking up a sidenav instance, you can either look
+ * it up synchronously or wait for it to be initializied asynchronously.
+ * This is done by passing the second argument to `$mdSidenav`.
+ *
+ * @usage
+ * <hljs lang="js">
+ * // Async lookup for sidenav instance; will resolve when the instance is available
+ * $mdSidenav(componentId, true).then(function(instance) {
+ * $log.debug( componentId + "is now ready" );
+ * });
+ * // Sync lookup for sidenav instance; this will resolve immediately.
+ * $mdSidenav(componentId).then(function(instance) {
+ * $log.debug( componentId + "is now ready" );
+ * });
+ * // Async toggle the given sidenav;
+ * // when instance is known ready and lazy lookup is not needed.
+ * $mdSidenav(componentId)
+ * .toggle()
+ * .then(function(){
+ * $log.debug('toggled');
+ * });
+ * // Async open the given sidenav
+ * $mdSidenav(componentId)
+ * .open()
+ * .then(function(){
+ * $log.debug('opened');
+ * });
+ * // Async close the given sidenav
+ * $mdSidenav(componentId)
+ * .close()
+ * .then(function(){
+ * $log.debug('closed');
+ * });
+ * // Sync check to see if the specified sidenav is set to be open
+ * $mdSidenav(componentId).isOpen();
+ * // Sync check to whether given sidenav is locked open
+ * // If this is true, the sidenav will be open regardless of close()
+ * $mdSidenav(componentId).isLockedOpen();
+ * // On close callback to handle close, backdrop click or escape key pressed
+ * // Callback happens BEFORE the close action occurs.
+ * $mdSidenav(componentId).onClose(function () {
+ * $log.debug('closing');
+ * });
+ * </hljs>
+ */
+function SidenavService($mdComponentRegistry, $mdUtil, $q, $log) {
+ var errorMsg = "SideNav '{0}' is not available! Did you use md-component-id='{0}'?";
+ var service = {
+ find : findInstance, // sync - returns proxy API
+ waitFor : waitForInstance // async - returns promise
+ };
+
+ /**
+ * Service API that supports three (3) usages:
+ * $mdSidenav().find("left") // sync (must already exist) or returns undefined
+ * $mdSidenav("left").toggle(); // sync (must already exist) or returns reject promise;
+ * $mdSidenav("left",true).then( function(left){ // async returns instance when available
+ * left.toggle();
+ * });
+ */
+ return function(handle, enableWait) {
+ if ( angular.isUndefined(handle) ) return service;
+
+ var shouldWait = enableWait === true;
+ var instance = service.find(handle, shouldWait);
+ return !instance && shouldWait ? service.waitFor(handle) :
+ !instance && angular.isUndefined(enableWait) ? addLegacyAPI(service, handle) : instance;
+ };
+
+ /**
+ * For failed instance/handle lookups, older-clients expect an response object with noops
+ * that include `rejected promise APIs`
+ */
+ function addLegacyAPI(service, handle) {
+ var falseFn = function() { return false; };
+ var rejectFn = function() {
+ return $q.when($mdUtil.supplant(errorMsg, [handle || ""]));
+ };
+
+ return angular.extend({
+ isLockedOpen : falseFn,
+ isOpen : falseFn,
+ toggle : rejectFn,
+ open : rejectFn,
+ close : rejectFn,
+ onClose : angular.noop,
+ then : function(callback) {
+ return waitForInstance(handle)
+ .then(callback || angular.noop);
+ }
+ }, service);
+ }
+ /**
+ * Synchronously lookup the controller instance for the specified sidNav instance which has been
+ * registered with the markup `md-component-id`
+ */
+ function findInstance(handle, shouldWait) {
+ var instance = $mdComponentRegistry.get(handle);
+
+ if (!instance && !shouldWait) {
+
+ // Report missing instance
+ $log.error( $mdUtil.supplant(errorMsg, [handle || ""]) );
+
+ // The component has not registered itself... most like NOT yet created
+ // return null to indicate that the Sidenav is not in the DOM
+ return undefined;
+ }
+ return instance;
+ }
+
+ /**
+ * Asynchronously wait for the component instantiation,
+ * Deferred lookup of component instance using $component registry
+ */
+ function waitForInstance(handle) {
+ return $mdComponentRegistry.when(handle).catch($log.error);
+ }
+}
+/**
+ * @ngdoc directive
+ * @name mdSidenavFocus
+ * @module material.components.sidenav
+ *
+ * @restrict A
+ *
+ * @description
+ * `mdSidenavFocus` provides a way to specify the focused element when a sidenav opens.
+ * This is completely optional, as the sidenav itself is focused by default.
+ *
+ * @usage
+ * <hljs lang="html">
+ * <md-sidenav>
+ * <form>
+ * <md-input-container>
+ * <label for="testInput">Label</label>
+ * <input id="testInput" type="text" md-sidenav-focus>
+ * </md-input-container>
+ * </form>
+ * </md-sidenav>
+ * </hljs>
+ **/
+function SidenavFocusDirective() {
+ return {
+ restrict: 'A',
+ require: '^mdSidenav',
+ link: function(scope, element, attr, sidenavCtrl) {
+ // @see $mdUtil.findFocusTarget(...)
+ }
+ };
+}
+/**
+ * @ngdoc directive
+ * @name mdSidenav
+ * @module material.components.sidenav
+ * @restrict E
+ *
+ * @description
+ *
+ * A Sidenav component that can be opened and closed programatically.
+ *
+ * By default, upon opening it will slide out on top of the main content area.
+ *
+ * For keyboard and screen reader accessibility, focus is sent to the sidenav wrapper by default.
+ * It can be overridden with the `md-autofocus` directive on the child element you want focused.
+ *
+ * @usage
+ * <hljs lang="html">
+ * <div layout="row" ng-controller="MyController">
+ * <md-sidenav md-component-id="left" class="md-sidenav-left">
+ * Left Nav!
+ * </md-sidenav>
+ *
+ * <md-content>
+ * Center Content
+ * <md-button ng-click="openLeftMenu()">
+ * Open Left Menu
+ * </md-button>
+ * </md-content>
+ *
+ * <md-sidenav md-component-id="right"
+ * md-is-locked-open="$mdMedia('min-width: 333px')"
+ * class="md-sidenav-right">
+ * <form>
+ * <md-input-container>
+ * <label for="testInput">Test input</label>
+ * <input id="testInput" type="text"
+ * ng-model="data" md-autofocus>
+ * </md-input-container>
+ * </form>
+ * </md-sidenav>
+ * </div>
+ * </hljs>
+ *
+ * <hljs lang="js">
+ * var app = angular.module('myApp', ['ngMaterial']);
+ * app.controller('MyController', function($scope, $mdSidenav) {
+ * $scope.openLeftMenu = function() {
+ * $mdSidenav('left').toggle();
+ * };
+ * });
+ * </hljs>
+ *
+ * @param {expression=} md-is-open A model bound to whether the sidenav is opened.
+ * @param {boolean=} md-disable-backdrop When present in the markup, the sidenav will not show a backdrop.
+ * @param {string=} md-component-id componentId to use with $mdSidenav service.
+ * @param {expression=} md-is-locked-open When this expression evaluates to true,
+ * the sidenav 'locks open': it falls into the content's flow instead
+ * of appearing over it. This overrides the `md-is-open` attribute.
+ * @param {string=} md-disable-scroll-target Selector, pointing to an element, whose scrolling will
+ * be disabled when the sidenav is opened. By default this is the sidenav's direct parent.
+ *
+* The $mdMedia() service is exposed to the is-locked-open attribute, which
+ * can be given a media query or one of the `sm`, `gt-sm`, `md`, `gt-md`, `lg` or `gt-lg` presets.
+ * Examples:
+ *
+ * - `<md-sidenav md-is-locked-open="shouldLockOpen"></md-sidenav>`
+ * - `<md-sidenav md-is-locked-open="$mdMedia('min-width: 1000px')"></md-sidenav>`
+ * - `<md-sidenav md-is-locked-open="$mdMedia('sm')"></md-sidenav>` (locks open on small screens)
+ */
+function SidenavDirective($mdMedia, $mdUtil, $mdConstant, $mdTheming, $mdInteraction, $animate,
+ $compile, $parse, $log, $q, $document, $window, $$rAF) {
+ return {
+ restrict: 'E',
+ scope: {
+ isOpen: '=?mdIsOpen'
+ },
+ controller: '$mdSidenavController',
+ compile: function(element) {
+ element.addClass('md-closed').attr('tabIndex', '-1');
+ return postLink;
+ }
+ };
+
+ /**
+ * Directive Post Link function...
+ */
+ function postLink(scope, element, attr, sidenavCtrl) {
+ var lastParentOverFlow;
+ var backdrop;
+ var disableScrollTarget = null;
+ var triggeringInteractionType;
+ var triggeringElement = null;
+ var previousContainerStyles;
+ var promise = $q.when(true);
+ var isLockedOpenParsed = $parse(attr.mdIsLockedOpen);
+ var ngWindow = angular.element($window);
+ var isLocked = function() {
+ return isLockedOpenParsed(scope.$parent, {
+ $media: function(arg) {
+ $log.warn("$media is deprecated for is-locked-open. Use $mdMedia instead.");
+ return $mdMedia(arg);
+ },
+ $mdMedia: $mdMedia
+ });
+ };
+
+ if (attr.mdDisableScrollTarget) {
+ disableScrollTarget = $document[0].querySelector(attr.mdDisableScrollTarget);
+
+ if (disableScrollTarget) {
+ disableScrollTarget = angular.element(disableScrollTarget);
+ } else {
+ $log.warn($mdUtil.supplant('mdSidenav: couldn\'t find element matching ' +
+ 'selector "{selector}". Falling back to parent.', { selector: attr.mdDisableScrollTarget }));
+ }
+ }
+
+ if (!disableScrollTarget) {
+ disableScrollTarget = element.parent();
+ }
+
+ // Only create the backdrop if the backdrop isn't disabled.
+ if (!attr.hasOwnProperty('mdDisableBackdrop')) {
+ backdrop = $mdUtil.createBackdrop(scope, "md-sidenav-backdrop md-opaque ng-enter");
+ }
+
+ element.addClass('_md'); // private md component indicator for styling
+ $mdTheming(element);
+
+ // The backdrop should inherit the sidenavs theme,
+ // because the backdrop will take its parent theme by default.
+ if ( backdrop ) $mdTheming.inherit(backdrop, element);
+
+ element.on('$destroy', function() {
+ backdrop && backdrop.remove();
+ sidenavCtrl.destroy();
+ });
+
+ scope.$on('$destroy', function(){
+ backdrop && backdrop.remove();
+ });
+
+ scope.$watch(isLocked, updateIsLocked);
+ scope.$watch('isOpen', updateIsOpen);
+
+
+ // Publish special accessor for the Controller instance
+ sidenavCtrl.$toggleOpen = toggleOpen;
+
+ /**
+ * Toggle the DOM classes to indicate `locked`
+ * @param isLocked
+ */
+ function updateIsLocked(isLocked, oldValue) {
+ scope.isLockedOpen = isLocked;
+ if (isLocked === oldValue) {
+ element.toggleClass('md-locked-open', !!isLocked);
+ } else {
+ $animate[isLocked ? 'addClass' : 'removeClass'](element, 'md-locked-open');
+ }
+ if (backdrop) {
+ backdrop.toggleClass('md-locked-open', !!isLocked);
+ }
+ }
+
+ /**
+ * Toggle the SideNav view and attach/detach listeners
+ * @param isOpen
+ */
+ function updateIsOpen(isOpen) {
+ // Support deprecated md-sidenav-focus attribute as fallback
+ var focusEl = $mdUtil.findFocusTarget(element) || $mdUtil.findFocusTarget(element,'[md-sidenav-focus]') || element;
+ var parent = element.parent();
+
+ parent[isOpen ? 'on' : 'off']('keydown', onKeyDown);
+ if (backdrop) backdrop[isOpen ? 'on' : 'off']('click', close);
+
+ var restorePositioning = updateContainerPositions(parent, isOpen);
+
+ if ( isOpen ) {
+ // Capture upon opening..
+ triggeringElement = $document[0].activeElement;
+ triggeringInteractionType = $mdInteraction.getLastInteractionType();
+ }
+
+ disableParentScroll(isOpen);
+
+ return promise = $q.all([
+ isOpen && backdrop ? $animate.enter(backdrop, parent) : backdrop ?
+ $animate.leave(backdrop) : $q.when(true),
+ $animate[isOpen ? 'removeClass' : 'addClass'](element, 'md-closed')
+ ]).then(function() {
+ // Perform focus when animations are ALL done...
+ if (scope.isOpen) {
+ $$rAF(function() {
+ // Notifies child components that the sidenav was opened. Should wait
+ // a frame in order to allow for the element height to be computed.
+ ngWindow.triggerHandler('resize');
+ });
+
+ focusEl && focusEl.focus();
+ }
+
+ // Restores the positioning on the sidenav and backdrop.
+ restorePositioning && restorePositioning();
+ });
+ }
+
+ function updateContainerPositions(parent, willOpen) {
+ var drawerEl = element[0];
+ var scrollTop = parent[0].scrollTop;
+
+ if (willOpen && scrollTop) {
+ previousContainerStyles = {
+ top: drawerEl.style.top,
+ bottom: drawerEl.style.bottom,
+ height: drawerEl.style.height
+ };
+
+ // When the parent is scrolled down, then we want to be able to show the sidenav at the current scroll
+ // position. We're moving the sidenav down to the correct scroll position and apply the height of the
+ // parent, to increase the performance. Using 100% as height, will impact the performance heavily.
+ var positionStyle = {
+ top: scrollTop + 'px',
+ bottom: 'auto',
+ height: parent[0].clientHeight + 'px'
+ };
+
+ // Apply the new position styles to the sidenav and backdrop.
+ element.css(positionStyle);
+ backdrop.css(positionStyle);
+ }
+
+ // When the sidenav is closing and we have previous defined container styles,
+ // then we return a restore function, which resets the sidenav and backdrop.
+ if (!willOpen && previousContainerStyles) {
+ return function() {
+ drawerEl.style.top = previousContainerStyles.top;
+ drawerEl.style.bottom = previousContainerStyles.bottom;
+ drawerEl.style.height = previousContainerStyles.height;
+
+ backdrop[0].style.top = null;
+ backdrop[0].style.bottom = null;
+ backdrop[0].style.height = null;
+
+ previousContainerStyles = null;
+ };
+ }
+ }
+
+ /**
+ * Prevent parent scrolling (when the SideNav is open)
+ */
+ function disableParentScroll(disabled) {
+ if ( disabled && !lastParentOverFlow ) {
+ lastParentOverFlow = disableScrollTarget.css('overflow');
+ disableScrollTarget.css('overflow', 'hidden');
+ } else if (angular.isDefined(lastParentOverFlow)) {
+ disableScrollTarget.css('overflow', lastParentOverFlow);
+ lastParentOverFlow = undefined;
+ }
+ }
+
+ /**
+ * Toggle the sideNav view and publish a promise to be resolved when
+ * the view animation finishes.
+ *
+ * @param isOpen
+ * @returns {*}
+ */
+ function toggleOpen( isOpen ) {
+ if (scope.isOpen == isOpen ) {
+
+ return $q.when(true);
+
+ } else {
+ if (scope.isOpen && sidenavCtrl.onCloseCb) sidenavCtrl.onCloseCb();
+
+ return $q(function(resolve){
+ // Toggle value to force an async `updateIsOpen()` to run
+ scope.isOpen = isOpen;
+
+ $mdUtil.nextTick(function() {
+ // When the current `updateIsOpen()` animation finishes
+ promise.then(function(result) {
+
+ if ( !scope.isOpen && triggeringElement && triggeringInteractionType === 'keyboard') {
+ // reset focus to originating element (if available) upon close
+ triggeringElement.focus();
+ triggeringElement = null;
+ }
+
+ resolve(result);
+ });
+ });
+
+ });
+
+ }
+ }
+
+ /**
+ * Auto-close sideNav when the `escape` key is pressed.
+ * @param evt
+ */
+ function onKeyDown(ev) {
+ var isEscape = (ev.keyCode === $mdConstant.KEY_CODE.ESCAPE);
+ return isEscape ? close(ev) : $q.when(true);
+ }
+
+ /**
+ * With backdrop `clicks` or `escape` key-press, immediately
+ * apply the CSS close transition... Then notify the controller
+ * to close() and perform its own actions.
+ */
+ function close(ev) {
+ ev.preventDefault();
+
+ return sidenavCtrl.close();
+ }
+
+ }
+}
+
+/*
+ * @private
+ * @ngdoc controller
+ * @name SidenavController
+ * @module material.components.sidenav
+ */
+function SidenavController($scope, $attrs, $mdComponentRegistry, $q, $interpolate) {
+
+ var self = this;
+
+ // Use Default internal method until overridden by directive postLink
+
+ // Synchronous getters
+ self.isOpen = function() { return !!$scope.isOpen; };
+ self.isLockedOpen = function() { return !!$scope.isLockedOpen; };
+
+ // Synchronous setters
+ self.onClose = function (callback) {
+ self.onCloseCb = callback;
+ return self;
+ };
+
+ // Async actions
+ self.open = function() { return self.$toggleOpen( true ); };
+ self.close = function() { return self.$toggleOpen( false ); };
+ self.toggle = function() { return self.$toggleOpen( !$scope.isOpen ); };
+ self.$toggleOpen = function(value) { return $q.when($scope.isOpen = value); };
+
+ // Evaluate the component id.
+ var rawId = $attrs.mdComponentId;
+ var hasDataBinding = rawId && rawId.indexOf($interpolate.startSymbol()) > -1;
+ var componentId = hasDataBinding ? $interpolate(rawId)($scope.$parent) : rawId;
+
+ // Register the component.
+ self.destroy = $mdComponentRegistry.register(self, componentId);
+
+ // Watch and update the component, if the id has changed.
+ if (hasDataBinding) {
+ $attrs.$observe('mdComponentId', function(id) {
+ if (id && id !== self.$$mdHandle) {
+ self.destroy(); // `destroy` only deregisters the old component id so we can add the new one.
+ self.destroy = $mdComponentRegistry.register(self, id);
+ }
+ });
+ }
+}
+
+ngmaterial.components.sidenav = angular.module("material.components.sidenav"); \ No newline at end of file
diff --git a/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.min.css b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.min.css
new file mode 100644
index 00000000..c5e96632
--- /dev/null
+++ b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Angular Material Design
+ * https://github.com/angular/material
+ * @license MIT
+ * v1.1.2-master-a9ba340
+ */md-sidenav{box-sizing:border-box;position:absolute;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;z-index:60;width:320px;max-width:320px;bottom:0;overflow:auto;-webkit-overflow-scrolling:touch}md-sidenav ul{list-style:none}md-sidenav.md-closed{display:none}md-sidenav.md-closed-add,md-sidenav.md-closed-remove{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}md-sidenav.md-closed-add.md-closed-add-active,md-sidenav.md-closed-remove.md-closed-remove-active{-webkit-transition:all .4s cubic-bezier(.25,.8,.25,1);transition:all .4s cubic-bezier(.25,.8,.25,1)}md-sidenav.md-closed.md-locked-open-add,md-sidenav.md-locked-open,md-sidenav.md-locked-open-add,md-sidenav.md-locked-open-remove,md-sidenav.md-locked-open-remove.md-closed,md-sidenav.md-locked-open.md-closed,md-sidenav.md-locked-open.md-closed.md-sidenav-left,md-sidenav.md-locked-open.md-closed.md-sidenav-right{position:static;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}md-sidenav.md-closed.md-locked-open-add:not(.md-locked-open-add-active){width:0!important;min-width:0!important}md-sidenav.md-closed.md-locked-open-add-active,md-sidenav.md-closed.md-locked-open-add:not(.md-locked-open-add-active),md-sidenav.md-locked-open-remove-active{-webkit-transition:width .3s cubic-bezier(.55,0,.55,.2),min-width .3s cubic-bezier(.55,0,.55,.2);transition:width .3s cubic-bezier(.55,0,.55,.2),min-width .3s cubic-bezier(.55,0,.55,.2)}md-sidenav.md-locked-open-remove-active{width:0!important;min-width:0!important}.md-sidenav-backdrop.md-locked-open{display:none}.md-sidenav-left,md-sidenav{left:0;top:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.md-sidenav-left.md-closed,md-sidenav.md-closed{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.md-sidenav-right{left:100%;top:0;-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}.md-sidenav-right.md-closed{-webkit-transform:translate(0,0);transform:translate(0,0)}@media (min-width:600px){md-sidenav{max-width:400px}}@media (max-width:456px){md-sidenav{width:calc(100% - 56px);min-width:calc(100% - 56px);max-width:calc(100% - 56px)}}@media screen and (-ms-high-contrast:active){.md-sidenav-left,md-sidenav{border-right:1px solid #fff}.md-sidenav-right{border-left:1px solid #fff}} \ No newline at end of file
diff --git a/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.min.js b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.min.js
new file mode 100644
index 00000000..3d0ae653
--- /dev/null
+++ b/vnfmarket/common/thirdparty/angular-material/modules/closure/sidenav/sidenav.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Angular Material Design
+ * https://github.com/angular/material
+ * @license MIT
+ * v1.1.2-master-a9ba340
+ */
+function SidenavService(e,n,t,o){function r(e,o){var r=function(){return!1},i=function(){return t.when(n.supplant(l,[o||""]))};return angular.extend({isLockedOpen:r,isOpen:r,toggle:i,open:i,close:i,onClose:angular.noop,then:function(e){return a(o).then(e||angular.noop)}},e)}function i(t,r){var i=e.get(t);return i||r?i:void o.error(n.supplant(l,[t||""]))}function a(n){return e.when(n)["catch"](o.error)}var l="SideNav '{0}' is not available! Did you use md-component-id='{0}'?",d={find:i,waitFor:a};return function(e,n){if(angular.isUndefined(e))return d;var t=n===!0,o=d.find(e,t);return!o&&t?d.waitFor(e):!o&&angular.isUndefined(n)?r(d,e):o}}function SidenavFocusDirective(){return{restrict:"A",require:"^mdSidenav",link:function(e,n,t,o){}}}function SidenavDirective(e,n,t,o,r,i,a,l,d,c,s,u,m){function p(a,p,f,g){function v(e,n){a.isLockedOpen=e,e===n?p.toggleClass("md-locked-open",!!e):i[e?"addClass":"removeClass"](p,"md-locked-open"),k&&k.toggleClass("md-locked-open",!!e)}function $(e){var t=n.findFocusTarget(p)||n.findFocusTarget(p,"[md-sidenav-focus]")||p,o=p.parent();o[e?"on":"off"]("keydown",y),k&&k[e?"on":"off"]("click",O);var l=h(o,e);return e&&(T=s[0].activeElement,w=r.getLastInteractionType()),C(e),q=c.all([e&&k?i.enter(k,o):k?i.leave(k):c.when(!0),i[e?"removeClass":"addClass"](p,"md-closed")]).then(function(){a.isOpen&&(m(function(){x.triggerHandler("resize")}),t&&t.focus()),l&&l()})}function h(e,n){var t=p[0],o=e[0].scrollTop;if(n&&o){D={top:t.style.top,bottom:t.style.bottom,height:t.style.height};var r={top:o+"px",bottom:"auto",height:e[0].clientHeight+"px"};p.css(r),k.css(r)}if(!n&&D)return function(){t.style.top=D.top,t.style.bottom=D.bottom,t.style.height=D.height,k[0].style.top=null,k[0].style.bottom=null,k[0].style.height=null,D=null}}function C(e){e&&!b?(b=F.css("overflow"),F.css("overflow","hidden")):angular.isDefined(b)&&(F.css("overflow",b),b=void 0)}function S(e){return a.isOpen==e?c.when(!0):(a.isOpen&&g.onCloseCb&&g.onCloseCb(),c(function(t){a.isOpen=e,n.nextTick(function(){q.then(function(e){!a.isOpen&&T&&"keyboard"===w&&(T.focus(),T=null),t(e)})})}))}function y(e){var n=e.keyCode===t.KEY_CODE.ESCAPE;return n?O(e):c.when(!0)}function O(e){return e.preventDefault(),g.close()}var b,k,w,D,F=null,T=null,q=c.when(!0),I=l(f.mdIsLockedOpen),x=angular.element(u),E=function(){return I(a.$parent,{$media:function(n){return d.warn("$media is deprecated for is-locked-open. Use $mdMedia instead."),e(n)},$mdMedia:e})};f.mdDisableScrollTarget&&(F=s[0].querySelector(f.mdDisableScrollTarget),F?F=angular.element(F):d.warn(n.supplant('mdSidenav: couldn\'t find element matching selector "{selector}". Falling back to parent.',{selector:f.mdDisableScrollTarget}))),F||(F=p.parent()),f.hasOwnProperty("mdDisableBackdrop")||(k=n.createBackdrop(a,"md-sidenav-backdrop md-opaque ng-enter")),p.addClass("_md"),o(p),k&&o.inherit(k,p),p.on("$destroy",function(){k&&k.remove(),g.destroy()}),a.$on("$destroy",function(){k&&k.remove()}),a.$watch(E,v),a.$watch("isOpen",$),g.$toggleOpen=S}return{restrict:"E",scope:{isOpen:"=?mdIsOpen"},controller:"$mdSidenavController",compile:function(e){return e.addClass("md-closed").attr("tabIndex","-1"),p}}}function SidenavController(e,n,t,o,r){var i=this;i.isOpen=function(){return!!e.isOpen},i.isLockedOpen=function(){return!!e.isLockedOpen},i.onClose=function(e){return i.onCloseCb=e,i},i.open=function(){return i.$toggleOpen(!0)},i.close=function(){return i.$toggleOpen(!1)},i.toggle=function(){return i.$toggleOpen(!e.isOpen)},i.$toggleOpen=function(n){return o.when(e.isOpen=n)};var a=n.mdComponentId,l=a&&a.indexOf(r.startSymbol())>-1,d=l?r(a)(e.$parent):a;i.destroy=t.register(i,d),l&&n.$observe("mdComponentId",function(e){e&&e!==i.$$mdHandle&&(i.destroy(),i.destroy=t.register(i,e))})}goog.provide("ngmaterial.components.sidenav"),goog.require("ngmaterial.components.backdrop"),goog.require("ngmaterial.core"),SidenavService.$inject=["$mdComponentRegistry","$mdUtil","$q","$log"],SidenavDirective.$inject=["$mdMedia","$mdUtil","$mdConstant","$mdTheming","$mdInteraction","$animate","$compile","$parse","$log","$q","$document","$window","$$rAF"],SidenavController.$inject=["$scope","$attrs","$mdComponentRegistry","$q","$interpolate"],angular.module("material.components.sidenav",["material.core","material.components.backdrop"]).factory("$mdSidenav",SidenavService).directive("mdSidenav",SidenavDirective).directive("mdSidenavFocus",SidenavFocusDirective).controller("$mdSidenavController",SidenavController),ngmaterial.components.sidenav=angular.module("material.components.sidenav"); \ No newline at end of file