You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by ma...@apache.org on 2014/05/28 21:05:23 UTC

[14/29] Upgrade Aurora UI to bootstrap3

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/jquery/src/var/toString.js
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/jquery/src/var/toString.js b/3rdparty/javascript/bower_components/jquery/src/var/toString.js
new file mode 100644
index 0000000..ca92d22
--- /dev/null
+++ b/3rdparty/javascript/bower_components/jquery/src/var/toString.js
@@ -0,0 +1,5 @@
+define([
+	"./class2type"
+], function( class2type ) {
+	return class2type.toString;
+});

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/jquery/src/wrap.js
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/jquery/src/wrap.js b/3rdparty/javascript/bower_components/jquery/src/wrap.js
new file mode 100644
index 0000000..b6dce72
--- /dev/null
+++ b/3rdparty/javascript/bower_components/jquery/src/wrap.js
@@ -0,0 +1,78 @@
+define([
+	"./core",
+	"./core/init",
+	"./traversing" // parent, contents
+], function( jQuery ) {
+
+jQuery.fn.extend({
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[ 0 ] ) {
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function( i ) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	}
+});
+
+return jQuery;
+});

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/.bower.json
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/.bower.json b/3rdparty/javascript/bower_components/smart-table/.bower.json
index 4dc3ebf..62fe029 100644
--- a/3rdparty/javascript/bower_components/smart-table/.bower.json
+++ b/3rdparty/javascript/bower_components/smart-table/.bower.json
@@ -1,25 +1,14 @@
 {
-  "author": "Laurent Renard",
-  "name": "smart-table",
-  "description": "A grid/table module for angular js",
-  "version": "0.1.5",
-  "homepage": "http://lorenzofox3.github.io/smart-table-website/",
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/lorenzofox3/bower-smart-table.git"
-  },
-  "main": "./Smart-Table.min.js",
-  "dependencies": {
-    "angular": "1.0.7"
-  },
-  "_release": "0.1.5",
+  "name": "Smart-Table",
+  "homepage": "https://github.com/lorenzofox3/Smart-Table",
+  "_release": "ca3e2d53e8",
   "_resolution": {
-    "type": "version",
-    "tag": "v0.1.5",
-    "commit": "36adf6a69f83f1c28c16d21416555a63c7f75be8"
+    "type": "branch",
+    "branch": "master",
+    "commit": "ca3e2d53e880ce59c487230bc35b61dfe9cf6c96"
   },
