Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authordiosmosis <benaka@piwik.pro>2014-09-11 16:29:48 +0400
committerdiosmosis <benaka@piwik.pro>2014-09-11 16:29:48 +0400
commit83c28f9a35f4d46e8c8c882408b322149c6db660 (patch)
tree0b03dd5773a7a6c50306cf80e1030427f069b123 /libs
parentb6d5ae4112a86eb4604556db0c1c367c8a103ab9 (diff)
Add angularjs code to open and close dialogs. Includes logic to update and listen to popover query parameter as broadcast currently does. Uses ngDialog angularjs module.
Diffstat (limited to 'libs')
-rw-r--r--libs/angularjs/ngDialog/.gitignore4
-rw-r--r--libs/angularjs/ngDialog/.jshintrc35
-rw-r--r--libs/angularjs/ngDialog/Gruntfile.js52
-rw-r--r--libs/angularjs/ngDialog/README.md326
-rw-r--r--libs/angularjs/ngDialog/bower.json38
-rw-r--r--libs/angularjs/ngDialog/css/myth/ngDialog-theme-default.css146
-rw-r--r--libs/angularjs/ngDialog/css/myth/ngDialog-theme-plain.css112
-rw-r--r--libs/angularjs/ngDialog/css/myth/ngDialog.css71
-rw-r--r--libs/angularjs/ngDialog/css/ngDialog-theme-default.css196
-rw-r--r--libs/angularjs/ngDialog/css/ngDialog-theme-default.min.css3
-rw-r--r--libs/angularjs/ngDialog/css/ngDialog-theme-plain.css132
-rw-r--r--libs/angularjs/ngDialog/css/ngDialog-theme-plain.min.css3
-rw-r--r--libs/angularjs/ngDialog/css/ngDialog.css100
-rw-r--r--libs/angularjs/ngDialog/css/ngDialog.min.css3
-rw-r--r--libs/angularjs/ngDialog/example/README.md24
-rw-r--r--libs/angularjs/ngDialog/example/externalTemplate.html1
-rw-r--r--libs/angularjs/ngDialog/example/index.html225
-rw-r--r--libs/angularjs/ngDialog/example/server.js10
-rw-r--r--libs/angularjs/ngDialog/js/ngDialog.js348
-rw-r--r--libs/angularjs/ngDialog/js/ngDialog.min.js2
-rw-r--r--libs/angularjs/ngDialog/package.json40
21 files changed, 1871 insertions, 0 deletions
diff --git a/libs/angularjs/ngDialog/.gitignore b/libs/angularjs/ngDialog/.gitignore
new file mode 100644
index 0000000000..4bcc1e1e14
--- /dev/null
+++ b/libs/angularjs/ngDialog/.gitignore
@@ -0,0 +1,4 @@
+.DS_Store
+node_modules
+bower_components
+*.log \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/.jshintrc b/libs/angularjs/ngDialog/.jshintrc
new file mode 100644
index 0000000000..9ded1c2866
--- /dev/null
+++ b/libs/angularjs/ngDialog/.jshintrc
@@ -0,0 +1,35 @@
+{
+ "predef": [
+ "angular"
+ ],
+
+ "asi" : false,
+ "bitwise" : true,
+ "boss" : false,
+ "browser" : true,
+ "curly" : true,
+ "debug": false,
+ "devel": false,
+ "eqeqeq": true,
+ "evil": false,
+ "expr": true,
+ "forin": false,
+ "immed": true,
+ "jquery" : true,
+ "latedef" : false,
+ "laxbreak": false,
+ "multistr": true,
+ "newcap": true,
+ "noarg": true,
+ "node" : true,
+ "noempty": false,
+ "nonew": true,
+ "onevar": false,
+ "plusplus": false,
+ "regexp": false,
+ "strict": false,
+ "sub": false,
+ "trailing" : true,
+ "undef": true,
+ "unused": "vars"
+}
diff --git a/libs/angularjs/ngDialog/Gruntfile.js b/libs/angularjs/ngDialog/Gruntfile.js
new file mode 100644
index 0000000000..599216b880
--- /dev/null
+++ b/libs/angularjs/ngDialog/Gruntfile.js
@@ -0,0 +1,52 @@
+module.exports = function (grunt) {
+
+ grunt.initConfig({
+ pkg: grunt.file.readJSON('package.json'),
+ uglify: {
+ options: {
+ banner: '/*! <%= pkg.name %> - v<%= pkg.version %> (<%= pkg.homepage %>) */\n'
+ },
+ ngDialog: {
+ files: {
+ './js/ngDialog.min.js': ['./js/ngDialog.js']
+ }
+ }
+ },
+ jshint: {
+ options: {
+ ignores: ['./js/ngDialog.min.js']
+ },
+ files: ['*.js']
+ },
+ myth: {
+ dist: {
+ files: {
+ './css/ngDialog.css': './css/myth/ngDialog.css',
+ './css/ngDialog-theme-default.css': './css/myth/ngDialog-theme-default.css',
+ './css/ngDialog-theme-plain.css': './css/myth/ngDialog-theme-plain.css'
+ }
+ }
+ },
+ cssmin: {
+ options: {
+ banner: '/*! <%= pkg.name %> - v<%= pkg.version %> (<%= pkg.homepage %>) */\n'
+ },
+ minify:{
+ files: {
+ 'css/ngDialog.min.css': ['css/ngDialog.css'],
+ 'css/ngDialog-theme-default.min.css': ['css/ngDialog-theme-default.css'],
+ 'css/ngDialog-theme-plain.min.css': ['css/ngDialog-theme-plain.css']
+ }
+ }
+ }
+ });
+
+ grunt.loadNpmTasks('grunt-contrib-jshint');
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.loadNpmTasks('grunt-myth');
+ grunt.loadNpmTasks('grunt-contrib-cssmin');
+
+ grunt.registerTask('default', ['jshint']);
+ grunt.registerTask('build', ['uglify', 'myth', 'cssmin']);
+ grunt.registerTask('css', ['myth', 'cssmin']);
+}; \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/README.md b/libs/angularjs/ngDialog/README.md
new file mode 100644
index 0000000000..907dc44d65
--- /dev/null
+++ b/libs/angularjs/ngDialog/README.md
@@ -0,0 +1,326 @@
+# ngDialog
+
+Modal dialogs and popups provider for [Angular.js](http://angularjs.org/) applications.
+
+ngDialog is small (~2Kb), has minimalistic API, highly customizable through themes and has only Angular.js as dependency.
+
+### [Demo](http://likeastore.github.io/ngDialog)
+
+## Install
+
+You can download all necessary ngDialog files manually or install it with bower:
+
+```bash
+bower install ngDialog
+```
+
+## Usage
+
+You need only to include ``ngDialog.js`` and ``ngDialog.css`` (as minimal setup) to your project and then you can start using ``ngDialog`` provider in your directives, controllers and services. For example in controllers:
+
+```javascript
+var app = angular.module('exampleApp', ['ngDialog']);
+
+app.controller('MainCtrl', function ($scope, ngDialog) {
+ $scope.clickToOpen = function () {
+ ngDialog.open({ template: 'popupTmpl.html' });
+ };
+});
+```
+
+## API
+
+ngDialog service provides easy to use and minimalistic API, but in the same time it's powerful enough. Here is the list of accessible methods that you can use:
+
+===
+
+### ``.open(options)``
+
+Method allows to open dialog window, creates new dialog instance on each call. It accepts ``options`` object as the only argument.
+
+### Options:
+
+##### ``template {String}``
+
+Dialog template can be loaded through ``path`` to external html template or ``<script>`` tag with ``text/ng-template``:
+
+```html
+<script type="text/ng-template" id="templateId">
+ <h1>Template heading</h1>
+ <p>Content goes here</p>
+</script>
+```
+
+```javascript
+ngDialog.open({ template: 'templateId' });
+```
+
+Also it is possible to use simple string as template together with ``plain`` option.
+
+##### ``plain {Boolean}``
+
+If ``true`` allows to use plain string as template, default ``false``:
+
+```javascript
+ngDialog.open({
+ template: '<p>my template</p>',
+ plain: true
+});
+```
+
+##### ``controller {String} | {Array} | {Object}``
+
+Controller that will be used for dialog window if necessary. The controller can be specified either by referring it by name or directly inline.
+
+```javascript
+ngDialog.open({
+ template: 'externalTemplate.html',
+ controller: 'SomeController'
+});
+```
+
+or
+
+```javascript
+ngDialog.open({
+ template: 'externalTemplate.html',
+ controller: ['$scope', 'otherService', function($scope, otherService) {
+ // controller logic
+ }]
+});
+```
+
+##### ``scope {Object}``
+
+Scope object that will be passed to dialog. If you use controller with separate ``$scope`` service this object will be passed to ``$scope.$parent`` param:
+
+```javascript
+$scope.value = true;
+
+ngDialog.open({
+ template: 'externalTemplate.html',
+ className: 'ngdialog-theme-plain',
+ scope: $scope
+});
+```
+
+```html
+<script type="text/ng-template" id="externalTemplate.html">
+<p>External scope: <code>{{value}}</code></p>
+</script>
+```
+
+##### ``scope.closeThisDialog(value)``
+
+In addition ``.closeThisDialog(value)`` method gets injected to passed ``$scope``. This allows you to close dialog straight from handler in a popup element, for example:
+
+```html
+<div class="dialog-contents">
+ <input type="text"/>
+ <input type="button" value="OK" ng-click="checkInput() && closeThisDialog('Some value')"/>
+</div>
+```
+
+Any value passed to this function will be attached to the object which resolves on the close promise for this dialog. For dialogs opened with the ``openConfirm()`` method the value is used as the reject reason.
+
+##### ``data {String | Object | Array}``
+
+Any data that you want to be stored in controller's ``$parent`` scope, it could be stringified JSON as well.
+
+##### ``className {String}``
+
+This option allows to controll dialog look, you can use built-in [themes](https://github.com/likeastore/ngDialog#themes) or create your own styled modals.
+
+This example enables one of built-in ngDialog themes - ``ngdialog-theme-default`` (do not forget to include necessary css files):
+
+```javascript
+ngDialog.open({
+ template: 'templateId',
+ className: 'ngdialog-theme-default'
+});
+```
+
+Check [themes](https://github.com/likeastore/ngDialog#themes) block to learn more.
+
+##### ``showClose {Boolean}``
+
+If ``false`` it allows to hide close button on modals, default ``true``.
+
+##### ``closeByEscape {Boolean}``
+
+It allows to close modals by clicking ``Esc`` button, default ``true``.
+
+This will close all open modals if there several of them open at the same time.
+
+##### ``closeByDocument {Boolean}``
+
+It allows to close modals by clicking on overlay background, default ``true``. If [Hammer.js](https://github.com/EightMedia/hammer.js) is loaded, it will listen for ``tap`` instead of ``click``.
+
+##### ``appendTo {String}``
+
+Specify your element where to append dialog instance, accepts selector string (e.g. ``#yourId``, ``.yourClass``). If not specified appends dialog to ``body`` as default behavior.
+
+### Defaults
+
+##### ``setDefaults(options)``
+
+You're able to set default settings through ``ngDialogProvider``:
+
+```javascript
+var app = angular.module('myApp', ['ngDialog']);
+app.config(['ngDialogProvider', function (ngDialogProvider) {
+ ngDialogProvider.setDefaults({
+ className: 'ngdialog-theme-default',
+ plain: true,
+ showClose: true,
+ closeByDocument: true,
+ closeByEscape: true
+ });
+}]);
+```
+
+### Returns:
+
+The ``open()`` method returns an object with some useful properties.
+
+##### ``id {String}``
+
+This is the ID of the dialog which was just created. It is the ID on the dialog's DOM element.
+
+##### ``close(value) {Function}``
+
+This is a function which will close the dialog which was opened by the current call to ``open()``. It takes an optional value to pass to the close promise.
+
+##### ``closePromise {Promise}``
+
+A promise which will resolve when the dialog is closed. It is resolved with an object containing: ``id`` - the ID of the closed dialog, ``value`` - the value the dialog was closed with, ``$dialog`` - the dialog element which at this point has been removed from the DOM and ``remainingDialogs`` - the number of dialogs still open.
+
+The value property will be a special string if the dialog is dismissed by one of the built in mechanisms: `'$escape'`, `'$closeButton'` or `'$document'`.
+
+This allows you do to something like this:
+
+```javascript
+var dialog = ngDialog.open({
+ template: 'templateId'
+});
+
+dialog.closePromise.then(function (data) {
+ console.log(data.id + ' has been dismissed.');
+});
+```
+
+===
+
+### ``.openConfirm(options)``
+
+Opens a dialog that by default does not close when hitting escape or clicking outside the dialog window. The function returns a promise that is either resolved or rejected depending on the way the dialog was closed.
+
+### Options:
+
+The options are the same as the regular [``.open()``](https://github.com/likeastore/ngDialog#options) method with an extra function added to the scope:
+
+##### ``scope.confirm()``
+
+In addition to the ``.closeThisDialog()`` method. The method ``.confirm()`` is also injected to passed ``$scope``. Use this method to close the dialog and ``resolve`` the promise that was returned when opening the modal.
+
+The function accepts a single optional parameter which is used as the value of the resolved promise.
+
+```html
+<div class="dialog-contents">
+ Some message
+ <button ng-click="closeThisDialog()">Cancel</button>
+ <button ng-click="confirm()">Confirm</button>
+</div>
+```
+
+### Returns:
+
+An Angular promise object that is resolved if the ``.confirm()`` function is used to close the dialog, otherwise the promise is rejected. The resolve value and the reject reason is defined by the value passed to the ``confirm()`` or ``closeThisDialog()`` call respectively.
+
+===
+
+### ``.close(id, value)``
+
+Method accepts dialog's ``id`` as string argument to close specific dialog window, if ``id`` is not specified it will close all currently active modals (same behavior as ``.closeAll()``). Takes an optional value to resolve the dialog promise with (or all dialog promises).
+
+===
+
+### ``.closeAll(value)``
+
+Method manages closing all active modals on the page. Takes an optional value to resolve all of the dialog promises with.
+
+===
+
+### ``.setForceBodyReload({Boolean})``
+
+Adds additional listener on every ``$locationChangeSuccess`` event and gets update version of ``body`` into dialog. Maybe useful in some rare cases when you're dependant on DOM changes, defaults to ``false``. Use it in module's config as provider instance:
+
+```javascript
+var app = angular.module('exampleApp', ['ngDialog']);
+
+app.config(function (ngDialogProvider) {
+ ngDialogProvider.setForceBodyReload(true);
+});
+```
+
+## Directive
+
+By default ngDialog module is served with ``ngDialog`` directive which can be used as attribute for buttons, links, etc. Almost all ``.open()`` options are available through tag attributes as well, the only difference is that ``ng-template`` id or path of template file is required.
+
+Some imaginary button, for example, will look like:
+
+```html
+<button type="button"
+ ng-dialog="templateId.html"
+ ng-dialog-class="ngdialog-theme-flat"
+ ng-dialog-controller="ModalCtrl"
+ ng-dialog-close-previous>
+ Open modal text
+</button>
+```
+
+Directive contains one more additional but very useful option, it's an attribute named ``ng-dialog-close-previous``. It allows you to close previously opened dialogs automaticly.
+
+## Events
+
+Everytime when ngDialog is opened or closed we're broadcasting two events (dispatching events downwards to all child scopes):
+
+- ``ngDialog.opened``
+
+- ``ngDialog.closed``
+
+This allows you to register your own listeners, example:
+
+```javascript
+$rootScope.$on('ngDialog.opened', function (e, $dialog) {
+ console.log('ngDialog opened: ' + $dialog.attr('id'));
+});
+```
+
+## Themes
+
+Currently ngDialog contains two default themes that show how easily you can create your own. Check ``example`` folder for demonstration purposes.
+
+## CDN
+
+ngDialog is available for public on [cdnjs](http://cdnjs.com/libraries/ng-dialog). Please use following urls for version 0.1.6.
+
+```html
+//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.1.6/ng-dialog.min.css
+//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.1.6/ng-dialog-theme-plain.min.css
+//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.1.6/ng-dialog.min.js
+```
+
+## License
+
+MIT Licensed
+
+Copyright (c) 2013-2014, Likeastore.com <info@likeastore.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/likeastore/ngdialog/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
diff --git a/libs/angularjs/ngDialog/bower.json b/libs/angularjs/ngDialog/bower.json
new file mode 100644
index 0000000000..8d7dd14e7a
--- /dev/null
+++ b/libs/angularjs/ngDialog/bower.json
@@ -0,0 +1,38 @@
+{
+ "name": "ngDialog",
+ "version": "0.2.14",
+ "homepage": "https://github.com/likeastore/ngDialog",
+ "description": "Modal dialogs and popups provider for Angular.js applications",
+ "main": [
+ "js/ngDialog.js",
+ "css/ngDialog.css",
+ "css/ngDialog-theme-default.css"
+ ],
+ "keywords": [
+ "angular.js",
+ "modals",
+ "popups",
+ "dialog",
+ "ng",
+ "provider",
+ "factory",
+ "directive"
+ ],
+ "authors": [
+ "Dmitri Voronianski"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests",
+ "example",
+ "css/myth",
+ "Gruntfile.js"
+ ],
+ "dependencies": {
+ "angular": "~1"
+ }
+}
diff --git a/libs/angularjs/ngDialog/css/myth/ngDialog-theme-default.css b/libs/angularjs/ngDialog/css/myth/ngDialog-theme-default.css
new file mode 100644
index 0000000000..742c1bd220
--- /dev/null
+++ b/libs/angularjs/ngDialog/css/myth/ngDialog-theme-default.css
@@ -0,0 +1,146 @@
+@keyframes ngdialog-flyin {
+ 0% {
+ opacity: 0;
+ transform: translateY(-40px);
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@keyframes ngdialog-flyout {
+ 0% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ transform: translateY(-40px);
+ }
+}
+
+.ngdialog.ngdialog-theme-default {
+ padding-bottom: 160px;
+ padding-top: 160px;
+}
+
+.ngdialog.ngdialog-theme-default.ngdialog-closing .ngdialog-content {
+ animation: ngdialog-flyout .5s;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-content {
+ animation: ngdialog-flyin .5s;
+ background: #f0f0f0;
+ border-radius: 5px;
+ color: #444;
+ font-family: 'Helvetica',sans-serif;
+ font-size: 1.1em;
+ line-height: 1.5em;
+ margin: 0 auto;
+ max-width: 100%;
+ padding: 1em;
+ position: relative;
+ width: 450px;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-close {
+ border-radius: 5px;
+ cursor: pointer;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-close:before {
+ background: transparent;
+ border-radius: 3px;
+ color: #bbb;
+ content: '\00D7';
+ font-size: 26px;
+ font-weight: 400;
+ height: 30px;
+ line-height: 26px;
+ position: absolute;
+ right: 3px;
+ text-align: center;
+ top: 3px;
+ width: 30px;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-close:hover:before,.ngdialog.ngdialog-theme-default .ngdialog-close:active:before {
+ color: #777;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-message {
+ margin-bottom: .5em;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-input {
+ margin-bottom: 1em;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-input textarea,.ngdialog.ngdialog-theme-default .ngdialog-input input[type="text"],.ngdialog.ngdialog-theme-default .ngdialog-input input[type="password"],.ngdialog.ngdialog-theme-default .ngdialog-input input[type="email"],.ngdialog.ngdialog-theme-default .ngdialog-input input[type="url"] {
+ background: #fff;
+ border: 0;
+ border-radius: 3px;
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+ margin: 0 0 .25em;
+ min-height: 2.5em;
+ padding: .25em .67em;
+ width: 100%;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-input textarea:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type="text"]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type="password"]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type="email"]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type="url"]:focus {
+ box-shadow: inset 0 0 0 2px #8dbdf1;
+ outline: none;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-buttons {
+ *zoom: 1;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-buttons:after {
+ content: '';
+ display: table;
+ clear: both;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-button {
+ border: 0;
+ border-radius: 3px;
+ cursor: pointer;
+ float: right;
+ font-family: inherit;
+ font-size: .8em;
+ letter-spacing: .1em;
+ line-height: 1em;
+ margin: 0 0 0 .5em;
+ padding: .75em 2em;
+ text-transform: uppercase;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-button:focus {
+ animation: ngdialog-pulse 1.1s infinite;
+ outline: none;
+}
+
+@media (max-width: 568px) {
+ .ngdialog.ngdialog-theme-default .ngdialog-button:focus {
+ animation: none;
+ }
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-primary {
+ background: #3288e6;
+ color: #fff;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-secondary {
+ background: #e0e0e0;
+ color: #777;
+}
diff --git a/libs/angularjs/ngDialog/css/myth/ngDialog-theme-plain.css b/libs/angularjs/ngDialog/css/myth/ngDialog-theme-plain.css
new file mode 100644
index 0000000000..2b101f4e1f
--- /dev/null
+++ b/libs/angularjs/ngDialog/css/myth/ngDialog-theme-plain.css
@@ -0,0 +1,112 @@
+.ngdialog.ngdialog-theme-plain {
+ padding-bottom: 160px;
+ padding-top: 160px;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-content {
+ background: #fff;
+ color: #444;
+ font-family: 'Helvetica Neue',sans-serif;
+ font-size: 1.1em;
+ line-height: 1.5em;
+ margin: 0 auto;
+ max-width: 100%;
+ padding: 1em;
+ position: relative;
+ width: 450px;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-content h1,.ngdialog.ngdialog-theme-plain .ngdialog-content h2,.ngdialog.ngdialog-theme-plain .ngdialog-content h3,.ngdialog.ngdialog-theme-plain .ngdialog-content h4,.ngdialog.ngdialog-theme-plain .ngdialog-content h5,.ngdialog.ngdialog-theme-plain .ngdialog-content h6,.ngdialog.ngdialog-theme-plain .ngdialog-content p,.ngdialog.ngdialog-theme-plain .ngdialog-content ul,.ngdialog.ngdialog-theme-plain .ngdialog-content li {
+ color: inherit;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-close {
+ cursor: pointer;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-close:before {
+ background: transparent;
+ color: #bbb;
+ content: "\00D7";
+ font-size: 26px;
+ font-weight: 400;
+ height: 30px;
+ line-height: 26px;
+ position: absolute;
+ right: 3px;
+ text-align: center;
+ top: 3px;
+ width: 30px;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-close:hover:before,.ngdialog.ngdialog-theme-plain .ngdialog-close:active:before {
+ color: #777;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-message {
+ margin-bottom: .5em;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-input {
+ margin-bottom: 1em;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-input textarea,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="text"],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="password"],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="email"],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="url"] {
+ background: #f0f0f0;
+ border: 0;
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+ margin: 0 0 .25em;
+ min-height: 2.5em;
+ padding: .25em .67em;
+ width: 100%;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-input textarea:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="text"]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="password"]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="email"]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="url"]:focus {
+ box-shadow: inset 0 0 0 2px rgba(0,0,0,0.2);
+ outline: none;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-buttons:after {
+ clear: both;
+ content: '';
+ display: table;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-button {
+ border: 0;
+ cursor: pointer;
+ float: right;
+ font-family: inherit;
+ font-size: .8em;
+ letter-spacing: .1em;
+ line-height: 1em;
+ margin: 0 0 0 .5em;
+ padding: .75em 2em;
+ text-transform: uppercase;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-button:focus {
+ animation: ngdialog-pulse 1.1s infinite;
+ outline: none;
+}
+
+@media (max-width: 568px) {
+ .ngdialog.ngdialog-theme-plain .ngdialog-button:focus {
+ animation: none;
+ }
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-primary {
+ background: #3288e6;
+ color: #fff;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-secondary {
+ background: #e0e0e0;
+ color: #777;
+}
diff --git a/libs/angularjs/ngDialog/css/myth/ngDialog.css b/libs/angularjs/ngDialog/css/myth/ngDialog.css
new file mode 100644
index 0000000000..40acd9d63d
--- /dev/null
+++ b/libs/angularjs/ngDialog/css/myth/ngDialog.css
@@ -0,0 +1,71 @@
+@keyframes ngdialog-fadeout {
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes ngdialog-fadein {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+.ngdialog, .ngdialog *, .ngdialog *:before, .ngdialog *:after {
+ box-sizing: border-box;
+}
+
+.ngdialog {
+ position: fixed;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ z-index: 10000;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+.ngdialog-overlay {
+ position: fixed;
+ background: rgba(0, 0, 0, 0.4);
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ -webkit-backface-visibility: hidden;
+ animation: ngdialog-fadein 0.5s;
+}
+
+.ngdialog.ngdialog-closing .ngdialog-overlay {
+ -webkit-backface-visibility: hidden;
+ animation: ngdialog-fadeout 0.5s;
+}
+
+.ngdialog-content {
+ background: white;
+ -webkit-backface-visibility: hidden;
+ animation: ngdialog-fadein 0.5s;
+}
+
+.ngdialog.ngdialog-closing .ngdialog-content {
+ -webkit-backface-visibility: hidden;
+ animation: ngdialog-fadeout 0.5s;
+}
+
+.ngdialog-close:before {
+ font-family: 'Helvetica', Arial, sans-serif;
+ content: '\00D7';
+ cursor: pointer;
+}
+
+body.ngdialog-open {
+ overflow: hidden;
+}
diff --git a/libs/angularjs/ngDialog/css/ngDialog-theme-default.css b/libs/angularjs/ngDialog/css/ngDialog-theme-default.css
new file mode 100644
index 0000000000..d163a5403a
--- /dev/null
+++ b/libs/angularjs/ngDialog/css/ngDialog-theme-default.css
@@ -0,0 +1,196 @@
+@-webkit-keyframes ngdialog-flyin {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-40px);
+ transform: translateY(-40px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@keyframes ngdialog-flyin {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-40px);
+ -ms-transform: translateY(-40px);
+ transform: translateY(-40px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@-webkit-keyframes ngdialog-flyout {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-40px);
+ transform: translateY(-40px);
+ }
+}
+
+@keyframes ngdialog-flyout {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ -ms-transform: translateY(0);
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-40px);
+ -ms-transform: translateY(-40px);
+ transform: translateY(-40px);
+ }
+}
+
+.ngdialog.ngdialog-theme-default {
+ padding-bottom: 160px;
+ padding-top: 160px;
+}
+
+.ngdialog.ngdialog-theme-default.ngdialog-closing .ngdialog-content {
+ -webkit-animation: ngdialog-flyout .5s;
+ animation: ngdialog-flyout .5s;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-content {
+ -webkit-animation: ngdialog-flyin .5s;
+ animation: ngdialog-flyin .5s;
+ background: #f0f0f0;
+ border-radius: 5px;
+ color: #444;
+ font-family: 'Helvetica',sans-serif;
+ font-size: 1.1em;
+ line-height: 1.5em;
+ margin: 0 auto;
+ max-width: 100%;
+ padding: 1em;
+ position: relative;
+ width: 450px;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-close {
+ border-radius: 5px;
+ cursor: pointer;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-close:before {
+ background: transparent;
+ border-radius: 3px;
+ color: #bbb;
+ content: '\00D7';
+ font-size: 26px;
+ font-weight: 400;
+ height: 30px;
+ line-height: 26px;
+ position: absolute;
+ right: 3px;
+ text-align: center;
+ top: 3px;
+ width: 30px;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-close:hover:before,
+.ngdialog.ngdialog-theme-default .ngdialog-close:active:before {
+ color: #777;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-message {
+ margin-bottom: .5em;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-input {
+ margin-bottom: 1em;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-input textarea,
+.ngdialog.ngdialog-theme-default .ngdialog-input input[type="text"],
+.ngdialog.ngdialog-theme-default .ngdialog-input input[type="password"],
+.ngdialog.ngdialog-theme-default .ngdialog-input input[type="email"],
+.ngdialog.ngdialog-theme-default .ngdialog-input input[type="url"] {
+ background: #fff;
+ border: 0;
+ border-radius: 3px;
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+ margin: 0 0 .25em;
+ min-height: 2.5em;
+ padding: .25em .67em;
+ width: 100%;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-input textarea:focus,
+.ngdialog.ngdialog-theme-default .ngdialog-input input[type="text"]:focus,
+.ngdialog.ngdialog-theme-default .ngdialog-input input[type="password"]:focus,
+.ngdialog.ngdialog-theme-default .ngdialog-input input[type="email"]:focus,
+.ngdialog.ngdialog-theme-default .ngdialog-input input[type="url"]:focus {
+ -webkit-box-shadow: inset 0 0 0 2px #8dbdf1;
+ box-shadow: inset 0 0 0 2px #8dbdf1;
+ outline: none;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-buttons {
+ *zoom: 1;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-buttons:after {
+ content: '';
+ display: table;
+ clear: both;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-button {
+ border: 0;
+ border-radius: 3px;
+ cursor: pointer;
+ float: right;
+ font-family: inherit;
+ font-size: .8em;
+ letter-spacing: .1em;
+ line-height: 1em;
+ margin: 0 0 0 .5em;
+ padding: .75em 2em;
+ text-transform: uppercase;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-button:focus {
+ -webkit-animation: ngdialog-pulse 1.1s infinite;
+ animation: ngdialog-pulse 1.1s infinite;
+ outline: none;
+}
+
+@media (max-width: 568px) {
+ .ngdialog.ngdialog-theme-default .ngdialog-button:focus {
+ -webkit-animation: none;
+ animation: none;
+ }
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-primary {
+ background: #3288e6;
+ color: #fff;
+}
+
+.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-secondary {
+ background: #e0e0e0;
+ color: #777;
+} \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/css/ngDialog-theme-default.min.css b/libs/angularjs/ngDialog/css/ngDialog-theme-default.min.css
new file mode 100644
index 0000000000..24bcfccb27
--- /dev/null
+++ b/libs/angularjs/ngDialog/css/ngDialog-theme-default.min.css
@@ -0,0 +1,3 @@
+/*! ng-dialog - v0.2.14 (https://github.com/likeastore/ngDialog) */
+
+@-webkit-keyframes ngdialog-flyin{0%{opacity:0;-webkit-transform:translateY(-40px);transform:translateY(-40px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes ngdialog-flyin{0%{opacity:0;-webkit-transform:translateY(-40px);-ms-transform:translateY(-40px);transform:translateY(-40px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes ngdialog-flyout{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes ngdialog-flyout{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-40px);-ms-transform:translateY(-40px);transform:translateY(-40px)}}.ngdialog.ngdialog-theme-default{padding-bottom:160px;padding-top:160px}.ngdialog.ngdialog-theme-default.ngdialog-closing .ngdialog-content{-webkit-animation:ngdialog-flyout .5s;animation:ngdialog-flyout .5s}.ngdialog.ngdialog-theme-default .ngdialog-content{-webkit-animation:ngdialog-flyin .5s;animation:ngdialog-flyin .5s;background:#f0f0f0;border-radius:5px;color:#444;font-family:Helvetica,sans-serif;font-size:1.1em;line-height:1.5em;margin:0 auto;max-width:100%;padding:1em;position:relative;width:450px}.ngdialog.ngdialog-theme-default .ngdialog-close{border-radius:5px;cursor:pointer;position:absolute;right:0;top:0}.ngdialog.ngdialog-theme-default .ngdialog-close:before{background:0 0;border-radius:3px;color:#bbb;content:'\00D7';font-size:26px;font-weight:400;height:30px;line-height:26px;position:absolute;right:3px;text-align:center;top:3px;width:30px}.ngdialog.ngdialog-theme-default .ngdialog-close:active:before,.ngdialog.ngdialog-theme-default .ngdialog-close:hover:before{color:#777}.ngdialog.ngdialog-theme-default .ngdialog-message{margin-bottom:.5em}.ngdialog.ngdialog-theme-default .ngdialog-input{margin-bottom:1em}.ngdialog.ngdialog-theme-default .ngdialog-input input[type=email],.ngdialog.ngdialog-theme-default .ngdialog-input input[type=password],.ngdialog.ngdialog-theme-default .ngdialog-input input[type=text],.ngdialog.ngdialog-theme-default .ngdialog-input input[type=url],.ngdialog.ngdialog-theme-default .ngdialog-input textarea{background:#fff;border:0;border-radius:3px;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0 0 .25em;min-height:2.5em;padding:.25em .67em;width:100%}.ngdialog.ngdialog-theme-default .ngdialog-input input[type=email]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type=password]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type=text]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type=url]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input textarea:focus{-webkit-box-shadow:inset 0 0 0 2px #8dbdf1;box-shadow:inset 0 0 0 2px #8dbdf1;outline:0}.ngdialog.ngdialog-theme-default .ngdialog-buttons{*zoom:1}.ngdialog.ngdialog-theme-default .ngdialog-buttons:after{content:'';display:table;clear:both}.ngdialog.ngdialog-theme-default .ngdialog-button{border:0;border-radius:3px;cursor:pointer;float:right;font-family:inherit;font-size:.8em;letter-spacing:.1em;line-height:1em;margin:0 0 0 .5em;padding:.75em 2em;text-transform:uppercase}.ngdialog.ngdialog-theme-default .ngdialog-button:focus{-webkit-animation:ngdialog-pulse 1.1s infinite;animation:ngdialog-pulse 1.1s infinite;outline:0}@media (max-width:568px){.ngdialog.ngdialog-theme-default .ngdialog-button:focus{-webkit-animation:none;animation:none}}.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-primary{background:#3288e6;color:#fff}.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-secondary{background:#e0e0e0;color:#777} \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/css/ngDialog-theme-plain.css b/libs/angularjs/ngDialog/css/ngDialog-theme-plain.css
new file mode 100644
index 0000000000..b058b53eb9
--- /dev/null
+++ b/libs/angularjs/ngDialog/css/ngDialog-theme-plain.css
@@ -0,0 +1,132 @@
+.ngdialog.ngdialog-theme-plain {
+ padding-bottom: 160px;
+ padding-top: 160px;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-content {
+ background: #fff;
+ color: #444;
+ font-family: 'Helvetica Neue',sans-serif;
+ font-size: 1.1em;
+ line-height: 1.5em;
+ margin: 0 auto;
+ max-width: 100%;
+ padding: 1em;
+ position: relative;
+ width: 450px;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-content h1,
+.ngdialog.ngdialog-theme-plain .ngdialog-content h2,
+.ngdialog.ngdialog-theme-plain .ngdialog-content h3,
+.ngdialog.ngdialog-theme-plain .ngdialog-content h4,
+.ngdialog.ngdialog-theme-plain .ngdialog-content h5,
+.ngdialog.ngdialog-theme-plain .ngdialog-content h6,
+.ngdialog.ngdialog-theme-plain .ngdialog-content p,
+.ngdialog.ngdialog-theme-plain .ngdialog-content ul,
+.ngdialog.ngdialog-theme-plain .ngdialog-content li {
+ color: inherit;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-close {
+ cursor: pointer;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-close:before {
+ background: transparent;
+ color: #bbb;
+ content: "\00D7";
+ font-size: 26px;
+ font-weight: 400;
+ height: 30px;
+ line-height: 26px;
+ position: absolute;
+ right: 3px;
+ text-align: center;
+ top: 3px;
+ width: 30px;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-close:hover:before,
+.ngdialog.ngdialog-theme-plain .ngdialog-close:active:before {
+ color: #777;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-message {
+ margin-bottom: .5em;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-input {
+ margin-bottom: 1em;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-input textarea,
+.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="text"],
+.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="password"],
+.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="email"],
+.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="url"] {
+ background: #f0f0f0;
+ border: 0;
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+ margin: 0 0 .25em;
+ min-height: 2.5em;
+ padding: .25em .67em;
+ width: 100%;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-input textarea:focus,
+.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="text"]:focus,
+.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="password"]:focus,
+.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="email"]:focus,
+.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="url"]:focus {
+ -webkit-box-shadow: inset 0 0 0 2px rgba(0,0,0,0.2);
+ box-shadow: inset 0 0 0 2px rgba(0,0,0,0.2);
+ outline: none;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-buttons:after {
+ clear: both;
+ content: '';
+ display: table;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-button {
+ border: 0;
+ cursor: pointer;
+ float: right;
+ font-family: inherit;
+ font-size: .8em;
+ letter-spacing: .1em;
+ line-height: 1em;
+ margin: 0 0 0 .5em;
+ padding: .75em 2em;
+ text-transform: uppercase;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-button:focus {
+ -webkit-animation: ngdialog-pulse 1.1s infinite;
+ animation: ngdialog-pulse 1.1s infinite;
+ outline: none;
+}
+
+@media (max-width: 568px) {
+ .ngdialog.ngdialog-theme-plain .ngdialog-button:focus {
+ -webkit-animation: none;
+ animation: none;
+ }
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-primary {
+ background: #3288e6;
+ color: #fff;
+}
+
+.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-secondary {
+ background: #e0e0e0;
+ color: #777;
+} \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/css/ngDialog-theme-plain.min.css b/libs/angularjs/ngDialog/css/ngDialog-theme-plain.min.css
new file mode 100644
index 0000000000..45e07ec821
--- /dev/null
+++ b/libs/angularjs/ngDialog/css/ngDialog-theme-plain.min.css
@@ -0,0 +1,3 @@
+/*! ng-dialog - v0.2.14 (https://github.com/likeastore/ngDialog) */
+
+.ngdialog.ngdialog-theme-plain{padding-bottom:160px;padding-top:160px}.ngdialog.ngdialog-theme-plain .ngdialog-content{background:#fff;color:#444;font-family:'Helvetica Neue',sans-serif;font-size:1.1em;line-height:1.5em;margin:0 auto;max-width:100%;padding:1em;position:relative;width:450px}.ngdialog.ngdialog-theme-plain .ngdialog-content h1,.ngdialog.ngdialog-theme-plain .ngdialog-content h2,.ngdialog.ngdialog-theme-plain .ngdialog-content h3,.ngdialog.ngdialog-theme-plain .ngdialog-content h4,.ngdialog.ngdialog-theme-plain .ngdialog-content h5,.ngdialog.ngdialog-theme-plain .ngdialog-content h6,.ngdialog.ngdialog-theme-plain .ngdialog-content li,.ngdialog.ngdialog-theme-plain .ngdialog-content p,.ngdialog.ngdialog-theme-plain .ngdialog-content ul{color:inherit}.ngdialog.ngdialog-theme-plain .ngdialog-close{cursor:pointer;position:absolute;right:0;top:0}.ngdialog.ngdialog-theme-plain .ngdialog-close:before{background:0 0;color:#bbb;content:"\00D7";font-size:26px;font-weight:400;height:30px;line-height:26px;position:absolute;right:3px;text-align:center;top:3px;width:30px}.ngdialog.ngdialog-theme-plain .ngdialog-close:active:before,.ngdialog.ngdialog-theme-plain .ngdialog-close:hover:before{color:#777}.ngdialog.ngdialog-theme-plain .ngdialog-message{margin-bottom:.5em}.ngdialog.ngdialog-theme-plain .ngdialog-input{margin-bottom:1em}.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=email],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=password],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=text],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=url],.ngdialog.ngdialog-theme-plain .ngdialog-input textarea{background:#f0f0f0;border:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0 0 .25em;min-height:2.5em;padding:.25em .67em;width:100%}.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=email]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=password]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=text]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=url]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input textarea:focus{-webkit-box-shadow:inset 0 0 0 2px rgba(0,0,0,.2);box-shadow:inset 0 0 0 2px rgba(0,0,0,.2);outline:0}.ngdialog.ngdialog-theme-plain .ngdialog-buttons:after{clear:both;content:'';display:table}.ngdialog.ngdialog-theme-plain .ngdialog-button{border:0;cursor:pointer;float:right;font-family:inherit;font-size:.8em;letter-spacing:.1em;line-height:1em;margin:0 0 0 .5em;padding:.75em 2em;text-transform:uppercase}.ngdialog.ngdialog-theme-plain .ngdialog-button:focus{-webkit-animation:ngdialog-pulse 1.1s infinite;animation:ngdialog-pulse 1.1s infinite;outline:0}@media (max-width:568px){.ngdialog.ngdialog-theme-plain .ngdialog-button:focus{-webkit-animation:none;animation:none}}.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-primary{background:#3288e6;color:#fff}.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-secondary{background:#e0e0e0;color:#777} \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/css/ngDialog.css b/libs/angularjs/ngDialog/css/ngDialog.css
new file mode 100644
index 0000000000..cfbbb65272
--- /dev/null
+++ b/libs/angularjs/ngDialog/css/ngDialog.css
@@ -0,0 +1,100 @@
+@-webkit-keyframes ngdialog-fadeout {
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@keyframes ngdialog-fadeout {
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+@-webkit-keyframes ngdialog-fadein {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes ngdialog-fadein {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+.ngdialog,
+.ngdialog *,
+.ngdialog *:before,
+.ngdialog *:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.ngdialog {
+ position: fixed;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ z-index: 10000;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+.ngdialog-overlay {
+ position: fixed;
+ background: rgba(0, 0, 0, 0.4);
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ -webkit-backface-visibility: hidden;
+ -webkit-animation: ngdialog-fadein 0.5s;
+ animation: ngdialog-fadein 0.5s;
+}
+
+.ngdialog.ngdialog-closing .ngdialog-overlay {
+ -webkit-backface-visibility: hidden;
+ -webkit-animation: ngdialog-fadeout 0.5s;
+ animation: ngdialog-fadeout 0.5s;
+}
+
+.ngdialog-content {
+ background: white;
+ -webkit-backface-visibility: hidden;
+ -webkit-animation: ngdialog-fadein 0.5s;
+ animation: ngdialog-fadein 0.5s;
+}
+
+.ngdialog.ngdialog-closing .ngdialog-content {
+ -webkit-backface-visibility: hidden;
+ -webkit-animation: ngdialog-fadeout 0.5s;
+ animation: ngdialog-fadeout 0.5s;
+}
+
+.ngdialog-close:before {
+ font-family: 'Helvetica', Arial, sans-serif;
+ content: '\00D7';
+ cursor: pointer;
+}
+
+body.ngdialog-open {
+ overflow: hidden;
+} \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/css/ngDialog.min.css b/libs/angularjs/ngDialog/css/ngDialog.min.css
new file mode 100644
index 0000000000..746f2564fc
--- /dev/null
+++ b/libs/angularjs/ngDialog/css/ngDialog.min.css
@@ -0,0 +1,3 @@
+/*! ng-dialog - v0.2.14 (https://github.com/likeastore/ngDialog) */
+
+@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog,.ngdialog *,.ngdialog :after,.ngdialog :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ngdialog{position:fixed;overflow:auto;-webkit-overflow-scrolling:touch;z-index:10000;top:0;right:0;bottom:0;left:0}.ngdialog-overlay{position:fixed;background:rgba(0,0,0,.4);top:0;right:0;bottom:0;left:0;-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-content{background:#fff;-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}.ngdialog.ngdialog-closing .ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-close:before{font-family:Helvetica,Arial,sans-serif;content:'\00D7';cursor:pointer}body.ngdialog-open{overflow:hidden} \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/example/README.md b/libs/angularjs/ngDialog/example/README.md
new file mode 100644
index 0000000000..2a87d1a6ab
--- /dev/null
+++ b/libs/angularjs/ngDialog/example/README.md
@@ -0,0 +1,24 @@
+# Usage examples
+
+### Static file
+
+You can try ``index.html`` file simply by opening it in a browser.
+
+### Server demo
+
+Or you can check usage of external templates by starting a web server in this folder. At first install npm dependencies from a route folder:
+
+```bash
+$ ngDialog_folder: npm install
+```
+
+Then go to examples folder and start server:
+
+```bash
+$ ngDialog_folder: cd example
+$ ngDialog_folder/example: node server.js
+>> Strata web server version 0.20.1
+>> Listening on 0.0.0.0:1982, CTRL+C to stop
+```
+
+And check in browser url ``0.0.0.0:1982/example/index.html``.
diff --git a/libs/angularjs/ngDialog/example/externalTemplate.html b/libs/angularjs/ngDialog/example/externalTemplate.html
new file mode 100644
index 0000000000..22529e23d8
--- /dev/null
+++ b/libs/angularjs/ngDialog/example/externalTemplate.html
@@ -0,0 +1 @@
+<p>External modal template with external scope: <code>{{value}}</code></p> \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/example/index.html b/libs/angularjs/ngDialog/example/index.html
new file mode 100644
index 0000000000..f48cf90dfb
--- /dev/null
+++ b/libs/angularjs/ngDialog/example/index.html
@@ -0,0 +1,225 @@
+<!doctype html>
+<html ng-app="exampleDialog">
+<head>
+ <meta charset="utf-8">
+ <title>ngDialog demo</title>
+ <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic' rel='stylesheet' type='text/css'>
+ <link rel="stylesheet" href="../css/ngDialog.css">
+ <link rel="stylesheet" href="../css/ngDialog-theme-default.css">
+ <link rel="stylesheet" href="../css/ngDialog-theme-plain.css">
+
+ <style>
+ a, button {
+ font: 14px 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
+ display: block;
+ color: #333;
+ margin-bottom: 10px;
+ }
+ </style>
+</head>
+<body ng-controller="MainCtrl">
+
+ <a href="" ng-click="open()">Open via service</a>
+
+ <button type="button"
+ ng-dialog="firstDialogId"
+ ng-dialog-controller="InsideCtrl"
+ ng-dialog-data="{{jsonData}}"
+ ng-dialog-class="ngdialog-theme-default"
+ ng-dialog-scope="this"
+ ng-dialog-show-close="false">Open via directive</button>
+
+ <a href="" ng-click="openDefault()">Default theme</a>
+ <a href="" ng-click="openPlain()">Plain theme</a>
+ <a href="" ng-click="openInlineController()">Inline controller</a>
+ <a href="" ng-click="openTemplate()">Open with external template for modal</a>
+ <a href="" ng-click="openTimed()">Open and use return value to close later</a>
+ <a href="" ng-click="openNotify()">Open and use promise to know when closed</a>
+ <a href="" ng-click="openConfirm()">Open confirm modal</a>
+
+ <script type="text/ng-template" id="firstDialogId">
+ <div class="ngdialog-message">
+ <h3>ngDialog template</h3>
+ <p ng-show="theme">Test content for <code>{{theme}}</code></p>
+ <p ng-show="ngDialogData.foo">Data passed through directive: <code>{{ngDialogData.foo}}</code></p>
+ <p ng-show="dialogModel.message">Scope passed through directive: <code>{{dialogModel.message}}</code></p>
+ </div>
+ <div class="ngdialog-buttons">
+ <button type="button" class="ngdialog-button ngdialog-button-secondary"
+ ng-dialog="secondDialogId"
+ ng-dialog-class="ngdialog-theme-default"
+ ng-dialog-controller="SecondModalCtrl"
+ ng-dialog-close-previous>Close and open</button>
+ <button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="openSecond()">Open next</button>
+ </div>
+ </script>
+
+ <script type="text/ng-template" id="withInlineController">
+ <div class="ngdialog-message">
+ <h3>ngDialog template</h3>
+ <p ng-show="theme">Test content for <code>{{theme}}</code></p>
+ <p ng-show="exampleExternalData">Example data from external service: <code>{{exampleExternalData}}</code></p>
+ </div>
+ <div class="ngdialog-buttons">
+ <button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="closeThisDialog()">Close</button>
+ </div>
+ </script>
+
+ <script type="text/ng-template" id="secondDialogId">
+ <h3><a href="" ng-click="closeSecond()">Close all by click here!</a></h3>
+ </script>
+
+ <script type="text/ng-template" id="modalDialogId">
+ <div class="ngdialog-message">
+ <h3>ngDialog modal example</h3>
+ <p>The <code>.openConfirm()</code> function returns a promise that is resolved when confirmed and rejected when otherwise closed. Modal dialogs by default do not close when clicked outside the dialog or when hitting escape. This can ofcourse be overridden when opening the dialog.</p>
+ <p>Confirm can take a value. Enter one here for example and see the console output: <input ng-model="confirmValue" /></p>
+ </div>
+ <div class="ngdialog-buttons">
+ <button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="confirm(confirmValue)">Confirm</button>
+ <button type="button" class="ngdialog-button ngdialog-button-secondary" ng-click="closeThisDialog('button')">Cancel</button>
+ </div>
+ </script>
+
+ <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js"></script>
+ <script>window.angular || document.write('<script src="../bower_components/angular/angular.min.js">\x3C/script>')</script>
+ <script src="../js/ngDialog.js"></script>
+ <script>
+ var app = angular.module('exampleDialog', ['ngDialog']);
+
+ // Example of how to set default values for all dialogs
+ app.config(['ngDialogProvider', function (ngDialogProvider) {
+ ngDialogProvider.setDefaults({
+ className: 'ngdialog-theme-default',
+ plain: false,
+ showClose: true,
+ closeByDocument: true,
+ closeByEscape: true,
+ appendTo: false
+ });
+ }]);
+
+ app.controller('MainCtrl', function ($scope, $rootScope, ngDialog) {
+ $rootScope.jsonData = '{"foo": "bar"}';
+ $rootScope.theme = 'ngdialog-theme-default';
+
+ $scope.open = function () {
+ ngDialog.open({ template: 'firstDialogId', controller: 'InsideCtrl' });
+ };
+
+ $scope.openDefault = function () {
+ ngDialog.open({
+ template: 'firstDialogId',
+ controller: 'InsideCtrl',
+ className: 'ngdialog-theme-default'
+ });
+ };
+
+ $scope.openConfirm = function () {
+ ngDialog.openConfirm({
+ template: 'modalDialogId',
+ className: 'ngdialog-theme-default'
+ }).then(function (value) {
+ console.log('Modal promise resolved. Value: ', value);
+ }, function (reason) {
+ console.log('Modal promise rejected. Reason: ', reason);
+ });
+ };
+
+ $scope.openPlain = function () {
+ $rootScope.theme = 'ngdialog-theme-plain';
+
+ ngDialog.open({
+ template: 'firstDialogId',
+ controller: 'InsideCtrl',
+ className: 'ngdialog-theme-plain',
+ closeByDocument: false
+ });
+ };
+
+ $scope.openInlineController = function () {
+ $rootScope.theme = 'ngdialog-theme-plain';
+
+ ngDialog.open({
+ template: 'withInlineController',
+ controller: ['$scope', '$timeout', function ($scope, $timeout) {
+ var counter = 0;
+ var timeout;
+ function count() {
+ $scope.exampleExternalData = 'Counter ' + (counter++);
+ timeout = $timeout(count, 450);
+ }
+ count();
+ $scope.$on('$destroy', function () {
+ $timeout.cancel(timeout);
+ });
+ }],
+ className: 'ngdialog-theme-plain'
+ });
+ };
+
+ $scope.openTemplate = function () {
+ $scope.value = true;
+
+ ngDialog.open({
+ template: 'externalTemplate.html',
+ className: 'ngdialog-theme-plain',
+ scope: $scope
+ });
+ };
+
+ $scope.openTimed = function () {
+ var dialog = ngDialog.open({
+ template: '<p>Just passing through!</p>',
+ plain: true,
+ closeByDocument: false,
+ closeByEscape: false
+ });
+ setTimeout(function () {
+ dialog.close();
+ }, 2000);
+ };
+
+ $scope.openNotify = function () {
+ var dialog = ngDialog.open({
+ template: '<p>You can do whatever you want when I close, however that happens.</p>' +
+ '<div class="ngdialog-buttons"><button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="closeThisDialog(1)">Close Me</button></div>',
+ plain: true
+ });
+ dialog.closePromise.then(function (data) {
+ console.log('ngDialog closed' + (data.value === 1 ? ' using the button' : '') + ' and notified by promise: ' + data.id);
+ });
+ };
+
+ $rootScope.$on('ngDialog.opened', function (e, $dialog) {
+ console.log('ngDialog opened: ' + $dialog.attr('id'));
+ });
+
+ $rootScope.$on('ngDialog.closed', function (e, $dialog) {
+ console.log('ngDialog closed: ' + $dialog.attr('id'));
+ });
+ });
+
+ app.controller('InsideCtrl', function ($scope, ngDialog) {
+ $scope.dialogModel = {
+ message : 'message from passed scope'
+ };
+ $scope.openSecond = function () {
+ ngDialog.open({
+ template: '<h3><a href="" ng-click="closeSecond()">Close all by click here!</a></h3>',
+ plain: true,
+ closeByEscape: false,
+ controller: 'SecondModalCtrl'
+ });
+ };
+ });
+
+ app.controller('SecondModalCtrl', function ($scope, ngDialog) {
+ $scope.closeSecond = function () {
+ ngDialog.close();
+ };
+ });
+
+ </script>
+</body>
+</html>
diff --git a/libs/angularjs/ngDialog/example/server.js b/libs/angularjs/ngDialog/example/server.js
new file mode 100644
index 0000000000..f381235441
--- /dev/null
+++ b/libs/angularjs/ngDialog/example/server.js
@@ -0,0 +1,10 @@
+var path = require('path');
+var server = require('strata');
+var address = require('network-address');
+
+var root = path.resolve('../');
+
+server.use(server.commonLogger);
+server.use(server.file, root);
+server.run();
+console.log(address());
diff --git a/libs/angularjs/ngDialog/js/ngDialog.js b/libs/angularjs/ngDialog/js/ngDialog.js
new file mode 100644
index 0000000000..5c393901e8
--- /dev/null
+++ b/libs/angularjs/ngDialog/js/ngDialog.js
@@ -0,0 +1,348 @@
+/*
+ * ngDialog - easy modals and popup windows
+ * http://github.com/likeastore/ngDialog
+ * (c) 2013 MIT License, https://likeastore.com
+ */
+
+(function (window, angular, undefined) {
+ 'use strict';
+
+ var module = angular.module('ngDialog', []);
+
+ var $el = angular.element;
+ var isDef = angular.isDefined;
+ var style = (document.body || document.documentElement).style;
+ var animationEndSupport = isDef(style.animation) || isDef(style.WebkitAnimation) || isDef(style.MozAnimation) || isDef(style.MsAnimation) || isDef(style.OAnimation);
+ var animationEndEvent = 'animationend webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend';
+ var forceBodyReload = false;
+
+ module.provider('ngDialog', function () {
+ var defaults = this.defaults = {
+ className: 'ngdialog-theme-default',
+ plain: false,
+ showClose: true,
+ closeByDocument: true,
+ closeByEscape: true,
+ appendTo: false
+ };
+
+ this.setForceBodyReload = function (_useIt) {
+ forceBodyReload = _useIt || false;
+ };
+
+ this.setDefaults = function (newDefaults) {
+ angular.extend(defaults, newDefaults);
+ };
+
+ var globalID = 0, dialogsCount = 0, closeByDocumentHandler, defers = {};
+
+ this.$get = ['$document', '$templateCache', '$compile', '$q', '$http', '$rootScope', '$timeout', '$window', '$controller',
+ function ($document, $templateCache, $compile, $q, $http, $rootScope, $timeout, $window, $controller) {
+ var $body = $document.find('body');
+ if (forceBodyReload) {
+ $rootScope.$on('$locationChangeSuccess', function () {
+ $body = $document.find('body');
+ });
+ }
+
+ var privateMethods = {
+ onDocumentKeydown: function (event) {
+ if (event.keyCode === 27) {
+ publicMethods.close('$escape');
+ }
+ },
+
+ setBodyPadding: function (width) {
+ var originalBodyPadding = parseInt(($body.css('padding-right') || 0), 10);
+ $body.css('padding-right', (originalBodyPadding + width) + 'px');
+ $body.data('ng-dialog-original-padding', originalBodyPadding);
+ },
+
+ resetBodyPadding: function () {
+ var originalBodyPadding = $body.data('ng-dialog-original-padding');
+ if (originalBodyPadding) {
+ $body.css('padding-right', originalBodyPadding + 'px');
+ } else {
+ $body.css('padding-right', '');
+ }
+ },
+
+ closeDialog: function ($dialog, value) {
+ var id = $dialog.attr('id');
+ if (typeof window.Hammer !== 'undefined') {
+ window.Hammer($dialog[0]).off('tap', closeByDocumentHandler);
+ } else {
+ $dialog.unbind('click');
+ }
+
+ if (dialogsCount === 1) {
+ $body.unbind('keydown');
+ }
+
+ if (!$dialog.hasClass("ngdialog-closing")){
+ dialogsCount -= 1;
+ }
+
+ if (animationEndSupport) {
+ $dialog.unbind(animationEndEvent).bind(animationEndEvent, function () {
+ $dialog.scope().$destroy();
+ $dialog.remove();
+ if (dialogsCount === 0) {
+ $body.removeClass('ngdialog-open');
+ privateMethods.resetBodyPadding();
+ }
+ $rootScope.$broadcast('ngDialog.closed', $dialog);
+ }).addClass('ngdialog-closing');
+ } else {
+ $dialog.scope().$destroy();
+ $dialog.remove();
+ if (dialogsCount === 0) {
+ $body.removeClass('ngdialog-open');
+ privateMethods.resetBodyPadding();
+ }
+ $rootScope.$broadcast('ngDialog.closed', $dialog);
+ }
+ if (defers[id]) {
+ defers[id].resolve({
+ id: id,
+ value: value,
+ $dialog: $dialog,
+ remainingDialogs: dialogsCount
+ });
+ delete defers[id];
+ }
+ }
+ };
+
+ var publicMethods = {
+
+ /*
+ * @param {Object} options:
+ * - template {String} - id of ng-template, url for partial, plain string (if enabled)
+ * - plain {Boolean} - enable plain string templates, default false
+ * - scope {Object}
+ * - controller {String}
+ * - className {String} - dialog theme class
+ * - showClose {Boolean} - show close button, default true
+ * - closeByEscape {Boolean} - default true
+ * - closeByDocument {Boolean} - default true
+ *
+ * @return {Object} dialog
+ */
+ open: function (opts) {
+ var self = this;
+ var options = angular.copy(defaults);
+
+ opts = opts || {};
+ angular.extend(options, opts);
+
+ globalID += 1;
+
+ self.latestID = 'ngdialog' + globalID;
+
+ var defer;
+ defers[self.latestID] = defer = $q.defer();
+
+ var scope = angular.isObject(options.scope) ? options.scope.$new() : $rootScope.$new();
+ var $dialog, $dialogParent;
+
+ $q.when(loadTemplate(options.template)).then(function (template) {
+ template = angular.isString(template) ?
+ template :
+ template.data && angular.isString(template.data) ?
+ template.data :
+ '';
+
+ $templateCache.put(options.template, template);
+
+ if (options.showClose) {
+ template += '<div class="ngdialog-close"></div>';
+ }
+
+ self.$result = $dialog = $el('<div id="ngdialog' + globalID + '" class="ngdialog"></div>');
+ $dialog.html('<div class="ngdialog-overlay"></div><div class="ngdialog-content">' + template + '</div>');
+
+ if (options.data && angular.isString(options.data)) {
+ var firstLetter = options.data.replace(/^\s*/, '')[0];
+ scope.ngDialogData = (firstLetter === '{' || firstLetter === '[') ? angular.fromJson(options.data) : options.data;
+ } else if (options.data && angular.isObject(options.data)) {
+ scope.ngDialogData = angular.fromJson(angular.toJson(options.data));
+ }
+
+ if (options.controller && (angular.isString(options.controller) || angular.isArray(options.controller) || angular.isFunction(options.controller))) {
+ var controllerInstance = $controller(options.controller, {
+ $scope: scope,
+ $element: $dialog
+ });
+ $dialog.data('$ngDialogControllerController', controllerInstance);
+ }
+
+ if (options.className) {
+ $dialog.addClass(options.className);
+ }
+
+ if (options.appendTo && angular.isString(options.appendTo)) {
+ $dialogParent = angular.element(document.querySelector(options.appendTo));
+ } else {
+ $dialogParent = $body;
+ }
+
+ scope.closeThisDialog = function (value) {
+ privateMethods.closeDialog($dialog, value);
+ };
+
+ $timeout(function () {
+ $compile($dialog)(scope);
+
+ var widthDiffs = $window.innerWidth - $body.prop('clientWidth');
+ $body.addClass('ngdialog-open');
+ var scrollBarWidth = widthDiffs - ($window.innerWidth - $body.prop('clientWidth'));
+ if (scrollBarWidth > 0) {
+ privateMethods.setBodyPadding(scrollBarWidth);
+ }
+ $dialogParent.append($dialog);
+ $rootScope.$broadcast('ngDialog.opened', $dialog);
+ });
+
+ if (options.closeByEscape) {
+ $body.bind('keydown', privateMethods.onDocumentKeydown);
+ }
+
+ closeByDocumentHandler = function (event) {
+ var isOverlay = options.closeByDocument ? $el(event.target).hasClass('ngdialog-overlay') : false;
+ var isCloseBtn = $el(event.target).hasClass('ngdialog-close');
+
+ if (isOverlay || isCloseBtn) {
+ publicMethods.close($dialog.attr('id'), isCloseBtn ? '$closeButton' : '$document');
+ }
+ };
+
+ if (typeof window.Hammer !== 'undefined') {
+ window.Hammer($dialog[0]).on('tap', closeByDocumentHandler);
+ } else {
+ $dialog.bind('click', closeByDocumentHandler);
+ }
+
+ dialogsCount += 1;
+
+ return publicMethods;
+ });
+
+ return {
+ id: 'ngdialog' + globalID,
+ closePromise: defer.promise,
+ close: function(value) {
+ privateMethods.closeDialog($dialog, value);
+ }
+ };
+
+ function loadTemplate (tmpl) {
+ if (!tmpl) {
+ return 'Empty template';
+ }
+
+ if (angular.isString(tmpl) && options.plain) {
+ return tmpl;
+ }
+
+ return $templateCache.get(tmpl) || $http.get(tmpl, { cache: true });
+ }
+ },
+
+ /*
+ * @param {Object} options:
+ * - template {String} - id of ng-template, url for partial, plain string (if enabled)
+ * - plain {Boolean} - enable plain string templates, default false
+ * - scope {Object}
+ * - controller {String}
+ * - className {String} - dialog theme class
+ * - showClose {Boolean} - show close button, default true
+ * - closeByEscape {Boolean} - default false
+ * - closeByDocument {Boolean} - default false
+ *
+ * @return {Object} dialog
+ */
+ openConfirm: function (opts) {
+ var defer = $q.defer();
+
+ var options = {
+ closeByEscape: false,
+ closeByDocument: false
+ };
+ angular.extend(options, opts);
+
+ options.scope = angular.isObject(options.scope) ? options.scope.$new() : $rootScope.$new();
+ options.scope.confirm = function (value) {
+ defer.resolve(value);
+ openResult.close(value);
+ };
+
+ var openResult = publicMethods.open(options);
+ openResult.closePromise.then(function (data) {
+ if (data) {
+ return defer.reject(data.value);
+ }
+ return defer.reject();
+ });
+
+ return defer.promise;
+ },
+
+ /*
+ * @param {String} id
+ * @return {Object} dialog
+ */
+ close: function (id, value) {
+ var $dialog = $el(document.getElementById(id));
+
+ if ($dialog.length) {
+ privateMethods.closeDialog($dialog, value);
+ } else {
+ publicMethods.closeAll(value);
+ }
+
+ return publicMethods;
+ },
+
+ closeAll: function (value) {
+ var $all = document.querySelectorAll('.ngdialog');
+
+ angular.forEach($all, function (dialog) {
+ privateMethods.closeDialog($el(dialog), value);
+ });
+ }
+ };
+
+ return publicMethods;
+ }];
+ });
+
+ module.directive('ngDialog', ['ngDialog', function (ngDialog) {
+ return {
+ restrict: 'A',
+ scope : {
+ ngDialogScope : '='
+ },
+ link: function (scope, elem, attrs) {
+ elem.on('click', function (e) {
+ e.preventDefault();
+
+ var ngDialogScope = angular.isDefined(scope.ngDialogScope) ? scope.ngDialogScope : 'noScope';
+ angular.isDefined(attrs.ngDialogClosePrevious) && ngDialog.close(attrs.ngDialogClosePrevious);
+
+ ngDialog.open({
+ template: attrs.ngDialog,
+ className: attrs.ngDialogClass,
+ controller: attrs.ngDialogController,
+ scope: ngDialogScope ,
+ data: attrs.ngDialogData,
+ showClose: attrs.ngDialogShowClose === 'false' ? false : true,
+ closeByDocument: attrs.ngDialogCloseByDocument === 'false' ? false : true,
+ closeByEscape: attrs.ngDialogCloseByEscape === 'false' ? false : true
+ });
+ });
+ }
+ };
+ }]);
+
+})(window, window.angular);
diff --git a/libs/angularjs/ngDialog/js/ngDialog.min.js b/libs/angularjs/ngDialog/js/ngDialog.min.js
new file mode 100644
index 0000000000..1849205be8
--- /dev/null
+++ b/libs/angularjs/ngDialog/js/ngDialog.min.js
@@ -0,0 +1,2 @@
+/*! ng-dialog - v0.2.14 (https://github.com/likeastore/ngDialog) */
+!function(a,b){"use strict";var c=b.module("ngDialog",[]),d=b.element,e=b.isDefined,f=(document.body||document.documentElement).style,g=e(f.animation)||e(f.WebkitAnimation)||e(f.MozAnimation)||e(f.MsAnimation)||e(f.OAnimation),h="animationend webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend",i=!1;c.provider("ngDialog",function(){var c=this.defaults={className:"ngdialog-theme-default",plain:!1,showClose:!0,closeByDocument:!0,closeByEscape:!0,appendTo:!1};this.setForceBodyReload=function(a){i=a||!1},this.setDefaults=function(a){b.extend(c,a)};var e,f=0,j=0,k={};this.$get=["$document","$templateCache","$compile","$q","$http","$rootScope","$timeout","$window","$controller",function(l,m,n,o,p,q,r,s,t){var u=l.find("body");i&&q.$on("$locationChangeSuccess",function(){u=l.find("body")});var v={onDocumentKeydown:function(a){27===a.keyCode&&w.close("$escape")},setBodyPadding:function(a){var b=parseInt(u.css("padding-right")||0,10);u.css("padding-right",b+a+"px"),u.data("ng-dialog-original-padding",b)},resetBodyPadding:function(){var a=u.data("ng-dialog-original-padding");a?u.css("padding-right",a+"px"):u.css("padding-right","")},closeDialog:function(b,c){var d=b.attr("id");"undefined"!=typeof a.Hammer?a.Hammer(b[0]).off("tap",e):b.unbind("click"),1===j&&u.unbind("keydown"),b.hasClass("ngdialog-closing")||(j-=1),g?b.unbind(h).bind(h,function(){b.scope().$destroy(),b.remove(),0===j&&(u.removeClass("ngdialog-open"),v.resetBodyPadding()),q.$broadcast("ngDialog.closed",b)}).addClass("ngdialog-closing"):(b.scope().$destroy(),b.remove(),0===j&&(u.removeClass("ngdialog-open"),v.resetBodyPadding()),q.$broadcast("ngDialog.closed",b)),k[d]&&(k[d].resolve({id:d,value:c,$dialog:b,remainingDialogs:j}),delete k[d])}},w={open:function(g){function h(a){return a?b.isString(a)&&l.plain?a:m.get(a)||p.get(a,{cache:!0}):"Empty template"}var i=this,l=b.copy(c);g=g||{},b.extend(l,g),f+=1,i.latestID="ngdialog"+f;var x;k[i.latestID]=x=o.defer();var y,z,A=b.isObject(l.scope)?l.scope.$new():q.$new();return o.when(h(l.template)).then(function(c){if(c=b.isString(c)?c:c.data&&b.isString(c.data)?c.data:"",m.put(l.template,c),l.showClose&&(c+='<div class="ngdialog-close"></div>'),i.$result=y=d('<div id="ngdialog'+f+'" class="ngdialog"></div>'),y.html('<div class="ngdialog-overlay"></div><div class="ngdialog-content">'+c+"</div>"),l.data&&b.isString(l.data)){var g=l.data.replace(/^\s*/,"")[0];A.ngDialogData="{"===g||"["===g?b.fromJson(l.data):l.data}else l.data&&b.isObject(l.data)&&(A.ngDialogData=b.fromJson(b.toJson(l.data)));if(l.controller&&(b.isString(l.controller)||b.isArray(l.controller)||b.isFunction(l.controller))){var h=t(l.controller,{$scope:A,$element:y});y.data("$ngDialogControllerController",h)}return l.className&&y.addClass(l.className),z=l.appendTo&&b.isString(l.appendTo)?b.element(document.querySelector(l.appendTo)):u,A.closeThisDialog=function(a){v.closeDialog(y,a)},r(function(){n(y)(A);var a=s.innerWidth-u.prop("clientWidth");u.addClass("ngdialog-open");var b=a-(s.innerWidth-u.prop("clientWidth"));b>0&&v.setBodyPadding(b),z.append(y),q.$broadcast("ngDialog.opened",y)}),l.closeByEscape&&u.bind("keydown",v.onDocumentKeydown),e=function(a){var b=l.closeByDocument?d(a.target).hasClass("ngdialog-overlay"):!1,c=d(a.target).hasClass("ngdialog-close");(b||c)&&w.close(y.attr("id"),c?"$closeButton":"$document")},"undefined"!=typeof a.Hammer?a.Hammer(y[0]).on("tap",e):y.bind("click",e),j+=1,w}),{id:"ngdialog"+f,closePromise:x.promise,close:function(a){v.closeDialog(y,a)}}},openConfirm:function(a){var c=o.defer(),d={closeByEscape:!1,closeByDocument:!1};b.extend(d,a),d.scope=b.isObject(d.scope)?d.scope.$new():q.$new(),d.scope.confirm=function(a){c.resolve(a),e.close(a)};var e=w.open(d);return e.closePromise.then(function(a){return a?c.reject(a.value):c.reject()}),c.promise},close:function(a,b){var c=d(document.getElementById(a));return c.length?v.closeDialog(c,b):w.closeAll(b),w},closeAll:function(a){var c=document.querySelectorAll(".ngdialog");b.forEach(c,function(b){v.closeDialog(d(b),a)})}};return w}]}),c.directive("ngDialog",["ngDialog",function(a){return{restrict:"A",scope:{ngDialogScope:"="},link:function(c,d,e){d.on("click",function(d){d.preventDefault();var f=b.isDefined(c.ngDialogScope)?c.ngDialogScope:"noScope";b.isDefined(e.ngDialogClosePrevious)&&a.close(e.ngDialogClosePrevious),a.open({template:e.ngDialog,className:e.ngDialogClass,controller:e.ngDialogController,scope:f,data:e.ngDialogData,showClose:"false"===e.ngDialogShowClose?!1:!0,closeByDocument:"false"===e.ngDialogCloseByDocument?!1:!0,closeByEscape:"false"===e.ngDialogCloseByEscape?!1:!0})})}}}])}(window,window.angular); \ No newline at end of file
diff --git a/libs/angularjs/ngDialog/package.json b/libs/angularjs/ngDialog/package.json
new file mode 100644
index 0000000000..cd2140bb0e
--- /dev/null
+++ b/libs/angularjs/ngDialog/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "ng-dialog",
+ "version": "0.2.14",
+ "homepage": "https://github.com/likeastore/ngDialog",
+ "description": "Modal dialogs and popups provider for Angular.js applications",
+ "main": "./js/ngDialog.js",
+ "keywords": [
+ "angular.js",
+ "modals",
+ "popups",
+ "dialog",
+ "ng",
+ "provider",
+ "factory",
+ "directive"
+ ],
+ "author": {
+ "name": "Dmitri Voronianski",
+ "email": "dmitri.voronianski@gmail.com",
+ "web": "http://pixelhunter.me",
+ "twitter": "voronianski"
+ },
+ "bugs": "https://github.com/likeastore/ngDialog/issues",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/likeastore/ngDialog"
+ },
+ "readmeFilename": "README.md",
+ "license": "MIT",
+ "devDependencies": {
+ "grunt": "~0.4.2",
+ "grunt-contrib-cssmin": "^0.9.0",
+ "grunt-contrib-jshint": "~0.7.2",
+ "grunt-contrib-uglify": "~0.2.7",
+ "grunt-myth": "~0.1.0",
+ "myth": "~0.1.6",
+ "network-address": "0.0.4",
+ "strata": "~0.20.1"
+ }
+}