From 3d2fda7dd39e2363682f1fa353c951ab0d44ddfa Mon Sep 17 00:00:00 2001 From: Fulup Ar Foll Date: Tue, 9 Feb 2016 18:40:49 +0100 Subject: Implemented URL query parsing for initial token /opa/?token=abcde --- .../angular-ui-notification/.bower.json | 45 ++++++ .../angular-ui-notification/LICENSE | 21 +++ .../angular-ui-notification/README.md | 174 +++++++++++++++++++++ .../angular-ui-notification/bower.json | 36 +++++ .../dist/angular-ui-notification.min.css | 8 + .../dist/angular-ui-notification.min.js | 8 + .../angular-ui-notification/gulpfile.js | 92 +++++++++++ .../angular-ui-notification/package.json | 45 ++++++ .../angular-ui-notification/protractor_conf.js | 24 +++ .../src/angular-ui-notification.html | 4 + .../src/angular-ui-notification.js | 172 ++++++++++++++++++++ .../src/angular-ui-notification.less | 55 +++++++ 12 files changed, 684 insertions(+) create mode 100644 afb-client/bower_components/angular-ui-notification/.bower.json create mode 100644 afb-client/bower_components/angular-ui-notification/LICENSE create mode 100644 afb-client/bower_components/angular-ui-notification/README.md create mode 100644 afb-client/bower_components/angular-ui-notification/bower.json create mode 100644 afb-client/bower_components/angular-ui-notification/dist/angular-ui-notification.min.css create mode 100644 afb-client/bower_components/angular-ui-notification/dist/angular-ui-notification.min.js create mode 100644 afb-client/bower_components/angular-ui-notification/gulpfile.js create mode 100644 afb-client/bower_components/angular-ui-notification/package.json create mode 100644 afb-client/bower_components/angular-ui-notification/protractor_conf.js create mode 100644 afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.html create mode 100644 afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.js create mode 100644 afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.less (limited to 'afb-client/bower_components/angular-ui-notification') diff --git a/afb-client/bower_components/angular-ui-notification/.bower.json b/afb-client/bower_components/angular-ui-notification/.bower.json new file mode 100644 index 0000000..5134bb2 --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/.bower.json @@ -0,0 +1,45 @@ +{ + "name": "angular-ui-notification", + "version": "0.0.14", + "homepage": "https://github.com/alexcrack/angular-ui-notification", + "repository": { + "type": "git", + "url": "git://github.com/alexcrack/angular-ui-notification" + }, + "authors": [ + "Alexey Avramchik" + ], + "description": "Angular.js service providing simple notifications using Bootstrap 3 styles with css transitions for animating", + "main": [ + "dist/angular-ui-notification.min.css", + "dist/angular-ui-notification.min.js" + ], + "keywords": [ + "angular", + "notification", + "notify", + "bootstrap" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests", + "demo", + "build" + ], + "devDependencies": { + "bootstrap": "~3.3.2" + }, + "_release": "0.0.14", + "_resolution": { + "type": "version", + "tag": "v0.0.14", + "commit": "bef09d9274cfc37030f065e452f259ddd2fd9c57" + }, + "_source": "git://github.com/alexcrack/angular-ui-notification.git", + "_target": "~0.0.14", + "_originalSource": "angular-ui-notification" +} \ No newline at end of file diff --git a/afb-client/bower_components/angular-ui-notification/LICENSE b/afb-client/bower_components/angular-ui-notification/LICENSE new file mode 100644 index 0000000..678fd37 --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Alexey Avramchik + +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. diff --git a/afb-client/bower_components/angular-ui-notification/README.md b/afb-client/bower_components/angular-ui-notification/README.md new file mode 100644 index 0000000..544b3a0 --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/README.md @@ -0,0 +1,174 @@ +angular-ui-notification +======================= + +[![Dependency Status](https://david-dm.org/alexcrack/angular-ui-notification.png)](https://david-dm.org/alexcrack/angular-ui-notification) +[![devDependency Status](https://david-dm.org/alexcrack/angular-ui-notification/dev-status.png)](https://david-dm.org/alexcrack/angular-ui-notification#info=devDependencies) +[![Build Status](https://travis-ci.org/alexcrack/angular-ui-notification.svg?branch=master)](https://travis-ci.org/alexcrack/angular-ui-notification) +[![Dependency Status](https://www.versioneye.com/user/projects/54f96af44f3108e7800000e4/badge.svg?style=flat)](https://www.versioneye.com/user/projects/54f96af44f3108e7800000e4) +[![Code Climate](https://codeclimate.com/github/alexcrack/angular-ui-notification/badges/gpa.svg)](https://codeclimate.com/github/alexcrack/angular-ui-notification) + +Angular.js service providing simple notifications using Bootstrap 3 styles with css transitions for animations + +## Features +* No dependencies except of angular.js. +* CSS3 Animations. +* Small size. +* 5 message types. +* Use HTML in your messages. +* Configure options globally py the provider +* Use custom options by the message +* Use custom template + +## Install + +To install the package using bower and save as a dependency use... +```bash +bower install angular-ui-notification --save +``` + +## Usage + [Heres a plunker demo](http://plnkr.co/edit/5Gk8UVvzUsjyof7Gxsua?p=preview) + + +In your html/template add +```html +... + +... + +... + +``` + +In your application, declare dependency injection like so.. + +```javascript + angular.module('notificationTest', ['ui-notification']); +... +``` + +You can configure module by the provider +```javascript +angular.module('notificationTest', ['ui-notification']) + .config(function(NotificationProvider) { + NotificationProvider.setOptions({ + delay: 10000, + startTop: 20, + startRight: 10, + verticalSpacing: 20, + horizontalSpacing: 20, + positionX: 'left', + positionY: 'bottom' + }); + }); +... +``` + + +And when you need to show notifications, inject service and call it! + +```javascript +angular.module('notificationTest').controller('notificationController', function($scope, Notification) { + + Notification.primary('Primary notification'); + // or simply.. + Notification('Primary notification'); + + // Other Options + // Success + Notification.success('Success notification'); + + // With Title + Notification({message: 'Primary notification', title: 'Primary notification'}); + + // Message with custom delay + Notification.error({message: 'Error notification 1s', delay: 1000}); + + // Embed HTML within your message..... + Notification.success({message: 'Success notification
Some other content
This is a link
', title: 'Html content'}); + + // Change position notification + Notification.error({message: 'Error Bottom Right', positionY: 'bottom', positionX: 'right'}); + + // Replace message + Notification.error({message: 'Error notification 1s', replaceMessage: true}); +} +``` + +## Service + +Module name: "ui-notification" + +Service: "Notification" + +Configuration provider: "NotificationProvider" + + +## Options + +Options can be passed to configuration provider globally or used in the current message. + +The options list: + +| Option | Possible values | Default value | Description | +| ----------------- | ------------------------- | ------------------------------ | ------------------------------------------------------------------------ | +| delay | Any integer value | 5000 | The time in ms the message is showing before start fading out | +| startTop | Any integer value | 10 | Vertical padding between messages and vertical border of the browser | +| startRight | Any integer value | 10 | Horizontal padding between messages and horizontal border of the browser | +| verticalSpacing | Any integer value | 10 | Vertical spacing between messages | +| horizontalSpacing | Any integer value | 10 | Horizontal spacing between messages | +| positionX | "right", "left", "center" | "right" | Horizontal position of the message | +| positionY | "top", "bottom" | "top" | Vertical position of the message | +| replaceMessage | true, false | false | If true every next appearing message replace old messages | +| templateUrl | Any string | "angular-ui-notification.html" | Custom template filename (URL) | + +Also you can pass the "scope" option. This is an angular scope option Notification scope will be inherited from. This option can be passed only in the methods. The default value is $rootScope + +## Methods + +#### Notification service methods + +| Method name | Description | +|----------------------------------------|-------------------------------------------------| +| Notification(), Notification.primary() | Show the message with bootstrap's primary class | +| Notification.info() | Show the message with bootstrap's info class | +| Notification.success() | Show the message with bootstrap's success class | +| Notification.warning() | Show the message with bootstrap's warn class | +| Notification.error() | Show the message with bootstrap's danger class | +| Notification.clearAll() | Remove all shown messages | + +#### Notification service options + +| Option | Possible values | Default value | Description | +| -------------- | ------------------------------------------------ | --------------------------------- | ------------------------------------------------------------------------------------------------------ | +| title | *String* | `""` | Title to appear at the top of the notification | +| message | *String* | `""` | Message to appear in the notification | +| templateUrl | *String* | `"angular-ui-notification.html"` | URL of template to be used for notification | +| delay | *Int* (?) | `5000` or configured global delay | Number of ms before notification fades out. If not an integer, notification will persist until killed. | +| type | "primary", "info", "success", "warning", "error" | `"primary"` | Bootstrap flavoring | +| positionY | "top", "bottom" | `"top"` | | +| positionX | "right", "left", "center" | `"right" | | +| replaceMessage | *Boolean* | `false` | If true this message will replace old(er) message(s) | + +#### Returning value + +Every "show" method returns a promise resolves a notification scope with methods: + +| Method name | Description | +|--------------------------------|------------------------------------------------------------------------------------------------------------------| +| notificationScope.kill(isHard) | Remove the specific message
isHard - if false or omitted kill message with fadeout effect (default). If true - immediately remove the message| + + + +## Custom Templates + +Custom template can be provided. + +```html +
+

+
+
+``` +Default existing scope values is "title" - the title of the message and "message". +Also any custom scope's properties can be used. diff --git a/afb-client/bower_components/angular-ui-notification/bower.json b/afb-client/bower_components/angular-ui-notification/bower.json new file mode 100644 index 0000000..8daf8fd --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/bower.json @@ -0,0 +1,36 @@ +{ + "name": "angular-ui-notification", + "version": "0.0.12", + "homepage": "https://github.com/alexcrack/angular-ui-notification", + "repository": { + "type": "git", + "url": "git://github.com/alexcrack/angular-ui-notification" + }, + "authors": [ + "Alexey Avramchik" + ], + "description": "Angular.js service providing simple notifications using Bootstrap 3 styles with css transitions for animating", + "main": [ + "dist/angular-ui-notification.min.css", + "dist/angular-ui-notification.min.js" + ], + "keywords": [ + "angular", + "notification", + "notify", + "bootstrap" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests", + "demo", + "build" + ], + "devDependencies": { + "bootstrap": "~3.3.2" + } +} diff --git a/afb-client/bower_components/angular-ui-notification/dist/angular-ui-notification.min.css b/afb-client/bower_components/angular-ui-notification/dist/angular-ui-notification.min.css new file mode 100644 index 0000000..491ef93 --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/dist/angular-ui-notification.min.css @@ -0,0 +1,8 @@ +/** + * angular-ui-notification - Angular.js service providing simple notifications using Bootstrap 3 styles with css transitions for animating + * @author Alex_Crack + * @version v0.0.14 + * @link https://github.com/alexcrack/angular-ui-notification + * @license MIT + */ +.ui-notification{position:fixed;z-index:9999;width:300px;cursor:pointer;-webkit-transition:all ease .5s;-o-transition:all ease .5s;transition:all ease .5s;color:#fff;background:#337ab7;box-shadow:5px 5px 10px rgba(0,0,0,.3)}.ui-notification.killed{-webkit-transition:opacity ease 1s;-o-transition:opacity ease 1s;transition:opacity ease 1s;opacity:0}.ui-notification>h3{font-size:14px;font-weight:700;display:block;margin:10px 10px 0;padding:0 0 5px;text-align:left;border-bottom:1px solid rgba(255,255,255,.3)}.ui-notification a{color:#fff}.ui-notification a:hover{text-decoration:underline}.ui-notification>.message{margin:10px}.ui-notification.warning{color:#fff;background:#f0ad4e}.ui-notification.error{color:#fff;background:#d9534f}.ui-notification.success{color:#fff;background:#5cb85c}.ui-notification.info{color:#fff;background:#5bc0de}.ui-notification:hover{opacity:.7} \ No newline at end of file diff --git a/afb-client/bower_components/angular-ui-notification/dist/angular-ui-notification.min.js b/afb-client/bower_components/angular-ui-notification/dist/angular-ui-notification.min.js new file mode 100644 index 0000000..e69118a --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/dist/angular-ui-notification.min.js @@ -0,0 +1,8 @@ +/** + * angular-ui-notification - Angular.js service providing simple notifications using Bootstrap 3 styles with css transitions for animating + * @author Alex_Crack + * @version v0.0.14 + * @link https://github.com/alexcrack/angular-ui-notification + * @license MIT + */ +angular.module("ui-notification",[]),angular.module("ui-notification").provider("Notification",function(){this.options={delay:5e3,startTop:10,startRight:10,verticalSpacing:10,horizontalSpacing:10,positionX:"right",positionY:"top",replaceMessage:!1,templateUrl:"angular-ui-notification.html"},this.setOptions=function(t){if(!angular.isObject(t))throw new Error("Options should be an object!");this.options=angular.extend({},this.options,t)},this.$get=["$timeout","$http","$compile","$templateCache","$rootScope","$injector","$sce","$q","$window",function(t,e,i,n,o,s,a,r,l){var p=this.options,c=p.startTop,u=p.startRight,d=p.verticalSpacing,m=p.horizontalSpacing,g=p.delay,f=[],h=!1,v=function(s,v){var y=r.defer();return"object"!=typeof s&&(s={message:s}),s.scope=s.scope?s.scope:o,s.template=s.templateUrl?s.templateUrl:p.templateUrl,s.delay=angular.isUndefined(s.delay)?g:s.delay,s.type=v?v:"",s.positionY=s.positionY?s.positionY:p.positionY,s.positionX=s.positionX?s.positionX:p.positionX,s.replaceMessage=s.replaceMessage?s.replaceMessage:p.replaceMessage,e.get(s.template,{cache:n}).success(function(e){var n=s.scope.$new();n.message=a.trustAsHtml(s.message),n.title=a.trustAsHtml(s.title),n.t=s.type.substr(0,1),n.delay=s.delay;var o=function(){for(var t=0,e=0,i=c,n=u,o=[],a=f.length-1;a>=0;a--){var r=f[a];if(s.replaceMessage&&awindow.innerHeight&&(g=c,e++,t=0);var h=i=g?0===t?g:g+d:c,v=n+e*(m+p);r.css(r._positionY,h+"px"),"center"==r._positionX?r.css("left",parseInt(window.innerWidth/2-p/2)+"px"):r.css(r._positionX,v+"px"),o[r._positionY+r._positionX]=h+l,t++}}},r=i(e)(n);r._positionY=s.positionY,r._positionX=s.positionX,r.addClass(s.type),r.bind("webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd click",function(t){t=t.originalEvent||t,("click"===t.type||"opacity"===t.propertyName&&t.elapsedTime>=1)&&(r.remove(),f.splice(f.indexOf(r),1),o())}),angular.isNumber(s.delay)&&t(function(){r.addClass("killed")},s.delay),angular.element(document.getElementsByTagName("body")).append(r);var p=-(parseInt(r[0].offsetHeight)+50);r.css(r._positionY,p+"px"),f.push(r),n._templateElement=r,n.kill=function(e){e?(f.splice(f.indexOf(n._templateElement),1),n._templateElement.remove(),t(o)):n._templateElement.addClass("killed")},t(o),h||(angular.element(l).bind("resize",function(){t(o)}),h=!0),y.resolve(n)}).error(function(t){throw new Error("Template ("+s.template+") could not be loaded. "+t)}),y.promise};return v.primary=function(t){return this(t,"primary")},v.error=function(t){return this(t,"error")},v.success=function(t){return this(t,"success")},v.info=function(t){return this(t,"info")},v.warning=function(t){return this(t,"warning")},v.clearAll=function(){angular.forEach(f,function(t){t.addClass("killed")})},v}]}),angular.module("ui-notification").run(["$templateCache",function(t){t.put("angular-ui-notification.html",'

')}]); \ No newline at end of file diff --git a/afb-client/bower_components/angular-ui-notification/gulpfile.js b/afb-client/bower_components/angular-ui-notification/gulpfile.js new file mode 100644 index 0000000..f7c7d59 --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/gulpfile.js @@ -0,0 +1,92 @@ +var gulp = require('gulp'); +var less = require('gulp-less'); +var minifyCSS = require('gulp-minify-css'); +var csscomb = require('gulp-csscomb'); +var ngAnnotate = require('gulp-ng-annotate'); +var uglify = require('gulp-uglify'); +var jshint = require('gulp-jshint'); +var rename = require('gulp-rename'); +var header = require('gulp-header'); +var templateCache = require('gulp-angular-templatecache'); +var minifyHtml = require("gulp-minify-html"); +var concat = require('gulp-concat'); +var addsrc = require('gulp-add-src'); +var order = require("gulp-order"); +var protractor = require("gulp-protractor").protractor; + +var pkg = require('./package.json'); +var banner = ['/**', + ' * <%= pkg.name %> - <%= pkg.description %>', + ' * @author <%= pkg.author %>', + ' * @version v<%= pkg.version %>', + ' * @link <%= pkg.homepage %>', + ' * @license <%= pkg.license %>', + ' */', + ''].join('\n'); + + // ==== Styles +gulp.task('styles', function() { + gulp.src('src/angular-ui-notification.less') + .pipe(less({ + strictMath: true + })) + .pipe(csscomb()) + .pipe(minifyCSS()) + .pipe(rename({ + suffix: '.min' + })) + .pipe(header(banner, { pkg : pkg })) + .pipe(gulp.dest('dist')) + .pipe(gulp.dest('demo')); +}); + +// ====== Templates +gulp.task('templates', function() { + gulp.src(['*.html'], {cwd: 'src'}) + .pipe(minifyHtml({ + empty: true, + spare: true, + quotes: true + })) + .pipe(templateCache({ + module: 'ui-notification', + })) + .pipe(rename('angular-ui-notification.templates.js')) + .pipe(gulp.dest("build")); +}); + +gulp.task('service', function() { + gulp.src(['src/*.js']) + .pipe(jshint()) + .pipe(jshint.reporter('default')) + .pipe(jshint.reporter('fail')) + .pipe(ngAnnotate()) + .pipe(addsrc('build/*.js')) + .pipe(order([ + 'src/*.js', + 'build/angular-ui-notification.templates.js' + ])) + .pipe(concat('angular-ui-notification.js')) + .pipe(uglify()) + .pipe(rename({ + suffix: '.min' + })) + .pipe(header(banner, { pkg : pkg })) + .pipe(gulp.dest('dist')) + .pipe(gulp.dest('demo')); +}); + +// ====== +gulp.task('e2eTest', function() { + gulp.src(['./test/**/*_spec.js']) + .pipe(protractor({ + configFile: "protractor_conf.js", + })) + .on('error', function(e) {throw e}); +}); + +gulp.task('tests', ['e2eTest']); +gulp.task('build', ['templates', 'service', 'styles']); +gulp.task('deploy', ['build', 'tests']); + +gulp.task('default', ['deploy'], function() {}); \ No newline at end of file diff --git a/afb-client/bower_components/angular-ui-notification/package.json b/afb-client/bower_components/angular-ui-notification/package.json new file mode 100644 index 0000000..68f5905 --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/package.json @@ -0,0 +1,45 @@ +{ + "name": "angular-ui-notification", + "version": "0.0.14", + "description": "Angular.js service providing simple notifications using Bootstrap 3 styles with css transitions for animating", + "main": "dist/angular-ui-notification.min", + "scripts": { + "update-chromedriver": "./node_modules/protractor/bin/webdriver-manager update", + "test": "gulp tests" + }, + "repository": { + "type": "git", + "url": "https://github.com/alexcrack/angular-ui-notification.git" + }, + "keywords": [ + "angular", + "notification", + "notify", + "bootstrap" + ], + "author": "Alex_Crack", + "license": "MIT", + "bugs": { + "url": "https://github.com/alexcrack/angular-ui-notification/issues" + }, + "homepage": "https://github.com/alexcrack/angular-ui-notification", + "devDependencies": { + "chromedriver": "^2.14.1", + "gulp": "^3.8.11", + "gulp-add-src": "^0.2.0", + "gulp-angular-templatecache": "^1.5.0", + "gulp-concat": "^2.5.2", + "gulp-csscomb": "^3.0.3", + "gulp-header": "^1.2.2", + "gulp-jshint": "^1.9.2", + "gulp-less": "^3.0.1", + "gulp-minify-css": "^0.5.1", + "gulp-minify-html": "^1.0.0", + "gulp-ng-annotate": "^0.5.2", + "gulp-order": "^1.1.1", + "gulp-protractor": "0.0.12", + "gulp-rename": "^1.2.0", + "gulp-uglify": "^1.1.0", + "protractor": "^1.8.0" + } +} diff --git a/afb-client/bower_components/angular-ui-notification/protractor_conf.js b/afb-client/bower_components/angular-ui-notification/protractor_conf.js new file mode 100644 index 0000000..5ceda91 --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/protractor_conf.js @@ -0,0 +1,24 @@ +// An example configuration file. +exports.config = { + allScriptsTimeout: 99999, + // Do not start a Selenium Standalone sever - only run this using chrome. + directConnect: true, + //chromeDriver: './node_modules/protractor/selenium/chromedriver', + + seleniumArgs: ['-browserTimeout=60'], + + // Capabilities to be passed to the webdriver instance. + capabilities: { + 'browserName': 'firefox' + }, + + // Spec patterns are relative to the current working directly when + // protractor is called. + specs: ['test/e2e/**/*.spec.js'], + + // Options to be passed to Jasmine-node. + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + } +}; diff --git a/afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.html b/afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.html new file mode 100644 index 0000000..5f628fc --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.html @@ -0,0 +1,4 @@ +
+

+
+
\ No newline at end of file diff --git a/afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.js b/afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.js new file mode 100644 index 0000000..e94fa2c --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.js @@ -0,0 +1,172 @@ +angular.module('ui-notification',[]); + +angular.module('ui-notification').provider('Notification', function() { + + this.options = { + delay: 5000, + startTop: 10, + startRight: 10, + verticalSpacing: 10, + horizontalSpacing: 10, + positionX: 'right', + positionY: 'top', + replaceMessage: false, + templateUrl: 'angular-ui-notification.html' + }; + + this.setOptions = function(options) { + if (!angular.isObject(options)) throw new Error("Options should be an object!"); + this.options = angular.extend({}, this.options, options); + }; + + this.$get = function($timeout, $http, $compile, $templateCache, $rootScope, $injector, $sce, $q, $window) { + var options = this.options; + + var startTop = options.startTop; + var startRight = options.startRight; + var verticalSpacing = options.verticalSpacing; + var horizontalSpacing = options.horizontalSpacing; + var delay = options.delay; + + var messageElements = []; + var isResizeBound = false; + + var notify = function(args, t){ + var deferred = $q.defer(); + + if (typeof args !== 'object') { + args = {message:args}; + } + + args.scope = args.scope ? args.scope : $rootScope; + args.template = args.templateUrl ? args.templateUrl : options.templateUrl; + args.delay = !angular.isUndefined(args.delay) ? args.delay : delay; + args.type = t ? t : ''; + args.positionY = args.positionY ? args.positionY : options.positionY; + args.positionX = args.positionX ? args.positionX : options.positionX; + args.replaceMessage = args.replaceMessage ? args.replaceMessage : options.replaceMessage; + + $http.get(args.template,{cache: $templateCache}).success(function(template) { + + var scope = args.scope.$new(); + scope.message = $sce.trustAsHtml(args.message); + scope.title = $sce.trustAsHtml(args.title); + scope.t = args.type.substr(0,1); + scope.delay = args.delay; + + var reposite = function() { + var j = 0; + var k = 0; + var lastTop = startTop; + var lastRight = startRight; + var lastPosition = []; + for(var i = messageElements.length - 1; i >= 0; i --) { + var element = messageElements[i]; + if (args.replaceMessage && i < messageElements.length - 1) { + element.addClass('killed'); + continue; + } + var elHeight = parseInt(element[0].offsetHeight); + var elWidth = parseInt(element[0].offsetWidth); + var position = lastPosition[element._positionY+element._positionX]; + + if ((top + elHeight) > window.innerHeight) { + position = startTop; + k ++; + j = 0; + } + + var top = (lastTop = position ? (j === 0 ? position : position + verticalSpacing) : startTop); + var right = lastRight + (k * (horizontalSpacing + elWidth)); + + element.css(element._positionY, top + 'px'); + if (element._positionX == 'center') { + element.css('left', parseInt(window.innerWidth / 2 - elWidth / 2) + 'px'); + } else { + element.css(element._positionX, right + 'px'); + } + + lastPosition[element._positionY+element._positionX] = top + elHeight; + + j ++; + } + }; + + var templateElement = $compile(template)(scope); + templateElement._positionY = args.positionY; + templateElement._positionX = args.positionX; + templateElement.addClass(args.type); + templateElement.bind('webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd click', function(e){ + e = e.originalEvent || e; + if (e.type === 'click' || (e.propertyName === 'opacity' && e.elapsedTime >= 1)){ + templateElement.remove(); + messageElements.splice(messageElements.indexOf(templateElement), 1); + reposite(); + } + }); + if (angular.isNumber(args.delay)) { + $timeout(function() { + templateElement.addClass('killed'); + }, args.delay); + } + + angular.element(document.getElementsByTagName('body')).append(templateElement); + var offset = -(parseInt(templateElement[0].offsetHeight) + 50); + templateElement.css(templateElement._positionY, offset + "px"); + messageElements.push(templateElement); + + scope._templateElement = templateElement; + + scope.kill = function(isHard) { + if (isHard) { + messageElements.splice(messageElements.indexOf(scope._templateElement), 1); + scope._templateElement.remove(); + $timeout(reposite); + } else { + scope._templateElement.addClass('killed'); + } + }; + + $timeout(reposite); + + if (!isResizeBound) { + angular.element($window).bind('resize', function(e) { + $timeout(reposite); + }); + isResizeBound = true; + } + + deferred.resolve(scope); + + }).error(function(data){ + throw new Error('Template ('+args.template+') could not be loaded. ' + data); + }); + + return deferred.promise; + }; + + notify.primary = function(args) { + return this(args, 'primary'); + }; + notify.error = function(args) { + return this(args, 'error'); + }; + notify.success = function(args) { + return this(args, 'success'); + }; + notify.info = function(args) { + return this(args, 'info'); + }; + notify.warning = function(args) { + return this(args, 'warning'); + }; + + notify.clearAll = function() { + angular.forEach(messageElements, function(element) { + element.addClass('killed'); + }); + }; + + return notify; + }; +}); diff --git a/afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.less b/afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.less new file mode 100644 index 0000000..5b66b01 --- /dev/null +++ b/afb-client/bower_components/angular-ui-notification/src/angular-ui-notification.less @@ -0,0 +1,55 @@ +@import "../bower_components/bootstrap/less/variables.less"; +@import "../bower_components/bootstrap/less/mixins.less"; + + +.ui-notification { + position: fixed; + z-index: 9999; + box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.3); + cursor: pointer; + width: 300px; + color: @btn-primary-color; + background: @brand-primary; + .transition(all ease 0.5s); + &.killed { + opacity: 0; + .transition(opacity ease 1s); + } + & > h3 { + display: block; + margin: 10px 10px 0 10px; + padding: 0 0 5px 0; + text-align: left; + font-size: @font-size-base; + font-weight: bold; + border-bottom: 1px solid fadeout(@btn-primary-color, 70%); + } + & a { + color: @btn-primary-color; + &:hover { + text-decoration: underline; + } + } + & > .message { + margin: 10px 10px 10px 10px; + } + &.warning { + color: @btn-warning-color; + background: @brand-warning; + } + &.error { + color: @btn-danger-color; + background: @brand-danger; + } + &.success { + color: @btn-success-color; + background: @brand-success; + } + &.info { + color: @btn-info-color; + background: @brand-info; + } + &:hover { + opacity: 0.7; + } +} \ No newline at end of file -- cgit 1.2.3-korg