-  "_source": "git://github.com/lorenzofox3/bower-smart-table.git",
-  "_target": "~0.1.5",
-  "_originalSource": "smart-table",
+  "_source": "git://github.com/lorenzofox3/Smart-Table.git",
+  "_target": "*",
+  "_originalSource": "git://github.com/lorenzofox3/Smart-Table",
   "_direct": true
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/.gitignore
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/.gitignore b/3rdparty/javascript/bower_components/smart-table/.gitignore
new file mode 100644
index 0000000..b8121a2
--- /dev/null
+++ b/3rdparty/javascript/bower_components/smart-table/.gitignore
@@ -0,0 +1,8 @@
+**/.DS_Store
+nbproject
+manifest.mf
+build.xml
+
+.project
+.settings
+.idea/*

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/CHANGELOG.md
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/CHANGELOG.md b/3rdparty/javascript/bower_components/smart-table/CHANGELOG.md
new file mode 100644
index 0000000..bd39939
--- /dev/null
+++ b/3rdparty/javascript/bower_components/smart-table/CHANGELOG.md
@@ -0,0 +1,68 @@
+# The Change log across the different versions
+
+## V0.1.0
+
+* table markup: it is a table and follows the semantic of an HTML table.
+* manage your layout: you can choose the number of columns and how the should be mapped to your data model
+* format data: you can choose how the data are formatted within a given column:
+    * by giving your own format function
+    * using one of the built-in angular filters
+* Sort data
+    * using your own algorithm
+    * using the 'orderBy' angular algorithm: in this case you'll be able to provide predicates as explained in [orderBy filter documentation](http://docs.angularjs.org/api/ng.filter:orderBy)
+* Filter data
+    * using a global search input box
+    * using the controller API to filter according to a particular column
+* Select data row(s) according to different modes:
+    * single: one row selected at the time
+    * multiple: many row selected at the time. In this case you can also add a selection column with checkboxes
+* Simple style: you can easily give class name to all the cells of a given column and to the header as well
+* template cell:
+    * you can provide template for a given column header (it will be compiled so that you can attach directves to it)
+    * same for the data cells
+* Edit cells: you can make cells editable and specify a type for the input so that validation rules, etc will be applied
+* Client side pagination : you can choose the number of rows you want to display and use the [angular-ui.bootstrap](http://angular-ui.github.io/bootstrap/) pagination directive to navigate.
+* All the directives of the table use the table controller API. It means that you can easily change the templates and directives but still using the API to perform any operation
+
+## V0.1.1
+
+* change build if you want to change the interpolation symbol ({{ }}) thanks to [ccapndave](https://github.com/ccapndave)
+* the update dataRow is now provided my the table controller
+* emit event when :
+    * `selectionChange`
+    * `udpateDataRow`
+    * `pageChange`
+
+## v0.1.2
+* support multi-level object in column config like `map:'myNestedObject.subProperties`
+* change pagination directive name to avoid collision with angular-ui.bootstrap [popalexandruvasile](https://github.com/popalexandruvasile)
+* make module IE8 compatible. [pheuter](https://github.com/pheuter)
+    
+## v0.1.3
+* reset the selectionAll state on page change
+
+## v0.1.4
+* fix sync issue with the content of an item and its smart-table row
+
+## v0.1.5
+* add the clear column functionality
+
+## v0.1.6
+* modify filter to be compatible with 1.2.X branch
+
+## v0.1.7
+* ability to pass a rowFunction (thanks to [pheuter](https://github.com/lorenzofox3/Smart-Table/pull/57))
+
+## v0.1.8 
+* allow for HTML formatted cell contents: see pull request from TNGPS https://github.com/lorenzofox3/Smart-Table/pull/80
+
+## v0.1.9
+* fix sort ascent/descent definition
+* merge pull request from [morrog](https://github.com/morrog) about db click issue
+
+## v0.2.0
+breaking change:
+* sort column has now 3 states ascend->descend->back to natural order
+
+## v0.2.1
+* make pagination markup "Twitter bootstrap 3" friendly

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/GruntFile.js
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/GruntFile.js b/3rdparty/javascript/bower_components/smart-table/GruntFile.js
new file mode 100644
index 0000000..092191a
--- /dev/null
+++ b/3rdparty/javascript/bower_components/smart-table/GruntFile.js
@@ -0,0 +1,73 @@
+module.exports = function (grunt) {
+
+    grunt.initConfig({
+        pkg: grunt.file.readJSON('package.json'),
+        src: {
+            js: ['smart-table-module/js/*.js'],
+            html: ['smart-table-module/partials/*.html']
+        },
+        concat: {
+            options: {
+            },
+            dist: {
+                src: ['<%= src.js %>'],
+                dest: './<%= pkg.name %>.debug.js'
+            }
+        },
+        "regex-replace": {
+            dist: {
+                src: ['<%= pkg.name %>.debug.js'],
+                actions: [
+                    {
+                        search: '\{\{',
+                        replace: "<%= grunt.option('startSymbol') %>",
+                        flags: "g"
+                    },
+                    {
+                        search: '\}\}',
+                        replace: "<%= grunt.option('endSymbol') %>",
+                        flags: "g"
+                    }
+                ]
+            }
+        },
+        html2js: {
+            options: {
+                base: 'smart-table-module',
+                module: 'smartTable.templates'
+            },
+            smartTable: {
+                src: [ '<%= src.html %>' ],
+                dest: 'smart-table-module/js/Template.js'
+            }
+        },
+        clean: {
+            test: ['test_out']
+        },
+        copy: {
+            refApp: {
+                src: ['<%= pkg.name %>.debug.js'],
+                dest: 'example-app/js/'
+            }
+        },
+        uglify: {
+            main: {
+                src: ['<%= pkg.name %>.debug.js'],
+                dest: '<%= pkg.name %>.min.js'
+            }
+        }
+    });
+    grunt.loadNpmTasks('grunt-contrib-concat');
+    grunt.loadNpmTasks('grunt-contrib-clean');
+    grunt.loadNpmTasks('grunt-contrib-copy');
+    grunt.loadNpmTasks('grunt-contrib-uglify');
+    grunt.loadNpmTasks('grunt-html2js');
+    grunt.loadNpmTasks('grunt-regex-replace');
+    grunt.registerTask('refApp', ['html2js:smartTable', 'concat', 'copy:refApp']);
+    grunt.registerTask('build', function() {
+        grunt.task.run('html2js:smartTable');
+        grunt.task.run('concat');
+        if (grunt.option('startSymbol') && grunt.option('endSymbol')) grunt.task.run('regex-replace');
+        grunt.task.run('uglify');
+    });
+};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/README.md
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/README.md b/3rdparty/javascript/bower_components/smart-table/README.md
new file mode 100644
index 0000000..3849e7d
--- /dev/null
+++ b/3rdparty/javascript/bower_components/smart-table/README.md
@@ -0,0 +1,119 @@
+# Smart Table— an easy to use table/grid 
+
+This project is a lightweight table/grid builder. It is meant to be easy configurable but also easy customisable
+(if you want to use it as a base for your own grid development). In The current version (0.1.0) the features are
+
+* table markup: it is a table and follows the semantic of an HTML table.
+* manage your layout: you can choose the number of columns and how the should be mapped to your data model
+* format data: you can choose how the data are formatted within a given column:
+    * by giving your own format function
+    * using one of the built-in angular filters
+* Sort data
+    * using your own algorithm
+    * using the 'orderBy' angular algorithm: in this case you'll be able to provide predicates as explained in [orderBy filter documentation](http://docs.angularjs.org/api/ng.filter:orderBy)
+* Filter data
+    * using a global search input box
+    * using the controller API to filter according to a particular column
+* Select data row(s) according to different modes:
+    * single: one row selected at the time
+    * multiple: many row selected at the time. In this case you can also add a selection column with checkboxes
+* Simple style: you can easily give class name to all the cells of a given column and to the header as well
+* template cell:
+    * you can provide template for a given column header (it will be compiled so that you can attach directves to it)
+    * same for the data cells
+* Edit cells: you can make cells editable and specify a type for the input so that validation rules, etc will be applied
+* Client side pagination : you can choose the number of rows you want to display and use the [angular-ui.bootstrap](http://angular-ui.github.io/bootstrap/) pagination directive to navigate.
+* All the directives of the table use the table controller API. It means that you can easily change the templates and directives but still using the API to perform any operation
+
+You'll find running examples and more documentation at [the demo website](http://lorenzofox3.github.io/smart-table-website/)
+
+## How to use Smart-Table
+
+* You can clone the repository: the source code will be under smart-table-module directory.
+* You can add the Smart-Table.min.js file to your application and then add the module `smartTable.table` to your own app module. The build includes all the template in the $templateCache
+so you need only this file.
+* use [bower](https://github.com/bower/bower) and run the command `bower install smart-table`
+
+## Smart Table for developers
+
+### the branches
+
+* The [master](https://github.com/lorenzofox3/Smart-Table) branch is the main branch where you can find stable/tested code for a fully client side table module.
+* The [cowboy](https://github.com/lorenzofox3/Smart-Table/tree/cowboy) branch is where we add some modifications on the `Directives.js` file. This part is not tested and is more an "experimental" branch
+* The [server-partial](https://github.com/lorenzofox3/Smart-Table/tree/server-partial) branch:
+I have quite a few times been asked :
+
+> " I have a huge set of data which I want to be loaded in the browser only on demand, how can I do that ?"
+
+This is somehow `server-side pagination`. You load the data on demand but keep the rest of the logic on the client side (sort,filter,...)
+This branch show you how to turn smart-table to be able to have this particular flow (~10 lines to change)
+* The [server-sample](https://github.com/lorenzofox3/Smart-Table/tree/server-sample) branch:
+This time is a small example on how to change smart-table to have the whole logic (sort, filter, ...) on the server side, and be able
+to send particular queries to the server (with proper filter value, sort value, etc)
+
+### How does Smart-Table work ?
+
+If you want to adapt smart-table to your own flow, it is really easy. But first you should understand how it works, so you will know what to change to customise it.
+
+The `Table.js` file is the key. When you bind a dataCollection to the smart table directive
+```html
+<smart-table rows="dataCollection" columns="myColumns"></smart-table>
+```
+the table controller (Table.js) will have access to this data collection through the scope. This controller provides an API which table child directives (`Directives.js`) will be able to call.
+Through this API calls, the controller will perform some operations on the dataCollection (sort,filter, etc) to build a subset of dataCollection (displayedCollection) which is the actual displayed data.
+Most of the API method simply change table controller or scope variables and then call the `pipe` function which will actually chain the operations to build the subset (displayedCollection) and regarding to the updated
+local/scope variables. The `Column.js` simply wraps (and add some required properties) to your column configuration to expose it to the table child directives through the scope.
+
+So, at the end you don't even have to use the provided directives and build yours if you want a special behavior.
+
+###The build process
+
+1. install [node.js] (http://nodejs.org/) and run `npm install` to install the required node modules.
+2. the build tasks are [Grunt](http://gruntjs.com/).
+* if you run `grunt build` it will perform the following operations:
+    * transform the template (.html) files into an angular module and load them in the [$templateCache](http://docs.angularjs.org/api/ng.$templateCache) (it will result with the `Template.js` file.
+    * concatenate all the source files into a single one (Smart-Table.debug.js)
+    * minify the debug file so you have a production ready file (Smart-Table.min.js)
+* if you run `grunt refApp` the two first steps are the same that the build task, but at the end it will simply copy
+the Smart-Table.debug.js into the example-app folder (see below)
+
+### The example app
+The example app is a running example of the smart-table in action.
+To run it :
+1. use node to run `scripts/web-server.js`
+2. In your browser go to http://localhost:<port>/example-app/index.html
+
+### Running unit tests
+
+Unit tests are provided for all the code except for Directive.js file which is a bit more experimental.
+Tests can be run with [Testacular](http://karma-runner.github.io/0.8/index.html): you'll find the config file under config folder. Note, the coverage is done by [Istanbul.js](http://gotwarlost.github.io/istanbul/)
+        
+## License
+
+Smart Table module is under MIT license:
+
+> Copyright (C) 2013 Laurent Renard.
+>
+> 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.
+
+## Contact
+
+For more information on Smart Table, please contact the author at laurent34azerty@gmail.com

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/Smart-Table.debug.js
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/Smart-Table.debug.js b/3rdparty/javascript/bower_components/smart-table/Smart-Table.debug.js
index b79c60e..e453e7d 100644
--- a/3rdparty/javascript/bower_components/smart-table/Smart-Table.debug.js
+++ b/3rdparty/javascript/bower_components/smart-table/Smart-Table.debug.js
@@ -50,6 +50,7 @@
 })(window, angular);
 
 
+
 /* Directives */
 (function (angular) {
     "use strict";
@@ -126,7 +127,14 @@
                 require: '^smartTable',
                 restrict: 'C',
                 link: function (scope, element, attr, ctrl) {
-
+                    
+                    var _config;
+                    if ((_config = scope.config) != null) {
+                        if (typeof _config.rowFunction === "function") {
+                            _config.rowFunction(scope, element, attr, ctrl);
+                        }
+                    }
+                    
                     element.bind('click', function () {
                         scope.$apply(function () {
                             ctrl.toggleSelection(scope.dataRow);
@@ -209,7 +217,7 @@
                     scope.$watch('dataRow', function (value) {
                         scope.formatedValue = format(getter(row), column.formatFunction, column.formatParameter);
                         if (isSimpleCell === true) {
-                            element.text(scope.formatedValue);
+                            element.html(scope.formatedValue);
                         }
                     }, true);
 
@@ -218,7 +226,7 @@
                             element.html('<div editable-cell="" row="dataRow" column="column" type="column.type"></div>');
                             compile(element.contents())(scope);
                         } else {
-                            element.text(scope.formatedValue);
+                            element.html(scope.formatedValue);
                         }
                     }
 
@@ -310,6 +318,7 @@
             };
         }]);
 })(angular);
+
 /* Filters */
 (function (angular) {
     "use strict";
@@ -383,7 +392,7 @@
 
             function sortDataRow(array, column) {
                 var sortAlgo = (scope.sortAlgorithm && angular.isFunction(scope.sortAlgorithm)) === true ? scope.sortAlgorithm : filter('orderBy');
-                if (column) {
+                if (column && !(column.reverse === undefined)) {
                     return arrayUtility.sort(array, sortAlgo, column.sortPredicate, column.reverse);
                 } else {
                     return array;
@@ -449,11 +458,20 @@
                     if (column.isSortable === true) {
                         // reset the last column used
                         if (lastColumnSort && lastColumnSort !== column) {
-                            lastColumnSort.reverse = 'none';
+                            lastColumnSort.reverse = undefined;
                         }
-
                         column.sortPredicate = column.sortPredicate || column.map;
-                        column.reverse = column.reverse !== true;
+
+                        if (column.reverse === undefined) {
+                            column.reverse = false;
+                        }
+                        else if (column.reverse === false) {
+                            column.reverse = true;
+                        }
+                        else {
+                            column.reverse = undefined;
+                        }
+
                         lastColumnSort = column;
                     }
                 }
@@ -468,23 +486,13 @@
              */
             this.search = function (input, column) {
 
-                var j, l = scope.columns.length;
                 //update column and global predicate
                 if (column && scope.columns.indexOf(column) !== -1) {
-                    predicate.$ = '';
-                    column.filterPredicate = input;
+                    predicate[column.map] = input;
                 } else {
-                    for (j = 0; j < l; j++) {
-                        scope.columns[j].filterPredicate = '';
-                    }
-                    predicate.$ = input;
-                }
-
-                for (j = 0; j < l; j++) {
-                    predicate[scope.columns[j].map] = scope.columns[j].filterPredicate;
+                    predicate = {$: input};
                 }
                 scope.displayedCollection = this.pipe(scope.dataCollection);
-
             };
 
             /**
@@ -613,86 +621,87 @@
 })(angular);
 
 
+
 angular.module('smartTable.templates', ['partials/defaultCell.html', 'partials/defaultHeader.html', 'partials/editableCell.html', 'partials/globalSearchCell.html', 'partials/pagination.html', 'partials/selectAllCheckbox.html', 'partials/selectionCheckbox.html', 'partials/smartTable.html']);
 
-angular.module("partials/defaultCell.html", []).run(["$templateCache", function ($templateCache) {
-    $templateCache.put("partials/defaultCell.html",
-        "{{formatedValue}}");
+angular.module("partials/defaultCell.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("partials/defaultCell.html",
+    "{{formatedValue}}");
 }]);
 
-angular.module("partials/defaultHeader.html", []).run(["$templateCache", function ($templateCache) {
-    $templateCache.put("partials/defaultHeader.html",
-        "<span class=\"header-content\" ng-class=\"{'sort-ascent':column.reverse==true,'sort-descent':column.reverse==false}\">{{column.label}}</span>");
+angular.module("partials/defaultHeader.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("partials/defaultHeader.html",
+    "<span class=\"header-content\" ng-class=\"{'sort-ascent':column.reverse==false,'sort-descent':column.reverse==true}\">{{column.label}}</span>");
 }]);
 
-angular.module("partials/editableCell.html", []).run(["$templateCache", function ($templateCache) {
-    $templateCache.put("partials/editableCell.html",
-        "<div ng-dblclick=\"toggleEditMode($event)\">\n" +
-            "    <span ng-hide=\"isEditMode\">{{value | format:column.formatFunction:column.formatParameter}}</span>\n" +
-            "\n" +
-            "    <form ng-submit=\"submit()\" ng-show=\"isEditMode\" name=\"myForm\">\n" +
-            "        <input name=\"myInput\" ng-model=\"value\" type=\"type\" input-type/>\n" +
-            "    </form>\n" +
-            "</div>");
+angular.module("partials/editableCell.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("partials/editableCell.html",
+    "<div ng-dblclick=\"isEditMode || toggleEditMode($event)\">\n" +
+    "    <span ng-hide=\"isEditMode\">{{value | format:column.formatFunction:column.formatParameter}}</span>\n" +
+    "\n" +
+    "    <form ng-submit=\"submit()\" ng-show=\"isEditMode\" name=\"myForm\">\n" +
+    "        <input name=\"myInput\" ng-model=\"value\" type=\"type\" input-type/>\n" +
+    "    </form>\n" +
+    "</div>");
 }]);
 
-angular.module("partials/globalSearchCell.html", []).run(["$templateCache", function ($templateCache) {
-    $templateCache.put("partials/globalSearchCell.html",
-        "<label>Search :</label>\n" +
-            "<input type=\"text\" ng-model=\"searchValue\"/>");
+angular.module("partials/globalSearchCell.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("partials/globalSearchCell.html",
+    "<label>Search :</label>\n" +
+    "<input type=\"text\" ng-model=\"searchValue\"/>");
 }]);
 
-angular.module("partials/pagination.html", []).run(["$templateCache", function ($templateCache) {
-    $templateCache.put("partials/pagination.html",
-        "<div class=\"pagination\">\n" +
-            "    <ul>\n" +
-            "        <li ng-repeat=\"page in pages\" ng-class=\"{active: page.active, disabled: page.disabled}\"><a\n" +
-            "                ng-click=\"selectPage(page.number)\">{{page.text}}</a></li>\n" +
-            "    </ul>\n" +
-            "</div> ");
+angular.module("partials/pagination.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("partials/pagination.html",
+    "<div class=\"pagination\">\n" +
+    "    <ul class=\"pagination\">\n" +
+    "        <li ng-repeat=\"page in pages\" ng-class=\"{active: page.active, disabled: page.disabled}\"><a\n" +
+    "                ng-click=\"selectPage(page.number)\">{{page.text}}</a></li>\n" +
+    "    </ul>\n" +
+    "</div> ");
 }]);
 
-angular.module("partials/selectAllCheckbox.html", []).run(["$templateCache", function ($templateCache) {
-    $templateCache.put("partials/selectAllCheckbox.html",
-        "<input class=\"smart-table-select-all\"  type=\"checkbox\" ng-model=\"holder.isAllSelected\"/>");
+angular.module("partials/selectAllCheckbox.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("partials/selectAllCheckbox.html",
+    "<input class=\"smart-table-select-all\"  type=\"checkbox\" ng-model=\"holder.isAllSelected\"/>");
 }]);
 
-angular.module("partials/selectionCheckbox.html", []).run(["$templateCache", function ($templateCache) {
-    $templateCache.put("partials/selectionCheckbox.html",
-        "<input type=\"checkbox\" ng-model=\"dataRow.isSelected\" stop-event=\"click\"/>");
+angular.module("partials/selectionCheckbox.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("partials/selectionCheckbox.html",
+    "<input type=\"checkbox\" ng-model=\"dataRow.isSelected\" stop-event=\"click\"/>");
 }]);
 
-angular.module("partials/smartTable.html", []).run(["$templateCache", function ($templateCache) {
-    $templateCache.put("partials/smartTable.html",
-        "<table class=\"smart-table\">\n" +
-            "    <thead>\n" +
-            "    <tr class=\"smart-table-global-search-row\" ng-show=\"isGlobalSearchActivated\">\n" +
-            "        <td class=\"smart-table-global-search\" column-span=\"{{columns.length}}\" colspan=\"{{columnSpan}}\">\n" +
-            "        </td>\n" +
-            "    </tr>\n" +
-            "    <tr class=\"smart-table-header-row\">\n" +
-            "        <th ng-repeat=\"column in columns\" ng-include=\"column.headerTemplateUrl\"\n" +
-            "            class=\"smart-table-header-cell {{column.headerClass}}\" scope=\"col\">\n" +
-            "        </th>\n" +
-            "    </tr>\n" +
-            "    </thead>\n" +
-            "    <tbody>\n" +
-            "    <tr ng-repeat=\"dataRow in displayedCollection\" ng-class=\"{selected:dataRow.isSelected}\"\n" +
-            "        class=\"smart-table-data-row\">\n" +
-            "        <td ng-repeat=\"column in columns\" class=\"smart-table-data-cell {{column.cellClass}}\"></td>\n" +
-            "    </tr>\n" +
-            "    </tbody>\n" +
-            "    <tfoot ng-show=\"isPaginationEnabled\">\n" +
-            "    <tr class=\"smart-table-footer-row\">\n" +
-            "        <td colspan=\"{{columns.length}}\">\n" +
-            "            <div pagination-smart-table=\"\" num-pages=\"numberOfPages\" max-size=\"maxSize\" current-page=\"currentPage\"></div>\n" +
-            "        </td>\n" +
-            "    </tr>\n" +
-            "    </tfoot>\n" +
-            "</table>\n" +
-            "\n" +
-            "\n" +
-            "");
+angular.module("partials/smartTable.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("partials/smartTable.html",
+    "<table class=\"smart-table\">\n" +
+    "    <thead>\n" +
+    "    <tr class=\"smart-table-global-search-row\" ng-show=\"isGlobalSearchActivated\">\n" +
+    "        <td class=\"smart-table-global-search\" column-span=\"{{columns.length}}\" colspan=\"{{columnSpan}}\">\n" +
+    "        </td>\n" +
+    "    </tr>\n" +
+    "    <tr class=\"smart-table-header-row\">\n" +
+    "        <th ng-repeat=\"column in columns\" ng-include=\"column.headerTemplateUrl\"\n" +
+    "            class=\"smart-table-header-cell {{column.headerClass}}\" scope=\"col\">\n" +
+    "        </th>\n" +
+    "    </tr>\n" +
+    "    </thead>\n" +
+    "    <tbody>\n" +
+    "    <tr ng-repeat=\"dataRow in displayedCollection\" ng-class=\"{selected:dataRow.isSelected}\"\n" +
+    "        class=\"smart-table-data-row\">\n" +
+    "        <td ng-repeat=\"column in columns\" class=\"smart-table-data-cell {{column.cellClass}}\"></td>\n" +
+    "    </tr>\n" +
+    "    </tbody>\n" +
+    "    <tfoot ng-show=\"isPaginationEnabled\">\n" +
+    "    <tr class=\"smart-table-footer-row\">\n" +
+    "        <td colspan=\"{{columns.length}}\">\n" +
+    "            <div pagination-smart-table=\"\" num-pages=\"numberOfPages\" max-size=\"maxSize\" current-page=\"currentPage\"></div>\n" +
+    "        </td>\n" +
+    "    </tr>\n" +
+    "    </tfoot>\n" +
+    "</table>\n" +
+    "\n" +
+    "\n" +
+    "");
 }]);
 
 (function (angular) {
@@ -734,7 +743,7 @@ angular.module("partials/smartTable.html", []).run(["$templateCache", function (
                  * @param index
                  * @param item
                  */
-                    insertAt = function (arrayRef, index, item) {
+                insertAt = function (arrayRef, index, item) {
                     if (index >= 0 && index < arrayRef.length) {
                         arrayRef.splice(index, 0, item);
                     } else {
@@ -748,7 +757,7 @@ angular.module("partials/smartTable.html", []).run(["$templateCache", function (
                  * @param oldIndex
                  * @param newIndex
                  */
-                    moveAt = function (arrayRef, oldIndex, newIndex) {
+                moveAt = function (arrayRef, oldIndex, newIndex) {
                     var elementToMove;
                     if (oldIndex >= 0 && oldIndex < arrayRef.length && newIndex >= 0 && newIndex < arrayRef.length) {
                         elementToMove = arrayRef.splice(oldIndex, 1)[0];
@@ -764,7 +773,7 @@ angular.module("partials/smartTable.html", []).run(["$templateCache", function (
                  * @param reverse
                  * @returns {*}
                  */
-                    sort = function (arrayRef, sortAlgorithm, predicate, reverse) {
+                sort = function (arrayRef, sortAlgorithm, predicate, reverse) {
 
                     if (!sortAlgorithm || !angular.isFunction(sortAlgorithm)) {
                         return arrayRef;
@@ -780,7 +789,7 @@ angular.module("partials/smartTable.html", []).run(["$templateCache", function (
                  * @param predicate
                  * @returns {*}
                  */
-                    filter = function (arrayRef, filterAlgorithm, predicate) {
+                filter = function (arrayRef, filterAlgorithm, predicate) {
                     if (!filterAlgorithm || !angular.isFunction(filterAlgorithm)) {
                         return arrayRef;
                     } else {
@@ -795,7 +804,7 @@ angular.module("partials/smartTable.html", []).run(["$templateCache", function (
                  * @param length
                  * @returns {*}
                  */
-                    fromTo = function (arrayRef, min, length) {
+                fromTo = function (arrayRef, min, length) {
 
                     var out = [],
                         limit,
@@ -830,6 +839,7 @@ angular.module("partials/smartTable.html", []).run(["$templateCache", function (
 })(angular);
 
 
+
 (function (angular) {
     angular.module('ui.bootstrap.pagination.smartTable', ['smartTable.templateUrlList'])
 

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/Smart-Table.min.js
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/Smart-Table.min.js b/3rdparty/javascript/bower_components/smart-table/Smart-Table.min.js
index 49611b2..47e43ad 100644
--- a/3rdparty/javascript/bower_components/smart-table/Smart-Table.min.js
+++ b/3rdparty/javascript/bower_components/smart-table/Smart-Table.min.js
@@ -1 +1 @@
-!function(a,b){"use strict";function c(a,c){function d(a){return this instanceof d?(b.extend(this,a),void 0):new d(a)}this.setDefaultOption=function(a){b.extend(d.prototype,a)},a.headerTemplateUrl=c.defaultHeader,this.setDefaultOption(a),this.$get=function(){return d}}var d=b.module("smartTable.column",["smartTable.templateUrlList"]).constant("DefaultColumnConfiguration",{isSortable:!0,isEditable:!1,type:"text",headerTemplateUrl:"",map:"",label:"",sortPredicate:"",formatFunction:"",formatParameter:"",filterPredicate:"",cellTemplateUrl:"",headerClass:"",cellClass:""});c.$inject=["DefaultColumnConfiguration","templateUrlList"],d.provider("Column",c),a.ColumnProvider=c}(window,angular),function(a){"use strict";a.module("smartTable.directives",["smartTable.templateUrlList","smartTable.templates"]).directive("smartTable",["templateUrlList","DefaultTableConfiguration",function(b,c){return{restrict:"EA",scope:{columnCollection:"=columns",dataCollection:"=rows",config:"="},replace:"true",te
 mplateUrl:b.smartTable,controller:"TableCtrl",link:function(d,e,f,g){var h;d.$watch("config",function(e){var f=a.extend({},c,e),h=void 0!==d.columns?d.columns.length:0;if(g.setGlobalConfig(f),"multiple"!==f.selectionMode||f.displaySelectionCheckbox!==!0)for(var i=h-1;i>=0;i--)d.columns[i].isSelectionColumn===!0&&g.removeColumn(i);else g.insertColumn({cellTemplateUrl:b.selectionCheckbox,headerTemplateUrl:b.selectAllCheckbox,isSelectionColumn:!0},0)},!0),d.$watch("columnCollection",function(){if(g.clearColumns(),d.columnCollection)for(var b=0,c=d.columnCollection.length;c>b;b++)g.insertColumn(d.columnCollection[b]);else d.dataCollection&&d.dataCollection.length>0&&(h=d.dataCollection[0],a.forEach(h,function(a,b){"$"!=b[0]&&g.insertColumn({label:b,map:b})}))},!0),d.$watch("dataCollection.length",function(a,b){a!==b&&g.sortBy()})}}}]).directive("smartTableDataRow",function(){return{require:"^smartTable",restrict:"C",link:function(a,b,c,d){b.bind("click",function(){a.$apply(function(){d.
 toggleSelection(a.dataRow)})})}}}).directive("smartTableHeaderCell",function(){return{restrict:"C",require:"^smartTable",link:function(a,b,c,d){b.bind("click",function(){a.$apply(function(){d.sortBy(a.column)})})}}}).directive("smartTableSelectAll",function(){return{restrict:"C",require:"^smartTable",link:function(a,b,c,d){b.bind("click",function(){d.toggleSelectionAll(b[0].checked===!0)})}}}).directive("stopEvent",function(){return{restrict:"A",link:function(a,b,c){b.bind(c.stopEvent,function(a){a.stopPropagation()})}}}).directive("smartTableGlobalSearch",["templateUrlList",function(a){return{restrict:"C",require:"^smartTable",scope:{columnSpan:"@"},templateUrl:a.smartTableGlobalSearch,replace:!1,link:function(a,b,c,d){a.searchValue="",a.$watch("searchValue",function(a){d.search(a)})}}}]).directive("smartTableDataCell",["$filter","$http","$templateCache","$compile","$parse",function(a,b,c,d,e){return{restrict:"C",link:function(f,g){function h(){j.isEditable?(g.html('<div editable-c
 ell="" row="dataRow" column="column" type="column.type"></div>'),d(g.contents())(f)):g.text(f.formatedValue)}var i,j=f.column,k=!j.isEditable,l=f.dataRow,m=a("format"),n=e(j.map);f.$watch("dataRow",function(){f.formatedValue=m(n(l),j.formatFunction,j.formatParameter),k===!0&&g.text(f.formatedValue)},!0),f.$watch("column.cellTemplateUrl",function(a){a?b.get(a,{cache:c}).success(function(a){k=!1,i=f.$new(),g.html(a),d(g.contents())(i)}).error(h):h()})}}}]).directive("inputType",function(){return{restrict:"A",priority:1,link:function(a,b,c){var d=a.$eval(c.type);c.$set("type",d)}}}).directive("editableCell",["templateUrlList","$parse",function(b,c){return{restrict:"EA",require:"^smartTable",templateUrl:b.editableCell,scope:{row:"=",column:"=",type:"="},replace:!0,link:function(b,d,e,f){var g=a.element(d.children()[1]),h=a.element(g.children()[0]),i=c(b.column.map);b.isEditMode=!1,b.$watch("row",function(){b.value=i(b.row)},!0),b.submit=function(){b.myForm.$valid===!0&&(f.updateDataRow(
 b.row,b.column.map,b.value),f.sortBy()),b.toggleEditMode()},b.toggleEditMode=function(){b.value=i(b.row),b.isEditMode=b.isEditMode!==!0},b.$watch("isEditMode",function(a){a===!0&&(h[0].select(),h[0].focus())}),h.bind("blur",function(){b.$apply(function(){b.submit()})})}}}])}(angular),function(a){"use strict";a.module("smartTable.filters",[]).constant("DefaultFilters",["currency","date","json","lowercase","number","uppercase"]).filter("format",["$filter","DefaultFilters",function(b,c){return function(d,e,f){var g;return g=e&&a.isFunction(e)?e:-1!==c.indexOf(e)?b(e):function(a){return a},g(d,f)}}])}(angular),function(a){"use strict";a.module("smartTable.table",["smartTable.column","smartTable.utilities","smartTable.directives","smartTable.filters","ui.bootstrap.pagination.smartTable"]).constant("DefaultTableConfiguration",{selectionMode:"none",isGlobalSearchActivated:!1,displaySelectionCheckbox:!1,isPaginationEnabled:!0,itemsByPage:10,maxSize:5,sortAlgorithm:"",filterAlgorithm:""}).co
 ntroller("TableCtrl",["$scope","Column","$filter","$parse","ArrayUtility","DefaultTableConfiguration",function(b,c,d,e,f,g){function h(){var a,c=b.displayedCollection.length;for(a=0;c>a;a++)if(b.displayedCollection[a].isSelected!==!0)return!1;return!0}function i(c){return!a.isArray(c)||0===c.length||b.itemsByPage<1?1:Math.ceil(c.length/b.itemsByPage)}function j(c,e){var g=(b.sortAlgorithm&&a.isFunction(b.sortAlgorithm))===!0?b.sortAlgorithm:d("orderBy");return e?f.sort(c,g,e.sortPredicate,e.reverse):c}function k(c,d,e,f){var g,i;if(a.isArray(c)&&("multiple"===d||"single"===d)&&e>=0&&e<c.length){if(g=c[e],"single"===d)for(var j=0,k=c.length;k>j;j++)i=c[j].isSelected,c[j].isSelected=!1,i===!0&&b.$emit("selectionChange",{item:c[j]});g.isSelected=f,b.holder.isAllSelected=h(),b.$emit("selectionChange",{item:g})}}b.columns=[],b.dataCollection=b.dataCollection||[],b.displayedCollection=[],b.numberOfPages=i(b.dataCollection),b.currentPage=1,b.holder={isAllSelected:!1};var l,m={};this.setGlo
 balConfig=function(c){a.extend(b,g,c)},this.changePage=function(c){var d=b.currentPage;a.isNumber(c.page)&&(b.currentPage=c.page,b.displayedCollection=this.pipe(b.dataCollection),b.holder.isAllSelected=h(),b.$emit("changePage",{oldValue:d,newValue:b.currentPage}))},this.sortBy=function(a){var c=b.columns.indexOf(a);-1!==c&&a.isSortable===!0&&(l&&l!==a&&(l.reverse="none"),a.sortPredicate=a.sortPredicate||a.map,a.reverse=a.reverse!==!0,l=a),b.displayedCollection=this.pipe(b.dataCollection)},this.search=function(a,c){var d,e=b.columns.length;if(c&&-1!==b.columns.indexOf(c))m.$="",c.filterPredicate=a;else{for(d=0;e>d;d++)b.columns[d].filterPredicate="";m.$=a}for(d=0;e>d;d++)m[b.columns[d].map]=b.columns[d].filterPredicate;b.displayedCollection=this.pipe(b.dataCollection)},this.pipe=function(c){var e,g=(b.filterAlgorithm&&a.isFunction(b.filterAlgorithm))===!0?b.filterAlgorithm:d("filter");return e=j(f.filter(c,g,m),l),b.numberOfPages=i(e),b.isPaginationEnabled?f.fromTo(e,(b.currentPage-1
 )*b.itemsByPage,b.itemsByPage):e},this.insertColumn=function(a,d){var e=new c(a);f.insertAt(b.columns,d,e)},this.removeColumn=function(a){f.removeAt(b.columns,a)},this.moveColumn=function(a,c){f.moveAt(b.columns,a,c)},this.clearColumns=function(){b.columns.length=0},this.toggleSelection=function(a){var c=b.dataCollection.indexOf(a);-1!==c&&k(b.dataCollection,b.selectionMode,c,a.isSelected!==!0)},this.toggleSelectionAll=function(a){var c=0,d=b.displayedCollection.length;if("multiple"===b.selectionMode)for(;d>c;c++)k(b.displayedCollection,b.selectionMode,c,a===!0)},this.removeDataRow=function(a){var c=f.removeAt(b.displayedCollection,a);f.removeAt(b.dataCollection,b.dataCollection.indexOf(c))},this.moveDataRow=function(a,c){f.moveAt(b.displayedCollection,a,c)},this.updateDataRow=function(a,c,d){var f,g=b.displayedCollection.indexOf(a),h=e(c),i=h.assign;-1!==g&&(f=h(b.displayedCollection[g]),f!==d&&(i(b.displayedCollection[g],d),b.$emit("updateDataRow",{item:b.displayedCollection[g]}))
 )}}])}(angular),angular.module("smartTable.templates",["partials/defaultCell.html","partials/defaultHeader.html","partials/editableCell.html","partials/globalSearchCell.html","partials/pagination.html","partials/selectAllCheckbox.html","partials/selectionCheckbox.html","partials/smartTable.html"]),angular.module("partials/defaultCell.html",[]).run(["$templateCache",function(a){a.put("partials/defaultCell.html","{{formatedValue}}")}]),angular.module("partials/defaultHeader.html",[]).run(["$templateCache",function(a){a.put("partials/defaultHeader.html","<span class=\"header-content\" ng-class=\"{'sort-ascent':column.reverse==true,'sort-descent':column.reverse==false}\">{{column.label}}</span>")}]),angular.module("partials/editableCell.html",[]).run(["$templateCache",function(a){a.put("partials/editableCell.html",'<div ng-dblclick="toggleEditMode($event)">\n <span ng-hide="isEditMode">{{value | format:column.formatFunction:column.formatParameter}}</span>\n\n <form ng-submit="submit()" 
 ng-show="isEditMode" name="myForm">\n <input name="myInput" ng-model="value" type="type" input-type/>\n </form>\n</div>')}]),angular.module("partials/globalSearchCell.html",[]).run(["$templateCache",function(a){a.put("partials/globalSearchCell.html",'<label>Search :</label>\n<input type="text" ng-model="searchValue"/>')}]),angular.module("partials/pagination.html",[]).run(["$templateCache",function(a){a.put("partials/pagination.html",'<div class="pagination">\n <ul>\n <li ng-repeat="page in pages" ng-class="{active: page.active, disabled: page.disabled}"><a\n ng-click="selectPage(page.number)">{{page.text}}</a></li>\n </ul>\n</div> ')}]),angular.module("partials/selectAllCheckbox.html",[]).run(["$templateCache",function(a){a.put("partials/selectAllCheckbox.html",'<input class="smart-table-select-all" type="checkbox" ng-model="holder.isAllSelected"/>')}]),angular.module("partials/selectionCheckbox.html",[]).run(["$templateCache",function(a){a.put("partials/selectionCheckbox.html",'<i
 nput type="checkbox" ng-model="dataRow.isSelected" stop-event="click"/>')}]),angular.module("partials/smartTable.html",[]).run(["$templateCache",function(a){a.put("partials/smartTable.html",'<table class="smart-table">\n <thead>\n <tr class="smart-table-global-search-row" ng-show="isGlobalSearchActivated">\n <td class="smart-table-global-search" column-span="{{columns.length}}" colspan="{{columnSpan}}">\n </td>\n </tr>\n <tr class="smart-table-header-row">\n <th ng-repeat="column in columns" ng-include="column.headerTemplateUrl"\n class="smart-table-header-cell {{column.headerClass}}" scope="col">\n </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="dataRow in displayedCollection" ng-class="{selected:dataRow.isSelected}"\n class="smart-table-data-row">\n <td ng-repeat="column in columns" class="smart-table-data-cell {{column.cellClass}}"></td>\n </tr>\n </tbody>\n <tfoot ng-show="isPaginationEnabled">\n <tr class="smart-table-footer-row">\n <td colspan="{{columns.length}}">\n <div 
 pagination-smart-table="" num-pages="numberOfPages" max-size="maxSize" current-page="currentPage"></div>\n </td>\n </tr>\n </tfoot>\n</table>\n\n\n')}]),function(a){"use strict";a.module("smartTable.templateUrlList",[]).constant("templateUrlList",{smartTable:"partials/smartTable.html",smartTableGlobalSearch:"partials/globalSearchCell.html",editableCell:"partials/editableCell.html",selectionCheckbox:"partials/selectionCheckbox.html",selectAllCheckbox:"partials/selectAllCheckbox.html",defaultHeader:"partials/defaultHeader.html",pagination:"partials/pagination.html"})}(angular),function(a){"use strict";a.module("smartTable.utilities",[]).factory("ArrayUtility",function(){var b=function(a,b){return b>=0&&b<a.length?a.splice(b,1)[0]:void 0},c=function(a,b,c){b>=0&&b<a.length?a.splice(b,0,c):a.push(c)},d=function(a,b,c){var d;b>=0&&b<a.length&&c>=0&&c<a.length&&(d=a.splice(b,1)[0],a.splice(c,0,d))},e=function(b,c,d,e){return c&&a.isFunction(c)?c(b,d,e===!0):b},f=function(b,c,d){return c&&
 a.isFunction(c)?c(b,d):b},g=function(b,c,d){var e,f,g=[];if(!a.isArray(b))return b;f=Math.max(c,0),f=Math.min(f,b.length-1>0?b.length-1:0),d=Math.max(0,d),e=Math.min(f+d,b.length);for(var h=f;e>h;h++)g.push(b[h]);return g};return{removeAt:b,insertAt:c,moveAt:d,sort:e,filter:f,fromTo:g}})}(angular),function(a){a.module("ui.bootstrap.pagination.smartTable",["smartTable.templateUrlList"]).constant("paginationConfig",{boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"<",nextText:">",lastText:"Last"}).directive("paginationSmartTable",["paginationConfig","templateUrlList",function(b,c){return{restrict:"EA",require:"^smartTable",scope:{numPages:"=",currentPage:"=",maxSize:"="},templateUrl:c.pagination,replace:!0,link:function(c,d,e,f){function g(a,b,c,d){return{number:a,text:b,active:c,disabled:d}}var h=a.isDefined(e.boundaryLinks)?c.$eval(e.boundaryLinks):b.boundaryLinks,i=a.isDefined(e.directionLinks)?c.$eval(e.directionLinks):b.directionLinks,j=a.isDefined(e.firstText)?
 e.firstText:b.firstText,k=a.isDefined(e.previousText)?e.previousText:b.previousText,l=a.isDefined(e.nextText)?e.nextText:b.nextText,m=a.isDefined(e.lastText)?e.lastText:b.lastText;c.$watch("numPages + currentPage + maxSize",function(){c.pages=[];var a=1,b=c.numPages;c.maxSize&&c.maxSize<c.numPages&&(a=Math.max(c.currentPage-Math.floor(c.maxSize/2),1),b=a+c.maxSize-1,b>c.numPages&&(b=c.numPages,a=b-c.maxSize+1));for(var d=a;b>=d;d++){var e=g(d,d,c.isActive(d),!1);c.pages.push(e)}if(i){var f=g(c.currentPage-1,k,!1,c.noPrevious());c.pages.unshift(f);var n=g(c.currentPage+1,l,!1,c.noNext());c.pages.push(n)}if(h){var o=g(1,j,!1,c.noPrevious());c.pages.unshift(o);var p=g(c.numPages,m,!1,c.noNext());c.pages.push(p)}c.currentPage>c.numPages&&c.selectPage(c.numPages)}),c.noPrevious=function(){return 1===c.currentPage},c.noNext=function(){return c.currentPage===c.numPages},c.isActive=function(a){return c.currentPage===a},c.selectPage=function(a){!c.isActive(a)&&a>0&&a<=c.numPages&&(c.currentP
 age=a,f.changePage({page:a}))}}}}])}(angular);
\ No newline at end of file
+!function(a,b){"use strict";function c(a,c){function d(a){return this instanceof d?(b.extend(this,a),void 0):new d(a)}this.setDefaultOption=function(a){b.extend(d.prototype,a)},a.headerTemplateUrl=c.defaultHeader,this.setDefaultOption(a),this.$get=function(){return d}}var d=b.module("smartTable.column",["smartTable.templateUrlList"]).constant("DefaultColumnConfiguration",{isSortable:!0,isEditable:!1,type:"text",headerTemplateUrl:"",map:"",label:"",sortPredicate:"",formatFunction:"",formatParameter:"",filterPredicate:"",cellTemplateUrl:"",headerClass:"",cellClass:""});c.$inject=["DefaultColumnConfiguration","templateUrlList"],d.provider("Column",c),a.ColumnProvider=c}(window,angular),function(a){"use strict";a.module("smartTable.directives",["smartTable.templateUrlList","smartTable.templates"]).directive("smartTable",["templateUrlList","DefaultTableConfiguration",function(b,c){return{restrict:"EA",scope:{columnCollection:"=columns",dataCollection:"=rows",config:"="},replace:"true",te
 mplateUrl:b.smartTable,controller:"TableCtrl",link:function(d,e,f,g){var h;d.$watch("config",function(e){var f=a.extend({},c,e),h=void 0!==d.columns?d.columns.length:0;if(g.setGlobalConfig(f),"multiple"!==f.selectionMode||f.displaySelectionCheckbox!==!0)for(var i=h-1;i>=0;i--)d.columns[i].isSelectionColumn===!0&&g.removeColumn(i);else g.insertColumn({cellTemplateUrl:b.selectionCheckbox,headerTemplateUrl:b.selectAllCheckbox,isSelectionColumn:!0},0)},!0),d.$watch("columnCollection",function(){if(g.clearColumns(),d.columnCollection)for(var b=0,c=d.columnCollection.length;c>b;b++)g.insertColumn(d.columnCollection[b]);else d.dataCollection&&d.dataCollection.length>0&&(h=d.dataCollection[0],a.forEach(h,function(a,b){"$"!=b[0]&&g.insertColumn({label:b,map:b})}))},!0),d.$watch("dataCollection.length",function(a,b){a!==b&&g.sortBy()})}}}]).directive("smartTableDataRow",function(){return{require:"^smartTable",restrict:"C",link:function(a,b,c,d){var e;null!=(e=a.config)&&"function"==typeof e.r
 owFunction&&e.rowFunction(a,b,c,d),b.bind("click",function(){a.$apply(function(){d.toggleSelection(a.dataRow)})})}}}).directive("smartTableHeaderCell",function(){return{restrict:"C",require:"^smartTable",link:function(a,b,c,d){b.bind("click",function(){a.$apply(function(){d.sortBy(a.column)})})}}}).directive("smartTableSelectAll",function(){return{restrict:"C",require:"^smartTable",link:function(a,b,c,d){b.bind("click",function(){d.toggleSelectionAll(b[0].checked===!0)})}}}).directive("stopEvent",function(){return{restrict:"A",link:function(a,b,c){b.bind(c.stopEvent,function(a){a.stopPropagation()})}}}).directive("smartTableGlobalSearch",["templateUrlList",function(a){return{restrict:"C",require:"^smartTable",scope:{columnSpan:"@"},templateUrl:a.smartTableGlobalSearch,replace:!1,link:function(a,b,c,d){a.searchValue="",a.$watch("searchValue",function(a){d.search(a)})}}}]).directive("smartTableDataCell",["$filter","$http","$templateCache","$compile","$parse",function(a,b,c,d,e){return
 {restrict:"C",link:function(f,g){function h(){j.isEditable?(g.html('<div editable-cell="" row="dataRow" column="column" type="column.type"></div>'),d(g.contents())(f)):g.html(f.formatedValue)}var i,j=f.column,k=!j.isEditable,l=f.dataRow,m=a("format"),n=e(j.map);f.$watch("dataRow",function(){f.formatedValue=m(n(l),j.formatFunction,j.formatParameter),k===!0&&g.html(f.formatedValue)},!0),f.$watch("column.cellTemplateUrl",function(a){a?b.get(a,{cache:c}).success(function(a){k=!1,i=f.$new(),g.html(a),d(g.contents())(i)}).error(h):h()})}}}]).directive("inputType",function(){return{restrict:"A",priority:1,link:function(a,b,c){var d=a.$eval(c.type);c.$set("type",d)}}}).directive("editableCell",["templateUrlList","$parse",function(b,c){return{restrict:"EA",require:"^smartTable",templateUrl:b.editableCell,scope:{row:"=",column:"=",type:"="},replace:!0,link:function(b,d,e,f){var g=a.element(d.children()[1]),h=a.element(g.children()[0]),i=c(b.column.map);b.isEditMode=!1,b.$watch("row",function(
 ){b.value=i(b.row)},!0),b.submit=function(){b.myForm.$valid===!0&&(f.updateDataRow(b.row,b.column.map,b.value),f.sortBy()),b.toggleEditMode()},b.toggleEditMode=function(){b.value=i(b.row),b.isEditMode=b.isEditMode!==!0},b.$watch("isEditMode",function(a){a===!0&&(h[0].select(),h[0].focus())}),h.bind("blur",function(){b.$apply(function(){b.submit()})})}}}])}(angular),function(a){"use strict";a.module("smartTable.filters",[]).constant("DefaultFilters",["currency","date","json","lowercase","number","uppercase"]).filter("format",["$filter","DefaultFilters",function(b,c){return function(d,e,f){var g;return g=e&&a.isFunction(e)?e:-1!==c.indexOf(e)?b(e):function(a){return a},g(d,f)}}])}(angular),function(a){"use strict";a.module("smartTable.table",["smartTable.column","smartTable.utilities","smartTable.directives","smartTable.filters","ui.bootstrap.pagination.smartTable"]).constant("DefaultTableConfiguration",{selectionMode:"none",isGlobalSearchActivated:!1,displaySelectionCheckbox:!1,isPag
 inationEnabled:!0,itemsByPage:10,maxSize:5,sortAlgorithm:"",filterAlgorithm:""}).controller("TableCtrl",["$scope","Column","$filter","$parse","ArrayUtility","DefaultTableConfiguration",function(b,c,d,e,f,g){function h(){var a,c=b.displayedCollection.length;for(a=0;c>a;a++)if(b.displayedCollection[a].isSelected!==!0)return!1;return!0}function i(c){return!a.isArray(c)||0===c.length||b.itemsByPage<1?1:Math.ceil(c.length/b.itemsByPage)}function j(c,e){var g=(b.sortAlgorithm&&a.isFunction(b.sortAlgorithm))===!0?b.sortAlgorithm:d("orderBy");return e&&void 0!==e.reverse?f.sort(c,g,e.sortPredicate,e.reverse):c}function k(c,d,e,f){var g,i;if(a.isArray(c)&&("multiple"===d||"single"===d)&&e>=0&&e<c.length){if(g=c[e],"single"===d)for(var j=0,k=c.length;k>j;j++)i=c[j].isSelected,c[j].isSelected=!1,i===!0&&b.$emit("selectionChange",{item:c[j]});g.isSelected=f,b.holder.isAllSelected=h(),b.$emit("selectionChange",{item:g})}}b.columns=[],b.dataCollection=b.dataCollection||[],b.displayedCollection=[]
 ,b.numberOfPages=i(b.dataCollection),b.currentPage=1,b.holder={isAllSelected:!1};var l,m={};this.setGlobalConfig=function(c){a.extend(b,g,c)},this.changePage=function(c){var d=b.currentPage;a.isNumber(c.page)&&(b.currentPage=c.page,b.displayedCollection=this.pipe(b.dataCollection),b.holder.isAllSelected=h(),b.$emit("changePage",{oldValue:d,newValue:b.currentPage}))},this.sortBy=function(a){var c=b.columns.indexOf(a);-1!==c&&a.isSortable===!0&&(l&&l!==a&&(l.reverse=void 0),a.sortPredicate=a.sortPredicate||a.map,a.reverse=void 0===a.reverse?!1:a.reverse===!1?!0:void 0,l=a),b.displayedCollection=this.pipe(b.dataCollection)},this.search=function(a,c){c&&-1!==b.columns.indexOf(c)?m[c.map]=a:m={$:a},b.displayedCollection=this.pipe(b.dataCollection)},this.pipe=function(c){var e,g=(b.filterAlgorithm&&a.isFunction(b.filterAlgorithm))===!0?b.filterAlgorithm:d("filter");return e=j(f.filter(c,g,m),l),b.numberOfPages=i(e),b.isPaginationEnabled?f.fromTo(e,(b.currentPage-1)*b.itemsByPage,b.itemsBy
 Page):e},this.insertColumn=function(a,d){var e=new c(a);f.insertAt(b.columns,d,e)},this.removeColumn=function(a){f.removeAt(b.columns,a)},this.moveColumn=function(a,c){f.moveAt(b.columns,a,c)},this.clearColumns=function(){b.columns.length=0},this.toggleSelection=function(a){var c=b.dataCollection.indexOf(a);-1!==c&&k(b.dataCollection,b.selectionMode,c,a.isSelected!==!0)},this.toggleSelectionAll=function(a){var c=0,d=b.displayedCollection.length;if("multiple"===b.selectionMode)for(;d>c;c++)k(b.displayedCollection,b.selectionMode,c,a===!0)},this.removeDataRow=function(a){var c=f.removeAt(b.displayedCollection,a);f.removeAt(b.dataCollection,b.dataCollection.indexOf(c))},this.moveDataRow=function(a,c){f.moveAt(b.displayedCollection,a,c)},this.updateDataRow=function(a,c,d){var f,g=b.displayedCollection.indexOf(a),h=e(c),i=h.assign;-1!==g&&(f=h(b.displayedCollection[g]),f!==d&&(i(b.displayedCollection[g],d),b.$emit("updateDataRow",{item:b.displayedCollection[g]})))}}])}(angular),angular.m
 odule("smartTable.templates",["partials/defaultCell.html","partials/defaultHeader.html","partials/editableCell.html","partials/globalSearchCell.html","partials/pagination.html","partials/selectAllCheckbox.html","partials/selectionCheckbox.html","partials/smartTable.html"]),angular.module("partials/defaultCell.html",[]).run(["$templateCache",function(a){a.put("partials/defaultCell.html","{{formatedValue}}")}]),angular.module("partials/defaultHeader.html",[]).run(["$templateCache",function(a){a.put("partials/defaultHeader.html","<span class=\"header-content\" ng-class=\"{'sort-ascent':column.reverse==false,'sort-descent':column.reverse==true}\">{{column.label}}</span>")}]),angular.module("partials/editableCell.html",[]).run(["$templateCache",function(a){a.put("partials/editableCell.html",'<div ng-dblclick="isEditMode || toggleEditMode($event)">\n    <span ng-hide="isEditMode">{{value | format:column.formatFunction:column.formatParameter}}</span>\n\n    <form ng-submit="submit()" ng-sh
 ow="isEditMode" name="myForm">\n        <input name="myInput" ng-model="value" type="type" input-type/>\n    </form>\n</div>')}]),angular.module("partials/globalSearchCell.html",[]).run(["$templateCache",function(a){a.put("partials/globalSearchCell.html",'<label>Search :</label>\n<input type="text" ng-model="searchValue"/>')}]),angular.module("partials/pagination.html",[]).run(["$templateCache",function(a){a.put("partials/pagination.html",'<div class="pagination">\n    <ul class="pagination">\n        <li ng-repeat="page in pages" ng-class="{active: page.active, disabled: page.disabled}"><a\n                ng-click="selectPage(page.number)">{{page.text}}</a></li>\n    </ul>\n</div> ')}]),angular.module("partials/selectAllCheckbox.html",[]).run(["$templateCache",function(a){a.put("partials/selectAllCheckbox.html",'<input class="smart-table-select-all"  type="checkbox" ng-model="holder.isAllSelected"/>')}]),angular.module("partials/selectionCheckbox.html",[]).run(["$templateCache",fu
 nction(a){a.put("partials/selectionCheckbox.html",'<input type="checkbox" ng-model="dataRow.isSelected" stop-event="click"/>')}]),angular.module("partials/smartTable.html",[]).run(["$templateCache",function(a){a.put("partials/smartTable.html",'<table class="smart-table">\n    <thead>\n    <tr class="smart-table-global-search-row" ng-show="isGlobalSearchActivated">\n        <td class="smart-table-global-search" column-span="{{columns.length}}" colspan="{{columnSpan}}">\n        </td>\n    </tr>\n    <tr class="smart-table-header-row">\n        <th ng-repeat="column in columns" ng-include="column.headerTemplateUrl"\n            class="smart-table-header-cell {{column.headerClass}}" scope="col">\n        </th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr ng-repeat="dataRow in displayedCollection" ng-class="{selected:dataRow.isSelected}"\n        class="smart-table-data-row">\n        <td ng-repeat="column in columns" class="smart-table-data-cell {{column.cellClass}}"></td>\n    </tr>
 \n    </tbody>\n    <tfoot ng-show="isPaginationEnabled">\n    <tr class="smart-table-footer-row">\n        <td colspan="{{columns.length}}">\n            <div pagination-smart-table="" num-pages="numberOfPages" max-size="maxSize" current-page="currentPage"></div>\n        </td>\n    </tr>\n    </tfoot>\n</table>\n\n\n')}]),function(a){"use strict";a.module("smartTable.templateUrlList",[]).constant("templateUrlList",{smartTable:"partials/smartTable.html",smartTableGlobalSearch:"partials/globalSearchCell.html",editableCell:"partials/editableCell.html",selectionCheckbox:"partials/selectionCheckbox.html",selectAllCheckbox:"partials/selectAllCheckbox.html",defaultHeader:"partials/defaultHeader.html",pagination:"partials/pagination.html"})}(angular),function(a){"use strict";a.module("smartTable.utilities",[]).factory("ArrayUtility",function(){var b=function(a,b){return b>=0&&b<a.length?a.splice(b,1)[0]:void 0},c=function(a,b,c){b>=0&&b<a.length?a.splice(b,0,c):a.push(c)},d=function(a,b,c
 ){var d;b>=0&&b<a.length&&c>=0&&c<a.length&&(d=a.splice(b,1)[0],a.splice(c,0,d))},e=function(b,c,d,e){return c&&a.isFunction(c)?c(b,d,e===!0):b},f=function(b,c,d){return c&&a.isFunction(c)?c(b,d):b},g=function(b,c,d){var e,f,g=[];if(!a.isArray(b))return b;f=Math.max(c,0),f=Math.min(f,b.length-1>0?b.length-1:0),d=Math.max(0,d),e=Math.min(f+d,b.length);for(var h=f;e>h;h++)g.push(b[h]);return g};return{removeAt:b,insertAt:c,moveAt:d,sort:e,filter:f,fromTo:g}})}(angular),function(a){a.module("ui.bootstrap.pagination.smartTable",["smartTable.templateUrlList"]).constant("paginationConfig",{boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"<",nextText:">",lastText:"Last"}).directive("paginationSmartTable",["paginationConfig","templateUrlList",function(b,c){return{restrict:"EA",require:"^smartTable",scope:{numPages:"=",currentPage:"=",maxSize:"="},templateUrl:c.pagination,replace:!0,link:function(c,d,e,f){function g(a,b,c,d){return{number:a,text:b,active:c,disabled:d}}var h
 =a.isDefined(e.boundaryLinks)?c.$eval(e.boundaryLinks):b.boundaryLinks,i=a.isDefined(e.directionLinks)?c.$eval(e.directionLinks):b.directionLinks,j=a.isDefined(e.firstText)?e.firstText:b.firstText,k=a.isDefined(e.previousText)?e.previousText:b.previousText,l=a.isDefined(e.nextText)?e.nextText:b.nextText,m=a.isDefined(e.lastText)?e.lastText:b.lastText;c.$watch("numPages + currentPage + maxSize",function(){c.pages=[];var a=1,b=c.numPages;c.maxSize&&c.maxSize<c.numPages&&(a=Math.max(c.currentPage-Math.floor(c.maxSize/2),1),b=a+c.maxSize-1,b>c.numPages&&(b=c.numPages,a=b-c.maxSize+1));for(var d=a;b>=d;d++){var e=g(d,d,c.isActive(d),!1);c.pages.push(e)}if(i){var f=g(c.currentPage-1,k,!1,c.noPrevious());c.pages.unshift(f);var n=g(c.currentPage+1,l,!1,c.noNext());c.pages.push(n)}if(h){var o=g(1,j,!1,c.noPrevious());c.pages.unshift(o);var p=g(c.numPages,m,!1,c.noNext());c.pages.push(p)}c.currentPage>c.numPages&&c.selectPage(c.numPages)}),c.noPrevious=function(){return 1===c.currentPage},c.n
 oNext=function(){return c.currentPage===c.numPages},c.isActive=function(a){return c.currentPage===a},c.selectPage=function(a){!c.isActive(a)&&a>0&&a<=c.numPages&&(c.currentPage=a,f.changePage({page:a}))}}}}])}(angular);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/bower.json
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/bower.json b/3rdparty/javascript/bower_components/smart-table/bower.json
deleted file mode 100644
index 68709ef..0000000
--- a/3rdparty/javascript/bower_components/smart-table/bower.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "author": "Laurent Renard",
-    "name": "smart-table",
-    "description": "A grid/table module for angular js",
-    "version": "0.1.5",
-    "homepage": "http://lorenzofox3.github.io/smart-table-website/",
-    "repository": {
-        "type": "git",
-        "url": "https://github.com/lorenzofox3/bower-smart-table.git"
-    },
-    "main": "./Smart-Table.min.js",
-    "dependencies": {
-        "angular": "1.0.7"
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/config/karma-e2e.conf.js
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/config/karma-e2e.conf.js b/3rdparty/javascript/bower_components/smart-table/config/karma-e2e.conf.js
new file mode 100644
index 0000000..70001a5
--- /dev/null
+++ b/3rdparty/javascript/bower_components/smart-table/config/karma-e2e.conf.js
@@ -0,0 +1,22 @@
+basePath = '../';
+
+files = [
+    ANGULAR_SCENARIO,
+    ANGULAR_SCENARIO_ADAPTER,
+    'test/e2e/**/*.js'
+];
+
+autoWatch = false;
+
+browsers = ['Chrome'];
+
+singleRun = true;
+
+proxies = {
+    '/': 'http://localhost:8000/'
+};
+
+junitReporter = {
+    outputFile: 'test_out/e2e.xml',
+    suite: 'e2e'
+};

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/config/karma.conf.js
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/config/karma.conf.js b/3rdparty/javascript/bower_components/smart-table/config/karma.conf.js
new file mode 100644
index 0000000..b6a953d
--- /dev/null
+++ b/3rdparty/javascript/bower_components/smart-table/config/karma.conf.js
@@ -0,0 +1,43 @@
+module.exports = function (config) {
+    config.set({
+
+        basePath: '../',
+
+        files: [
+            'smart-table-module/lib/angular/angular.js',
+            'test/lib/angular/angular-mocks.js',
+            'smart-table-module/js/*.js',
+            'test/unit/*.js'
+        ],
+
+        frameworks: ['jasmine'],
+
+        autoWatch: false,
+
+        browsers: ['Chrome'],
+
+
+        preprocessors: {
+            'smart-table-module/js/Column.js': 'coverage',
+            'smart-table-module/js/Table.js': 'coverage',
+            'smart-table-module/js/Utilities.js': 'coverage',
+            'smart-table-module/js/Filters.js': 'coverage',
+            'smart-table-module/js/Directives.js': 'coverage'
+        },
+
+        reporters: ['progress', 'coverage'],
+
+
+        junitReporter: {
+            outputFile: 'test_out/unit.xml',
+            suite: 'unit'
+        },
+
+        coverageReporter: {
+            type: 'html',
+            dir: 'test_out/'
+        }
+
+    });
+};
+

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/3a992e2c/3rdparty/javascript/bower_components/smart-table/example-app/css/app.css
----------------------------------------------------------------------
diff --git a/3rdparty/javascript/bower_components/smart-table/example-app/css/app.css b/3rdparty/javascript/bower_components/smart-table/example-app/css/app.css
new file mode 100644
index 0000000..bf72043
--- /dev/null
+++ b/3rdparty/javascript/bower_components/smart-table/example-app/css/app.css
@@ -0,0 +1,62 @@
+/* app css stylesheet */
+
+.menu {
+    list-style: none;
+    border-bottom: 0.1em solid black;
+    margin-bottom: 2em;
+    padding: 0 0 0.5em;
+}
+
+.menu:before {
+    content: "[";
+}
+
+.menu:after {
+    content: "]";
+}
+
+.menu > li {
+    display: inline;
+}
+
+.menu > li:before {
+    content: "|";
+    padding-right: 0.3em;
+}
+
+.menu > li:nth-child(1):before {
+    content: "";
+    padding: 0;
+}
+
+.smart-table-data-row.selected {
+    background: darkgray;
+}
+
+.header-content:before {
+    content: ' ';
+    position: relative;
+    left: -5px;
+}
+
+.sort-ascent:before {
+    content: "\25B4";
+}
+
+.sort-descent:before {
+    content: "\25BE";
+}
+
+.pagination {
+    text-align: center;
+    cursor: pointer;
+}
+
+.smart-table th {
+    width: 120px;
+    padding: 0 20px;
+}
+
+
+
+