Compare commits
128 Commits
open486
...
tabular-vi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7d322d01c | ||
|
|
42ce2aa7cf | ||
|
|
43d497e069 | ||
|
|
5306e96374 | ||
|
|
156940f25b | ||
|
|
10e0acddb3 | ||
|
|
ceee7e0da9 | ||
|
|
53a49a671b | ||
|
|
99a454f943 | ||
|
|
cb53e1aaee | ||
|
|
0f231838ec | ||
|
|
0bdf05e61c | ||
|
|
3146660833 | ||
|
|
72df464f0f | ||
|
|
f602aa9247 | ||
|
|
b37b82133e | ||
|
|
c43929f1c6 | ||
|
|
88750d92ef | ||
|
|
8c602025d4 | ||
|
|
5604120d55 | ||
|
|
5daf2f54cd | ||
|
|
668c02f278 | ||
|
|
0a5097a945 | ||
|
|
f615dc5409 | ||
|
|
b0e4947bf0 | ||
|
|
5d4ace64cb | ||
|
|
215008253d | ||
|
|
f5e0ad23ea | ||
|
|
73324ce338 | ||
|
|
ef708cf11c | ||
|
|
ad767d0db9 | ||
|
|
f11cd589c5 | ||
|
|
2036a467ce | ||
|
|
4cb183adc3 | ||
|
|
52b01e8bdb | ||
|
|
a10db656ce | ||
|
|
4926ccb07b | ||
|
|
2dd9a16bf3 | ||
|
|
339faf5376 | ||
|
|
10c3ffc4be | ||
|
|
aebae27391 | ||
|
|
97d0a66684 | ||
|
|
bb7f4239f6 | ||
|
|
9b524af3ce | ||
|
|
5081e89590 | ||
|
|
d2a7e04b44 | ||
|
|
fcb23b42a4 | ||
|
|
6b585d175b | ||
|
|
6b32db778a | ||
|
|
924a4026ff | ||
|
|
25a7df7885 | ||
|
|
ddb5837145 | ||
|
|
6509d84a5d | ||
|
|
507f2391ff | ||
|
|
38e703a121 | ||
|
|
e564baba1a | ||
|
|
0a546cd50c | ||
|
|
baf32dd62f | ||
|
|
71db4b38ab | ||
|
|
2727c9544d | ||
|
|
a35b0c1d7b | ||
|
|
df94d31cf3 | ||
|
|
c3f819fa8c | ||
|
|
5b0ee8588c | ||
|
|
fcfb3eebda | ||
|
|
84e1e87ce3 | ||
|
|
41cfd050a2 | ||
|
|
d67ffa8401 | ||
|
|
fd2f4128a0 | ||
|
|
814fb3b513 | ||
|
|
e0fbaa83b0 | ||
|
|
967f8c9151 | ||
|
|
84ecfd3527 | ||
|
|
3a4f6a7229 | ||
|
|
7a160a0a98 | ||
|
|
cf15b6eed7 | ||
|
|
452b05eb7b | ||
|
|
82261dfabc | ||
|
|
fc7bd36dba | ||
|
|
918c667496 | ||
|
|
7c23f803e8 | ||
|
|
97c69799b4 | ||
|
|
406fdd5efc | ||
|
|
f334be8f23 | ||
|
|
e1b7f2af30 | ||
|
|
ad63b9ff1b | ||
|
|
e83b19c84b | ||
|
|
dbf196e014 | ||
|
|
b5c8ecc85f | ||
|
|
9e6da94878 | ||
|
|
3a26c864b8 | ||
|
|
be7827d6f8 | ||
|
|
b8b5fdcabf | ||
|
|
45276183b9 | ||
|
|
54653f3914 | ||
|
|
cd2b19eb1e | ||
|
|
3850db268a | ||
|
|
c65096f166 | ||
|
|
fcae3fd7a9 | ||
|
|
83dd23cd4b | ||
|
|
26c155da3b | ||
|
|
db7560c31f | ||
|
|
6fc028e112 | ||
|
|
9b6f3bff85 | ||
|
|
c2207fe7ce | ||
|
|
119429bc42 | ||
|
|
a94e99af70 | ||
|
|
96dc055f02 | ||
|
|
a50410f8ed | ||
|
|
0dc715199d | ||
|
|
aab53c4ae1 | ||
|
|
b63812111d | ||
|
|
442229fd42 | ||
|
|
a7a707595c | ||
|
|
8c325eb1b1 | ||
|
|
5e628b1a25 | ||
|
|
f8114ba6b6 | ||
|
|
a10f895904 | ||
|
|
9b59fd7eae | ||
|
|
9fe026a1f1 | ||
|
|
3b5c1bf2e6 | ||
|
|
bb993dc94f | ||
|
|
5beb1de805 | ||
|
|
0a012c67dd | ||
|
|
11b71fae68 | ||
|
|
e6d0537e5e | ||
|
|
99556ed6a5 | ||
|
|
07c407edea |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -15,6 +15,7 @@
|
||||
|
||||
# Build output
|
||||
target
|
||||
dist
|
||||
|
||||
# Mac OS X Finder
|
||||
.DS_Store
|
||||
@@ -22,8 +23,9 @@ target
|
||||
# Closed source libraries
|
||||
closed-lib
|
||||
|
||||
# Node dependencies
|
||||
# Node, Bower dependencies
|
||||
node_modules
|
||||
bower_components
|
||||
|
||||
# Protractor logs
|
||||
protractor/logs
|
||||
|
||||
58
LICENSES.md
58
LICENSES.md
@@ -135,7 +135,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
* Link: http://requirejs.org/
|
||||
|
||||
* Version: 2.1.9
|
||||
* Version: 2.1.22
|
||||
|
||||
* Author: The Dojo Foundation
|
||||
|
||||
@@ -153,13 +153,49 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
---
|
||||
|
||||
### requirejs-text
|
||||
|
||||
#### Info
|
||||
|
||||
* Link: https://github.com/requirejs/text
|
||||
|
||||
* Version: 2.0.14
|
||||
|
||||
* Author: The Dojo Foundation
|
||||
|
||||
* Description: Text loading plugin for RequireJS
|
||||
|
||||
#### License
|
||||
|
||||
Copyright (c) 2010-2014, The Dojo Foundation
|
||||
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
### AngularJS
|
||||
|
||||
#### Info
|
||||
|
||||
* Link: http://angularjs.org/
|
||||
|
||||
* Version: 1.2.26
|
||||
* Version: 1.4.4
|
||||
|
||||
* Author: Google
|
||||
|
||||
@@ -167,7 +203,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
#### License
|
||||
|
||||
Copyright (c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
|
||||
|
||||
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:
|
||||
|
||||
@@ -183,7 +219,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
* Link: http://angularjs.org/
|
||||
|
||||
* Version: 1.2.26
|
||||
* Version: 1.4.4
|
||||
|
||||
* Author: Google
|
||||
|
||||
@@ -191,7 +227,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
#### License
|
||||
|
||||
Copyright (c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
|
||||
|
||||
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:
|
||||
|
||||
@@ -207,7 +243,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
* Link: https://github.com/jakearchibald/es6-promise
|
||||
|
||||
* Version: 2.0.0
|
||||
* Version: 3.0.2
|
||||
|
||||
* Authors: Yehuda Katz, Tom Dale, Stefan Penner and contributors
|
||||
|
||||
@@ -231,7 +267,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
* Link: https://github.com/sindresorhus/screenfull.js/
|
||||
|
||||
* Version: 1.2.0
|
||||
* Version: 3.0.0
|
||||
|
||||
* Author: Sindre Sorhus
|
||||
|
||||
@@ -255,15 +291,15 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
* Link: https://github.com/broofa/node-uuid
|
||||
|
||||
* Version: 1.4
|
||||
* Version: 1.4.7
|
||||
|
||||
* Author: Robert Kieffer
|
||||
|
||||
* Description: Unique identifer generation (code adapted.)
|
||||
* Description: Unique identifer generation.
|
||||
|
||||
#### License
|
||||
|
||||
Copyright (c) 2010 Robert Kieffer
|
||||
Copyright (c) 2010-2012 Robert Kieffer
|
||||
|
||||
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:
|
||||
|
||||
@@ -327,7 +363,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||
|
||||
* Link: http://momentjs.com
|
||||
|
||||
* Version: 2.7.0
|
||||
* Version: 2.11.1
|
||||
|
||||
* Authors: Tim Wood, Iskren Chernev, Moment.js contributors
|
||||
|
||||
|
||||
64
README.md
64
README.md
@@ -20,27 +20,6 @@ directory names) to include in a running instance of Open MCT Web. Adding or
|
||||
removing paths from this list will add or remove bundles from the running
|
||||
application.
|
||||
|
||||
### Bundle Contents
|
||||
|
||||
A bundle directory will contain:
|
||||
|
||||
* `bundle.json`, the declaration of the bundles contents.
|
||||
* A source code directory, named `src` by convention. This contains all
|
||||
JavaScript sources exposed by the bundle. These are declared as
|
||||
AMD modules.
|
||||
* A directory for other resources, named `res` by convention. This
|
||||
contains all HTML templates, CSS files, images, and so forth to be
|
||||
used within a given bundle.
|
||||
* A library directory, named `lib` by convention. This contains all
|
||||
external libraries used and/or exposed by the bundle.
|
||||
* A test directory, named `test` by convention. This contains all unit
|
||||
tests declared for the bundle, as well as a `suite.json` that acts
|
||||
as a listing of these dependencies. See the section on unit testing
|
||||
below.
|
||||
|
||||
Following these bundle conventions is required, at present, to ensure
|
||||
that Open MCT Web (and its build and tests) execute correctly.
|
||||
|
||||
## Tests
|
||||
|
||||
Tests are written for [Jasmine 1.3](http://jasmine.github.io/1.3/introduction.html)
|
||||
@@ -77,39 +56,36 @@ To run:
|
||||
|
||||
## Build
|
||||
|
||||
Open MCT Web includes a Maven command line build. Although Open MCT Web
|
||||
can be run as-is using the repository contents (that is, by viewing
|
||||
`index.html` in a web browser), the command
|
||||
line build allows machine-driven verification and packaging.
|
||||
Open MCT Web is built using [`npm`](http://npmjs.com/)
|
||||
and [`gulp`](http://gulpjs.com/).
|
||||
|
||||
This build will:
|
||||
To build:
|
||||
|
||||
* Check all sources (excluding those in directories named `lib`) with
|
||||
JSLint for code style compliance. The build will fail if any sources
|
||||
do not satisfy JSLint.
|
||||
* Run the [unit test suite](#tests).
|
||||
* Package the application as a `war` (web archive) file. This is
|
||||
convenient for deployment on Tomcat or similar. This archive will
|
||||
include sources, resources, and libraries for bundles, as well
|
||||
as the top-level files used to initiate running of the application
|
||||
(`index.html` and `bundles.json`).
|
||||
`npm run prepublish`
|
||||
|
||||
Run as `mvn clean install`.
|
||||
This will compile and minify JavaScript sources, as well as copy over assets.
|
||||
The contents of the `dist` folder will contain a runnable Open MCT Web
|
||||
instance (e.g. by starting an HTTP server in that directory), including:
|
||||
|
||||
* A `main.js` file containing Open MCT Web source code.
|
||||
* Various assets in the `example` and `platform` directories.
|
||||
* An `index.html` that runs Open MCT Web in its default configuration.
|
||||
|
||||
Additional `gulp` tasks are defined in [the gulpfile](gulpfile.js).
|
||||
|
||||
### Building Documentation
|
||||
|
||||
Open MCT Web's documentation is generated by an
|
||||
[npm](https://www.npmjs.com/)-based build:
|
||||
[npm](https://www.npmjs.com/)-based build. It has additional dependencies that
|
||||
may not be available on every platform and thus is not covered in the standard
|
||||
npm install. Ensure your system has [libcairo](http://cairographics.org/)
|
||||
installed and then run the following commands:
|
||||
|
||||
* `npm install` _(only needs to run once)_
|
||||
* `npm install`
|
||||
* `npm install canvas nomnoml`
|
||||
* `npm run docs`
|
||||
|
||||
Documentation will be generated in `target/docs`. Note that diagram
|
||||
generation is dependent on having [Cairo](http://cairographics.org/download/)
|
||||
installed; see
|
||||
[node-canvas](https://github.com/Automattic/node-canvas#installation)'s
|
||||
documentation for help with installation.
|
||||
|
||||
Documentation will be generated in `target/docs`.
|
||||
|
||||
# Glossary
|
||||
|
||||
|
||||
20
bower.json
Normal file
20
bower.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "openmctweb",
|
||||
"description": "The OpenMCTWeb core platform",
|
||||
"main": "",
|
||||
"license": "Apache-2.0",
|
||||
"moduleType": [],
|
||||
"homepage": "http://nasa.github.io/openmctweb/",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"angular": "1.4.4",
|
||||
"angular-route": "1.4.4",
|
||||
"moment": "^2.11.1",
|
||||
"moment-duration-format": "^1.3.0",
|
||||
"requirejs": "~2.1.22",
|
||||
"text": "requirejs-text#^2.0.14",
|
||||
"es6-promise": "^3.0.2",
|
||||
"screenfull": "^3.0.0",
|
||||
"node-uuid": "^1.4.7"
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ deployment:
|
||||
production:
|
||||
branch: master
|
||||
commands:
|
||||
- npm install canvas nomnoml
|
||||
- ./build-docs.sh
|
||||
- git push git@heroku.com:openmctweb-demo.git $CIRCLE_SHA1:refs/heads/master
|
||||
openmctweb-staging-un:
|
||||
|
||||
@@ -2245,18 +2245,27 @@ options. The sources can be deployed in the same directory structure used during
|
||||
development. A few utilities are included to support development processes.
|
||||
|
||||
## Command-line Build
|
||||
Open MCT Web includes a script for building via command line using Maven 3.3.9
|
||||
https://maven.apache.org/ .
|
||||
|
||||
Invoking mvn clean install will:
|
||||
|
||||
* Check code style using JSLint. The build will fail if JSLint raises any warnings.
|
||||
* Run the test suite (see below.) The build will fail if any tests fail.
|
||||
* Populate version info (e.g. commit hash, build time.)
|
||||
* Produce a web archive (`.war`) artifact in the `target` directory.
|
||||
Open MCT Web is built using [`npm`](http://npmjs.com/)
|
||||
and [`gulp`](http://gulpjs.com/).
|
||||
|
||||
The produced artifact contains a subset of the repository's own folder
|
||||
hierarchy, omitting tests and example bundles.
|
||||
To install build dependencies (only needs to be run once):
|
||||
|
||||
`npm install`
|
||||
|
||||
To build:
|
||||
|
||||
`npm run prepublish`
|
||||
|
||||
This will compile and minify JavaScript sources, as well as copy over assets.
|
||||
The contents of the `dist` folder will contain a runnable Open MCT Web
|
||||
instance (e.g. by starting an HTTP server in that directory), including:
|
||||
|
||||
* A `main.js` file containing Open MCT Web source code.
|
||||
* Various assets in the `example` and `platform` directories.
|
||||
* An `index.html` that runs Open MCT Web in its default configuration.
|
||||
|
||||
Additional `gulp` tasks are defined in [the gulpfile](gulpfile.js).
|
||||
|
||||
Note that an internet connection is required to run this build, in order to
|
||||
download build dependencies.
|
||||
|
||||
122
gulpfile.js
Normal file
122
gulpfile.js
Normal file
@@ -0,0 +1,122 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
|
||||
/*global require,__dirname*/
|
||||
var gulp = require('gulp'),
|
||||
requirejsOptimize = require('gulp-requirejs-optimize'),
|
||||
sourcemaps = require('gulp-sourcemaps'),
|
||||
compass = require('gulp-compass'),
|
||||
jshint = require('gulp-jshint'),
|
||||
jscs = require('gulp-jscs'),
|
||||
replace = require('gulp-replace-task'),
|
||||
karma = require('karma'),
|
||||
path = require('path'),
|
||||
fs = require('fs'),
|
||||
git = require('git-rev-sync'),
|
||||
moment = require('moment'),
|
||||
project = require('./package.json'),
|
||||
paths = {
|
||||
main: 'main.js',
|
||||
dist: 'dist',
|
||||
assets: 'dist/assets',
|
||||
scss: 'platform/**/*.scss',
|
||||
scripts: [ 'main.js', 'platform/**/*.js', 'src/**/*.js' ],
|
||||
static: [
|
||||
'index.html',
|
||||
'platform/**/*',
|
||||
'example/**/*',
|
||||
'bower_components/**/*'
|
||||
]
|
||||
},
|
||||
options = {
|
||||
requirejsOptimize: {
|
||||
name: paths.main.replace(/\.js$/, ''),
|
||||
mainConfigFile: paths.main,
|
||||
wrapShim: true
|
||||
},
|
||||
karma: {
|
||||
configFile: path.resolve(__dirname, 'karma.conf.js'),
|
||||
singleRun: true
|
||||
},
|
||||
compass: {
|
||||
sass: __dirname,
|
||||
css: paths.assets
|
||||
},
|
||||
replace: {
|
||||
variables: {
|
||||
version: project.version,
|
||||
timestamp: moment.utc(Date.now()).format(),
|
||||
revision: fs.existsSync('.git') ? git.long() : 'Unknown',
|
||||
branch: fs.existsSync('.git') ? git.branch() : 'Unknown'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
gulp.task('scripts', function () {
|
||||
return gulp.src(paths.main)
|
||||
.pipe(sourcemaps.init())
|
||||
.pipe(requirejsOptimize(options.requirejsOptimize))
|
||||
.pipe(sourcemaps.write('.'))
|
||||
.pipe(replace(options.replace))
|
||||
.pipe(gulp.dest(paths.dist));
|
||||
});
|
||||
|
||||
gulp.task('test', function (done) {
|
||||
new karma.Server(options.karma, done).start();
|
||||
});
|
||||
|
||||
gulp.task('stylesheets', function () {
|
||||
return gulp.src(paths.scss)
|
||||
.pipe(compass(options.compass))
|
||||
.pipe(gulp.dest(paths.assets));
|
||||
});
|
||||
|
||||
gulp.task('lint', function () {
|
||||
return gulp.src(paths.scripts)
|
||||
.pipe(jshint())
|
||||
.pipe(jshint.reporter('default'))
|
||||
.pipe(jshint.reporter('fail'));
|
||||
});
|
||||
|
||||
gulp.task('checkstyle', function () {
|
||||
return gulp.src(paths.scripts)
|
||||
.pipe(jscs())
|
||||
.pipe(jscs.reporter())
|
||||
.pipe(jscs.reporter('fail'));
|
||||
});
|
||||
|
||||
gulp.task('fixstyle', function () {
|
||||
return gulp.src(paths.scripts, { base: '.' })
|
||||
.pipe(jscs({ fix: true }))
|
||||
.pipe(gulp.dest('.'));
|
||||
});
|
||||
|
||||
gulp.task('static', function () {
|
||||
return gulp.src(paths.static, { base: '.' })
|
||||
.pipe(gulp.dest(paths.dist));
|
||||
});
|
||||
|
||||
gulp.task('install', [ 'static', 'scripts' ]);
|
||||
|
||||
gulp.task('verify', [ 'lint', 'test' ]);
|
||||
|
||||
gulp.task('build', [ 'verify', 'install' ]);
|
||||
@@ -26,8 +26,12 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<title></title>
|
||||
<script type="text/javascript"
|
||||
src="platform/framework/lib/require.js"
|
||||
data-main="main.js">
|
||||
src="bower_components/requirejs/require.js">
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
require(['main'], function (mct) {
|
||||
mct.run();
|
||||
});
|
||||
</script>
|
||||
<link rel="icon" type="image/png" href="platform/commonUI/general/res/images/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="platform/commonUI/general/res/images/favicons/favicon-96x96.png" sizes="96x96">
|
||||
|
||||
@@ -34,6 +34,7 @@ module.exports = function(config) {
|
||||
// List of files / patterns to load in the browser.
|
||||
// By default, files are also included in a script tag.
|
||||
files: [
|
||||
{pattern: 'bower_components/**/*.js', included: false},
|
||||
{pattern: 'src/**/*.js', included: false},
|
||||
{pattern: 'example/**/*.js', included: false},
|
||||
{pattern: 'platform/**/*.js', included: false},
|
||||
@@ -49,7 +50,8 @@ module.exports = function(config) {
|
||||
// Preprocess matching files before serving them to the browser.
|
||||
// https://npmjs.org/browse/keyword/karma-preprocessor
|
||||
preprocessors: {
|
||||
'**/src/**/!(*Spec).js': [ 'coverage' ]
|
||||
'src/**/src/**/!(*Spec).js': [ 'coverage' ],
|
||||
'platform/**/src/**/!(*Spec).js': [ 'coverage' ]
|
||||
},
|
||||
|
||||
// Test results reporter to use
|
||||
@@ -71,12 +73,12 @@ module.exports = function(config) {
|
||||
// Specify browsers to run tests in.
|
||||
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
||||
browsers: [
|
||||
'Chrome'
|
||||
'PhantomJS'
|
||||
],
|
||||
|
||||
// Code coverage reporting.
|
||||
coverageReporter: {
|
||||
dir: "target/coverage"
|
||||
dir: "dist/coverage"
|
||||
},
|
||||
|
||||
// HTML test reporting.
|
||||
|
||||
24
main.js
24
main.js
@@ -24,12 +24,24 @@
|
||||
requirejs.config({
|
||||
"paths": {
|
||||
"legacyRegistry": "src/legacyRegistry",
|
||||
"angular": "platform/framework/lib/angular.min",
|
||||
"moment": 'platform/telemetry/lib/moment.min'
|
||||
"angular": "bower_components/angular/angular.min",
|
||||
"angular-route": "bower_components/angular-route/angular-route.min",
|
||||
"es6-promise": "bower_components/es6-promise/promise.min",
|
||||
"moment": "bower_components/moment/moment",
|
||||
"moment-duration-format": "bower_components/moment-duration-format/lib/moment-duration-format",
|
||||
"screenfull": "bower_components/screenfull/dist/screenfull.min",
|
||||
"text": "bower_components/text/text",
|
||||
"uuid": "bower_components/node-uuid/uuid"
|
||||
},
|
||||
"shim": {
|
||||
"angular": {
|
||||
"exports": "angular"
|
||||
},
|
||||
"angular-route": {
|
||||
"deps": [ "angular" ]
|
||||
},
|
||||
"moment-duration-format": {
|
||||
"deps": [ "moment" ]
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -77,5 +89,11 @@ define([
|
||||
'./example/generator/bundle'
|
||||
], function (Main, legacyRegistry) {
|
||||
'use strict';
|
||||
new Main().run(legacyRegistry);
|
||||
|
||||
return {
|
||||
legacyRegistry: legacyRegistry,
|
||||
run: function () {
|
||||
return new Main().run(legacyRegistry);
|
||||
}
|
||||
};
|
||||
});
|
||||
29
package.json
29
package.json
@@ -1,30 +1,39 @@
|
||||
{
|
||||
"name": "open-mct-web",
|
||||
"version": "0.7.2",
|
||||
"description": "The OpenMCTWeb core platform",
|
||||
"name": "openmctweb",
|
||||
"version": "0.9.1-SNAPSHOT",
|
||||
"description": "The Open MCT Web core platform",
|
||||
"dependencies": {
|
||||
"express": "^4.13.1",
|
||||
"minimist": "^1.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"canvas": "^1.2.7",
|
||||
"bower": "^1.7.7",
|
||||
"git-rev-sync": "^1.4.0",
|
||||
"glob": ">= 3.0.0",
|
||||
"gulp": "^3.9.0",
|
||||
"gulp-compass": "^2.1.0",
|
||||
"gulp-jscs": "^3.0.2",
|
||||
"gulp-jshint": "^2.0.0",
|
||||
"gulp-replace-task": "^0.11.0",
|
||||
"gulp-requirejs-optimize": "^0.3.1",
|
||||
"gulp-sourcemaps": "^1.6.0",
|
||||
"jasmine-core": "^2.3.0",
|
||||
"jsdoc": "^3.3.2",
|
||||
"jshint": "^2.7.0",
|
||||
"karma": "^0.12.31",
|
||||
"karma": "^0.13.3",
|
||||
"karma-chrome-launcher": "^0.1.8",
|
||||
"karma-cli": "0.0.4",
|
||||
"karma-coverage": "^0.5.3",
|
||||
"karma-html-reporter": "^0.2.7",
|
||||
"karma-jasmine": "^0.1.5",
|
||||
"karma-phantomjs-launcher": "^0.1.4",
|
||||
"karma-phantomjs-launcher": "^0.2.3",
|
||||
"karma-requirejs": "^0.2.2",
|
||||
"lodash": "^3.10.1",
|
||||
"markdown-toc": "^0.11.7",
|
||||
"marked": "^0.3.5",
|
||||
"mkdirp": "^0.5.1",
|
||||
"nomnoml": "^0.0.3",
|
||||
"moment": "^2.11.1",
|
||||
"phantomjs": "^1.9.19",
|
||||
"requirejs": "^2.1.17",
|
||||
"split": "^1.0.0"
|
||||
},
|
||||
@@ -35,12 +44,14 @@
|
||||
"watch": "karma start",
|
||||
"jsdoc": "jsdoc -c jsdoc.json -r -d target/docs/api",
|
||||
"otherdoc": "node docs/gendocs.js --in docs/src --out target/docs --suppress-toc 'docs/src/index.md|docs/src/process/index.md'",
|
||||
"docs": "npm run jsdoc ; npm run otherdoc"
|
||||
"docs": "npm run jsdoc ; npm run otherdoc",
|
||||
"prepublish": "./node_modules/bower/bin/bower install && ./node_modules/gulp/bin/gulp.js install"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nasa/openmctweb.git"
|
||||
},
|
||||
"author": "",
|
||||
"license": "Apache-2.0"
|
||||
"license": "Apache-2.0",
|
||||
"private": true
|
||||
}
|
||||
|
||||
@@ -22,11 +22,13 @@
|
||||
/*global define*/
|
||||
|
||||
define([
|
||||
"text!./res/templates/about-dialog.html",
|
||||
"./src/LogoController",
|
||||
"./src/AboutController",
|
||||
"./src/LicenseController",
|
||||
'legacyRegistry'
|
||||
], function (
|
||||
aboutDialogTemplate,
|
||||
LogoController,
|
||||
AboutController,
|
||||
LicenseController,
|
||||
@@ -50,7 +52,7 @@ define([
|
||||
},
|
||||
{
|
||||
"key": "about-dialog",
|
||||
"templateUrl": "templates/about-dialog.html"
|
||||
"template": aboutDialogTemplate
|
||||
},
|
||||
{
|
||||
"key": "overlay-about",
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
[
|
||||
"AboutController",
|
||||
"LicenseController",
|
||||
"LogoController"
|
||||
]
|
||||
@@ -34,6 +34,7 @@ define([
|
||||
"./src/windowing/NewTabAction",
|
||||
"./src/windowing/FullscreenAction",
|
||||
"./src/creation/CreateActionProvider",
|
||||
"./src/creation/AddActionProvider",
|
||||
"./src/creation/CreationService",
|
||||
"./src/windowing/WindowTitler",
|
||||
'legacyRegistry'
|
||||
@@ -50,6 +51,7 @@ define([
|
||||
NewTabAction,
|
||||
FullscreenAction,
|
||||
CreateActionProvider,
|
||||
AddActionProvider,
|
||||
CreationService,
|
||||
WindowTitler,
|
||||
legacyRegistry
|
||||
@@ -117,7 +119,8 @@ define([
|
||||
"implementation": LocatorController,
|
||||
"depends": [
|
||||
"$scope",
|
||||
"$timeout"
|
||||
"$timeout",
|
||||
"objectService"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -271,6 +274,18 @@ define([
|
||||
"policyService"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "AddActionProvider",
|
||||
"provides": "actionService",
|
||||
"type": "provider",
|
||||
"implementation": AddActionProvider,
|
||||
"depends": [
|
||||
"$q",
|
||||
"typeService",
|
||||
"dialogService",
|
||||
"policyService"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "CreationService",
|
||||
"provides": "creationService",
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
/*!
|
||||
* screenfull
|
||||
* v1.2.0 - 2014-04-29
|
||||
* (c) Sindre Sorhus; MIT License
|
||||
*/
|
||||
!function(){"use strict";var a="undefined"!=typeof module&&module.exports,b="undefined"!=typeof Element&&"ALLOW_KEYBOARD_INPUT"in Element,c=function(){for(var a,b,c=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],d=0,e=c.length,f={};e>d;d++)if(a=c[d],a&&a[1]in document){for(d=0,b=a.length;b>d;d++)f[c[0][d]]=a[d];return f}return!1}(),d={request:function(a){var d=c.requestFullscreen;a=a||document.documentElement,/5\.1[\.\d]* Safari/.test(navigator.userAgent)?a[d]():a[d](b&&Element.ALLOW_KEYBOARD_INPUT)},exit:function(){document[c.exitFullscreen]()},toggle:function(a){this.isFullscreen?this.exit():this.request(a)},onchange:function(){},onerror:function(){},raw:c};return c?(Object.defineProperties(d,{isFullscreen:{get:function(){return!!document[c.fullscreenElement]}},element:{enumerable:!0,get:function(){return document[c.fullscreenElement]}},enabled:{enumerable:!0,get:function(){return!!document[c.fullscreenEnabled]}}}),document.addEventListener(c.fullscreenchange,function(a){d.onchange.call(d,a)}),document.addEventListener(c.fullscreenerror,function(a){d.onerror.call(d,a)}),void(a?module.exports=d:window.screenfull=d)):void(a?module.exports=!1:window.screenfull=!1)}();
|
||||
139
platform/commonUI/browse/src/creation/AddAction.js
Normal file
139
platform/commonUI/browse/src/creation/AddAction.js
Normal file
@@ -0,0 +1,139 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define,Promise*/
|
||||
|
||||
/**
|
||||
* Module defining AddAction. Created by ahenry on 01/21/16.
|
||||
*/
|
||||
define(
|
||||
[
|
||||
'./CreateWizard'
|
||||
],
|
||||
function (CreateWizard) {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* The Add Action is performed to create new instances of
|
||||
* domain objects of a specific type that are subobjects of an
|
||||
* object being edited. This is the action that is performed when a
|
||||
* user uses the Add menu option.
|
||||
*
|
||||
* @memberof platform/commonUI/browse
|
||||
* @implements {Action}
|
||||
* @constructor
|
||||
*
|
||||
* @param {Type} type the type of domain object to create
|
||||
* @param {DomainObject} parent the domain object that should
|
||||
* act as a container for the newly-created object
|
||||
* (note that the user will have an opportunity to
|
||||
* override this)
|
||||
* @param {ActionContext} context the context in which the
|
||||
* action is being performed
|
||||
* @param {DialogService} dialogService
|
||||
*/
|
||||
function AddAction(type, parent, context, $q, dialogService, policyService) {
|
||||
this.metadata = {
|
||||
key: 'add',
|
||||
glyph: type.getGlyph(),
|
||||
name: type.getName(),
|
||||
type: type.getKey(),
|
||||
description: type.getDescription(),
|
||||
context: context
|
||||
};
|
||||
|
||||
this.type = type;
|
||||
this.parent = parent;
|
||||
this.$q = $q;
|
||||
this.dialogService = dialogService;
|
||||
this.policyService = policyService;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Create a new object of the given type.
|
||||
* This will prompt for user input first.
|
||||
*
|
||||
* @returns {Promise} that will be resolved with the object that the
|
||||
* action was originally invoked on (ie. the 'parent')
|
||||
*/
|
||||
AddAction.prototype.perform = function () {
|
||||
var newModel = this.type.getInitialModel(),
|
||||
newObject,
|
||||
parentObject = this.parent,
|
||||
wizard;
|
||||
|
||||
newModel.type = this.type.getKey();
|
||||
newObject = parentObject.getCapability('instantiation').instantiate(newModel);
|
||||
newObject.useCapability('mutation', function(model){
|
||||
model.location = parentObject.getId();
|
||||
});
|
||||
|
||||
wizard = new CreateWizard(newObject, this.parent, this.policyService);
|
||||
|
||||
function populateObjectFromInput (formValue) {
|
||||
return wizard.populateObjectFromInput(formValue, newObject);
|
||||
}
|
||||
|
||||
function addToParent (populatedObject) {
|
||||
parentObject.getCapability('composition').add(populatedObject);
|
||||
return parentObject.getCapability('persistence').persist().then(function(){
|
||||
return parentObject;
|
||||
});
|
||||
}
|
||||
|
||||
function save(object) {
|
||||
/*
|
||||
It's necessary to persist the new sub-object in order
|
||||
that it can be retrieved for composition in the parent.
|
||||
Future refactoring that allows temporary objects to be
|
||||
retrieved from object services will make this unnecessary.
|
||||
*/
|
||||
return object.getCapability('editor').save(true);
|
||||
}
|
||||
|
||||
return this.dialogService
|
||||
.getUserInput(wizard.getFormStructure(false), wizard.getInitialFormValue())
|
||||
.then(populateObjectFromInput)
|
||||
.then(save)
|
||||
.then(addToParent);
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Metadata associated with a Add action.
|
||||
* @typedef {ActionMetadata} AddActionMetadata
|
||||
* @property {string} type the key for the type of domain object
|
||||
* to be created
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get metadata about this action.
|
||||
* @returns {AddActionMetadata} metadata about this action
|
||||
*/
|
||||
AddAction.prototype.getMetadata = function () {
|
||||
return this.metadata;
|
||||
};
|
||||
|
||||
return AddAction;
|
||||
}
|
||||
);
|
||||
87
platform/commonUI/browse/src/creation/AddActionProvider.js
Normal file
87
platform/commonUI/browse/src/creation/AddActionProvider.js
Normal file
@@ -0,0 +1,87 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define,Promise*/
|
||||
|
||||
/**
|
||||
* Module defining AddActionProvider.js. Created by ahenry on 01/21/16.
|
||||
*/
|
||||
define(
|
||||
["./AddAction"],
|
||||
function (AddAction) {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* The AddActionProvider is an ActionProvider which introduces
|
||||
* an Add action for creating sub objects.
|
||||
*
|
||||
* @memberof platform/commonUI/browse
|
||||
* @constructor
|
||||
* @implements {ActionService}
|
||||
*
|
||||
* @param {TypeService} typeService the type service, used to discover
|
||||
* available types
|
||||
* @param {DialogService} dialogService the dialog service, used by
|
||||
* specific Create actions to get user input to populate the
|
||||
* model of the newly-created domain object.
|
||||
* @param {CreationService} creationService the creation service (also
|
||||
* introduced in this bundle), responsible for handling actual
|
||||
* object creation.
|
||||
*/
|
||||
function AddActionProvider($q, typeService, dialogService, policyService) {
|
||||
this.typeService = typeService;
|
||||
this.dialogService = dialogService;
|
||||
this.$q = $q;
|
||||
this.policyService = policyService;
|
||||
}
|
||||
|
||||
AddActionProvider.prototype.getActions = function (actionContext) {
|
||||
var context = actionContext || {},
|
||||
key = context.key,
|
||||
destination = context.domainObject,
|
||||
self = this;
|
||||
|
||||
// We only provide Add actions, and we need a
|
||||
// domain object to serve as the container for the
|
||||
// newly-created object (although the user may later
|
||||
// make a different selection)
|
||||
if (key !== 'add' || !destination) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Introduce one create action per type
|
||||
return this.typeService.listTypes().filter(function (type) {
|
||||
return self.policyService.allow("creation", type) && self.policyService.allow("composition", destination.getCapability('type'), type);
|
||||
}).map(function (type) {
|
||||
return new AddAction(
|
||||
type,
|
||||
destination,
|
||||
context,
|
||||
self.$q,
|
||||
self.dialogService,
|
||||
self.policyService
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
return AddActionProvider;
|
||||
}
|
||||
);
|
||||
@@ -26,18 +26,21 @@ define(
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Construct a new CreateWizard.
|
||||
* A class for capturing user input data from an object creation
|
||||
* dialog, and populating a domain object with that data.
|
||||
*
|
||||
* @param {TypeImpl} type the type of domain object to be created
|
||||
* @param {DomainObject} domainObject the newly created object to
|
||||
* populate with user input
|
||||
* @param {DomainObject} parent the domain object to serve as
|
||||
* the initial parent for the created object, in the dialog
|
||||
* @memberof platform/commonUI/browse
|
||||
* @constructor
|
||||
*/
|
||||
function CreateWizard(type, parent, policyService, initialModel) {
|
||||
this.type = type;
|
||||
this.model = initialModel || type.getInitialModel();
|
||||
this.properties = type.getProperties();
|
||||
function CreateWizard(domainObject, parent, policyService) {
|
||||
this.type = domainObject.getCapability('type');
|
||||
this.model = domainObject.getModel();
|
||||
this.domainObject = domainObject;
|
||||
this.properties = this.type.getProperties();
|
||||
this.parent = parent;
|
||||
this.policyService = policyService;
|
||||
}
|
||||
@@ -46,11 +49,14 @@ define(
|
||||
* Get the form model for this wizard; this is a description
|
||||
* that will be rendered to an HTML form. See the
|
||||
* platform/forms bundle
|
||||
*
|
||||
* @param {boolean} includeLocation if true, a 'location' section
|
||||
* will be included that will allow the user to select the location
|
||||
* of the newly created object, otherwise the .location property of
|
||||
* the model will be used.
|
||||
* @return {FormModel} formModel the form model to
|
||||
* show in the create dialog
|
||||
*/
|
||||
CreateWizard.prototype.getFormStructure = function () {
|
||||
CreateWizard.prototype.getFormStructure = function (includeLocation) {
|
||||
var sections = [],
|
||||
type = this.type,
|
||||
policyService = this.policyService;
|
||||
@@ -84,12 +90,16 @@ define(
|
||||
});
|
||||
|
||||
// Ensure there is always a "save in" section
|
||||
sections.push({ name: 'Location', rows: [{
|
||||
name: "Save In",
|
||||
control: "locator",
|
||||
validate: validateLocation,
|
||||
key: "createParent"
|
||||
}]});
|
||||
if (includeLocation) {
|
||||
sections.push({
|
||||
name: 'Location', rows: [{
|
||||
name: "Save In",
|
||||
control: "locator",
|
||||
validate: validateLocation,
|
||||
key: "createParent"
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
sections: sections,
|
||||
@@ -97,6 +107,23 @@ define(
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Given some form input values and a domain object, populate the
|
||||
* domain object used to create this wizard from the given form values.
|
||||
* @param formValue
|
||||
* @returns {DomainObject}
|
||||
*/
|
||||
CreateWizard.prototype.populateObjectFromInput = function(formValue) {
|
||||
var parent = this.getLocation(formValue),
|
||||
formModel = this.createModel(formValue);
|
||||
|
||||
formModel.location = parent.getId();
|
||||
this.domainObject.useCapability("mutation", function(){
|
||||
return formModel;
|
||||
});
|
||||
return this.domainObject;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the initial value for the form being described.
|
||||
* This will include the values for all properties described
|
||||
@@ -120,6 +147,7 @@ define(
|
||||
/**
|
||||
* Based on a populated form, get the domain object which
|
||||
* should be used as a parent for the newly-created object.
|
||||
* @private
|
||||
* @return {DomainObject}
|
||||
*/
|
||||
CreateWizard.prototype.getLocation = function (formValue) {
|
||||
@@ -129,6 +157,7 @@ define(
|
||||
/**
|
||||
* Create the domain object model for a newly-created object,
|
||||
* based on user input read from a formModel.
|
||||
* @private
|
||||
* @return {object} the domain object model
|
||||
*/
|
||||
CreateWizard.prototype.createModel = function (formValue) {
|
||||
|
||||
@@ -33,7 +33,7 @@ define(
|
||||
* @memberof platform/commonUI/browse
|
||||
* @constructor
|
||||
*/
|
||||
function LocatorController($scope, $timeout) {
|
||||
function LocatorController($scope, $timeout, objectService) {
|
||||
// Populate values needed by the locator control. These are:
|
||||
// * rootObject: The top-level object, since we want to show
|
||||
// the full tree
|
||||
@@ -52,6 +52,18 @@ define(
|
||||
$scope.rootObject =
|
||||
(context && context.getRoot()) || $scope.rootObject;
|
||||
}, 0);
|
||||
} else if (!contextRoot){
|
||||
//If no context root is available, default to the root
|
||||
// object
|
||||
$scope.rootObject = undefined;
|
||||
// Update the displayed tree on a timeout to avoid
|
||||
// an infinite digest exception.
|
||||
objectService.getObjects(['ROOT'])
|
||||
.then(function(objects){
|
||||
$timeout(function () {
|
||||
$scope.rootObject = objects.ROOT;
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
|
||||
$scope.treeModel.selectedObject = domainObject;
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
* Module defining FullscreenAction. Created by vwoeltje on 11/18/14.
|
||||
*/
|
||||
define(
|
||||
["../../lib/screenfull.min"],
|
||||
["screenfull"],
|
||||
function () {
|
||||
"use strict";
|
||||
|
||||
|
||||
137
platform/commonUI/browse/test/creation/AddActionProviderSpec.js
Normal file
137
platform/commonUI/browse/test/creation/AddActionProviderSpec.js
Normal file
@@ -0,0 +1,137 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine,xit,xdescribe*/
|
||||
|
||||
/**
|
||||
* MCTRepresentationSpec. Created by ahenry on 01/21/14.
|
||||
*/
|
||||
define(
|
||||
["../../src/creation/AddActionProvider"],
|
||||
function (AddActionProvider) {
|
||||
"use strict";
|
||||
|
||||
describe("The add action provider", function () {
|
||||
var mockTypeService,
|
||||
mockDialogService,
|
||||
mockPolicyService,
|
||||
mockCreationPolicy,
|
||||
mockCompositionPolicy,
|
||||
mockPolicyMap = {},
|
||||
mockTypes,
|
||||
mockDomainObject,
|
||||
mockQ,
|
||||
provider;
|
||||
|
||||
function createMockType(name) {
|
||||
var mockType = jasmine.createSpyObj(
|
||||
"type" + name,
|
||||
[
|
||||
"getKey",
|
||||
"getGlyph",
|
||||
"getName",
|
||||
"getDescription",
|
||||
"getProperties",
|
||||
"getInitialModel",
|
||||
"hasFeature"
|
||||
]
|
||||
);
|
||||
mockType.hasFeature.andReturn(true);
|
||||
mockType.getName.andReturn(name);
|
||||
return mockType;
|
||||
}
|
||||
|
||||
beforeEach(function () {
|
||||
mockTypeService = jasmine.createSpyObj(
|
||||
"typeService",
|
||||
[ "listTypes" ]
|
||||
);
|
||||
mockDialogService = jasmine.createSpyObj(
|
||||
"dialogService",
|
||||
[ "getUserInput" ]
|
||||
);
|
||||
mockPolicyService = jasmine.createSpyObj(
|
||||
"policyService",
|
||||
[ "allow" ]
|
||||
);
|
||||
|
||||
mockDomainObject = jasmine.createSpyObj(
|
||||
"domainObject",
|
||||
[ "getCapability" ]
|
||||
);
|
||||
|
||||
//Mocking getCapability because AddActionProvider uses the
|
||||
// type capability of the destination object.
|
||||
mockDomainObject.getCapability.andReturn({});
|
||||
|
||||
mockTypes = [ "A", "B", "C" ].map(createMockType);
|
||||
|
||||
mockTypes.forEach(function(type){
|
||||
mockPolicyMap[type.getName()] = true;
|
||||
});
|
||||
|
||||
mockCreationPolicy = function(type){
|
||||
return mockPolicyMap[type.getName()];
|
||||
};
|
||||
|
||||
mockCompositionPolicy = function(){
|
||||
return true;
|
||||
};
|
||||
|
||||
mockPolicyService.allow.andReturn(true);
|
||||
|
||||
mockTypeService.listTypes.andReturn(mockTypes);
|
||||
|
||||
provider = new AddActionProvider(
|
||||
mockQ,
|
||||
mockTypeService,
|
||||
mockDialogService,
|
||||
mockPolicyService
|
||||
);
|
||||
});
|
||||
|
||||
it("checks for creatability", function () {
|
||||
provider.getActions({
|
||||
key: "add",
|
||||
domainObject: mockDomainObject
|
||||
});
|
||||
// Make sure it was creation which was used to check
|
||||
expect(mockPolicyService.allow)
|
||||
.toHaveBeenCalledWith("creation", mockTypes[0]);
|
||||
});
|
||||
|
||||
it("checks for composability of type", function () {
|
||||
provider.getActions({
|
||||
key: "add",
|
||||
domainObject: mockDomainObject
|
||||
});
|
||||
|
||||
expect(mockPolicyService.allow).toHaveBeenCalledWith(
|
||||
"composition",
|
||||
jasmine.any(Object),
|
||||
jasmine.any(Object)
|
||||
);
|
||||
|
||||
expect(mockDomainObject.getCapability).toHaveBeenCalledWith('type');
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
@@ -32,11 +32,12 @@ define(
|
||||
describe("The create action provider", function () {
|
||||
var mockTypeService,
|
||||
mockDialogService,
|
||||
mockCreationService,
|
||||
mockNavigationService,
|
||||
mockPolicyService,
|
||||
mockCreationPolicy,
|
||||
mockPolicyMap = {},
|
||||
mockTypes,
|
||||
mockQ,
|
||||
provider;
|
||||
|
||||
function createMockType(name) {
|
||||
@@ -66,9 +67,9 @@ define(
|
||||
"dialogService",
|
||||
[ "getUserInput" ]
|
||||
);
|
||||
mockCreationService = jasmine.createSpyObj(
|
||||
"creationService",
|
||||
[ "createObject" ]
|
||||
mockNavigationService = jasmine.createSpyObj(
|
||||
"navigationService",
|
||||
[ "setNavigation" ]
|
||||
);
|
||||
mockPolicyService = jasmine.createSpyObj(
|
||||
"policyService",
|
||||
@@ -92,15 +93,14 @@ define(
|
||||
mockTypeService.listTypes.andReturn(mockTypes);
|
||||
|
||||
provider = new CreateActionProvider(
|
||||
mockQ,
|
||||
mockTypeService,
|
||||
mockDialogService,
|
||||
mockCreationService,
|
||||
mockNavigationService,
|
||||
mockPolicyService
|
||||
);
|
||||
});
|
||||
|
||||
//TODO: Disabled for NEM Beta
|
||||
xit("exposes one create action per type", function () {
|
||||
it("exposes one create action per type", function () {
|
||||
expect(provider.getActions({
|
||||
key: "create",
|
||||
domainObject: {}
|
||||
@@ -114,8 +114,7 @@ define(
|
||||
}).length).toEqual(0);
|
||||
});
|
||||
|
||||
//TODO: Disabled for NEM Beta
|
||||
xit("does not expose non-creatable types", function () {
|
||||
it("does not expose non-creatable types", function () {
|
||||
// One of the types won't have the creation feature...
|
||||
mockPolicyMap[mockTypes[0].getName()] = false;
|
||||
// ...so it should have been filtered out.
|
||||
|
||||
@@ -35,6 +35,7 @@ define(
|
||||
mockProperties,
|
||||
mockPolicyService,
|
||||
testModel,
|
||||
mockDomainObject,
|
||||
wizard;
|
||||
|
||||
function createMockProperty(name) {
|
||||
@@ -81,8 +82,18 @@ define(
|
||||
mockType.getInitialModel.andReturn(testModel);
|
||||
mockType.getProperties.andReturn(mockProperties);
|
||||
|
||||
mockDomainObject = jasmine.createSpyObj(
|
||||
'domainObject',
|
||||
['getCapability', 'useCapability', 'getModel']
|
||||
);
|
||||
|
||||
//Mocking the getCapability('type') call
|
||||
mockDomainObject.getCapability.andReturn(mockType);
|
||||
mockDomainObject.useCapability.andReturn();
|
||||
mockDomainObject.getModel.andReturn(testModel);
|
||||
|
||||
wizard = new CreateWizard(
|
||||
mockType,
|
||||
mockDomainObject,
|
||||
mockParent,
|
||||
mockPolicyService
|
||||
);
|
||||
@@ -130,6 +141,18 @@ define(
|
||||
});
|
||||
});
|
||||
|
||||
it("populates the model on the associated object", function () {
|
||||
var formValue = {
|
||||
"A": "ValueA",
|
||||
"B": "ValueB",
|
||||
"C": "ValueC"
|
||||
},
|
||||
compareModel = wizard.createModel(formValue);
|
||||
wizard.populateObjectFromInput(formValue);
|
||||
expect(mockDomainObject.useCapability).toHaveBeenCalledWith('mutation', jasmine.any(Function));
|
||||
expect(mockDomainObject.useCapability.mostRecentCall.args[1]()).toEqual(compareModel);
|
||||
});
|
||||
|
||||
it("validates selection types using policy", function () {
|
||||
var mockDomainObject = jasmine.createSpyObj(
|
||||
'domainObject',
|
||||
@@ -139,7 +162,8 @@ define(
|
||||
'otherType',
|
||||
['getKey']
|
||||
),
|
||||
structure = wizard.getFormStructure(),
|
||||
//Create a form structure with location
|
||||
structure = wizard.getFormStructure(true),
|
||||
sections = structure.sections,
|
||||
rows = structure.sections[sections.length - 1].rows,
|
||||
locationRow = rows[rows.length - 1];
|
||||
@@ -156,6 +180,12 @@ define(
|
||||
);
|
||||
});
|
||||
|
||||
it("creates a form model without a location if not requested", function () {
|
||||
expect(wizard.getFormStructure(false).sections.some(function(section){
|
||||
return section.name === 'Location';
|
||||
})).toEqual(false);
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@ define(
|
||||
mockDomainObject,
|
||||
mockRootObject,
|
||||
mockContext,
|
||||
mockObjectService,
|
||||
getObjectsPromise,
|
||||
controller;
|
||||
|
||||
beforeEach(function () {
|
||||
@@ -55,73 +57,106 @@ define(
|
||||
"context",
|
||||
[ "getRoot" ]
|
||||
);
|
||||
mockObjectService = jasmine.createSpyObj(
|
||||
"objectService",
|
||||
["getObjects"]
|
||||
);
|
||||
getObjectsPromise = jasmine.createSpyObj(
|
||||
"promise",
|
||||
["then"]
|
||||
);
|
||||
|
||||
mockDomainObject.getCapability.andReturn(mockContext);
|
||||
mockContext.getRoot.andReturn(mockRootObject);
|
||||
mockObjectService.getObjects.andReturn(getObjectsPromise);
|
||||
|
||||
mockScope.ngModel = {};
|
||||
mockScope.field = "someField";
|
||||
|
||||
controller = new LocatorController(mockScope, mockTimeout);
|
||||
controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
|
||||
});
|
||||
describe("when context is available", function () {
|
||||
|
||||
it("adds a treeModel to scope", function () {
|
||||
expect(mockScope.treeModel).toBeDefined();
|
||||
});
|
||||
beforeEach(function () {
|
||||
mockContext.getRoot.andReturn(mockRootObject);
|
||||
controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
|
||||
});
|
||||
|
||||
it("watches for changes to treeModel", function () {
|
||||
// This is what the embedded tree representation
|
||||
// will be modifying.
|
||||
expect(mockScope.$watch).toHaveBeenCalledWith(
|
||||
"treeModel.selectedObject",
|
||||
jasmine.any(Function)
|
||||
);
|
||||
});
|
||||
it("adds a treeModel to scope", function () {
|
||||
expect(mockScope.treeModel).toBeDefined();
|
||||
});
|
||||
|
||||
it("changes its own model on embedded model updates", function () {
|
||||
// Need to pass on selection changes as updates to
|
||||
// the control's value
|
||||
mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
|
||||
mockTimeout.mostRecentCall.args[0]();
|
||||
expect(mockScope.ngModel.someField).toEqual(mockDomainObject);
|
||||
expect(mockScope.rootObject).toEqual(mockRootObject);
|
||||
it("watches for changes to treeModel", function () {
|
||||
// This is what the embedded tree representation
|
||||
// will be modifying.
|
||||
expect(mockScope.$watch).toHaveBeenCalledWith(
|
||||
"treeModel.selectedObject",
|
||||
jasmine.any(Function)
|
||||
);
|
||||
});
|
||||
|
||||
// Verify that the capability we expect to have been used
|
||||
// was used.
|
||||
expect(mockDomainObject.getCapability)
|
||||
.toHaveBeenCalledWith("context");
|
||||
});
|
||||
it("changes its own model on embedded model updates", function () {
|
||||
// Need to pass on selection changes as updates to
|
||||
// the control's value
|
||||
mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
|
||||
mockTimeout.mostRecentCall.args[0]();
|
||||
expect(mockScope.ngModel.someField).toEqual(mockDomainObject);
|
||||
expect(mockScope.rootObject).toEqual(mockRootObject);
|
||||
|
||||
it("rejects changes which fail validation", function () {
|
||||
mockScope.structure = { validate: jasmine.createSpy('validate') };
|
||||
mockScope.structure.validate.andReturn(false);
|
||||
// Verify that the capability we expect to have been used
|
||||
// was used.
|
||||
expect(mockDomainObject.getCapability)
|
||||
.toHaveBeenCalledWith("context");
|
||||
});
|
||||
|
||||
// Pass selection change
|
||||
mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
|
||||
mockTimeout.mostRecentCall.args[0]();
|
||||
it("rejects changes which fail validation", function () {
|
||||
mockScope.structure = { validate: jasmine.createSpy('validate') };
|
||||
mockScope.structure.validate.andReturn(false);
|
||||
|
||||
expect(mockScope.structure.validate).toHaveBeenCalled();
|
||||
// Change should have been rejected
|
||||
expect(mockScope.ngModel.someField).not.toEqual(mockDomainObject);
|
||||
});
|
||||
// Pass selection change
|
||||
mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
|
||||
mockTimeout.mostRecentCall.args[0]();
|
||||
|
||||
it("treats a lack of a selection as invalid", function () {
|
||||
mockScope.ngModelController = jasmine.createSpyObj(
|
||||
'ngModelController',
|
||||
[ '$setValidity' ]
|
||||
);
|
||||
expect(mockScope.structure.validate).toHaveBeenCalled();
|
||||
// Change should have been rejected
|
||||
expect(mockScope.ngModel.someField).not.toEqual(mockDomainObject);
|
||||
});
|
||||
|
||||
mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
|
||||
mockTimeout.mostRecentCall.args[0]();
|
||||
expect(mockScope.ngModelController.$setValidity)
|
||||
.toHaveBeenCalledWith(jasmine.any(String), true);
|
||||
it("treats a lack of a selection as invalid", function () {
|
||||
mockScope.ngModelController = jasmine.createSpyObj(
|
||||
'ngModelController',
|
||||
[ '$setValidity' ]
|
||||
);
|
||||
|
||||
mockScope.$watch.mostRecentCall.args[1](undefined);
|
||||
mockTimeout.mostRecentCall.args[0]();
|
||||
expect(mockScope.ngModelController.$setValidity)
|
||||
.toHaveBeenCalledWith(jasmine.any(String), false);
|
||||
});
|
||||
mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
|
||||
mockTimeout.mostRecentCall.args[0]();
|
||||
expect(mockScope.ngModelController.$setValidity)
|
||||
.toHaveBeenCalledWith(jasmine.any(String), true);
|
||||
|
||||
mockScope.$watch.mostRecentCall.args[1](undefined);
|
||||
mockTimeout.mostRecentCall.args[0]();
|
||||
expect(mockScope.ngModelController.$setValidity)
|
||||
.toHaveBeenCalledWith(jasmine.any(String), false);
|
||||
});
|
||||
});
|
||||
describe("when no context is available", function () {
|
||||
var defaultRoot = "DEFAULT_ROOT";
|
||||
|
||||
beforeEach(function () {
|
||||
mockContext.getRoot.andReturn(undefined);
|
||||
getObjectsPromise.then.andCallFake(function(callback){
|
||||
callback({'ROOT':defaultRoot});
|
||||
});
|
||||
controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
|
||||
});
|
||||
|
||||
it("provides a default context where none is available", function () {
|
||||
mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
|
||||
mockTimeout.mostRecentCall.args[0]();
|
||||
expect(mockScope.rootObject).toBe(defaultRoot);
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
[
|
||||
"BrowseController",
|
||||
"BrowseObjectController",
|
||||
"PaneController",
|
||||
"MenuArrowController",
|
||||
"creation/CreateAction",
|
||||
"creation/CreateActionProvider",
|
||||
"creation/CreateMenuController",
|
||||
"creation/CreateWizard",
|
||||
"creation/CreationService",
|
||||
"creation/CreationPolicy",
|
||||
"creation/LocatorController",
|
||||
"navigation/NavigateAction",
|
||||
"navigation/NavigationService",
|
||||
"windowing/FullscreenAction",
|
||||
"windowing/NewTabAction",
|
||||
"windowing/WindowTitler"
|
||||
]
|
||||
@@ -1,4 +0,0 @@
|
||||
[
|
||||
"DialogService",
|
||||
"OverlayService"
|
||||
]
|
||||
@@ -156,14 +156,11 @@ define([
|
||||
"name": "Save",
|
||||
"description": "Save changes made to these objects.",
|
||||
"depends": [
|
||||
"$q",
|
||||
"$location",
|
||||
"$injector",
|
||||
"urlService",
|
||||
"navigationService",
|
||||
"policyService",
|
||||
"dialogService",
|
||||
"creationService"
|
||||
"creationService",
|
||||
"copyService"
|
||||
],
|
||||
"priority": "mandatory"
|
||||
},
|
||||
|
||||
@@ -36,18 +36,22 @@ define(
|
||||
* @implements {Action}
|
||||
* @memberof platform/commonUI/edit
|
||||
*/
|
||||
function SaveAction($q, $location, $injector, urlService, navigationService, policyService, dialogService, creationService, context) {
|
||||
function SaveAction(
|
||||
$injector,
|
||||
policyService,
|
||||
dialogService,
|
||||
creationService,
|
||||
copyService,
|
||||
context
|
||||
) {
|
||||
this.domainObject = (context || {}).domainObject;
|
||||
this.$location = $location;
|
||||
this.injectObjectService = function(){
|
||||
this.objectService = $injector.get("objectService");
|
||||
};
|
||||
this.urlService = urlService;
|
||||
this.navigationService = navigationService;
|
||||
this.policyService = policyService;
|
||||
this.dialogService = dialogService;
|
||||
this.creationService = creationService;
|
||||
this.$q = $q;
|
||||
this.copyService = copyService;
|
||||
}
|
||||
|
||||
SaveAction.prototype.getObjectService = function(){
|
||||
@@ -67,77 +71,29 @@ define(
|
||||
*/
|
||||
SaveAction.prototype.perform = function () {
|
||||
var domainObject = this.domainObject,
|
||||
$location = this.$location,
|
||||
urlService = this.urlService,
|
||||
copyService = this.copyService,
|
||||
self = this;
|
||||
|
||||
function resolveWith(object){
|
||||
return function() {
|
||||
return function () {
|
||||
return object;
|
||||
};
|
||||
}
|
||||
|
||||
function doWizardSave(parent) {
|
||||
var context = domainObject.getCapability("context"),
|
||||
wizard = new CreateWizard(domainObject.useCapability('type'), parent, self.policyService, domainObject.getModel());
|
||||
|
||||
function mergeObjects(fromObject, toObject){
|
||||
Object.keys(fromObject).forEach(function(key) {
|
||||
toObject[key] = fromObject[key];
|
||||
});
|
||||
}
|
||||
|
||||
// Create and persist the new object, based on user
|
||||
// input.
|
||||
function buildObjectFromInput(formValue) {
|
||||
var parent = wizard.getLocation(formValue),
|
||||
formModel = wizard.createModel(formValue);
|
||||
|
||||
formModel.location = parent.getId();
|
||||
//Replace domain object model with model collected
|
||||
// from user form.
|
||||
domainObject.useCapability("mutation", function(){
|
||||
//Replace object model with the model from the form
|
||||
return formModel;
|
||||
});
|
||||
return domainObject;
|
||||
}
|
||||
|
||||
function getAllComposees(domainObject){
|
||||
return domainObject.useCapability('composition');
|
||||
}
|
||||
|
||||
function addComposeesToObject(object){
|
||||
return function(composees){
|
||||
return self.$q.all(composees.map(function (composee) {
|
||||
return object.getCapability('composition').add(composee);
|
||||
})).then(resolveWith(object));
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the composees of the 'virtual' object to the
|
||||
* persisted object
|
||||
* @param object
|
||||
* @returns {*}
|
||||
*/
|
||||
function composeNewObject(object){
|
||||
if (self.$q.when(object.hasCapability('composition') && domainObject.hasCapability('composition'))) {
|
||||
return getAllComposees(domainObject)
|
||||
.then(addComposeesToObject(object));
|
||||
}
|
||||
}
|
||||
wizard = new CreateWizard(
|
||||
domainObject,
|
||||
parent,
|
||||
self.policyService
|
||||
);
|
||||
|
||||
return self.dialogService
|
||||
.getUserInput(wizard.getFormStructure(), wizard.getInitialFormValue())
|
||||
.then(buildObjectFromInput);
|
||||
}
|
||||
|
||||
|
||||
function persistObject(object){
|
||||
return ((object.hasCapability('editor') && object.getCapability('editor').save(true)) ||
|
||||
object.getCapability('persistence').persist())
|
||||
.then(resolveWith(object));
|
||||
.getUserInput(
|
||||
wizard.getFormStructure(true),
|
||||
wizard.getInitialFormValue()
|
||||
)
|
||||
.then(wizard.populateObjectFromInput.bind(wizard));
|
||||
}
|
||||
|
||||
function fetchObject(objectId){
|
||||
@@ -150,14 +106,18 @@ define(
|
||||
return fetchObject(object.getModel().location);
|
||||
}
|
||||
|
||||
function locateObjectInParent(parent){
|
||||
parent.getCapability('composition').add(domainObject.getId());
|
||||
return parent;
|
||||
function allowClone(objectToClone) {
|
||||
return (objectToClone.getId() === domainObject.getId()) ||
|
||||
objectToClone.getCapability('location').isOriginal();
|
||||
}
|
||||
|
||||
function doNothing() {
|
||||
// Create cancelled, do nothing
|
||||
return false;
|
||||
function cloneIntoParent(parent) {
|
||||
return copyService.perform(domainObject, parent, allowClone);
|
||||
}
|
||||
|
||||
function cancelEditingAfterClone(clonedObject) {
|
||||
return domainObject.getCapability("editor").cancel()
|
||||
.then(resolveWith(clonedObject));
|
||||
}
|
||||
|
||||
// Invoke any save behavior introduced by the editor capability;
|
||||
@@ -167,18 +127,13 @@ define(
|
||||
function doSave() {
|
||||
//This is a new 'virtual object' that has not been persisted
|
||||
// yet.
|
||||
if (!domainObject.getModel().persisted){
|
||||
if (domainObject.getModel().persisted === undefined){
|
||||
return getParent(domainObject)
|
||||
.then(doWizardSave)
|
||||
.then(persistObject)
|
||||
.then(getParent)//Parent may have changed based
|
||||
// on user selection
|
||||
.then(locateObjectInParent)
|
||||
.then(persistObject)
|
||||
.then(function(){
|
||||
return fetchObject(domainObject.getId());
|
||||
})
|
||||
.catch(doNothing);
|
||||
.then(doWizardSave)
|
||||
.then(getParent)
|
||||
.then(cloneIntoParent)
|
||||
.then(cancelEditingAfterClone)
|
||||
.catch(resolveWith(false));
|
||||
} else {
|
||||
return domainObject.getCapability("editor").save()
|
||||
.then(resolveWith(domainObject.getOriginalObject()));
|
||||
@@ -189,7 +144,7 @@ define(
|
||||
// UI, which will have been pushed atop the Browse UI.)
|
||||
function returnToBrowse(object) {
|
||||
if (object) {
|
||||
self.navigationService.setNavigation(object);
|
||||
object.getCapability("action").perform("navigate");
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define*/
|
||||
|
||||
|
||||
define(
|
||||
['./EditableLookupCapability'],
|
||||
function (EditableLookupCapability) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Wrapper for the "instantiation" capability;
|
||||
* ensures that any domain objects instantiated in Edit mode
|
||||
* are also wrapped as EditableDomainObjects.
|
||||
*
|
||||
* Meant specifically for use by EditableDomainObject and the
|
||||
* associated cache; the constructor signature is particular
|
||||
* to a pattern used there and may contain unused arguments.
|
||||
* @constructor
|
||||
* @memberof platform/commonUI/edit
|
||||
* @implements {CompositionCapability}
|
||||
*/
|
||||
return function EditableInstantiationCapability(
|
||||
contextCapability,
|
||||
editableObject,
|
||||
domainObject,
|
||||
cache
|
||||
) {
|
||||
// This is a "lookup" style capability (it looks up other
|
||||
// domain objects), but we do not want to return the same
|
||||
// specific value every time (composition may change)
|
||||
return new EditableLookupCapability(
|
||||
contextCapability,
|
||||
editableObject,
|
||||
domainObject,
|
||||
cache,
|
||||
false // Not idempotent
|
||||
);
|
||||
};
|
||||
}
|
||||
);
|
||||
@@ -45,7 +45,8 @@ define(
|
||||
cache,
|
||||
idempotent
|
||||
) {
|
||||
var capability = Object.create(contextCapability);
|
||||
var capability = Object.create(contextCapability),
|
||||
method;
|
||||
|
||||
// Check for domain object interface. If something has these
|
||||
// three methods, we assume it's a domain object.
|
||||
@@ -114,7 +115,9 @@ define(
|
||||
}
|
||||
|
||||
// Wrap all methods; return only editable domain objects.
|
||||
Object.keys(contextCapability).forEach(wrapMethod);
|
||||
for (method in contextCapability) {
|
||||
wrapMethod(method);
|
||||
}
|
||||
|
||||
return capability;
|
||||
};
|
||||
|
||||
@@ -81,7 +81,8 @@ define(
|
||||
var domainObject = this.domainObject,
|
||||
editableObject = this.editableObject,
|
||||
self = this,
|
||||
cache = this.cache;
|
||||
cache = this.cache,
|
||||
returnPromise;
|
||||
|
||||
// Update the underlying, "real" domain object's model
|
||||
// with changes made to the copy used for editing.
|
||||
@@ -99,14 +100,18 @@ define(
|
||||
editableObject.getCapability("status").set("editing", false);
|
||||
|
||||
if (nonrecursive) {
|
||||
return resolvePromise(doMutate())
|
||||
returnPromise = resolvePromise(doMutate())
|
||||
.then(doPersist)
|
||||
.then(function(){
|
||||
self.cancel();
|
||||
});
|
||||
} else {
|
||||
return resolvePromise(cache.saveAll());
|
||||
returnPromise = resolvePromise(cache.saveAll());
|
||||
}
|
||||
//Return the original (non-editable) object
|
||||
return returnPromise.then(function() {
|
||||
return domainObject.getOriginalObject ? domainObject.getOriginalObject() : domainObject;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -120,7 +125,7 @@ define(
|
||||
EditorCapability.prototype.cancel = function () {
|
||||
this.editableObject.getCapability("status").set("editing", false);
|
||||
//TODO: Reset the cache as well here.
|
||||
this.cache.markClean(this.editableObject);
|
||||
this.cache.markClean();
|
||||
return resolvePromise(undefined);
|
||||
};
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ define(
|
||||
'../capabilities/EditableContextCapability',
|
||||
'../capabilities/EditableCompositionCapability',
|
||||
'../capabilities/EditableRelationshipCapability',
|
||||
'../capabilities/EditableInstantiationCapability',
|
||||
'../capabilities/EditorCapability',
|
||||
'../capabilities/EditableActionCapability',
|
||||
'./EditableDomainObjectCache'
|
||||
@@ -45,6 +46,7 @@ define(
|
||||
EditableContextCapability,
|
||||
EditableCompositionCapability,
|
||||
EditableRelationshipCapability,
|
||||
EditableInstantiationCapability,
|
||||
EditorCapability,
|
||||
EditableActionCapability,
|
||||
EditableDomainObjectCache
|
||||
@@ -56,6 +58,7 @@ define(
|
||||
context: EditableContextCapability,
|
||||
composition: EditableCompositionCapability,
|
||||
relationship: EditableRelationshipCapability,
|
||||
instantiation: EditableInstantiationCapability,
|
||||
editor: EditorCapability
|
||||
};
|
||||
|
||||
|
||||
@@ -126,7 +126,14 @@ define(
|
||||
* @param {DomainObject} domainObject the domain object
|
||||
*/
|
||||
EditableDomainObjectCache.prototype.markClean = function (domainObject) {
|
||||
delete this.dirtyObjects[domainObject.getId()];
|
||||
var self = this;
|
||||
if (!domainObject) {
|
||||
Object.keys(this.dirtyObjects).forEach(function(key) {
|
||||
delete self.dirtyObjects[key];
|
||||
});
|
||||
} else {
|
||||
delete this.dirtyObjects[domainObject.getId()];
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -118,6 +118,29 @@ define(
|
||||
expect(mockContext.getDomainObject.calls.length).toEqual(2);
|
||||
});
|
||||
|
||||
it("wraps inherited methods", function () {
|
||||
var CapabilityClass = function(){
|
||||
};
|
||||
CapabilityClass.prototype.inheritedMethod=function () {
|
||||
return "an inherited method";
|
||||
};
|
||||
|
||||
mockContext = new CapabilityClass();
|
||||
|
||||
capability = new EditableLookupCapability(
|
||||
mockContext,
|
||||
mockEditableObject,
|
||||
mockDomainObject,
|
||||
factory,
|
||||
false
|
||||
);
|
||||
expect(capability.inheritedMethod()).toEqual("an inherited method");
|
||||
expect(capability.hasOwnProperty('inheritedMethod')).toBe(true);
|
||||
// The presence of an own property indicates that the method
|
||||
// has been wrapped on the object itself and this is a valid
|
||||
// test that the inherited method has been wrapped.
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
);
|
||||
@@ -1,28 +0,0 @@
|
||||
[
|
||||
"actions/CancelAction",
|
||||
"actions/EditAction",
|
||||
"actions/LinkAction",
|
||||
"actions/PropertiesAction",
|
||||
"actions/PropertiesDialog",
|
||||
"actions/RemoveAction",
|
||||
"actions/SaveAction",
|
||||
"capabilities/EditableCompositionCapability",
|
||||
"capabilities/EditableContextCapability",
|
||||
"capabilities/EditableLookupCapability",
|
||||
"capabilities/EditablePersistenceCapability",
|
||||
"capabilities/EditableRelationshipCapability",
|
||||
"capabilities/EditorCapability",
|
||||
"controllers/EditActionController",
|
||||
"controllers/EditController",
|
||||
"controllers/EditPanesController",
|
||||
"directives/MCTBeforeUnload",
|
||||
"objects/EditableDomainObject",
|
||||
"objects/EditableDomainObjectCache",
|
||||
"objects/EditableModelCache",
|
||||
"policies/EditableViewPolicy",
|
||||
"policies/EditActionPolicy",
|
||||
"representers/EditRepresenter",
|
||||
"representers/EditToolbar",
|
||||
"representers/EditToolbarRepresenter",
|
||||
"representers/EditToolbarSelection"
|
||||
]
|
||||
@@ -1,4 +0,0 @@
|
||||
[
|
||||
"FormatProvider",
|
||||
"UTCTimeFormat"
|
||||
]
|
||||
@@ -119,6 +119,12 @@ define([
|
||||
]
|
||||
}
|
||||
],
|
||||
"filters": [
|
||||
{
|
||||
"implementation": "filters/ReverseFilter.js",
|
||||
"key": "reverse"
|
||||
}
|
||||
],
|
||||
"stylesheets": [
|
||||
{
|
||||
"stylesheetUrl": "css/normalize.min.css",
|
||||
|
||||
@@ -1,19 +1,43 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "WTD Symbols",
|
||||
"lastOpened": 1446670352108,
|
||||
"created": 1446670349721
|
||||
"lastOpened": 1454115620456,
|
||||
"created": 1454115616211
|
||||
},
|
||||
"iconSets": [
|
||||
{
|
||||
"selection": [
|
||||
{
|
||||
"order": 119,
|
||||
"id": 96,
|
||||
"prevSize": 32,
|
||||
"code": 58905,
|
||||
"name": "icon-bullet",
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 117,
|
||||
"id": 95,
|
||||
"prevSize": 32,
|
||||
"code": 58904,
|
||||
"name": "icon-session",
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 118,
|
||||
"id": 94,
|
||||
"prevSize": 32,
|
||||
"code": 58903,
|
||||
"name": "icon-topic",
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 116,
|
||||
"id": 93,
|
||||
"prevSize": 32,
|
||||
"code": 58902,
|
||||
"name": "icon-eye-open-no-gleam",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 115,
|
||||
@@ -21,7 +45,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58901,
|
||||
"name": "icon-eye-open",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 110,
|
||||
@@ -29,7 +53,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58899,
|
||||
"name": "icon-collapse-pane-left",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 111,
|
||||
@@ -37,7 +61,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58900,
|
||||
"name": "icon-collapse-pane-right",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 109,
|
||||
@@ -45,7 +69,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58898,
|
||||
"name": "icon-save",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 108,
|
||||
@@ -53,7 +77,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58897,
|
||||
"name": "icon-dataset",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 90,
|
||||
@@ -61,7 +85,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58896,
|
||||
"name": "icon-bell",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 91,
|
||||
@@ -69,7 +93,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58889,
|
||||
"name": "icon-hourglass",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 92,
|
||||
@@ -82,7 +106,7 @@
|
||||
58890
|
||||
],
|
||||
"name": "icon-info-v15",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 93,
|
||||
@@ -90,7 +114,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58887,
|
||||
"name": "icon-x-in-circle",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 94,
|
||||
@@ -98,7 +122,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58881,
|
||||
"name": "icon-datatable",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 95,
|
||||
@@ -106,7 +130,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58882,
|
||||
"name": "icon-tabular-scrolling",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 96,
|
||||
@@ -114,7 +138,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58884,
|
||||
"name": "icon-tabular",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 97,
|
||||
@@ -122,7 +146,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58885,
|
||||
"name": "icon-calendar",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 98,
|
||||
@@ -130,7 +154,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58886,
|
||||
"name": "icon-paint-bucket",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 99,
|
||||
@@ -138,7 +162,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 123,
|
||||
"name": "icon-pointer-left",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 100,
|
||||
@@ -146,7 +170,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 125,
|
||||
"name": "icon-pointer-right",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 101,
|
||||
@@ -154,7 +178,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 80,
|
||||
"name": "icon-person",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 102,
|
||||
@@ -162,7 +186,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 232,
|
||||
"name": "icon-chain-links",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 103,
|
||||
@@ -170,7 +194,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 115,
|
||||
"name": "icon-database-in-brackets",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 104,
|
||||
@@ -178,7 +202,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 114,
|
||||
"name": "icon-refresh",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 105,
|
||||
@@ -186,7 +210,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 108,
|
||||
"name": "icon-lock",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 106,
|
||||
@@ -194,7 +218,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 51,
|
||||
"name": "icon-box-with-dashed-lines",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 10,
|
||||
@@ -202,7 +226,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58880,
|
||||
"name": "icon-box-with-arrow-cursor",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 11,
|
||||
@@ -210,7 +234,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 65,
|
||||
"name": "icon-activity-mode",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 12,
|
||||
@@ -218,7 +242,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 97,
|
||||
"name": "icon-activity",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 87,
|
||||
@@ -226,7 +250,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 33,
|
||||
"name": "icon-alert-rect",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 14,
|
||||
@@ -234,7 +258,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58883,
|
||||
"name": "icon-alert-triangle",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 15,
|
||||
@@ -242,7 +266,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 238,
|
||||
"name": "icon-arrow-double-down",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 16,
|
||||
@@ -250,7 +274,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 235,
|
||||
"name": "icon-arrow-double-up",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
@@ -258,7 +282,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 118,
|
||||
"name": "icon-arrow-down",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 19,
|
||||
@@ -266,7 +290,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 60,
|
||||
"name": "icon-arrow-left",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 20,
|
||||
@@ -274,7 +298,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 62,
|
||||
"name": "icon-arrow-right",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 21,
|
||||
@@ -282,7 +306,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 236,
|
||||
"name": "icon-arrow-tall-down",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 22,
|
||||
@@ -290,7 +314,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 237,
|
||||
"name": "icon-arrow-tall-up",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 23,
|
||||
@@ -298,7 +322,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 94,
|
||||
"name": "icon-arrow-up",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 24,
|
||||
@@ -306,7 +330,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 73,
|
||||
"name": "icon-arrows-out",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 25,
|
||||
@@ -314,7 +338,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58893,
|
||||
"name": "icon-arrows-right-left",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 33,
|
||||
@@ -322,7 +346,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 53,
|
||||
"name": "icon-arrows-up-down",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 26,
|
||||
@@ -330,7 +354,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 42,
|
||||
"name": "icon-asterisk",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 27,
|
||||
@@ -338,7 +362,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 72,
|
||||
"name": "icon-autoflow-tabular",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 28,
|
||||
@@ -346,7 +370,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 224,
|
||||
"name": "icon-box",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 29,
|
||||
@@ -354,7 +378,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 50,
|
||||
"name": "icon-check",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 30,
|
||||
@@ -362,7 +386,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 67,
|
||||
"name": "icon-clock",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 31,
|
||||
@@ -370,7 +394,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 46,
|
||||
"name": "icon-connectivity",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 32,
|
||||
@@ -378,7 +402,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 100,
|
||||
"name": "icon-database-query",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 17,
|
||||
@@ -386,7 +410,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 68,
|
||||
"name": "icon-database",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 35,
|
||||
@@ -394,7 +418,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 81,
|
||||
"name": "icon-dictionary",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 36,
|
||||
@@ -402,7 +426,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 242,
|
||||
"name": "icon-duplicate",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 37,
|
||||
@@ -410,7 +434,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 102,
|
||||
"name": "icon-folder-new",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 38,
|
||||
@@ -418,7 +442,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 70,
|
||||
"name": "icon-folder",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 39,
|
||||
@@ -426,7 +450,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 95,
|
||||
"name": "icon-fullscreen-collapse",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 40,
|
||||
@@ -434,7 +458,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 122,
|
||||
"name": "icon-fullscreen-expand",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 41,
|
||||
@@ -442,7 +466,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 71,
|
||||
"name": "icon-gear",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 49,
|
||||
@@ -450,7 +474,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 227,
|
||||
"name": "icon-image",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 42,
|
||||
@@ -458,7 +482,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 225,
|
||||
"name": "icon-layers",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 43,
|
||||
@@ -466,7 +490,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 76,
|
||||
"name": "icon-layout",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 44,
|
||||
@@ -474,7 +498,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 226,
|
||||
"name": "icon-line-horz",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 75,
|
||||
@@ -482,7 +506,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 244,
|
||||
"name": "icon-link",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 46,
|
||||
@@ -490,7 +514,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 88,
|
||||
"name": "icon-magnify-in",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 47,
|
||||
@@ -498,7 +522,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 89,
|
||||
"name": "icon-magnify-out",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 48,
|
||||
@@ -506,7 +530,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 77,
|
||||
"name": "icon-magnify",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 34,
|
||||
@@ -514,7 +538,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 109,
|
||||
"name": "icon-menu",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 50,
|
||||
@@ -522,7 +546,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 243,
|
||||
"name": "icon-move",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 51,
|
||||
@@ -530,7 +554,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 121,
|
||||
"name": "icon-new-window",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 52,
|
||||
@@ -538,7 +562,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 111,
|
||||
"name": "icon-object",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 73,
|
||||
@@ -546,7 +570,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 63,
|
||||
"name": "icon-object-unknown",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 53,
|
||||
@@ -554,7 +578,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 86,
|
||||
"name": "icon-packet",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 54,
|
||||
@@ -562,7 +586,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 234,
|
||||
"name": "icon-page",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 55,
|
||||
@@ -570,7 +594,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 241,
|
||||
"name": "icon-pause",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 56,
|
||||
@@ -578,7 +602,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 112,
|
||||
"name": "icon-pencil",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 65,
|
||||
@@ -586,7 +610,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 79,
|
||||
"name": "icon-people",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 57,
|
||||
@@ -594,7 +618,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 239,
|
||||
"name": "icon-play",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 58,
|
||||
@@ -602,7 +626,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 233,
|
||||
"name": "icon-plot-resource",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 59,
|
||||
@@ -610,7 +634,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 43,
|
||||
"name": "icon-plus",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 60,
|
||||
@@ -618,7 +642,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 45,
|
||||
"name": "icon-minus",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 61,
|
||||
@@ -626,7 +650,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 54,
|
||||
"name": "icon-sine",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 62,
|
||||
@@ -634,7 +658,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 228,
|
||||
"name": "icon-T",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 63,
|
||||
@@ -642,7 +666,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 116,
|
||||
"name": "icon-telemetry-panel",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 64,
|
||||
@@ -650,7 +674,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 84,
|
||||
"name": "icon-telemetry",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 18,
|
||||
@@ -658,7 +682,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 246,
|
||||
"name": "icon-thumbs-strip",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 67,
|
||||
@@ -666,7 +690,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 83,
|
||||
"name": "icon-timeline",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 68,
|
||||
@@ -674,7 +698,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 245,
|
||||
"name": "icon-timer",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 69,
|
||||
@@ -682,7 +706,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 90,
|
||||
"name": "icon-trash",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 70,
|
||||
@@ -690,7 +714,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 229,
|
||||
"name": "icon-two-parts-both",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 71,
|
||||
@@ -698,7 +722,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 231,
|
||||
"name": "icon-two-parts-one-only",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 72,
|
||||
@@ -706,7 +730,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 120,
|
||||
"name": "icon-x-heavy",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
},
|
||||
{
|
||||
"order": 66,
|
||||
@@ -714,7 +738,7 @@
|
||||
"prevSize": 32,
|
||||
"code": 58946,
|
||||
"name": "icon-x",
|
||||
"tempChar": ""
|
||||
"tempChar": ""
|
||||
}
|
||||
],
|
||||
"id": 2,
|
||||
@@ -729,6 +753,58 @@
|
||||
"height": 1024,
|
||||
"prevSize": 32,
|
||||
"icons": [
|
||||
{
|
||||
"id": 96,
|
||||
"paths": [
|
||||
"M832 752c0 44-36 80-80 80h-480c-44 0-80-36-80-80v-480c0-44 36-80 80-80h480c44 0 80 36 80 80v480z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"grid": 0,
|
||||
"tags": [
|
||||
"icon-bullet"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 95,
|
||||
"paths": [
|
||||
"M101.2 287.6c57.2-69.6 118.6-104.8 182.8-104.8s125.6 35.2 182.8 104.8c51.4 62.6 89.8 141.2 112.6 196.2 27.6 65.8 58.8 121 90.6 159.6 10 12 44.2 51.4 69.8 51.4 6.4 0 30.4-3.8 69.8-51.4 31.8-38.6 63.2-93.8 90.6-159.6 23-55 61.2-133.6 112.6-196.2 3.6-4.4 7.2-8.6 10.8-12.8v-18.8c0.4-140.8-114.8-256-255.6-256h-512c-140.8 0-256 115.2-256 256v201c23.4-51.8 57.4-116.4 101.2-169.4zM744 182c54 0 106.4 24.4 156 72.8-31.6 44.6-57.4 92.2-77.6 134.2-33.4-42-61.8-59.4-78.4-59.4-17.4 0-47.8 19.2-83.2 65.8-27-57.6-54-102.4-77.4-136 51-51.2 104.8-77.4 160.6-77.4z",
|
||||
"M922.8 736.4c-57.2 69.6-118.8 104.8-182.8 104.8s-125.6-35.2-182.8-104.8c-51.4-62.6-89.8-141.2-112.6-196.2-27.6-65.8-58.8-121-90.6-159.6-10-12-44.2-51.4-69.8-51.4-6.4 0-30.4 3.8-69.8 51.4-31.8 38.6-63.2 93.8-90.6 159.6-23 55-61.2 133.6-112.6 196.2-3.6 4.4-7.2 8.6-10.8 12.8v18.8c0 140.8 115.2 256 256 256h512c140.8 0 256-115.2 256-256v-201c-23.8 51.8-57.8 116.4-101.6 169.4zM280 842c-54 0-106.4-24.4-156-72.8 31.6-44.6 57.4-92.2 77.6-134.2 33.4 42 61.8 59.4 78.4 59.4 17.4 0 47.8-19.2 83.2-65.8 27 57.6 54 102.4 77.4 136-51 51.2-104.8 77.4-160.6 77.4z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"grid": 0,
|
||||
"tags": [
|
||||
"icon-session"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [],
|
||||
"125525525516161751": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 94,
|
||||
"paths": [
|
||||
"M832 0h-128v192h127.6c0.2 0 0.2 0.2 0.4 0.4v639.4c0 0.2-0.2 0.2-0.4 0.4h-127.6v192h128c105.6 0 192-86.4 192-192v-640.2c0-105.6-86.4-192-192-192z",
|
||||
"M192 831.6v-639.4c0-0.2 0.2-0.2 0.4-0.4h127.6v-191.8h-128c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192h128v-192h-127.6c-0.2 0-0.4-0.2-0.4-0.4z",
|
||||
"M686 384c7.2 0 21 7.4 38.6 25.8 11.8-24.8 26.4-52.2 43.4-79v-50c-26.4-16.4-53.8-24.6-82-24.6-37.6 0-74.2 14.8-108.8 44.2 27.4 37.8 49.6 78.6 66.2 113.8 19.4-21.6 34.8-30.2 42.6-30.2z",
|
||||
"M338 640c-7.2 0-21-7.4-38.6-25.8-11.8 24.8-26.4 52.2-43.4 79v74.8h82c37.6 0 74.2-14.8 108.8-44.2-27.4-37.8-49.6-78.6-66.2-113.8-19.4 21.4-34.8 30-42.6 30z",
|
||||
"M768 544.2c-38.2 70.6-72.8 95.8-85 95.8-15 0-64.2-38.4-112-152.8-17.4-41.8-46.6-101.6-85.8-149.4-44.8-54.4-93.2-82-144.2-82-29.2 0-57.6 9-85 27v196.8c38.2-70.6 72.8-95.8 85-95.8 15 0 64.2 38.4 112 152.8 17.4 41.8 46.6 101.6 85.8 149.4 44.8 54.4 93.2 82 144.2 82 29.2 0 57.6-9 85-27v-196.8z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"grid": 0,
|
||||
"tags": [
|
||||
"icon-topic"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [],
|
||||
"125525525516161751": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 93,
|
||||
"paths": [
|
||||
@@ -749,6 +825,10 @@
|
||||
"icon-eye-open-no-gleam"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [
|
||||
1,
|
||||
1
|
||||
],
|
||||
"125525525516161751": [
|
||||
1,
|
||||
1
|
||||
@@ -775,6 +855,10 @@
|
||||
"icon-crosshair"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [
|
||||
1,
|
||||
1
|
||||
],
|
||||
"125525525516161751": [
|
||||
1,
|
||||
1
|
||||
@@ -801,6 +885,10 @@
|
||||
"icon-collapse-pane-left"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"125525525516161751": [
|
||||
0,
|
||||
0
|
||||
@@ -827,6 +915,10 @@
|
||||
"icon-collapse-pane-right"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"125525525516161751": [
|
||||
0,
|
||||
0
|
||||
@@ -853,6 +945,10 @@
|
||||
"icon-save-v2"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"125525525516161751": [
|
||||
0,
|
||||
0
|
||||
@@ -872,6 +968,7 @@
|
||||
"icon-dataset"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [],
|
||||
"125525525516161751": []
|
||||
}
|
||||
},
|
||||
@@ -895,6 +992,10 @@
|
||||
"icon-bell"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [
|
||||
1,
|
||||
1
|
||||
],
|
||||
"125525525516161751": [
|
||||
1,
|
||||
1
|
||||
@@ -921,6 +1022,10 @@
|
||||
"icon-hourglass"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [
|
||||
1,
|
||||
1
|
||||
],
|
||||
"125525525516161751": [
|
||||
1,
|
||||
1
|
||||
@@ -943,6 +1048,9 @@
|
||||
"icon-info-v1.5"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [
|
||||
0
|
||||
],
|
||||
"125525525516161751": [
|
||||
0
|
||||
]
|
||||
@@ -1336,6 +1444,10 @@
|
||||
"icon-box-with-arrow-cursor"
|
||||
],
|
||||
"colorPermutations": {
|
||||
"16161751": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"125525525516161751": [
|
||||
0,
|
||||
0
|
||||
@@ -2367,12 +2479,6 @@
|
||||
161,
|
||||
75,
|
||||
1
|
||||
],
|
||||
[
|
||||
255,
|
||||
255,
|
||||
255,
|
||||
1
|
||||
]
|
||||
]
|
||||
],
|
||||
|
||||
Binary file not shown.
@@ -94,5 +94,8 @@
|
||||
<glyph unicode="" glyph-name="icon-collapse-pane-right" d="M768 960h256v-1024h-256c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192zM512 640l-512-320v640z" />
|
||||
<glyph unicode="" glyph-name="icon-eye-open" d="M512 896c-261 0-480.6-195.4-512-448 31.4-252.6 251-448 512-448s480.6 195.4 512 448c-31.4 252.6-251 448-512 448zM768.2 225.4c-71.4-62.8-162.8-97.4-257.6-97.4s-186.2 34.6-257.6 97.4c-66.6 58.6-110.6 137.2-125 222.6 0 0 0 0.2 0 0.2 76.8 154 220.8 257.6 384 257.6s307.2-103.8 384-257.6c0 0 0-0.2 0-0.2-14.4-85.4-61.2-164-127.8-222.6zM512 672c-123.8 0-224-100.2-224-224s100.2-224 224-224 224 100.2 224 224-100.2 224-224 224z" />
|
||||
<glyph unicode="" glyph-name="icon-eye-open-no-gleam" d="M512 896c-261 0-480.6-195.4-512-448 31.4-252.6 251-448 512-448s480.6 195.4 512 448c-31.4 252.6-251 448-512 448zM768.2 225.4c-71.4-62.8-162.8-97.4-257.6-97.4s-186.2 34.6-257.6 97.4c-66.6 58.6-110.6 137.2-125 222.6 0 0 0 0.2 0 0.2 76.8 154 220.8 257.6 384 257.6s307.2-103.8 384-257.6c0 0 0-0.2 0-0.2-14.4-85.4-61.2-164-127.8-222.6zM512 672c-123.8 0-224-100.2-224-224s100.2-224 224-224 224 100.2 224 224-100.2 224-224 224zM576 416c-53 0-96 43-96 96s43 96 96 96 96-43 96-96c0-53-43-96-96-96z" />
|
||||
<glyph unicode="" glyph-name="icon-topic" d="M832 960h-128v-192h127.6c0.2 0 0.2-0.2 0.4-0.4v-639.4c0-0.2-0.2-0.2-0.4-0.4h-127.6v-192h128c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192zM192 128.4v639.4c0 0.2 0.2 0.2 0.4 0.4h127.6v191.8h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192h-127.6c-0.2 0-0.4 0.2-0.4 0.4zM686 576c7.2 0 21-7.4 38.6-25.8 11.8 24.8 26.4 52.2 43.4 79v50c-26.4 16.4-53.8 24.6-82 24.6-37.6 0-74.2-14.8-108.8-44.2 27.4-37.8 49.6-78.6 66.2-113.8 19.4 21.6 34.8 30.2 42.6 30.2zM338 320c-7.2 0-21 7.4-38.6 25.8-11.8-24.8-26.4-52.2-43.4-79v-74.8h82c37.6 0 74.2 14.8 108.8 44.2-27.4 37.8-49.6 78.6-66.2 113.8-19.4-21.4-34.8-30-42.6-30zM768 415.8c-38.2-70.6-72.8-95.8-85-95.8-15 0-64.2 38.4-112 152.8-17.4 41.8-46.6 101.6-85.8 149.4-44.8 54.4-93.2 82-144.2 82-29.2 0-57.6-9-85-27v-196.8c38.2 70.6 72.8 95.8 85 95.8 15 0 64.2-38.4 112-152.8 17.4-41.8 46.6-101.6 85.8-149.4 44.8-54.4 93.2-82 144.2-82 29.2 0 57.6 9 85 27v196.8z" />
|
||||
<glyph unicode="" glyph-name="icon-session" d="M101.2 672.4c57.2 69.6 118.6 104.8 182.8 104.8s125.6-35.2 182.8-104.8c51.4-62.6 89.8-141.2 112.6-196.2 27.6-65.8 58.8-121 90.6-159.6 10-12 44.2-51.4 69.8-51.4 6.4 0 30.4 3.8 69.8 51.4 31.8 38.6 63.2 93.8 90.6 159.6 23 55 61.2 133.6 112.6 196.2 3.6 4.4 7.2 8.6 10.8 12.8v18.8c0.4 140.8-114.8 256-255.6 256h-512c-140.8 0-256-115.2-256-256v-201c23.4 51.8 57.4 116.4 101.2 169.4zM744 778c54 0 106.4-24.4 156-72.8-31.6-44.6-57.4-92.2-77.6-134.2-33.4 42-61.8 59.4-78.4 59.4-17.4 0-47.8-19.2-83.2-65.8-27 57.6-54 102.4-77.4 136 51 51.2 104.8 77.4 160.6 77.4zM922.8 223.6c-57.2-69.6-118.8-104.8-182.8-104.8s-125.6 35.2-182.8 104.8c-51.4 62.6-89.8 141.2-112.6 196.2-27.6 65.8-58.8 121-90.6 159.6-10 12-44.2 51.4-69.8 51.4-6.4 0-30.4-3.8-69.8-51.4-31.8-38.6-63.2-93.8-90.6-159.6-23-55-61.2-133.6-112.6-196.2-3.6-4.4-7.2-8.6-10.8-12.8v-18.8c0-140.8 115.2-256 256-256h512c140.8 0 256 115.2 256 256v201c-23.8-51.8-57.8-116.4-101.6-169.4zM280 118c-54 0-106.4 24.4-156 72.8 31.6 44.6 57.4 92.2 77.6 134.2 33.4-42 61.8-59.4 78.4-59.4 17.4 0 47.8 19.2 83.2 65.8 27-57.6 54-102.4 77.4-136-51-51.2-104.8-77.4-160.6-77.4z" />
|
||||
<glyph unicode="" glyph-name="icon-bullet" d="M832 208c0-44-36-80-80-80h-480c-44 0-80 36-80 80v480c0 44 36 80 80 80h480c44 0 80-36 80-80v-480z" />
|
||||
<glyph unicode="" glyph-name="icon-x" d="M384 448l-365.332-365.332c-24.89-24.89-24.89-65.62 0-90.51l37.49-37.49c24.89-24.89 65.62-24.89 90.51 0 0 0 365.332 365.332 365.332 365.332l365.332-365.332c24.89-24.89 65.62-24.89 90.51 0l37.49 37.49c24.89 24.89 24.89 65.62 0 90.51l-365.332 365.332c0 0 365.332 365.332 365.332 365.332 24.89 24.89 24.89 65.62 0 90.51l-37.49 37.49c-24.89 24.89-65.62 24.89-90.51 0 0 0-365.332-365.332-365.332-365.332l-365.332 365.332c-24.89 24.89-65.62 24.89-90.51 0l-37.49-37.49c-24.89-24.89-24.89-65.62 0-90.51 0 0 365.332-365.332 365.332-365.332z" />
|
||||
</font></defs></svg>
|
||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 32 KiB |
Binary file not shown.
Binary file not shown.
@@ -41,16 +41,9 @@ mct-representation {
|
||||
.t-item-icon {
|
||||
&:before {
|
||||
$spinBW: 4px;
|
||||
$spinD: 0;
|
||||
@include spinner($spinBW);
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
padding: 30%;
|
||||
width: $spinD;
|
||||
height: $spinD;
|
||||
}
|
||||
.t-item-icon-glyph {
|
||||
display: none;
|
||||
@@ -63,7 +56,8 @@ mct-representation {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.selected mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
border-color: rgba($colorItemTreeSelectedFg, 0.25);
|
||||
border-top-color: rgba($colorItemTreeSelectedFg, 1.0);
|
||||
border-color: rgba($colorItemTreeSelectedFg, 0.25) !important;
|
||||
border-top-color: rgba($colorItemTreeSelectedFg, 1.0) !important;
|
||||
}
|
||||
@@ -20,62 +20,37 @@
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
@include keyframes(rotation) {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(359deg); }
|
||||
100% { @include transform(rotate(360deg)); }
|
||||
}
|
||||
|
||||
@mixin spinner($b: 5px) {
|
||||
@include keyframes(rotateCentered) {
|
||||
0% { @include transform(translateX(-50%) translateY(-50%) rotate(0deg)); }
|
||||
100% { @include transform(translateX(-50%) translateY(-50%) rotate(359deg)); }
|
||||
}
|
||||
@include animation-name(rotateCentered);
|
||||
@include keyframes(rotation-centered) {
|
||||
0% { @include transform(translate(-50%, -50%) rotate(0deg)); }
|
||||
100% { @include transform(translate(-50%, -50%) rotate(360deg)); }
|
||||
}
|
||||
|
||||
@mixin spinner($b: 5px, $c: $colorKey) {
|
||||
@include transform-origin(center);
|
||||
@include animation-name(rotation-centered);
|
||||
@include animation-duration(0.5s);
|
||||
@include animation-iteration-count(infinite);
|
||||
@include animation-timing-function(linear);
|
||||
@include transform-origin(center);
|
||||
border-style: solid;
|
||||
border-width: $b;
|
||||
@include border-radius(100%);
|
||||
}
|
||||
|
||||
|
||||
@mixin wait-spinner2($b: 5px, $c: $colorAlt1) {
|
||||
@include spinner($b);
|
||||
@include box-sizing(border-box);
|
||||
border-color: rgba($c, 0.25);
|
||||
border-top-color: rgba($c, 1.0);
|
||||
border-style: solid;
|
||||
border-width: $b;
|
||||
display: block;
|
||||
position: absolute;
|
||||
height: 0; width: 0;
|
||||
padding: 7%;
|
||||
left: 50%; top: 50%;
|
||||
}
|
||||
|
||||
@mixin wait-spinner($b: 5px, $c: $colorAlt1) {
|
||||
display: block;
|
||||
position: absolute;
|
||||
-webkit-animation: rotation .6s infinite linear;
|
||||
-moz-animation: rotation .6s infinite linear;
|
||||
-o-animation: rotation .6s infinite linear;
|
||||
animation: rotation .6s infinite linear;
|
||||
border-color: rgba($c, 0.25);
|
||||
border-top-color: rgba($c, 1.0);
|
||||
border-style: solid;
|
||||
border-width: $b;
|
||||
@include border-radius(100%);
|
||||
}
|
||||
|
||||
.t-wait-spinner,
|
||||
.wait-spinner {
|
||||
$d: 5%;
|
||||
@include wait-spinner(0.5em, $colorKey);
|
||||
top: 50%; left: 50%;
|
||||
@include spinner(0.5em, $colorKey);
|
||||
height: auto; width: auto;
|
||||
padding: $d; // Will size object based on parent container WIDTH
|
||||
pointer-events: none;
|
||||
margin-top: $d / -1;
|
||||
margin-left: $d / -1;
|
||||
z-index: 2;
|
||||
&.inline {
|
||||
display: inline-block !important;
|
||||
@@ -85,46 +60,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
.l-wait-spinner-holder {
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
&.align-left {
|
||||
.t-wait-spinner {
|
||||
left: 0;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
&.full-size {
|
||||
display: inline-block;
|
||||
height: 100%; width: 100%;
|
||||
.t-wait-spinner {
|
||||
top: 0;
|
||||
margin-top: 0;
|
||||
padding: 30%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.treeview .wait-spinner {
|
||||
// Only used in subtree.html, which I don't think this is actually being used
|
||||
$d: 10px;
|
||||
@include wait-spinner(0.25em, $colorKey);
|
||||
height: $d; width: $d;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
top: 2px; left: 0;
|
||||
}
|
||||
|
||||
.wait-spinner.sm {
|
||||
$d: 13px;
|
||||
@include wait-spinner(0.25em, $colorKey);
|
||||
height: $d; width: $d;
|
||||
margin-left: 0 !important;
|
||||
margin-top: 0 !important;
|
||||
padding: 0 !important;
|
||||
top: 0; left: 0;
|
||||
}
|
||||
|
||||
.loading {
|
||||
// Can be applied to any block element with height and width
|
||||
pointer-events: none;
|
||||
@@ -133,7 +77,8 @@
|
||||
content: '';
|
||||
}
|
||||
&:before {
|
||||
@include wait-spinner2(5px, $colorLoadingFg);
|
||||
@include spinner(5px, $colorLoadingFg);
|
||||
padding: 5%;
|
||||
z-index: 10;
|
||||
}
|
||||
&:after {
|
||||
@@ -146,5 +91,4 @@
|
||||
padding: $menuLineH / 4;
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -266,6 +266,8 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa
|
||||
|
||||
.gl-plot-tick,
|
||||
.tick-label {
|
||||
direction: rtl;
|
||||
unicode-bidi:bidi-override;
|
||||
font-size: 0.7rem;
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
|
||||
@@ -34,7 +34,6 @@ ul.tree {
|
||||
|
||||
.tree-item,
|
||||
.search-result-item {
|
||||
$runningItemW: 0;
|
||||
@extend .l-flex-row;
|
||||
@include box-sizing(border-box);
|
||||
@include border-radius($basicCr);
|
||||
@@ -129,26 +128,13 @@ mct-representation {
|
||||
.t-object-label {
|
||||
.t-item-icon {
|
||||
&:before {
|
||||
$spinBW: 4px;
|
||||
@include spinner($spinBW);
|
||||
border-color: rgba($colorItemTreeIcon, 0.25);
|
||||
border-top-color: rgba($colorItemTreeIcon, 1.0);
|
||||
}
|
||||
.t-item-icon-glyph {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.t-title-label {
|
||||
font-style: italic;
|
||||
opacity: 0.6;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.selected mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
border-color: rgba($colorItemTreeSelectedFg, 0.25);
|
||||
border-top-color: rgba($colorItemTreeSelectedFg, 1.0);
|
||||
}
|
||||
|
||||
.tree .s-status-editing,
|
||||
.search-results .s-status-editing {
|
||||
|
||||
@@ -24,7 +24,11 @@
|
||||
<input type="text"
|
||||
ng-model="textValue"
|
||||
ng-blur="restoreTextValue(); ngBlur()"
|
||||
ng-class="{ error: textInvalid }">
|
||||
ng-class="{
|
||||
error: textInvalid ||
|
||||
(structure.validate &&
|
||||
!structure.validate(ngModel[field]))
|
||||
}">
|
||||
</input>
|
||||
<a class="ui-symbol icon icon-calendar"
|
||||
ng-if="structure.format === 'utc' || !structure.format"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<span class="l-time-range-inputs-elem ui-symbol type-icon">C</span>
|
||||
<span class="l-time-range-input">
|
||||
<mct-control key="'datetime-field'"
|
||||
structure="{ format: parameters.format }"
|
||||
structure="{ format: parameters.format, validate: validateStart }"
|
||||
ng-model="formModel"
|
||||
ng-blur="updateBoundsFromForm()"
|
||||
field="'start'"
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
<span class="l-time-range-input" ng-controller="ToggleController as t2">
|
||||
<mct-control key="'datetime-field'"
|
||||
structure="{ format: parameters.format }"
|
||||
structure="{ format: parameters.format, validate: validateEnd }"
|
||||
ng-model="formModel"
|
||||
ng-blur="updateBoundsFromForm()"
|
||||
field="'end'"
|
||||
|
||||
@@ -43,7 +43,7 @@ define(
|
||||
function TimeRangeController($scope, formatService, defaultFormat, now) {
|
||||
var tickCount = 2,
|
||||
innerMinimumSpan = 1000, // 1 second
|
||||
outerMinimumSpan = 1000 * 60 * 60, // 1 hour
|
||||
outerMinimumSpan = 1000, // 1 second
|
||||
initialDragValue,
|
||||
formatter = formatService.getFormat(defaultFormat);
|
||||
|
||||
@@ -185,13 +185,6 @@ define(
|
||||
function updateOuterStart(t) {
|
||||
var ngModel = $scope.ngModel;
|
||||
|
||||
ngModel.outer.start = t;
|
||||
|
||||
ngModel.outer.end = Math.max(
|
||||
ngModel.outer.start + outerMinimumSpan,
|
||||
ngModel.outer.end
|
||||
);
|
||||
|
||||
ngModel.inner.start =
|
||||
Math.max(ngModel.outer.start, ngModel.inner.start);
|
||||
ngModel.inner.end = Math.max(
|
||||
@@ -207,13 +200,6 @@ define(
|
||||
function updateOuterEnd(t) {
|
||||
var ngModel = $scope.ngModel;
|
||||
|
||||
ngModel.outer.end = t;
|
||||
|
||||
ngModel.outer.start = Math.min(
|
||||
ngModel.outer.end - outerMinimumSpan,
|
||||
ngModel.outer.start
|
||||
);
|
||||
|
||||
ngModel.inner.end =
|
||||
Math.min(ngModel.outer.end, ngModel.inner.end);
|
||||
ngModel.inner.start = Math.min(
|
||||
@@ -233,11 +219,20 @@ define(
|
||||
}
|
||||
|
||||
function updateBoundsFromForm() {
|
||||
$scope.ngModel = $scope.ngModel || {};
|
||||
$scope.ngModel.outer = {
|
||||
start: $scope.formModel.start,
|
||||
end: $scope.formModel.end
|
||||
};
|
||||
var start = $scope.formModel.start,
|
||||
end = $scope.formModel.end;
|
||||
if (end >= start + outerMinimumSpan) {
|
||||
$scope.ngModel = $scope.ngModel || {};
|
||||
$scope.ngModel.outer = { start: start, end: end };
|
||||
}
|
||||
}
|
||||
|
||||
function validateStart(startValue) {
|
||||
return startValue <= $scope.formModel.end - outerMinimumSpan;
|
||||
}
|
||||
|
||||
function validateEnd(endValue) {
|
||||
return endValue >= $scope.formModel.start + outerMinimumSpan;
|
||||
}
|
||||
|
||||
$scope.startLeftDrag = startLeftDrag;
|
||||
@@ -249,6 +244,9 @@ define(
|
||||
|
||||
$scope.updateBoundsFromForm = updateBoundsFromForm;
|
||||
|
||||
$scope.validateStart = validateStart;
|
||||
$scope.validateEnd = validateEnd;
|
||||
|
||||
$scope.ticks = [];
|
||||
|
||||
// Initialize scope to defaults
|
||||
|
||||
44
platform/commonUI/general/src/filters/ReverseFilter.js
Normal file
44
platform/commonUI/general/src/filters/ReverseFilter.js
Normal file
@@ -0,0 +1,44 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define*/
|
||||
|
||||
define(function () {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Implements the `reverse` filter, which reverses text strings.
|
||||
* Useful in cases where text should be reversed for presentational
|
||||
* reasons (e.g. in conjunction with CSS tricks involing text direction),
|
||||
* allowing such behavior to be handled independently from the controller
|
||||
* layer.
|
||||
*
|
||||
* @constructor
|
||||
* @memberof platform/commonUI/general
|
||||
*/
|
||||
function ReverseFilter() {
|
||||
return function reverse(value) {
|
||||
return value && value.toString().split('').reverse().join('');
|
||||
};
|
||||
}
|
||||
|
||||
return ReverseFilter;
|
||||
});
|
||||
@@ -91,6 +91,24 @@ define(
|
||||
.toHaveBeenCalledWith("ngModel", jasmine.any(Function));
|
||||
});
|
||||
|
||||
it("exposes start time validator", function () {
|
||||
var testValue = 42000000;
|
||||
mockScope.formModel = { end: testValue };
|
||||
expect(mockScope.validateStart(testValue + 1))
|
||||
.toBe(false);
|
||||
expect(mockScope.validateStart(testValue - 60 * 60 * 1000 - 1))
|
||||
.toBe(true);
|
||||
});
|
||||
|
||||
it("exposes end time validator", function () {
|
||||
var testValue = 42000000;
|
||||
mockScope.formModel = { start: testValue };
|
||||
expect(mockScope.validateEnd(testValue - 1))
|
||||
.toBe(false);
|
||||
expect(mockScope.validateEnd(testValue + 60 * 60 * 1000 + 1))
|
||||
.toBe(true);
|
||||
});
|
||||
|
||||
describe("when changes are made via form entry", function () {
|
||||
beforeEach(function () {
|
||||
mockScope.ngModel = {
|
||||
@@ -194,26 +212,6 @@ define(
|
||||
fireWatchCollection("ngModel", mockScope.ngModel);
|
||||
});
|
||||
|
||||
it("enforces a minimum outer span", function () {
|
||||
mockScope.ngModel.outer.end =
|
||||
mockScope.ngModel.outer.start - DAY * 100;
|
||||
fireWatch(
|
||||
"ngModel.outer.end",
|
||||
mockScope.ngModel.outer.end
|
||||
);
|
||||
expect(mockScope.ngModel.outer.end)
|
||||
.toBeGreaterThan(mockScope.ngModel.outer.start);
|
||||
|
||||
mockScope.ngModel.outer.start =
|
||||
mockScope.ngModel.outer.end + DAY * 100;
|
||||
fireWatch(
|
||||
"ngModel.outer.start",
|
||||
mockScope.ngModel.outer.start
|
||||
);
|
||||
expect(mockScope.ngModel.outer.end)
|
||||
.toBeGreaterThan(mockScope.ngModel.outer.start);
|
||||
});
|
||||
|
||||
it("enforces a minimum inner span when outer span changes", function () {
|
||||
mockScope.ngModel.outer.end =
|
||||
mockScope.ngModel.outer.start - DAY * 100;
|
||||
|
||||
45
platform/commonUI/general/test/filters/ReverseFilterSpec.js
Normal file
45
platform/commonUI/general/test/filters/ReverseFilterSpec.js
Normal file
@@ -0,0 +1,45 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
|
||||
|
||||
define(
|
||||
['../../src/filters/ReverseFilter'],
|
||||
function (ReverseFilter) {
|
||||
'use strict';
|
||||
|
||||
describe("The reverse filter", function () {
|
||||
var reverse;
|
||||
|
||||
beforeEach(function () {
|
||||
reverse = new ReverseFilter();
|
||||
});
|
||||
|
||||
it("reverses text", function () {
|
||||
expect(reverse('foo')).toEqual('oof');
|
||||
});
|
||||
|
||||
it("returns undefined for undefined inputs", function () {
|
||||
expect(reverse(undefined)).toBeUndefined();
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
@@ -20,6 +20,7 @@
|
||||
"directives/MCTScroll",
|
||||
"directives/MCTSplitPane",
|
||||
"directives/MCTSplitter",
|
||||
"filters/ReverseFilter",
|
||||
"services/Popup",
|
||||
"services/PopupService",
|
||||
"services/UrlService",
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
[
|
||||
"gestures/InfoGesture",
|
||||
"gestures/InfoButtonGesture",
|
||||
"services/InfoService"
|
||||
]
|
||||
@@ -1,6 +0,0 @@
|
||||
[
|
||||
"AgentService",
|
||||
"DeviceClassifier",
|
||||
"DeviceMatchers",
|
||||
"MCTDevice"
|
||||
]
|
||||
@@ -1,4 +0,0 @@
|
||||
[
|
||||
"NotificationService",
|
||||
"NotificationIndicatorController"
|
||||
]
|
||||
@@ -810,7 +810,7 @@ mct-container {
|
||||
.search-results .s-status-editing .search-result-item.t-item-icon:before {
|
||||
color: #0099cc;
|
||||
font-size: inherit; }
|
||||
/* line 40, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 39, ../../../../general/res/sass/_icons.scss */
|
||||
.ui-symbol.icon.alert, .alert.t-item-icon, .icon.alert.s-icon-btn, .l-datetime-picker .l-month-year-pager .icon.alert.pager, .l-datetime-picker .l-month-year-pager .alert.pager.t-item-icon, .tree .s-status-editing .icon.alert.tree-item:before, .tree .s-status-editing .alert.tree-item.t-item-icon:before,
|
||||
.tree .s-status-editing .icon.alert.search-result-item:before,
|
||||
.tree .s-status-editing .alert.search-result-item.t-item-icon:before,
|
||||
@@ -819,7 +819,7 @@ mct-container {
|
||||
.search-results .s-status-editing .icon.alert.search-result-item:before,
|
||||
.search-results .s-status-editing .alert.search-result-item.t-item-icon:before {
|
||||
color: #ff3c00; }
|
||||
/* line 42, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 41, ../../../../general/res/sass/_icons.scss */
|
||||
.ui-symbol.icon.alert:hover, .alert.t-item-icon:hover, .icon.alert.s-icon-btn:hover, .l-datetime-picker .l-month-year-pager .icon.alert.pager:hover, .tree .s-status-editing .icon.alert.tree-item:hover:before, .tree .s-status-editing .alert.tree-item.t-item-icon:hover:before,
|
||||
.tree .s-status-editing .icon.alert.search-result-item:hover:before,
|
||||
.tree .s-status-editing .alert.search-result-item.t-item-icon:hover:before,
|
||||
@@ -828,7 +828,7 @@ mct-container {
|
||||
.search-results .s-status-editing .icon.alert.search-result-item:hover:before,
|
||||
.search-results .s-status-editing .alert.search-result-item.t-item-icon:hover:before {
|
||||
color: #ff8a66; }
|
||||
/* line 46, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 45, ../../../../general/res/sass/_icons.scss */
|
||||
.ui-symbol.icon.major, .major.t-item-icon, .icon.major.s-icon-btn, .l-datetime-picker .l-month-year-pager .icon.major.pager, .l-datetime-picker .l-month-year-pager .major.pager.t-item-icon, .tree .s-status-editing .icon.major.tree-item:before, .tree .s-status-editing .major.tree-item.t-item-icon:before,
|
||||
.tree .s-status-editing .icon.major.search-result-item:before,
|
||||
.tree .s-status-editing .major.search-result-item.t-item-icon:before,
|
||||
@@ -837,11 +837,11 @@ mct-container {
|
||||
.search-results .s-status-editing .icon.major.search-result-item:before,
|
||||
.search-results .s-status-editing .major.search-result-item.t-item-icon:before {
|
||||
font-size: 1.65em; }
|
||||
/* line 50, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 49, ../../../../general/res/sass/_icons.scss */
|
||||
.ui-symbol.icon-calendar:after, .icon-calendar.t-item-icon:after, .icon-calendar.s-icon-btn:after, .l-datetime-picker .l-month-year-pager .icon-calendar.pager:after {
|
||||
content: "\e605"; }
|
||||
|
||||
/* line 55, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 54, ../../../../general/res/sass/_icons.scss */
|
||||
.bar .ui-symbol, .bar .t-item-icon, .bar .s-icon-btn, .bar .l-datetime-picker .l-month-year-pager .pager, .l-datetime-picker .l-month-year-pager .bar .pager, .bar .tree .s-status-editing .tree-item:before, .tree .s-status-editing .bar .tree-item:before,
|
||||
.bar .tree .s-status-editing .search-result-item:before,
|
||||
.tree .s-status-editing .bar .search-result-item:before,
|
||||
@@ -851,36 +851,36 @@ mct-container {
|
||||
.search-results .s-status-editing .bar .search-result-item:before {
|
||||
display: inline-block; }
|
||||
|
||||
/* line 59, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 58, ../../../../general/res/sass/_icons.scss */
|
||||
.invoke-menu {
|
||||
text-shadow: none;
|
||||
display: inline-block; }
|
||||
|
||||
/* line 64, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 63, ../../../../general/res/sass/_icons.scss */
|
||||
.s-menu-btn .invoke-menu,
|
||||
.icon.major .invoke-menu,
|
||||
.major.t-item-icon .invoke-menu {
|
||||
margin-left: 3px; }
|
||||
|
||||
/* line 69, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 68, ../../../../general/res/sass/_icons.scss */
|
||||
.menu .type-icon,
|
||||
.tree-item .type-icon,
|
||||
.super-menu.menu .type-icon {
|
||||
position: absolute; }
|
||||
|
||||
/* line 75, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 74, ../../../../general/res/sass/_icons.scss */
|
||||
.l-icon-alert {
|
||||
display: none !important; }
|
||||
/* line 77, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 76, ../../../../general/res/sass/_icons.scss */
|
||||
.l-icon-alert:before {
|
||||
color: #ff3c00;
|
||||
content: "!"; }
|
||||
|
||||
/* line 83, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 82, ../../../../general/res/sass/_icons.scss */
|
||||
.t-item-icon {
|
||||
line-height: normal;
|
||||
position: relative; }
|
||||
/* line 94, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 90, ../../../../general/res/sass/_icons.scss */
|
||||
.t-item-icon.l-icon-link .t-item-icon-glyph:before {
|
||||
color: #49dedb;
|
||||
content: "\f4";
|
||||
@@ -1284,87 +1284,90 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
@-moz-keyframes rotation {
|
||||
0% {
|
||||
transform: rotate(0deg); }
|
||||
100% {
|
||||
transform: rotate(359deg); } }
|
||||
-moz-transform: rotate(360deg);
|
||||
transform: rotate(360deg); } }
|
||||
@-webkit-keyframes rotation {
|
||||
0% {
|
||||
transform: rotate(0deg); }
|
||||
100% {
|
||||
transform: rotate(359deg); } }
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg); } }
|
||||
@keyframes rotation {
|
||||
0% {
|
||||
transform: rotate(0deg); }
|
||||
100% {
|
||||
transform: rotate(359deg); } }
|
||||
/* line 69, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.t-wait-spinner,
|
||||
-moz-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg); } }
|
||||
@-moz-keyframes rotation-centered {
|
||||
0% {
|
||||
-moz-transform: translate(-50%, -50%) rotate(0deg);
|
||||
transform: translate(-50%, -50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translate(-50%, -50%) rotate(360deg);
|
||||
transform: translate(-50%, -50%) rotate(360deg); } }
|
||||
@-webkit-keyframes rotation-centered {
|
||||
0% {
|
||||
-webkit-transform: translate(-50%, -50%) rotate(0deg);
|
||||
transform: translate(-50%, -50%) rotate(0deg); }
|
||||
100% {
|
||||
-webkit-transform: translate(-50%, -50%) rotate(360deg);
|
||||
transform: translate(-50%, -50%) rotate(360deg); } }
|
||||
@keyframes rotation-centered {
|
||||
0% {
|
||||
-moz-transform: translate(-50%, -50%) rotate(0deg);
|
||||
-ms-transform: translate(-50%, -50%) rotate(0deg);
|
||||
-webkit-transform: translate(-50%, -50%) rotate(0deg);
|
||||
transform: translate(-50%, -50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translate(-50%, -50%) rotate(360deg);
|
||||
-ms-transform: translate(-50%, -50%) rotate(360deg);
|
||||
-webkit-transform: translate(-50%, -50%) rotate(360deg);
|
||||
transform: translate(-50%, -50%) rotate(360deg); } }
|
||||
/* line 48, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.wait-spinner {
|
||||
display: block;
|
||||
position: absolute;
|
||||
-webkit-animation: rotation .6s infinite linear;
|
||||
-moz-animation: rotation .6s infinite linear;
|
||||
-o-animation: rotation .6s infinite linear;
|
||||
animation: rotation .6s infinite linear;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
-moz-animation-name: rotation-centered;
|
||||
-webkit-animation-name: rotation-centered;
|
||||
animation-name: rotation-centered;
|
||||
-moz-animation-duration: 0.5s;
|
||||
-webkit-animation-duration: 0.5s;
|
||||
animation-duration: 0.5s;
|
||||
-moz-animation-iteration-count: infinite;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
animation-iteration-count: infinite;
|
||||
-moz-animation-timing-function: linear;
|
||||
-webkit-animation-timing-function: linear;
|
||||
animation-timing-function: linear;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc;
|
||||
border-style: solid;
|
||||
border-width: 0.5em;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
top: 50%;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
height: auto;
|
||||
width: auto;
|
||||
padding: 5%;
|
||||
pointer-events: none;
|
||||
margin-top: -5%;
|
||||
margin-left: -5%;
|
||||
z-index: 2; }
|
||||
/* line 80, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.t-wait-spinner.inline,
|
||||
/* line 55, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.wait-spinner.inline {
|
||||
display: inline-block !important;
|
||||
margin-right: 5px;
|
||||
position: relative !important;
|
||||
vertical-align: middle; }
|
||||
|
||||
/* line 88, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.l-wait-spinner-holder {
|
||||
pointer-events: none;
|
||||
position: absolute; }
|
||||
/* line 92, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.l-wait-spinner-holder.align-left .t-wait-spinner {
|
||||
left: 0;
|
||||
margin-left: 0; }
|
||||
/* line 97, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.l-wait-spinner-holder.full-size {
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
width: 100%; }
|
||||
/* line 100, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.l-wait-spinner-holder.full-size .t-wait-spinner {
|
||||
top: 0;
|
||||
margin-top: 0;
|
||||
padding: 30%; }
|
||||
|
||||
/* line 109, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 63, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.treeview .wait-spinner {
|
||||
display: block;
|
||||
position: absolute;
|
||||
-webkit-animation: rotation .6s infinite linear;
|
||||
-moz-animation: rotation .6s infinite linear;
|
||||
-o-animation: rotation .6s infinite linear;
|
||||
animation: rotation .6s infinite linear;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc;
|
||||
border-style: solid;
|
||||
border-width: 0.25em;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
margin: 0 !important;
|
||||
@@ -1372,40 +1375,21 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
top: 2px;
|
||||
left: 0; }
|
||||
|
||||
/* line 118, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.wait-spinner.sm {
|
||||
display: block;
|
||||
position: absolute;
|
||||
-webkit-animation: rotation .6s infinite linear;
|
||||
-moz-animation: rotation .6s infinite linear;
|
||||
-o-animation: rotation .6s infinite linear;
|
||||
animation: rotation .6s infinite linear;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc;
|
||||
border-style: solid;
|
||||
border-width: 0.25em;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
height: 13px;
|
||||
width: 13px;
|
||||
margin-left: 0 !important;
|
||||
margin-top: 0 !important;
|
||||
padding: 0 !important;
|
||||
top: 0;
|
||||
left: 0; }
|
||||
|
||||
/* line 128, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 72, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading {
|
||||
pointer-events: none; }
|
||||
/* line 131, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 75, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading:before, .loading:after {
|
||||
content: ''; }
|
||||
/* line 135, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 79, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading:before {
|
||||
-moz-animation-name: rotateCentered;
|
||||
-webkit-animation-name: rotateCentered;
|
||||
animation-name: rotateCentered;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
-moz-animation-name: rotation-centered;
|
||||
-webkit-animation-name: rotation-centered;
|
||||
animation-name: rotation-centered;
|
||||
-moz-animation-duration: 0.5s;
|
||||
-webkit-animation-duration: 0.5s;
|
||||
animation-duration: 0.5s;
|
||||
@@ -1415,12 +1399,6 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
-moz-animation-timing-function: linear;
|
||||
-webkit-animation-timing-function: linear;
|
||||
animation-timing-function: linear;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
border-style: solid;
|
||||
border-width: 5px;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
@@ -1429,40 +1407,15 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
box-sizing: border-box;
|
||||
border-color: rgba(255, 199, 0, 0.25);
|
||||
border-top-color: #ffc700;
|
||||
border-style: solid;
|
||||
border-width: 5px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
height: 0;
|
||||
width: 0;
|
||||
padding: 7%;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
padding: 5%;
|
||||
z-index: 10; }
|
||||
@-moz-keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@-webkit-keyframes rotateCentered {
|
||||
0% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
/* line 139, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 84, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading:after {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
@@ -1475,7 +1428,7 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
background: rgba(153, 153, 153, 0.2);
|
||||
display: block;
|
||||
z-index: 9; }
|
||||
/* line 145, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 90, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading.tree-item:before {
|
||||
padding: 0.375rem;
|
||||
border-width: 2px; }
|
||||
@@ -6173,7 +6126,7 @@ ul.tree {
|
||||
margin-bottom: 3px;
|
||||
padding: 0 3px;
|
||||
position: relative; }
|
||||
/* line 49, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 48, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .view-control,
|
||||
.search-result-item .view-control {
|
||||
color: rgba(255, 255, 255, 0.3);
|
||||
@@ -6182,7 +6135,7 @@ ul.tree {
|
||||
height: 100%;
|
||||
line-height: inherit;
|
||||
width: 10px; }
|
||||
/* line 57, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 56, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .view-control.has-children:before,
|
||||
.search-result-item .view-control.has-children:before {
|
||||
position: absolute;
|
||||
@@ -6207,7 +6160,7 @@ ul.tree {
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%; }
|
||||
/* line 63, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 62, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .view-control.has-children.expanded:before,
|
||||
.search-result-item .view-control.has-children.expanded:before {
|
||||
-moz-transform: rotate(90deg);
|
||||
@@ -6215,138 +6168,80 @@ ul.tree {
|
||||
-webkit-transform: rotate(90deg);
|
||||
transform: rotate(90deg); }
|
||||
@media only screen and (min-device-width: 1025px) and (-webkit-min-device-pixel-ratio: 1) {
|
||||
/* line 68, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 67, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .view-control:hover,
|
||||
.search-result-item .view-control:hover {
|
||||
color: #ffc700 !important; } }
|
||||
/* line 74, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 73, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .t-object-label,
|
||||
.search-result-item .t-object-label {
|
||||
line-height: 1.5rem; }
|
||||
/* line 76, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 75, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .t-object-label .t-item-icon,
|
||||
.search-result-item .t-object-label .t-item-icon {
|
||||
text-shadow: rgba(0, 0, 0, 0.6) 0 1px 2px;
|
||||
font-size: 1.4em;
|
||||
color: #0099cc;
|
||||
width: 18px; }
|
||||
/* line 82, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 81, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .t-object-label .t-title-label,
|
||||
.search-result-item .t-object-label .t-title-label {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
/* line 87, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 86, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item.selected,
|
||||
.search-result-item.selected {
|
||||
background: #006080;
|
||||
color: #cccccc; }
|
||||
/* line 90, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 89, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item.selected .view-control,
|
||||
.search-result-item.selected .view-control {
|
||||
color: rgba(255, 255, 255, 0.3); }
|
||||
/* line 93, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 92, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item.selected .t-object-label .t-item-icon,
|
||||
.search-result-item.selected .t-object-label .t-item-icon {
|
||||
color: #cccccc; }
|
||||
@media only screen and (min-device-width: 1025px) and (-webkit-min-device-pixel-ratio: 1) {
|
||||
/* line 100, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 99, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item:not(.selected):hover,
|
||||
.search-result-item:not(.selected):hover {
|
||||
background: rgba(153, 153, 153, 0.1);
|
||||
color: #cccccc; }
|
||||
/* line 103, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 102, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item:not(.selected):hover .t-item-icon,
|
||||
.search-result-item:not(.selected):hover .t-item-icon {
|
||||
color: #33ccff; } }
|
||||
/* line 110, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 109, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item:not(.loading),
|
||||
.search-result-item:not(.loading) {
|
||||
cursor: pointer; }
|
||||
/* line 114, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 113, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .context-trigger,
|
||||
.search-result-item .context-trigger {
|
||||
top: -1px;
|
||||
position: absolute;
|
||||
right: 3px; }
|
||||
/* line 119, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 118, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .context-trigger .invoke-menu,
|
||||
.search-result-item .context-trigger .invoke-menu {
|
||||
font-size: 0.75em;
|
||||
height: 0.9rem;
|
||||
line-height: 0.9rem; }
|
||||
|
||||
/* line 131, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 130, ../../../../general/res/sass/tree/_tree.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
-moz-animation-name: rotateCentered;
|
||||
-webkit-animation-name: rotateCentered;
|
||||
animation-name: rotateCentered;
|
||||
-moz-animation-duration: 0.5s;
|
||||
-webkit-animation-duration: 0.5s;
|
||||
animation-duration: 0.5s;
|
||||
-moz-animation-iteration-count: infinite;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
animation-iteration-count: infinite;
|
||||
-moz-animation-timing-function: linear;
|
||||
-webkit-animation-timing-function: linear;
|
||||
animation-timing-function: linear;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
border-style: solid;
|
||||
border-width: 4px;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc; }
|
||||
@-moz-keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@-webkit-keyframes rotateCentered {
|
||||
0% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
/* line 137, ../../../../general/res/sass/tree/_tree.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-item-icon .t-item-icon-glyph {
|
||||
display: none; }
|
||||
/* line 141, ../../../../general/res/sass/tree/_tree.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
font-style: italic;
|
||||
opacity: 0.6; }
|
||||
|
||||
/* line 148, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.selected mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
border-color: rgba(204, 204, 204, 0.25);
|
||||
border-top-color: #cccccc; }
|
||||
|
||||
/* line 156, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 142, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item,
|
||||
.tree .s-status-editing .search-result-item,
|
||||
.search-results .s-status-editing .tree-item,
|
||||
.search-results .s-status-editing .search-result-item {
|
||||
background: #344154;
|
||||
pointer-events: none; }
|
||||
/* line 160, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 146, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item:before,
|
||||
.tree .s-status-editing .search-result-item:before,
|
||||
.search-results .s-status-editing .tree-item:before,
|
||||
@@ -6384,7 +6279,7 @@ mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
opacity: 0.25; }
|
||||
100% {
|
||||
opacity: 1; } }
|
||||
/* line 169, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 155, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item .t-object-label .t-item-icon,
|
||||
.tree .s-status-editing .tree-item .t-object-label .t-title-label,
|
||||
.tree .s-status-editing .search-result-item .t-object-label .t-item-icon,
|
||||
@@ -6395,13 +6290,13 @@ mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
.search-results .s-status-editing .search-result-item .t-object-label .t-title-label {
|
||||
color: #587ab5;
|
||||
text-shadow: none; }
|
||||
/* line 174, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 160, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item .t-object-label .t-title-label,
|
||||
.tree .s-status-editing .search-result-item .t-object-label .t-title-label,
|
||||
.search-results .s-status-editing .tree-item .t-object-label .t-title-label,
|
||||
.search-results .s-status-editing .search-result-item .t-object-label .t-title-label {
|
||||
font-style: italic; }
|
||||
/* line 178, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 164, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item .view-control, .tree .s-status-editing .tree-item + .tree-item-subtree,
|
||||
.tree .s-status-editing .search-result-item .view-control,
|
||||
.tree .s-status-editing .search-result-item + .tree-item-subtree,
|
||||
@@ -6448,9 +6343,13 @@ mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
|
||||
/* line 42, ../../../../general/res/sass/_object-label.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
-moz-animation-name: rotateCentered;
|
||||
-webkit-animation-name: rotateCentered;
|
||||
animation-name: rotateCentered;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
-moz-animation-name: rotation-centered;
|
||||
-webkit-animation-name: rotation-centered;
|
||||
animation-name: rotation-centered;
|
||||
-moz-animation-duration: 0.5s;
|
||||
-webkit-animation-duration: 0.5s;
|
||||
animation-duration: 0.5s;
|
||||
@@ -6460,60 +6359,34 @@ mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
-moz-animation-timing-function: linear;
|
||||
-webkit-animation-timing-function: linear;
|
||||
animation-timing-function: linear;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
border-style: solid;
|
||||
border-width: 4px;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
content: "";
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc;
|
||||
border-style: solid;
|
||||
border-width: 4px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
padding: 30%;
|
||||
width: 0;
|
||||
height: 0; }
|
||||
@-moz-keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@-webkit-keyframes rotateCentered {
|
||||
0% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
/* line 55, ../../../../general/res/sass/_object-label.scss */
|
||||
content: "";
|
||||
padding: 30%; }
|
||||
/* line 48, ../../../../general/res/sass/_object-label.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-item-icon .t-item-icon-glyph {
|
||||
display: none; }
|
||||
/* line 59, ../../../../general/res/sass/_object-label.scss */
|
||||
/* line 52, ../../../../general/res/sass/_object-label.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
font-style: italic;
|
||||
opacity: 0.6; }
|
||||
|
||||
/* line 66, ../../../../general/res/sass/_object-label.scss */
|
||||
/* line 60, ../../../../general/res/sass/_object-label.scss */
|
||||
.selected mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
border-color: rgba(204, 204, 204, 0.25);
|
||||
border-top-color: #cccccc; }
|
||||
border-color: rgba(204, 204, 204, 0.25) !important;
|
||||
border-top-color: #cccccc !important; }
|
||||
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
@@ -7412,12 +7285,14 @@ table {
|
||||
/* line 267, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick,
|
||||
.tick-label {
|
||||
direction: rtl;
|
||||
unicode-bidi: bidi-override;
|
||||
font-size: 0.7rem;
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis; }
|
||||
/* line 274, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 276, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick.gl-plot-x-tick-label, .gl-plot-tick.tick-label-x,
|
||||
.tick-label.gl-plot-x-tick-label,
|
||||
.tick-label.tick-label-x {
|
||||
@@ -7428,7 +7303,7 @@ table {
|
||||
width: 20%;
|
||||
margin-left: -10%;
|
||||
text-align: center; }
|
||||
/* line 284, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 286, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick.gl-plot-y-tick-label, .gl-plot-tick.tick-label-y,
|
||||
.tick-label.gl-plot-y-tick-label,
|
||||
.tick-label.tick-label-y {
|
||||
@@ -7438,18 +7313,18 @@ table {
|
||||
margin-bottom: -0.5em;
|
||||
text-align: right; }
|
||||
|
||||
/* line 295, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 297, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick.gl-plot-x-tick-label {
|
||||
top: 5px; }
|
||||
/* line 298, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 300, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick.gl-plot-y-tick-label {
|
||||
right: 5px;
|
||||
left: 5px; }
|
||||
|
||||
/* line 305, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 307, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.tick-label.tick-label-x {
|
||||
top: 0; }
|
||||
/* line 308, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 310, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.tick-label.tick-label-y {
|
||||
right: 0;
|
||||
left: 0; }
|
||||
|
||||
@@ -810,7 +810,7 @@ mct-container {
|
||||
.search-results .s-status-editing .search-result-item.t-item-icon:before {
|
||||
color: #0099cc;
|
||||
font-size: inherit; }
|
||||
/* line 40, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 39, ../../../../general/res/sass/_icons.scss */
|
||||
.ui-symbol.icon.alert, .alert.t-item-icon, .icon.alert.s-icon-btn, .l-datetime-picker .l-month-year-pager .icon.alert.pager, .l-datetime-picker .l-month-year-pager .alert.pager.t-item-icon, .tree .s-status-editing .icon.alert.tree-item:before, .tree .s-status-editing .alert.tree-item.t-item-icon:before,
|
||||
.tree .s-status-editing .icon.alert.search-result-item:before,
|
||||
.tree .s-status-editing .alert.search-result-item.t-item-icon:before,
|
||||
@@ -819,7 +819,7 @@ mct-container {
|
||||
.search-results .s-status-editing .icon.alert.search-result-item:before,
|
||||
.search-results .s-status-editing .alert.search-result-item.t-item-icon:before {
|
||||
color: #ff3c00; }
|
||||
/* line 42, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 41, ../../../../general/res/sass/_icons.scss */
|
||||
.ui-symbol.icon.alert:hover, .alert.t-item-icon:hover, .icon.alert.s-icon-btn:hover, .l-datetime-picker .l-month-year-pager .icon.alert.pager:hover, .tree .s-status-editing .icon.alert.tree-item:hover:before, .tree .s-status-editing .alert.tree-item.t-item-icon:hover:before,
|
||||
.tree .s-status-editing .icon.alert.search-result-item:hover:before,
|
||||
.tree .s-status-editing .alert.search-result-item.t-item-icon:hover:before,
|
||||
@@ -828,7 +828,7 @@ mct-container {
|
||||
.search-results .s-status-editing .icon.alert.search-result-item:hover:before,
|
||||
.search-results .s-status-editing .alert.search-result-item.t-item-icon:hover:before {
|
||||
color: #ff8a66; }
|
||||
/* line 46, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 45, ../../../../general/res/sass/_icons.scss */
|
||||
.ui-symbol.icon.major, .major.t-item-icon, .icon.major.s-icon-btn, .l-datetime-picker .l-month-year-pager .icon.major.pager, .l-datetime-picker .l-month-year-pager .major.pager.t-item-icon, .tree .s-status-editing .icon.major.tree-item:before, .tree .s-status-editing .major.tree-item.t-item-icon:before,
|
||||
.tree .s-status-editing .icon.major.search-result-item:before,
|
||||
.tree .s-status-editing .major.search-result-item.t-item-icon:before,
|
||||
@@ -837,11 +837,11 @@ mct-container {
|
||||
.search-results .s-status-editing .icon.major.search-result-item:before,
|
||||
.search-results .s-status-editing .major.search-result-item.t-item-icon:before {
|
||||
font-size: 1.65em; }
|
||||
/* line 50, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 49, ../../../../general/res/sass/_icons.scss */
|
||||
.ui-symbol.icon-calendar:after, .icon-calendar.t-item-icon:after, .icon-calendar.s-icon-btn:after, .l-datetime-picker .l-month-year-pager .icon-calendar.pager:after {
|
||||
content: "\e605"; }
|
||||
|
||||
/* line 55, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 54, ../../../../general/res/sass/_icons.scss */
|
||||
.bar .ui-symbol, .bar .t-item-icon, .bar .s-icon-btn, .bar .l-datetime-picker .l-month-year-pager .pager, .l-datetime-picker .l-month-year-pager .bar .pager, .bar .tree .s-status-editing .tree-item:before, .tree .s-status-editing .bar .tree-item:before,
|
||||
.bar .tree .s-status-editing .search-result-item:before,
|
||||
.tree .s-status-editing .bar .search-result-item:before,
|
||||
@@ -851,36 +851,36 @@ mct-container {
|
||||
.search-results .s-status-editing .bar .search-result-item:before {
|
||||
display: inline-block; }
|
||||
|
||||
/* line 59, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 58, ../../../../general/res/sass/_icons.scss */
|
||||
.invoke-menu {
|
||||
text-shadow: none;
|
||||
display: inline-block; }
|
||||
|
||||
/* line 64, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 63, ../../../../general/res/sass/_icons.scss */
|
||||
.s-menu-btn .invoke-menu,
|
||||
.icon.major .invoke-menu,
|
||||
.major.t-item-icon .invoke-menu {
|
||||
margin-left: 3px; }
|
||||
|
||||
/* line 69, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 68, ../../../../general/res/sass/_icons.scss */
|
||||
.menu .type-icon,
|
||||
.tree-item .type-icon,
|
||||
.super-menu.menu .type-icon {
|
||||
position: absolute; }
|
||||
|
||||
/* line 75, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 74, ../../../../general/res/sass/_icons.scss */
|
||||
.l-icon-alert {
|
||||
display: none !important; }
|
||||
/* line 77, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 76, ../../../../general/res/sass/_icons.scss */
|
||||
.l-icon-alert:before {
|
||||
color: #ff3c00;
|
||||
content: "!"; }
|
||||
|
||||
/* line 83, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 82, ../../../../general/res/sass/_icons.scss */
|
||||
.t-item-icon {
|
||||
line-height: normal;
|
||||
position: relative; }
|
||||
/* line 94, ../../../../general/res/sass/_icons.scss */
|
||||
/* line 90, ../../../../general/res/sass/_icons.scss */
|
||||
.t-item-icon.l-icon-link .t-item-icon-glyph:before {
|
||||
color: #49dedb;
|
||||
content: "\f4";
|
||||
@@ -1265,87 +1265,90 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
@-moz-keyframes rotation {
|
||||
0% {
|
||||
transform: rotate(0deg); }
|
||||
100% {
|
||||
transform: rotate(359deg); } }
|
||||
-moz-transform: rotate(360deg);
|
||||
transform: rotate(360deg); } }
|
||||
@-webkit-keyframes rotation {
|
||||
0% {
|
||||
transform: rotate(0deg); }
|
||||
100% {
|
||||
transform: rotate(359deg); } }
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg); } }
|
||||
@keyframes rotation {
|
||||
0% {
|
||||
transform: rotate(0deg); }
|
||||
100% {
|
||||
transform: rotate(359deg); } }
|
||||
/* line 69, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.t-wait-spinner,
|
||||
-moz-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg); } }
|
||||
@-moz-keyframes rotation-centered {
|
||||
0% {
|
||||
-moz-transform: translate(-50%, -50%) rotate(0deg);
|
||||
transform: translate(-50%, -50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translate(-50%, -50%) rotate(360deg);
|
||||
transform: translate(-50%, -50%) rotate(360deg); } }
|
||||
@-webkit-keyframes rotation-centered {
|
||||
0% {
|
||||
-webkit-transform: translate(-50%, -50%) rotate(0deg);
|
||||
transform: translate(-50%, -50%) rotate(0deg); }
|
||||
100% {
|
||||
-webkit-transform: translate(-50%, -50%) rotate(360deg);
|
||||
transform: translate(-50%, -50%) rotate(360deg); } }
|
||||
@keyframes rotation-centered {
|
||||
0% {
|
||||
-moz-transform: translate(-50%, -50%) rotate(0deg);
|
||||
-ms-transform: translate(-50%, -50%) rotate(0deg);
|
||||
-webkit-transform: translate(-50%, -50%) rotate(0deg);
|
||||
transform: translate(-50%, -50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translate(-50%, -50%) rotate(360deg);
|
||||
-ms-transform: translate(-50%, -50%) rotate(360deg);
|
||||
-webkit-transform: translate(-50%, -50%) rotate(360deg);
|
||||
transform: translate(-50%, -50%) rotate(360deg); } }
|
||||
/* line 48, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.wait-spinner {
|
||||
display: block;
|
||||
position: absolute;
|
||||
-webkit-animation: rotation .6s infinite linear;
|
||||
-moz-animation: rotation .6s infinite linear;
|
||||
-o-animation: rotation .6s infinite linear;
|
||||
animation: rotation .6s infinite linear;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
-moz-animation-name: rotation-centered;
|
||||
-webkit-animation-name: rotation-centered;
|
||||
animation-name: rotation-centered;
|
||||
-moz-animation-duration: 0.5s;
|
||||
-webkit-animation-duration: 0.5s;
|
||||
animation-duration: 0.5s;
|
||||
-moz-animation-iteration-count: infinite;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
animation-iteration-count: infinite;
|
||||
-moz-animation-timing-function: linear;
|
||||
-webkit-animation-timing-function: linear;
|
||||
animation-timing-function: linear;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc;
|
||||
border-style: solid;
|
||||
border-width: 0.5em;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
top: 50%;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
height: auto;
|
||||
width: auto;
|
||||
padding: 5%;
|
||||
pointer-events: none;
|
||||
margin-top: -5%;
|
||||
margin-left: -5%;
|
||||
z-index: 2; }
|
||||
/* line 80, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.t-wait-spinner.inline,
|
||||
/* line 55, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.wait-spinner.inline {
|
||||
display: inline-block !important;
|
||||
margin-right: 5px;
|
||||
position: relative !important;
|
||||
vertical-align: middle; }
|
||||
|
||||
/* line 88, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.l-wait-spinner-holder {
|
||||
pointer-events: none;
|
||||
position: absolute; }
|
||||
/* line 92, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.l-wait-spinner-holder.align-left .t-wait-spinner {
|
||||
left: 0;
|
||||
margin-left: 0; }
|
||||
/* line 97, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.l-wait-spinner-holder.full-size {
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
width: 100%; }
|
||||
/* line 100, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.l-wait-spinner-holder.full-size .t-wait-spinner {
|
||||
top: 0;
|
||||
margin-top: 0;
|
||||
padding: 30%; }
|
||||
|
||||
/* line 109, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 63, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.treeview .wait-spinner {
|
||||
display: block;
|
||||
position: absolute;
|
||||
-webkit-animation: rotation .6s infinite linear;
|
||||
-moz-animation: rotation .6s infinite linear;
|
||||
-o-animation: rotation .6s infinite linear;
|
||||
animation: rotation .6s infinite linear;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc;
|
||||
border-style: solid;
|
||||
border-width: 0.25em;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
margin: 0 !important;
|
||||
@@ -1353,40 +1356,21 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
top: 2px;
|
||||
left: 0; }
|
||||
|
||||
/* line 118, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.wait-spinner.sm {
|
||||
display: block;
|
||||
position: absolute;
|
||||
-webkit-animation: rotation .6s infinite linear;
|
||||
-moz-animation: rotation .6s infinite linear;
|
||||
-o-animation: rotation .6s infinite linear;
|
||||
animation: rotation .6s infinite linear;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc;
|
||||
border-style: solid;
|
||||
border-width: 0.25em;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
height: 13px;
|
||||
width: 13px;
|
||||
margin-left: 0 !important;
|
||||
margin-top: 0 !important;
|
||||
padding: 0 !important;
|
||||
top: 0;
|
||||
left: 0; }
|
||||
|
||||
/* line 128, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 72, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading {
|
||||
pointer-events: none; }
|
||||
/* line 131, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 75, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading:before, .loading:after {
|
||||
content: ''; }
|
||||
/* line 135, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 79, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading:before {
|
||||
-moz-animation-name: rotateCentered;
|
||||
-webkit-animation-name: rotateCentered;
|
||||
animation-name: rotateCentered;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
-moz-animation-name: rotation-centered;
|
||||
-webkit-animation-name: rotation-centered;
|
||||
animation-name: rotation-centered;
|
||||
-moz-animation-duration: 0.5s;
|
||||
-webkit-animation-duration: 0.5s;
|
||||
animation-duration: 0.5s;
|
||||
@@ -1396,12 +1380,6 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
-moz-animation-timing-function: linear;
|
||||
-webkit-animation-timing-function: linear;
|
||||
animation-timing-function: linear;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
border-style: solid;
|
||||
border-width: 5px;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
@@ -1410,40 +1388,15 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
box-sizing: border-box;
|
||||
border-color: rgba(119, 107, 162, 0.25);
|
||||
border-top-color: #776ba2;
|
||||
border-style: solid;
|
||||
border-width: 5px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
height: 0;
|
||||
width: 0;
|
||||
padding: 7%;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
padding: 5%;
|
||||
z-index: 10; }
|
||||
@-moz-keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@-webkit-keyframes rotateCentered {
|
||||
0% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
/* line 139, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 84, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading:after {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
@@ -1456,7 +1409,7 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before {
|
||||
background: rgba(119, 107, 162, 0.1);
|
||||
display: block;
|
||||
z-index: 9; }
|
||||
/* line 145, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
/* line 90, ../../../../general/res/sass/helpers/_wait-spinner.scss */
|
||||
.loading.tree-item:before {
|
||||
padding: 0.375rem;
|
||||
border-width: 2px; }
|
||||
@@ -6047,7 +6000,7 @@ ul.tree {
|
||||
margin-bottom: 3px;
|
||||
padding: 0 3px;
|
||||
position: relative; }
|
||||
/* line 49, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 48, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .view-control,
|
||||
.search-result-item .view-control {
|
||||
color: #666;
|
||||
@@ -6056,7 +6009,7 @@ ul.tree {
|
||||
height: 100%;
|
||||
line-height: inherit;
|
||||
width: 10px; }
|
||||
/* line 57, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 56, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .view-control.has-children:before,
|
||||
.search-result-item .view-control.has-children:before {
|
||||
position: absolute;
|
||||
@@ -6081,7 +6034,7 @@ ul.tree {
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%; }
|
||||
/* line 63, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 62, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .view-control.has-children.expanded:before,
|
||||
.search-result-item .view-control.has-children.expanded:before {
|
||||
-moz-transform: rotate(90deg);
|
||||
@@ -6089,137 +6042,79 @@ ul.tree {
|
||||
-webkit-transform: rotate(90deg);
|
||||
transform: rotate(90deg); }
|
||||
@media only screen and (min-device-width: 1025px) and (-webkit-min-device-pixel-ratio: 1) {
|
||||
/* line 68, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 67, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .view-control:hover,
|
||||
.search-result-item .view-control:hover {
|
||||
color: #0099cc !important; } }
|
||||
/* line 74, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 73, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .t-object-label,
|
||||
.search-result-item .t-object-label {
|
||||
line-height: 1.5rem; }
|
||||
/* line 76, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 75, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .t-object-label .t-item-icon,
|
||||
.search-result-item .t-object-label .t-item-icon {
|
||||
font-size: 1.4em;
|
||||
color: #0099cc;
|
||||
width: 18px; }
|
||||
/* line 82, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 81, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .t-object-label .t-title-label,
|
||||
.search-result-item .t-object-label .t-title-label {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap; }
|
||||
/* line 87, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 86, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item.selected,
|
||||
.search-result-item.selected {
|
||||
background: #1ac6ff;
|
||||
color: #fcfcfc; }
|
||||
/* line 90, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 89, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item.selected .view-control,
|
||||
.search-result-item.selected .view-control {
|
||||
color: #fcfcfc; }
|
||||
/* line 93, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 92, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item.selected .t-object-label .t-item-icon,
|
||||
.search-result-item.selected .t-object-label .t-item-icon {
|
||||
color: #fcfcfc; }
|
||||
@media only screen and (min-device-width: 1025px) and (-webkit-min-device-pixel-ratio: 1) {
|
||||
/* line 100, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 99, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item:not(.selected):hover,
|
||||
.search-result-item:not(.selected):hover {
|
||||
background: rgba(102, 102, 102, 0.1);
|
||||
color: #333333; }
|
||||
/* line 103, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 102, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item:not(.selected):hover .t-item-icon,
|
||||
.search-result-item:not(.selected):hover .t-item-icon {
|
||||
color: #0099cc; } }
|
||||
/* line 110, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 109, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item:not(.loading),
|
||||
.search-result-item:not(.loading) {
|
||||
cursor: pointer; }
|
||||
/* line 114, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 113, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .context-trigger,
|
||||
.search-result-item .context-trigger {
|
||||
top: -1px;
|
||||
position: absolute;
|
||||
right: 3px; }
|
||||
/* line 119, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 118, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree-item .context-trigger .invoke-menu,
|
||||
.search-result-item .context-trigger .invoke-menu {
|
||||
font-size: 0.75em;
|
||||
height: 0.9rem;
|
||||
line-height: 0.9rem; }
|
||||
|
||||
/* line 131, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 130, ../../../../general/res/sass/tree/_tree.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
-moz-animation-name: rotateCentered;
|
||||
-webkit-animation-name: rotateCentered;
|
||||
animation-name: rotateCentered;
|
||||
-moz-animation-duration: 0.5s;
|
||||
-webkit-animation-duration: 0.5s;
|
||||
animation-duration: 0.5s;
|
||||
-moz-animation-iteration-count: infinite;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
animation-iteration-count: infinite;
|
||||
-moz-animation-timing-function: linear;
|
||||
-webkit-animation-timing-function: linear;
|
||||
animation-timing-function: linear;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
border-style: solid;
|
||||
border-width: 4px;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc; }
|
||||
@-moz-keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@-webkit-keyframes rotateCentered {
|
||||
0% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
/* line 137, ../../../../general/res/sass/tree/_tree.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-item-icon .t-item-icon-glyph {
|
||||
display: none; }
|
||||
/* line 141, ../../../../general/res/sass/tree/_tree.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
font-style: italic;
|
||||
opacity: 0.6; }
|
||||
|
||||
/* line 148, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.selected mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
border-color: rgba(252, 252, 252, 0.25);
|
||||
border-top-color: #fcfcfc; }
|
||||
|
||||
/* line 156, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 142, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item,
|
||||
.tree .s-status-editing .search-result-item,
|
||||
.search-results .s-status-editing .tree-item,
|
||||
.search-results .s-status-editing .search-result-item {
|
||||
background: #caf1ff;
|
||||
pointer-events: none; }
|
||||
/* line 160, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 146, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item:before,
|
||||
.tree .s-status-editing .search-result-item:before,
|
||||
.search-results .s-status-editing .tree-item:before,
|
||||
@@ -6257,7 +6152,7 @@ mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
opacity: 0.25; }
|
||||
100% {
|
||||
opacity: 1; } }
|
||||
/* line 169, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 155, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item .t-object-label .t-item-icon,
|
||||
.tree .s-status-editing .tree-item .t-object-label .t-title-label,
|
||||
.tree .s-status-editing .search-result-item .t-object-label .t-item-icon,
|
||||
@@ -6268,13 +6163,13 @@ mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
.search-results .s-status-editing .search-result-item .t-object-label .t-title-label {
|
||||
color: #4bb1c7;
|
||||
text-shadow: none; }
|
||||
/* line 174, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 160, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item .t-object-label .t-title-label,
|
||||
.tree .s-status-editing .search-result-item .t-object-label .t-title-label,
|
||||
.search-results .s-status-editing .tree-item .t-object-label .t-title-label,
|
||||
.search-results .s-status-editing .search-result-item .t-object-label .t-title-label {
|
||||
font-style: italic; }
|
||||
/* line 178, ../../../../general/res/sass/tree/_tree.scss */
|
||||
/* line 164, ../../../../general/res/sass/tree/_tree.scss */
|
||||
.tree .s-status-editing .tree-item .view-control, .tree .s-status-editing .tree-item + .tree-item-subtree,
|
||||
.tree .s-status-editing .search-result-item .view-control,
|
||||
.tree .s-status-editing .search-result-item + .tree-item-subtree,
|
||||
@@ -6321,9 +6216,13 @@ mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
|
||||
/* line 42, ../../../../general/res/sass/_object-label.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
-moz-animation-name: rotateCentered;
|
||||
-webkit-animation-name: rotateCentered;
|
||||
animation-name: rotateCentered;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
-moz-animation-name: rotation-centered;
|
||||
-webkit-animation-name: rotation-centered;
|
||||
animation-name: rotation-centered;
|
||||
-moz-animation-duration: 0.5s;
|
||||
-webkit-animation-duration: 0.5s;
|
||||
animation-duration: 0.5s;
|
||||
@@ -6333,60 +6232,34 @@ mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
-moz-animation-timing-function: linear;
|
||||
-webkit-animation-timing-function: linear;
|
||||
animation-timing-function: linear;
|
||||
-moz-transform-origin: center 50%;
|
||||
-ms-transform-origin: center 50%;
|
||||
-webkit-transform-origin: center 50%;
|
||||
transform-origin: center 50%;
|
||||
border-style: solid;
|
||||
border-width: 4px;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
content: "";
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
border-color: rgba(0, 153, 204, 0.25);
|
||||
border-top-color: #0099cc;
|
||||
border-style: solid;
|
||||
border-width: 4px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
padding: 30%;
|
||||
width: 0;
|
||||
height: 0; }
|
||||
@-moz-keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@-webkit-keyframes rotateCentered {
|
||||
0% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
@keyframes rotateCentered {
|
||||
0% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(0deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
|
||||
100% {
|
||||
-moz-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-ms-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
-webkit-transform: translateX(-50%) translateY(-50%) rotate(359deg);
|
||||
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
|
||||
/* line 55, ../../../../general/res/sass/_object-label.scss */
|
||||
content: "";
|
||||
padding: 30%; }
|
||||
/* line 48, ../../../../general/res/sass/_object-label.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-item-icon .t-item-icon-glyph {
|
||||
display: none; }
|
||||
/* line 59, ../../../../general/res/sass/_object-label.scss */
|
||||
/* line 52, ../../../../general/res/sass/_object-label.scss */
|
||||
mct-representation.s-status-pending .t-object-label .t-title-label {
|
||||
font-style: italic;
|
||||
opacity: 0.6; }
|
||||
|
||||
/* line 66, ../../../../general/res/sass/_object-label.scss */
|
||||
/* line 60, ../../../../general/res/sass/_object-label.scss */
|
||||
.selected mct-representation.s-status-pending .t-object-label .t-item-icon:before {
|
||||
border-color: rgba(252, 252, 252, 0.25);
|
||||
border-top-color: #fcfcfc; }
|
||||
border-color: rgba(252, 252, 252, 0.25) !important;
|
||||
border-top-color: #fcfcfc !important; }
|
||||
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
@@ -7285,12 +7158,14 @@ table {
|
||||
/* line 267, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick,
|
||||
.tick-label {
|
||||
direction: rtl;
|
||||
unicode-bidi: bidi-override;
|
||||
font-size: 0.7rem;
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis; }
|
||||
/* line 274, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 276, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick.gl-plot-x-tick-label, .gl-plot-tick.tick-label-x,
|
||||
.tick-label.gl-plot-x-tick-label,
|
||||
.tick-label.tick-label-x {
|
||||
@@ -7301,7 +7176,7 @@ table {
|
||||
width: 20%;
|
||||
margin-left: -10%;
|
||||
text-align: center; }
|
||||
/* line 284, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 286, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick.gl-plot-y-tick-label, .gl-plot-tick.tick-label-y,
|
||||
.tick-label.gl-plot-y-tick-label,
|
||||
.tick-label.tick-label-y {
|
||||
@@ -7311,18 +7186,18 @@ table {
|
||||
margin-bottom: -0.5em;
|
||||
text-align: right; }
|
||||
|
||||
/* line 295, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 297, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick.gl-plot-x-tick-label {
|
||||
top: 5px; }
|
||||
/* line 298, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 300, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.gl-plot-tick.gl-plot-y-tick-label {
|
||||
right: 5px;
|
||||
left: 5px; }
|
||||
|
||||
/* line 305, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 307, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.tick-label.tick-label-x {
|
||||
top: 0; }
|
||||
/* line 308, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
/* line 310, ../../../../general/res/sass/plots/_plots-main.scss */
|
||||
.tick-label.tick-label-y {
|
||||
right: 0;
|
||||
left: 0; }
|
||||
|
||||
@@ -55,11 +55,12 @@ define(
|
||||
this.policyService = this.policyService || this.getPolicyService();
|
||||
|
||||
// ...and delegate to the composition policy
|
||||
return this.policyService.allow(
|
||||
'composition',
|
||||
containerType,
|
||||
selectedType
|
||||
);
|
||||
return containerObject.getId() !== selectedObject.getId() &&
|
||||
this.policyService.allow(
|
||||
'composition',
|
||||
containerType,
|
||||
selectedType
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
[
|
||||
"CapabilityTable",
|
||||
"ComposeActionPolicy",
|
||||
"CompositionModelPolicy",
|
||||
"CompositionMutabilityPolicy",
|
||||
"CompositionPolicy",
|
||||
"ContainmentTable"
|
||||
]
|
||||
@@ -99,25 +99,25 @@ define([
|
||||
"versions": [
|
||||
{
|
||||
"name": "Version",
|
||||
"value": "${project.version}",
|
||||
"value": "@@version",
|
||||
"priority": 999
|
||||
},
|
||||
{
|
||||
"name": "Built",
|
||||
"value": "${timestamp}",
|
||||
"value": "@@timestamp",
|
||||
"description": "The date on which this version of the client was built.",
|
||||
"priority": 990
|
||||
},
|
||||
{
|
||||
"name": "Revision",
|
||||
"value": "${buildNumber}",
|
||||
"value": "@@revision",
|
||||
"description": "A unique revision identifier for the client sources.",
|
||||
"priority": 995
|
||||
},
|
||||
{
|
||||
"name": "Branch",
|
||||
"value": "${scmBranch}",
|
||||
"description": "The date on which this version of the client was built.",
|
||||
"value": "@@branch",
|
||||
"description": "The name of the branch that was used during the build.",
|
||||
"priority": 994
|
||||
}
|
||||
],
|
||||
@@ -407,11 +407,11 @@ define([
|
||||
"licenses": [
|
||||
{
|
||||
"name": "Math.uuid.js",
|
||||
"version": "1.4",
|
||||
"version": "1.4.7",
|
||||
"description": "Unique identifer generation (code adapted.)",
|
||||
"author": "Robert Kieffer",
|
||||
"website": "https://github.com/broofa/node-uuid",
|
||||
"copyright": "Copyright (c) 2010 Robert Kieffer",
|
||||
"copyright": "Copyright (c) 2010-2012 Robert Kieffer",
|
||||
"license": "license-mit",
|
||||
"link": "http://opensource.org/licenses/MIT"
|
||||
}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
/*global define*/
|
||||
|
||||
|
||||
/*
|
||||
Adapted from:
|
||||
Math.uuid.js (v1.4)
|
||||
http://www.broofa.com
|
||||
mailto:robert@broofa.com
|
||||
|
||||
Copyright (c) 2010 Robert Kieffer
|
||||
Dual licensed under the MIT and GPL licenses.
|
||||
*/
|
||||
define(
|
||||
function () {
|
||||
'use strict';
|
||||
return function generateUUID() {
|
||||
var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'],
|
||||
uuid = new Array(36),
|
||||
rnd = 0,
|
||||
r,
|
||||
i,
|
||||
offset = Math.floor(Date.now()) % 0xF;
|
||||
for (i = 0; i < 36; i = i + 1) {
|
||||
if (i === 8 || i === 13 || i === 18 || i === 23) {
|
||||
uuid[i] = '-';
|
||||
} else if (i === 14) {
|
||||
uuid[i] = '4';
|
||||
} else {
|
||||
if (rnd <= 0x02) {
|
||||
rnd = 0x2000000 + Math.floor(Math.random() * 0x1000000);
|
||||
}
|
||||
r = rnd % 0xf;
|
||||
rnd = Math.floor(rnd / 16);
|
||||
uuid[i] = chars[(i === 19) ? ((r % 0x3) + 0x8) : r];
|
||||
}
|
||||
}
|
||||
return uuid.join('');
|
||||
};
|
||||
}
|
||||
);
|
||||
@@ -22,7 +22,7 @@
|
||||
/*global define*/
|
||||
|
||||
define(
|
||||
["../../lib/uuid", "./Identifier"],
|
||||
["uuid", "./Identifier"],
|
||||
function (uuid, Identifier) {
|
||||
'use strict';
|
||||
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
[
|
||||
"actions/ActionAggregator",
|
||||
"actions/ActionCapability",
|
||||
"actions/ActionProvider",
|
||||
"actions/LoggingActionDecorator",
|
||||
|
||||
"capabilities/CompositionCapability",
|
||||
"capabilities/ContextCapability",
|
||||
"capabilities/ContextualDomainObject",
|
||||
"capabilities/CoreCapabilityProvider",
|
||||
"capabilities/DelegationCapability",
|
||||
"capabilities/InstantiationCapability",
|
||||
"capabilities/MetadataCapability",
|
||||
"capabilities/MutationCapability",
|
||||
"capabilities/PersistenceCapability",
|
||||
"capabilities/RelationshipCapability",
|
||||
|
||||
"identifiers/Identifier",
|
||||
"identifiers/IdentifierProvider",
|
||||
|
||||
"models/ModelAggregator",
|
||||
"models/MissingModelDecorator",
|
||||
"models/PersistedModelProvider",
|
||||
"models/RootModelProvider",
|
||||
"models/StaticModelProvider",
|
||||
"models/CachingModelDecorator",
|
||||
|
||||
"objects/DomainObject",
|
||||
"objects/DomainObjectProvider",
|
||||
|
||||
"services/Contextualize",
|
||||
"services/Instantiate",
|
||||
"services/Now",
|
||||
"services/Throttle",
|
||||
"services/Topic",
|
||||
|
||||
"types/MergeModels",
|
||||
"types/TypeCapability",
|
||||
"types/TypeImpl",
|
||||
"types/TypeProperty",
|
||||
"types/TypePropertyConversion",
|
||||
"types/TypeProvider",
|
||||
|
||||
"views/ViewCapability",
|
||||
"views/ViewProvider"
|
||||
]
|
||||
45
platform/datatable/bundle.js
Normal file
45
platform/datatable/bundle.js
Normal file
@@ -0,0 +1,45 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define*/
|
||||
|
||||
define([
|
||||
"./src/directives/MCTDataTable",
|
||||
"legacyRegistry"
|
||||
], function (
|
||||
MCTDataTable,
|
||||
legacyRegistry
|
||||
) {
|
||||
"use strict";
|
||||
|
||||
legacyRegistry.register("platform/datatable", {
|
||||
"extensions": {
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctDataTable",
|
||||
"implementation": MCTDataTable,
|
||||
"depends": ["$timeout"]
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
65
platform/datatable/res/templates/mct-data-table.html
Normal file
65
platform/datatable/res/templates/mct-data-table.html
Normal file
@@ -0,0 +1,65 @@
|
||||
<div class="l-view-section scrolling"
|
||||
ng-style="overrideRowPositioning ?
|
||||
{'overflow': 'auto'} :
|
||||
{'overflow': 'scroll'}
|
||||
"
|
||||
>
|
||||
<table class="filterable" ng-style="overrideRowPositioning && {
|
||||
height: totalHeight + 'px',
|
||||
'table-layout': overrideRowPositioning ? 'fixed' : 'auto',
|
||||
'box-sizing': 'border-box'
|
||||
}">
|
||||
<thead>
|
||||
<tr>
|
||||
<th ng-repeat="header in displayHeaders"
|
||||
ng-style="overrideRowPositioning && {
|
||||
width: columnWidths[$index] + 'px',
|
||||
'max-width': columnWidths[$index] + 'px',
|
||||
overflow: 'none',
|
||||
'box-sizing': 'border-box'
|
||||
}"
|
||||
ng-class="[
|
||||
enableSort ? 'sortable' : '',
|
||||
sortColumn === header ? 'sort' : '',
|
||||
sortDirection || ''
|
||||
].join(' ')"
|
||||
ng-click="toggleSort(header)">
|
||||
{{ header }}
|
||||
</th>
|
||||
</tr>
|
||||
<tr ng-if="enableFilter" class="s-filters">
|
||||
<th ng-repeat="header in displayHeaders"
|
||||
ng-style="overrideRowPositioning && {
|
||||
width: columnWidths[$index] + 'px',
|
||||
'max-width': columnWidths[$index] + 'px',
|
||||
overflow: 'none',
|
||||
'box-sizing': 'border-box'
|
||||
}">
|
||||
<input type="text"
|
||||
ng-model="filters[header]"/>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody ng-style="overrideRowPositioning || {
|
||||
'opacity': 0.0
|
||||
}">
|
||||
<tr ng-repeat="visibleRow in visibleRows track by visibleRow.rowIndex"
|
||||
ng-style="overrideRowPositioning && {
|
||||
position: 'absolute',
|
||||
top: visibleRow.offsetY + 'px',
|
||||
}">
|
||||
<td ng-repeat="header in displayHeaders"
|
||||
ng-style="overrideRowPositioning && {
|
||||
width: columnWidths[$index] + 'px',
|
||||
'max-width': columnWidths[$index] + 'px',
|
||||
overflow: 'none',
|
||||
'box-sizing': 'border-box'
|
||||
}">
|
||||
{{ visibleRow.contents[header] }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
341
platform/datatable/src/directives/MCTDataTable.js
Normal file
341
platform/datatable/src/directives/MCTDataTable.js
Normal file
@@ -0,0 +1,341 @@
|
||||
/*global define*/
|
||||
|
||||
define(
|
||||
[],
|
||||
function () {
|
||||
"use strict";
|
||||
|
||||
function MCTDataTable($timeout) {
|
||||
|
||||
/**
|
||||
* Set default values for optional parameters on a given scope
|
||||
*/
|
||||
function setDefaults($scope) {
|
||||
if (typeof $scope.enableFilter === 'undefined') {
|
||||
$scope.enableFilter = true;
|
||||
$scope.filters = {};
|
||||
}
|
||||
if (typeof $scope.enableSort === 'undefined') {
|
||||
$scope.enableSort = true;
|
||||
$scope.sortColumn = undefined;
|
||||
$scope.sortDirection = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function link($scope, element) {
|
||||
setDefaults($scope);
|
||||
|
||||
var maxDisplayRows = 50;
|
||||
|
||||
$scope.visibleRows = [];
|
||||
$scope.overrideRowPositioning = false;
|
||||
|
||||
/**
|
||||
* Returns true if row matches all filters.
|
||||
*/
|
||||
function matchRow(filters, row) {
|
||||
return Object.keys(filters).every(function(key) {
|
||||
if (!row[key]) {
|
||||
return false;
|
||||
}
|
||||
var testVal = String(row[key]).toLowerCase();
|
||||
return testVal.indexOf(filters[key]) !== -1;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter rows.
|
||||
*/
|
||||
function filterRows(rowsToFilter) {
|
||||
if (!Object.keys($scope.filters).length) {
|
||||
return rowsToFilter;
|
||||
}
|
||||
|
||||
var filters = {};
|
||||
|
||||
Object.keys($scope.filters).forEach(function(key) {
|
||||
if (!$scope.filters[key]) {
|
||||
return;
|
||||
}
|
||||
filters[key] = $scope.filters[key].toLowerCase();
|
||||
});
|
||||
|
||||
return rowsToFilter.filter(matchRow.bind(null, filters));
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare two variables, returning a number that represents
|
||||
* which is larger. Similar to the default array sort
|
||||
* comparator, but does not coerce all values to string before
|
||||
* conversion. Strings are lowercased before comparison.
|
||||
*/
|
||||
function genericComparator(a, b) {
|
||||
if (typeof a === "string" && typeof b === "string") {
|
||||
a = a.toLowerCase();
|
||||
b = b.toLowerCase();
|
||||
}
|
||||
|
||||
if (a < b) {
|
||||
return -1;
|
||||
}
|
||||
if (a > b) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new array which is a result of applying the sort
|
||||
* criteria defined in $scope.
|
||||
*
|
||||
* Does not modify the array that was passed in.
|
||||
*/
|
||||
function sortRows(rowsToSort) {
|
||||
if (!$scope.sortColumn || !$scope.sortDirection) {
|
||||
return rowsToSort;
|
||||
}
|
||||
var sortKey = $scope.sortColumn,
|
||||
sortDirectionMultiplier;
|
||||
|
||||
if ($scope.sortDirection === 'asc') {
|
||||
sortDirectionMultiplier = 1;
|
||||
} else if ($scope.sortDirection === 'desc') {
|
||||
sortDirectionMultiplier = -1;
|
||||
}
|
||||
|
||||
return rowsToSort.slice(0).sort(function(a, b) {
|
||||
return genericComparator(a[sortKey], b[sortKey]) *
|
||||
sortDirectionMultiplier;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns an object which contains the largest values
|
||||
* for each key in the given set of rows. This is used to
|
||||
* pre-calculate optimal column sizes without having to render
|
||||
* every row.
|
||||
*/
|
||||
function findLargestRow(rows) {
|
||||
var largestRow = rows.reduce(function (largestRow, row) {
|
||||
Object.keys(row).forEach(function (key) {
|
||||
var currentColumnLength =
|
||||
(row[key] && row[key].length) ?
|
||||
row[key].length :
|
||||
row[key],
|
||||
largestColumnLength =
|
||||
(largestRow[key] && largestRow[key].length) ?
|
||||
largestRow[key].length :
|
||||
largestRow[key];
|
||||
|
||||
if (currentColumnLength > largestColumnLength) {
|
||||
largestRow[key] = row[key];
|
||||
}
|
||||
});
|
||||
return largestRow;
|
||||
}, JSON.parse(JSON.stringify(rows[0])));
|
||||
|
||||
// Pad with characters to accomodate variable-width fonts,
|
||||
// and remove characters that would allow word-wrapping.
|
||||
Object.keys(largestRow).forEach(function(key) {
|
||||
var padCharacters,
|
||||
i;
|
||||
|
||||
largestRow[key] = String(largestRow[key]);
|
||||
padCharacters = largestRow[key].length / 10;
|
||||
for (i = 0; i < padCharacters; i++) {
|
||||
largestRow[key] = largestRow[key] + 'W';
|
||||
}
|
||||
largestRow[key] = largestRow[key]
|
||||
.replace(/[ \-_]/g, 'W');
|
||||
});
|
||||
return largestRow;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read styles from the DOM and use them to calculate offsets
|
||||
* for individual rows.
|
||||
*/
|
||||
function setElementSizes() {
|
||||
var thead = element.find('thead'),
|
||||
tbody = element.find('tbody'),
|
||||
firstRow = tbody.find('tr'),
|
||||
column = firstRow.find('td'),
|
||||
headerHeight = thead.prop('offsetHeight'),
|
||||
rowHeight = firstRow.prop('offsetHeight'),
|
||||
overallHeight = headerHeight + (rowHeight * ($scope.displayRows ? $scope.displayRows.length - 1 : 0));
|
||||
|
||||
$scope.columnWidths = [];
|
||||
|
||||
while (column.length) {
|
||||
$scope.columnWidths.push(column.prop('offsetWidth'));
|
||||
column = column.next();
|
||||
}
|
||||
$scope.headerHeight = headerHeight;
|
||||
$scope.rowHeight = rowHeight;
|
||||
$scope.totalHeight = overallHeight;
|
||||
|
||||
$scope.visibleRows = $scope.displayRows.slice(0, maxDisplayRows).map(function(row, i) {
|
||||
return {
|
||||
rowIndex: i,
|
||||
offsetY: (i * $scope.rowHeight) + $scope.headerHeight,
|
||||
contents: row
|
||||
};
|
||||
});
|
||||
|
||||
$scope.overrideRowPositioning = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update rows with new data. If filtering is enabled, rows
|
||||
* will be sorted before display.
|
||||
*/
|
||||
function updateRows(newRows) {
|
||||
var largestRow;
|
||||
|
||||
$scope.visibleRows = [];
|
||||
$scope.displayRows = [];
|
||||
$scope.overrideRowPositioning = false;
|
||||
|
||||
if (!$scope.displayHeaders) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($scope.enableFilter) {
|
||||
$scope.displayRows = newRows = filterRows(newRows);
|
||||
}
|
||||
|
||||
if ($scope.enableSort) {
|
||||
$scope.displayRows = newRows = sortRows(newRows);
|
||||
}
|
||||
|
||||
largestRow = findLargestRow(newRows);
|
||||
|
||||
$scope.visibleRows = [
|
||||
{
|
||||
rowIndex: 0,
|
||||
offsetY: undefined,
|
||||
contents: largestRow
|
||||
}
|
||||
];
|
||||
$timeout(setElementSizes, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update table headers with new headers. If filtering is
|
||||
* enabled, reset filters. If sorting is enabled, reset
|
||||
* sorting.
|
||||
*/
|
||||
function updateHeaders(newHeaders) {
|
||||
$scope.displayHeaders = newHeaders;
|
||||
if ($scope.enableFilter) {
|
||||
$scope.filters = {};
|
||||
}
|
||||
if ($scope.enableSort) {
|
||||
$scope.sortColumn = undefined;
|
||||
$scope.sortDirection = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On scroll, calculate which rows indexes are visible and
|
||||
* ensure that an equal number of rows are preloaded for
|
||||
* scrolling in either direction.
|
||||
*/
|
||||
function onScroll(event) {
|
||||
var topScroll = event.target.scrollTop,
|
||||
bottomScroll = topScroll + event.target.offsetHeight,
|
||||
firstVisible,
|
||||
lastVisible,
|
||||
totalVisible,
|
||||
numberOffscreen,
|
||||
start,
|
||||
end;
|
||||
|
||||
if ($scope.displayRows.length < maxDisplayRows) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (topScroll < $scope.headerHeight) {
|
||||
firstVisible = 0;
|
||||
} else {
|
||||
firstVisible = Math.floor(
|
||||
(topScroll - $scope.headerHeight) / $scope.rowHeight
|
||||
);
|
||||
}
|
||||
lastVisible = Math.ceil(
|
||||
(bottomScroll - $scope.headerHeight) / $scope.rowHeight
|
||||
);
|
||||
|
||||
totalVisible = lastVisible - firstVisible;
|
||||
numberOffscreen = maxDisplayRows - totalVisible;
|
||||
start = firstVisible - Math.floor(numberOffscreen / 2);
|
||||
end = lastVisible + Math.ceil(numberOffscreen / 2);
|
||||
|
||||
if (start < 0) {
|
||||
start = 0;
|
||||
end = $scope.visibleRows.length - 1;
|
||||
} else if (end >= $scope.displayRows.length) {
|
||||
end = $scope.displayRows.length - 1;
|
||||
start = end - maxDisplayRows + 1;
|
||||
}
|
||||
if ($scope.visibleRows[0].rowIndex === start &&
|
||||
$scope.visibleRows[$scope.visibleRows.length-1]
|
||||
.rowIndex === end) {
|
||||
|
||||
return; // don't update if no changes are required.
|
||||
}
|
||||
|
||||
$scope.visibleRows = $scope.displayRows.slice(start, end)
|
||||
.map(function(row, i) {
|
||||
return {
|
||||
rowIndex: start + i,
|
||||
offsetY: ((start + i) * $scope.rowHeight) +
|
||||
$scope.headerHeight,
|
||||
contents: row
|
||||
};
|
||||
});
|
||||
|
||||
$scope.$digest();
|
||||
}
|
||||
|
||||
element.find('div').on('scroll', onScroll);
|
||||
$scope.toggleSort = function (key) {
|
||||
if (!$scope.enableSort) {
|
||||
return;
|
||||
}
|
||||
if ($scope.sortColumn !== key) {
|
||||
$scope.sortColumn = key;
|
||||
$scope.sortDirection = 'asc';
|
||||
} else if ($scope.sortDirection === 'asc') {
|
||||
$scope.sortDirection = 'desc';
|
||||
} else if ($scope.sortDirection === 'desc') {
|
||||
$scope.sortColumn = undefined;
|
||||
$scope.sortDirection = undefined;
|
||||
}
|
||||
updateRows($scope.rows);
|
||||
};
|
||||
|
||||
$scope.$watchCollection('filters', function () {
|
||||
updateRows($scope.rows);
|
||||
});
|
||||
$scope.$watch('headers', updateHeaders);
|
||||
$scope.$watch('rows', updateRows);
|
||||
}
|
||||
|
||||
return {
|
||||
restrict: "E",
|
||||
templateUrl: "platform/datatable/res/templates/mct-data-table.html",
|
||||
link: link,
|
||||
scope: {
|
||||
headers: "=",
|
||||
rows: "=",
|
||||
enableFilter: "=?",
|
||||
enableSort: "=?"
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return MCTDataTable;
|
||||
}
|
||||
);
|
||||
@@ -54,20 +54,52 @@ define(
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* A function used to check if a domain object should be cloned
|
||||
* or not.
|
||||
* @callback platform/entanglement.CopyService~filter
|
||||
* @param {DomainObject} domainObject the object to be cloned
|
||||
* @returns {boolean} true if the object should be cloned; false
|
||||
* if it should be linked
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a duplicate of the object tree starting at domainObject to
|
||||
* the new parent specified.
|
||||
* @param domainObject
|
||||
* @param parent
|
||||
* @param progress
|
||||
*
|
||||
* Any domain objects which cannot be created will not be cloned;
|
||||
* instead, these will appear as links. If a filtering function
|
||||
* is provided, any objects which fail that check will also be
|
||||
* linked instead of cloned
|
||||
*
|
||||
* @param {DomainObject} domainObject the object to duplicate
|
||||
* @param {DomainObject} parent the destination for the clone
|
||||
* @param {platform/entanglement.CopyService~filter} [filter]
|
||||
* an optional function used to filter out objects from
|
||||
* the cloning process
|
||||
* @returns a promise that will be completed with the clone of
|
||||
* domainObject when the duplication is successful.
|
||||
*/
|
||||
CopyService.prototype.perform = function (domainObject, parent) {
|
||||
var $q = this.$q,
|
||||
copyTask = new CopyTask(domainObject, parent, this.policyService, this.$q);
|
||||
CopyService.prototype.perform = function (domainObject, parent, filter) {
|
||||
var policyService = this.policyService;
|
||||
|
||||
// Combines caller-provided filter (if any) with the
|
||||
// baseline behavior of respecting creation policy.
|
||||
function filterWithPolicy(domainObject) {
|
||||
return (!filter || filter(domainObject)) &&
|
||||
policyService.allow(
|
||||
"creation",
|
||||
domainObject.getCapability("type")
|
||||
);
|
||||
}
|
||||
|
||||
if (this.validate(domainObject, parent)) {
|
||||
return copyTask.perform();
|
||||
return new CopyTask(
|
||||
domainObject,
|
||||
parent,
|
||||
filterWithPolicy,
|
||||
this.$q
|
||||
).perform();
|
||||
} else {
|
||||
throw new Error(
|
||||
"Tried to copy objects without validating first."
|
||||
|
||||
@@ -31,18 +31,21 @@ define(
|
||||
* This class encapsulates the process of copying a domain object
|
||||
* and all of its children.
|
||||
*
|
||||
* @param domainObject The object to copy
|
||||
* @param parent The new location of the cloned object tree
|
||||
* @param $q
|
||||
* @param {DomainObject} domainObject The object to copy
|
||||
* @param {DomainObject} parent The new location of the cloned object tree
|
||||
* @param {platform/entanglement.CopyService~filter} filter
|
||||
* a function used to filter out objects from
|
||||
* the cloning process
|
||||
* @param $q Angular's $q, for promises
|
||||
* @constructor
|
||||
*/
|
||||
function CopyTask (domainObject, parent, policyService, $q){
|
||||
function CopyTask (domainObject, parent, filter, $q){
|
||||
this.domainObject = domainObject;
|
||||
this.parent = parent;
|
||||
this.firstClone = undefined;
|
||||
this.$q = $q;
|
||||
this.deferred = undefined;
|
||||
this.policyService = policyService;
|
||||
this.filter = filter;
|
||||
this.persisted = 0;
|
||||
this.clones = [];
|
||||
this.idMap = {};
|
||||
@@ -101,10 +104,14 @@ define(
|
||||
* Will add a list of clones to the specified parent's composition
|
||||
*/
|
||||
function addClonesToParent(self) {
|
||||
return self.firstClone.getCapability("persistence").persist()
|
||||
.then(function(){self.parent.getCapability("composition").add(self.firstClone.getId());})
|
||||
.then(function(){return self.parent.getCapability("persistence").persist();})
|
||||
.then(function(){return self.firstClone;});
|
||||
return self.parent.getCapability("composition")
|
||||
.add(self.firstClone)
|
||||
.then(function (addedClone) {
|
||||
return self.parent.getCapability("persistence").persist()
|
||||
.then(function () {
|
||||
return addedClone;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -194,7 +201,7 @@ define(
|
||||
//Check if the type of the object being copied allows for
|
||||
// creation of new instances. If it does not, then a link to the
|
||||
// original will be created instead.
|
||||
if (this.policyService.allow("creation", originalObject.getCapability("type"))){
|
||||
if (this.filter(originalObject)) {
|
||||
//create a new clone of the original object. Use the
|
||||
// creation capability of the targetParent to create the
|
||||
// new clone. This will ensure that the correct persistence
|
||||
|
||||
@@ -162,6 +162,7 @@ define(
|
||||
'compositionCapability',
|
||||
['invoke', 'add']
|
||||
);
|
||||
compositionCapability.add.andCallFake(synchronousPromise);
|
||||
|
||||
locationCapability = jasmine.createSpyObj(
|
||||
'locationCapability',
|
||||
@@ -387,6 +388,7 @@ define(
|
||||
expect(childObjectClone.getModel().location).toEqual(objectClone.getId());
|
||||
});
|
||||
});
|
||||
|
||||
describe("when cloning non-creatable objects", function() {
|
||||
beforeEach(function () {
|
||||
policyService.allow.andCallFake(function(category){
|
||||
@@ -401,8 +403,33 @@ define(
|
||||
it ("creates link instead of clone", function() {
|
||||
var copiedObject = copyFinished.calls[0].args[0];
|
||||
expect(copiedObject).toBe(object);
|
||||
expect(compositionCapability.add).toHaveBeenCalledWith(copiedObject.getId());
|
||||
//expect(newParent.getModel().composition).toContain(copiedObject.getId());
|
||||
expect(compositionCapability.add)
|
||||
.toHaveBeenCalledWith(copiedObject);
|
||||
});
|
||||
});
|
||||
|
||||
describe("when provided a filtering function", function () {
|
||||
function accept() {
|
||||
return true;
|
||||
}
|
||||
function reject() {
|
||||
return false;
|
||||
}
|
||||
|
||||
it("does not create new instances of objects " +
|
||||
"rejected by the filter", function() {
|
||||
copyService.perform(object, newParent, reject)
|
||||
.then(copyFinished);
|
||||
expect(copyFinished.mostRecentCall.args[0])
|
||||
.toBe(object);
|
||||
});
|
||||
|
||||
it("does create new instances of objects " +
|
||||
"accepted by the filter", function() {
|
||||
copyService.perform(object, newParent, accept)
|
||||
.then(copyFinished);
|
||||
expect(copyFinished.mostRecentCall.args[0])
|
||||
.not.toBe(object);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -44,11 +44,10 @@ define(
|
||||
describe("CopyTask", function () {
|
||||
var mockDomainObject,
|
||||
mockParentObject,
|
||||
mockPolicyService,
|
||||
mockFilter,
|
||||
mockQ,
|
||||
mockDeferred,
|
||||
testModel,
|
||||
mockCallback,
|
||||
counter,
|
||||
cloneIds,
|
||||
task;
|
||||
@@ -119,17 +118,14 @@ define(
|
||||
mockParentObject = domainObjectFactory({
|
||||
capabilities: makeMockCapabilities()
|
||||
});
|
||||
mockPolicyService = jasmine.createSpyObj(
|
||||
'policyService',
|
||||
[ 'allow' ]
|
||||
);
|
||||
mockFilter = jasmine.createSpy('filter');
|
||||
mockQ = jasmine.createSpyObj('$q', ['when', 'defer', 'all']);
|
||||
mockDeferred = jasmine.createSpyObj(
|
||||
'deferred',
|
||||
[ 'notify', 'resolve', 'reject' ]
|
||||
);
|
||||
|
||||
mockPolicyService.allow.andReturn(true);
|
||||
mockFilter.andReturn(true);
|
||||
|
||||
mockQ.when.andCallFake(synchronousPromise);
|
||||
mockQ.defer.andReturn(mockDeferred);
|
||||
@@ -156,7 +152,7 @@ define(
|
||||
task = new CopyTask(
|
||||
mockDomainObject,
|
||||
mockParentObject,
|
||||
mockPolicyService,
|
||||
mockFilter,
|
||||
mockQ
|
||||
);
|
||||
|
||||
@@ -218,7 +214,7 @@ define(
|
||||
task = new CopyTask(
|
||||
mockComposingObject,
|
||||
mockParentObject,
|
||||
mockPolicyService,
|
||||
mockFilter,
|
||||
mockQ
|
||||
);
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
[
|
||||
"actions/AbstractComposeAction",
|
||||
"actions/CopyAction",
|
||||
"actions/GoToOriginalAction",
|
||||
"actions/LinkAction",
|
||||
"actions/MoveAction",
|
||||
"actions/SetPrimaryLocationAction",
|
||||
"policies/CrossSpacePolicy",
|
||||
"services/CopyService",
|
||||
"services/CopyTask",
|
||||
"services/LinkService",
|
||||
"services/MoveService",
|
||||
"services/LocationService",
|
||||
"services/LocatingCreationDecorator",
|
||||
"services/LocatingObjectDecorator",
|
||||
"capabilities/LocationCapability"
|
||||
]
|
||||
@@ -1,3 +0,0 @@
|
||||
[
|
||||
"WorkerService"
|
||||
]
|
||||
@@ -1,482 +0,0 @@
|
||||
/*! Moment Duration Format v1.3.0
|
||||
* https://github.com/jsmreese/moment-duration-format
|
||||
* Date: 2014-07-15
|
||||
*
|
||||
* Duration format plugin function for the Moment.js library
|
||||
* http://momentjs.com/
|
||||
*
|
||||
* Copyright 2014 John Madhavan-Reese
|
||||
* Released under the MIT license
|
||||
*/
|
||||
|
||||
(function (root, undefined) {
|
||||
|
||||
// repeatZero(qty)
|
||||
// returns "0" repeated qty times
|
||||
function repeatZero(qty) {
|
||||
var result = "";
|
||||
|
||||
// exit early
|
||||
// if qty is 0 or a negative number
|
||||
// or doesn't coerce to an integer
|
||||
qty = parseInt(qty, 10);
|
||||
if (!qty || qty < 1) { return result; }
|
||||
|
||||
while (qty) {
|
||||
result += "0";
|
||||
qty -= 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// padZero(str, len [, isRight])
|
||||
// pads a string with zeros up to a specified length
|
||||
// will not pad a string if its length is aready
|
||||
// greater than or equal to the specified length
|
||||
// default output pads with zeros on the left
|
||||
// set isRight to `true` to pad with zeros on the right
|
||||
function padZero(str, len, isRight) {
|
||||
if (str == null) { str = ""; }
|
||||
str = "" + str;
|
||||
|
||||
return (isRight ? str : "") + repeatZero(len - str.length) + (isRight ? "" : str);
|
||||
}
|
||||
|
||||
// isArray
|
||||
function isArray(array) {
|
||||
return Object.prototype.toString.call(array) === "[object Array]";
|
||||
}
|
||||
|
||||
// isObject
|
||||
function isObject(obj) {
|
||||
return Object.prototype.toString.call(obj) === "[object Object]";
|
||||
}
|
||||
|
||||
// findLast
|
||||
function findLast(array, callback) {
|
||||
var index = array.length;
|
||||
|
||||
while (index -= 1) {
|
||||
if (callback(array[index])) { return array[index]; }
|
||||
}
|
||||
}
|
||||
|
||||
// find
|
||||
function find(array, callback) {
|
||||
var index = 0,
|
||||
max = array.length,
|
||||
match;
|
||||
|
||||
if (typeof callback !== "function") {
|
||||
match = callback;
|
||||
callback = function (item) {
|
||||
return item === match;
|
||||
};
|
||||
}
|
||||
|
||||
while (index < max) {
|
||||
if (callback(array[index])) { return array[index]; }
|
||||
index += 1;
|
||||
}
|
||||
}
|
||||
|
||||
// each
|
||||
function each(array, callback) {
|
||||
var index = 0,
|
||||
max = array.length;
|
||||
|
||||
if (!array || !max) { return; }
|
||||
|
||||
while (index < max) {
|
||||
if (callback(array[index], index) === false) { return; }
|
||||
index += 1;
|
||||
}
|
||||
}
|
||||
|
||||
// map
|
||||
function map(array, callback) {
|
||||
var index = 0,
|
||||
max = array.length,
|
||||
ret = [];
|
||||
|
||||
if (!array || !max) { return ret; }
|
||||
|
||||
while (index < max) {
|
||||
ret[index] = callback(array[index], index);
|
||||
index += 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// pluck
|
||||
function pluck(array, prop) {
|
||||
return map(array, function (item) {
|
||||
return item[prop];
|
||||
});
|
||||
}
|
||||
|
||||
// compact
|
||||
function compact(array) {
|
||||
var ret = [];
|
||||
|
||||
each(array, function (item) {
|
||||
if (item) { ret.push(item); }
|
||||
});
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// unique
|
||||
function unique(array) {
|
||||
var ret = [];
|
||||
|
||||
each(array, function (_a) {
|
||||
if (!find(ret, _a)) { ret.push(_a); }
|
||||
});
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// intersection
|
||||
function intersection(a, b) {
|
||||
var ret = [];
|
||||
|
||||
each(a, function (_a) {
|
||||
each(b, function (_b) {
|
||||
if (_a === _b) { ret.push(_a); }
|
||||
});
|
||||
});
|
||||
|
||||
return unique(ret);
|
||||
}
|
||||
|
||||
// rest
|
||||
function rest(array, callback) {
|
||||
var ret = [];
|
||||
|
||||
each(array, function (item, index) {
|
||||
if (!callback(item)) {
|
||||
ret = array.slice(index);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// initial
|
||||
function initial(array, callback) {
|
||||
var reversed = array.slice().reverse();
|
||||
|
||||
return rest(reversed, callback).reverse();
|
||||
}
|
||||
|
||||
// extend
|
||||
function extend(a, b) {
|
||||
for (var key in b) {
|
||||
if (b.hasOwnProperty(key)) { a[key] = b[key]; }
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
// define internal moment reference
|
||||
var moment;
|
||||
|
||||
if (typeof require === "function") {
|
||||
try { moment = require('moment'); }
|
||||
catch (e) {}
|
||||
}
|
||||
|
||||
if (!moment && root.moment) {
|
||||
moment = root.moment;
|
||||
}
|
||||
|
||||
if (!moment) {
|
||||
throw "Moment Duration Format cannot find Moment.js";
|
||||
}
|
||||
|
||||
// moment.duration.format([template] [, precision] [, settings])
|
||||
moment.duration.fn.format = function () {
|
||||
|
||||
var tokenizer, tokens, types, typeMap, momentTypes, foundFirst, trimIndex,
|
||||
args = [].slice.call(arguments),
|
||||
settings = extend({}, this.format.defaults),
|
||||
// keep a shadow copy of this moment for calculating remainders
|
||||
remainder = moment.duration(this);
|
||||
|
||||
// add a reference to this duration object to the settings for use
|
||||
// in a template function
|
||||
settings.duration = this;
|
||||
|
||||
// parse arguments
|
||||
each(args, function (arg) {
|
||||
if (typeof arg === "string" || typeof arg === "function") {
|
||||
settings.template = arg;
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof arg === "number") {
|
||||
settings.precision = arg;
|
||||
return;
|
||||
}
|
||||
|
||||
if (isObject(arg)) {
|
||||
extend(settings, arg);
|
||||
}
|
||||
});
|
||||
|
||||
// types
|
||||
types = settings.types = (isArray(settings.types) ? settings.types : settings.types.split(" "));
|
||||
|
||||
// template
|
||||
if (typeof settings.template === "function") {
|
||||
settings.template = settings.template.apply(settings);
|
||||
}
|
||||
|
||||
// tokenizer regexp
|
||||
tokenizer = new RegExp(map(types, function (type) {
|
||||
return settings[type].source;
|
||||
}).join("|"), "g");
|
||||
|
||||
// token type map function
|
||||
typeMap = function (token) {
|
||||
return find(types, function (type) {
|
||||
return settings[type].test(token);
|
||||
});
|
||||
};
|
||||
|
||||
// tokens array
|
||||
tokens = map(settings.template.match(tokenizer), function (token, index) {
|
||||
var type = typeMap(token),
|
||||
length = token.length;
|
||||
|
||||
return {
|
||||
index: index,
|
||||
length: length,
|
||||
|
||||
// replace escaped tokens with the non-escaped token text
|
||||
token: (type === "escape" ? token.replace(settings.escape, "$1") : token),
|
||||
|
||||
// ignore type on non-moment tokens
|
||||
type: ((type === "escape" || type === "general") ? null : type)
|
||||
|
||||
// calculate base value for all moment tokens
|
||||
//baseValue: ((type === "escape" || type === "general") ? null : this.as(type))
|
||||
};
|
||||
}, this);
|
||||
|
||||
// unique moment token types in the template (in order of descending magnitude)
|
||||
momentTypes = intersection(types, unique(compact(pluck(tokens, "type"))));
|
||||
|
||||
// exit early if there are no momentTypes
|
||||
if (!momentTypes.length) {
|
||||
return pluck(tokens, "token").join("");
|
||||
}
|
||||
|
||||
// calculate values for each token type in the template
|
||||
each(momentTypes, function (momentType, index) {
|
||||
var value, wholeValue, decimalValue, isLeast, isMost;
|
||||
|
||||
// calculate integer and decimal value portions
|
||||
value = remainder.as(momentType);
|
||||
wholeValue = (value > 0 ? Math.floor(value) : Math.ceil(value));
|
||||
decimalValue = value - wholeValue;
|
||||
|
||||
// is this the least-significant moment token found?
|
||||
isLeast = ((index + 1) === momentTypes.length);
|
||||
|
||||
// is this the most-significant moment token found?
|
||||
isMost = (!index);
|
||||
|
||||
// update tokens array
|
||||
// using this algorithm to not assume anything about
|
||||
// the order or frequency of any tokens
|
||||
each(tokens, function (token) {
|
||||
if (token.type === momentType) {
|
||||
extend(token, {
|
||||
value: value,
|
||||
wholeValue: wholeValue,
|
||||
decimalValue: decimalValue,
|
||||
isLeast: isLeast,
|
||||
isMost: isMost
|
||||
});
|
||||
|
||||
if (isMost) {
|
||||
// note the length of the most-significant moment token:
|
||||
// if it is greater than one and forceLength is not set, default forceLength to `true`
|
||||
if (settings.forceLength == null && token.length > 1) {
|
||||
settings.forceLength = true;
|
||||
}
|
||||
|
||||
// rationale is this:
|
||||
// if the template is "h:mm:ss" and the moment value is 5 minutes, the user-friendly output is "5:00", not "05:00"
|
||||
// shouldn't pad the `minutes` token even though it has length of two
|
||||
// if the template is "hh:mm:ss", the user clearly wanted everything padded so we should output "05:00"
|
||||
// if the user wanted the full padded output, they can set `{ trim: false }` to get "00:05:00"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// update remainder
|
||||
remainder.subtract(wholeValue, momentType);
|
||||
});
|
||||
|
||||
// trim tokens array
|
||||
if (settings.trim) {
|
||||
tokens = (settings.trim === "left" ? rest : initial)(tokens, function (token) {
|
||||
// return `true` if:
|
||||
// the token is not the least moment token (don't trim the least moment token)
|
||||
// the token is a moment token that does not have a value (don't trim moment tokens that have a whole value)
|
||||
return !(token.isLeast || (token.type != null && token.wholeValue));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// build output
|
||||
|
||||
// the first moment token can have special handling
|
||||
foundFirst = false;
|
||||
|
||||
// run the map in reverse order if trimming from the right
|
||||
if (settings.trim === "right") {
|
||||
tokens.reverse();
|
||||
}
|
||||
|
||||
tokens = map(tokens, function (token) {
|
||||
var val,
|
||||
decVal;
|
||||
|
||||
if (!token.type) {
|
||||
// if it is not a moment token, use the token as its own value
|
||||
return token.token;
|
||||
}
|
||||
|
||||
// apply negative precision formatting to the least-significant moment token
|
||||
if (token.isLeast && (settings.precision < 0)) {
|
||||
val = (Math.floor(token.wholeValue * Math.pow(10, settings.precision)) * Math.pow(10, -settings.precision)).toString();
|
||||
} else {
|
||||
val = token.wholeValue.toString();
|
||||
}
|
||||
|
||||
// remove negative sign from the beginning
|
||||
val = val.replace(/^\-/, "");
|
||||
|
||||
// apply token length formatting
|
||||
// special handling for the first moment token that is not the most significant in a trimmed template
|
||||
if (token.length > 1 && (foundFirst || token.isMost || settings.forceLength)) {
|
||||
val = padZero(val, token.length);
|
||||
}
|
||||
|
||||
// add decimal value if precision > 0
|
||||
if (token.isLeast && (settings.precision > 0)) {
|
||||
decVal = token.decimalValue.toString().replace(/^\-/, "").split(/\.|e\-/);
|
||||
switch (decVal.length) {
|
||||
case 1:
|
||||
val += "." + padZero(decVal[0], settings.precision, true).slice(0, settings.precision);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
val += "." + padZero(decVal[1], settings.precision, true).slice(0, settings.precision);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
val += "." + padZero(repeatZero((+decVal[2]) - 1) + (decVal[0] || "0") + decVal[1], settings.precision, true).slice(0, settings.precision);
|
||||
break;
|
||||
|
||||
default:
|
||||
throw "Moment Duration Format: unable to parse token decimal value.";
|
||||
}
|
||||
}
|
||||
|
||||
// add a negative sign if the value is negative and token is most significant
|
||||
if (token.isMost && token.value < 0) {
|
||||
val = "-" + val;
|
||||
}
|
||||
|
||||
foundFirst = true;
|
||||
|
||||
return val;
|
||||
});
|
||||
|
||||
// undo the reverse if trimming from the right
|
||||
if (settings.trim === "right") {
|
||||
tokens.reverse();
|
||||
}
|
||||
|
||||
return tokens.join("");
|
||||
};
|
||||
|
||||
moment.duration.fn.format.defaults = {
|
||||
// token definitions
|
||||
escape: /\[(.+?)\]/,
|
||||
years: /[Yy]+/,
|
||||
months: /M+/,
|
||||
weeks: /[Ww]+/,
|
||||
days: /[Dd]+/,
|
||||
hours: /[Hh]+/,
|
||||
minutes: /m+/,
|
||||
seconds: /s+/,
|
||||
milliseconds: /S+/,
|
||||
general: /.+?/,
|
||||
|
||||
// token type names
|
||||
// in order of descending magnitude
|
||||
// can be a space-separated token name list or an array of token names
|
||||
types: "escape years months weeks days hours minutes seconds milliseconds general",
|
||||
|
||||
// format options
|
||||
|
||||
// trim
|
||||
// "left" - template tokens are trimmed from the left until the first moment token that has a value >= 1
|
||||
// "right" - template tokens are trimmed from the right until the first moment token that has a value >= 1
|
||||
// (the final moment token is not trimmed, regardless of value)
|
||||
// `false` - template tokens are not trimmed
|
||||
trim: "left",
|
||||
|
||||
// precision
|
||||
// number of decimal digits to include after (to the right of) the decimal point (positive integer)
|
||||
// or the number of digits to truncate to 0 before (to the left of) the decimal point (negative integer)
|
||||
precision: 0,
|
||||
|
||||
// force first moment token with a value to render at full length even when template is trimmed and first moment token has length of 1
|
||||
forceLength: null,
|
||||
|
||||
// template used to format duration
|
||||
// may be a function or a string
|
||||
// template functions are executed with the `this` binding of the settings object
|
||||
// so that template strings may be dynamically generated based on the duration object
|
||||
// (accessible via `this.duration`)
|
||||
// or any of the other settings
|
||||
template: function () {
|
||||
var types = this.types,
|
||||
dur = this.duration,
|
||||
lastType = findLast(types, function (type) {
|
||||
return dur._data[type];
|
||||
});
|
||||
|
||||
// default template strings for each duration dimension type
|
||||
switch (lastType) {
|
||||
case "seconds":
|
||||
return "h:mm:ss";
|
||||
case "minutes":
|
||||
return "d[d] h:mm";
|
||||
case "hours":
|
||||
return "d[d] h[h]";
|
||||
case "days":
|
||||
return "M[m] d[d]";
|
||||
case "weeks":
|
||||
return "y[y] w[w]";
|
||||
case "months":
|
||||
return "y[y] M[m]";
|
||||
case "years":
|
||||
return "y[y]";
|
||||
default:
|
||||
return "y[y] M[m] d[d] h:mm:ss";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
})(this);
|
||||
@@ -21,16 +21,8 @@
|
||||
*****************************************************************************/
|
||||
/*global define,requirejs*/
|
||||
|
||||
requirejs.config({
|
||||
shim: {
|
||||
'platform/features/clock/lib/moment-duration-format': {
|
||||
deps: [ 'moment' ]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
define(
|
||||
['moment', '../../lib/moment-duration-format'],
|
||||
['moment', 'moment-duration-format'],
|
||||
function (moment) {
|
||||
"use strict";
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
[
|
||||
"actions/AbstractStartTimerAction",
|
||||
"actions/RestartTimerAction",
|
||||
"actions/StartTimerAction",
|
||||
"controllers/ClockController",
|
||||
"controllers/RefreshingController",
|
||||
"controllers/TimerController",
|
||||
"controllers/TimerFormatter",
|
||||
"indicators/ClockIndicator",
|
||||
"services/TickerService"
|
||||
]
|
||||
@@ -1,6 +0,0 @@
|
||||
[
|
||||
"ConductorRepresenter",
|
||||
"ConductorService",
|
||||
"ConductorTelemetryDecorator",
|
||||
"TimeConductor"
|
||||
]
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
"DomainColumn",
|
||||
"EventListController",
|
||||
"EventListPopulator",
|
||||
"policies/MessagesViewPolicy",
|
||||
"RangeColumn"
|
||||
]
|
||||
@@ -1,5 +0,0 @@
|
||||
[
|
||||
"controllers/ImageryController",
|
||||
"directives/MCTBackgroundImage",
|
||||
"policies/ImageryViewPolicy"
|
||||
]
|
||||
@@ -1,17 +0,0 @@
|
||||
[
|
||||
"FixedController",
|
||||
"FixedDragHandle",
|
||||
"FixedProxy",
|
||||
"LayoutCompositionPolicy",
|
||||
"LayoutController",
|
||||
"LayoutDrag",
|
||||
"elements/AccessorMutator",
|
||||
"elements/BoxProxy",
|
||||
"elements/ElementFactory",
|
||||
"elements/ElementProxies",
|
||||
"elements/ElementProxy",
|
||||
"elements/LineProxy",
|
||||
"elements/ResizeHandle",
|
||||
"elements/TelemetryProxy",
|
||||
"elements/TextProxy"
|
||||
]
|
||||
@@ -1,3 +0,0 @@
|
||||
[
|
||||
"EmbeddedPageController"
|
||||
]
|
||||
@@ -47,7 +47,7 @@
|
||||
<div ng-repeat="tick in subplot.getRangeTicks()"
|
||||
class="gl-plot-tick gl-plot-y-tick-label"
|
||||
ng-style="{ bottom: (100 * $index / (subplot.getRangeTicks().length - 1)) + '%' }">
|
||||
{{tick.label}}
|
||||
{{tick.label | reverse}}
|
||||
</div>
|
||||
<div class="gl-plot-y-options gl-plot-local-controls"
|
||||
ng-if="axes[1].options.length > 1">
|
||||
@@ -61,7 +61,8 @@
|
||||
</div>
|
||||
<div class="gl-plot-display-area"
|
||||
ng-mouseenter="subplot.isHovering(true);"
|
||||
ng-mouseleave="subplot.isHovering(false)">
|
||||
ng-mouseleave="subplot.isHovering(false)"
|
||||
ng-class="{ loading: plot.isRequestPending() }">
|
||||
<!-- Out-of-bounds data indicators -->
|
||||
<!-- ng-show is temporarily hard-coded in next element -->
|
||||
<div ng-show="false" class="l-oob-data l-oob-data-up"></div>
|
||||
@@ -118,15 +119,13 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="t-wait-spinner loading" ng-show="plot.isRequestPending()">
|
||||
</span>
|
||||
</div>
|
||||
<div ng-if="$last" class="gl-plot-axis-area gl-plot-x">
|
||||
<div ng-repeat="tick in subplot.getDomainTicks()"
|
||||
class="gl-plot-tick gl-plot-x-tick-label"
|
||||
ng-show="$index > 0 && $index < (subplot.getDomainTicks().length - 1)"
|
||||
ng-style="{ left: (100 * $index / (subplot.getDomainTicks().length - 1)) + '%' }">
|
||||
{{tick.label}}
|
||||
{{tick.label | reverse}}
|
||||
</div>
|
||||
<div class="gl-plot-label gl-plot-x-label">
|
||||
{{axes[0].active.name}}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
[
|
||||
"Canvas2DChart",
|
||||
"GLChart",
|
||||
"MCTChart",
|
||||
"PlotController",
|
||||
"SubPlot",
|
||||
"SubPlotFactory",
|
||||
"elements/PlotAxis",
|
||||
"elements/PlotLimitTracker",
|
||||
"elements/PlotLine",
|
||||
"elements/PlotLineBuffer",
|
||||
"elements/PlotPalette",
|
||||
"elements/PlotPanZoomStack",
|
||||
"elements/PlotPanZoomStackGroup",
|
||||
"elements/PlotPosition",
|
||||
"elements/PlotPreparer",
|
||||
"elements/PlotSeriesWindow",
|
||||
"elements/PlotTelemetryFormatter",
|
||||
"elements/PlotTickGenerator",
|
||||
"elements/PlotUpdater",
|
||||
"modes/PlotModeOptions",
|
||||
"modes/PlotOverlayMode",
|
||||
"modes/PlotStackMode",
|
||||
"policies/PlotViewPolicy"
|
||||
]
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
[
|
||||
"DomainColumn",
|
||||
"policies/RTMessagesViewPolicy",
|
||||
"RangeColumn",
|
||||
"RTEventListController"
|
||||
]
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
"DomainColumn",
|
||||
"NameColumn",
|
||||
"RangeColumn",
|
||||
"ScrollingListController",
|
||||
"ScrollingListPopulator"
|
||||
]
|
||||
@@ -142,11 +142,13 @@
|
||||
right: 0;
|
||||
left: auto; }
|
||||
|
||||
/* line 58, ../sass/_activities.scss */
|
||||
.edit-mode .s-timeline-gantt .handle {
|
||||
/* line 59, ../sass/_activities.scss */
|
||||
.edit-mode .s-timeline-gantt .handle,
|
||||
.s-status-editing .s-timeline-gantt .handle {
|
||||
cursor: col-resize; }
|
||||
/* line 60, ../sass/_activities.scss */
|
||||
.edit-mode .s-timeline-gantt .handle.mid {
|
||||
/* line 61, ../sass/_activities.scss */
|
||||
.edit-mode .s-timeline-gantt .handle.mid,
|
||||
.s-status-editing .s-timeline-gantt .handle.mid {
|
||||
cursor: ew-resize; }
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -527,24 +529,39 @@
|
||||
/* line 257, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .l-cols .l-col.l-title {
|
||||
width: 250px; }
|
||||
/* line 261, ../sass/_timelines.scss */
|
||||
/* line 259, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .l-cols .l-col.l-title .rep-object-label[draggable="true"] {
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
-moz-transition: background-color 0.25s;
|
||||
-o-transition: background-color 0.25s;
|
||||
-webkit-transition: background-color 0.25s;
|
||||
transition: background-color 0.25s;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
padding: 0 3px; }
|
||||
/* line 265, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .l-cols .l-col.l-title .rep-object-label[draggable="true"]:hover {
|
||||
background-color: rgba(153, 153, 153, 0.1); }
|
||||
/* line 271, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .l-cols .l-col.l-start, .l-timeline-holder .l-cols .l-col.l-end, .l-timeline-holder .l-cols .l-col.l-duration {
|
||||
width: 110px; }
|
||||
/* line 267, ../sass/_timelines.scss */
|
||||
/* line 277, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .l-cols .l-col.l-activity-modes {
|
||||
display: none;
|
||||
width: 250px; }
|
||||
/* line 275, ../sass/_timelines.scss */
|
||||
/* line 285, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .s-timeline-tabular .l-header .l-cols {
|
||||
top: 5px;
|
||||
bottom: 5px; }
|
||||
/* line 281, ../sass/_timelines.scss */
|
||||
/* line 291, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .s-timeline-tabular .l-pane-l .l-cols {
|
||||
left: 5px; }
|
||||
/* line 287, ../sass/_timelines.scss */
|
||||
/* line 297, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .splitter {
|
||||
top: 0; }
|
||||
/* line 293, ../sass/_timelines.scss */
|
||||
/* line 303, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .l-ticks,
|
||||
.l-timeline-holder .l-subticks {
|
||||
overflow: hidden;
|
||||
@@ -557,9 +574,9 @@
|
||||
height: auto;
|
||||
top: auto;
|
||||
bottom: 3px; }
|
||||
/* line 299, ../sass/_timelines.scss */
|
||||
/* line 309, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .l-ticks {
|
||||
height: 10px; }
|
||||
/* line 303, ../sass/_timelines.scss */
|
||||
/* line 313, ../sass/_timelines.scss */
|
||||
.l-timeline-holder .l-subticks {
|
||||
height: 5px; }
|
||||
|
||||
@@ -256,6 +256,16 @@
|
||||
|
||||
&.l-title {
|
||||
width: $timelineColTitleW;
|
||||
.rep-object-label[draggable="true"] {
|
||||
@include border-radius($basicCr);
|
||||
@include single-transition(background-color, 0.25s);
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
padding: 0 $interiorMarginSm;
|
||||
&:hover {
|
||||
background-color: $colorItemTreeHoverBg;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.l-start,
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
ng-style="{ 'margin-left': 15 * ngModel.depth + 'px' }">
|
||||
<mct-representation key="'label'"
|
||||
mct-object="ngModel.domainObject"
|
||||
class="rep-object-label"
|
||||
mct-swimlane-drag="ngModel">
|
||||
</mct-representation>
|
||||
</span>
|
||||
|
||||
@@ -39,7 +39,7 @@ define(
|
||||
function populateActionMap(domainObject) {
|
||||
var actionCapability = domainObject.getCapability('action'),
|
||||
actions = actionCapability ?
|
||||
actionCapability.getActions('create') : [];
|
||||
actionCapability.getActions('add') : [];
|
||||
actions.forEach(function (action) {
|
||||
actionMap[action.getMetadata().type] = action;
|
||||
});
|
||||
|
||||
@@ -85,6 +85,7 @@ define(
|
||||
);
|
||||
|
||||
if (id) {
|
||||
event.stopPropagation();
|
||||
// Delegate the drop to the swimlane itself
|
||||
swimlane.drop(id, (draggedSwimlane || {}).domainObject);
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ define(
|
||||
expect(mockDomainObject.getCapability)
|
||||
.toHaveBeenCalledWith('action');
|
||||
expect(mockActionCapability.getActions)
|
||||
.toHaveBeenCalledWith('create');
|
||||
.toHaveBeenCalledWith('add');
|
||||
});
|
||||
|
||||
it("invokes the action on the selection, if any", function () {
|
||||
|
||||
@@ -87,7 +87,8 @@ define(
|
||||
testEvent = {
|
||||
pageY: TEST_TOP + TEST_HEIGHT / 10,
|
||||
dataTransfer: { getData: jasmine.createSpy() },
|
||||
preventDefault: jasmine.createSpy()
|
||||
preventDefault: jasmine.createSpy(),
|
||||
stopPropagation: jasmine.createSpy()
|
||||
};
|
||||
|
||||
testEvent.dataTransfer.getData.andReturn('abc');
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
[
|
||||
"TimelineConstants",
|
||||
"TimelineFormatter",
|
||||
|
||||
"capabilities/ActivityTimespan",
|
||||
"capabilities/ActivityTimespanCapability",
|
||||
"capabilities/ActivityUtilization",
|
||||
"capabilities/CostCapability",
|
||||
"capabilities/GraphCapability",
|
||||
"capabilities/CumulativeGraph",
|
||||
"capabilities/ResourceGraph",
|
||||
"capabilities/TimelineTimespan",
|
||||
"capabilities/TimelineTimespanCapability",
|
||||
"capabilities/TimelineUtilization",
|
||||
"capabilities/UtilizationCapability",
|
||||
|
||||
"controllers/ActivityModeValuesController",
|
||||
"controllers/TimelineController",
|
||||
"controllers/TimelineGanttController",
|
||||
"controllers/TimelineGraphController",
|
||||
"controllers/TimelineTableController",
|
||||
"controllers/TimelineTickController",
|
||||
"controllers/TimelineZoomController",
|
||||
"controllers/TimelineDateTimeController",
|
||||
|
||||
"controllers/drag/TimelineDragHandler",
|
||||
"controllers/drag/TimelineDragHandleFactory",
|
||||
"controllers/drag/TimelineDragPopulator",
|
||||
"controllers/drag/TimelineSnapHandler",
|
||||
"controllers/drag/TimelineStartHandle",
|
||||
"controllers/drag/TimelineMoveHandle",
|
||||
"controllers/drag/TimelineEndHandle",
|
||||
|
||||
"controllers/graph/TimelineGraph",
|
||||
"controllers/graph/TimelineGraphPopulator",
|
||||
"controllers/graph/TimelineGraphRenderer",
|
||||
|
||||
"controllers/swimlane/TimelineColorAssigner",
|
||||
"controllers/swimlane/TimelineProxy",
|
||||
"controllers/swimlane/TimelineSwimlane",
|
||||
"controllers/swimlane/TimelineSwimlaneDecorator",
|
||||
"controllers/swimlane/TimelineSwimlaneDropHandler",
|
||||
"controllers/swimlane/TimelineSwimlanePopulator",
|
||||
|
||||
"directives/SwimlaneDragConstants",
|
||||
"directives/MCTSwimlaneDrag",
|
||||
"directives/MCTSwimlaneDrop",
|
||||
|
||||
"services/ObjectLoader"
|
||||
]
|
||||
6
platform/forms/lib/moment.min.js
vendored
6
platform/forms/lib/moment.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -22,8 +22,8 @@
|
||||
/*global define,moment*/
|
||||
|
||||
define(
|
||||
["../../lib/moment.min"],
|
||||
function () {
|
||||
["moment"],
|
||||
function (moment) {
|
||||
"use strict";
|
||||
|
||||
var DATE_FORMAT = "YYYY-MM-DD";
|
||||
|
||||
@@ -26,7 +26,7 @@ define(
|
||||
function (DateTimeController) {
|
||||
"use strict";
|
||||
|
||||
describe("The date-time directive", function () {
|
||||
describe("The date-time controller", function () {
|
||||
var mockScope,
|
||||
controller;
|
||||
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
[
|
||||
"MCTControl",
|
||||
"MCTForm",
|
||||
"controllers/ColorController",
|
||||
"controllers/CompositeController",
|
||||
"controllers/DateTimeController",
|
||||
"controllers/DialogButtonController",
|
||||
"controllers/FormController"
|
||||
]
|
||||
@@ -68,7 +68,7 @@ define([
|
||||
},
|
||||
{
|
||||
"name": "RequireJS",
|
||||
"version": "2.1.9",
|
||||
"version": "2.1.22",
|
||||
"description": "Script loader",
|
||||
"author": "The Dojo Foundation",
|
||||
"website": "http://requirejs.org/",
|
||||
@@ -78,27 +78,27 @@ define([
|
||||
},
|
||||
{
|
||||
"name": "AngularJS",
|
||||
"version": "1.2.26",
|
||||
"version": "1.4.4",
|
||||
"description": "Client-side web application framework",
|
||||
"author": "Google",
|
||||
"website": "http://angularjs.org/",
|
||||
"copyright": "Copyright (c) 2010-2014 Google, Inc. http://angularjs.org",
|
||||
"copyright": "Copyright (c) 2010-2015 Google, Inc. http://angularjs.org",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/angular/angular.js/blob/v1.2.26/LICENSE"
|
||||
"link": "https://github.com/angular/angular.js/blob/v1.4.4/LICENSE"
|
||||
},
|
||||
{
|
||||
"name": "Angular-Route",
|
||||
"version": "1.2.26",
|
||||
"version": "1.4.4",
|
||||
"description": "Client-side view routing",
|
||||
"author": "Google",
|
||||
"website": "http://angularjs.org/",
|
||||
"copyright": "Copyright (c) 2010-2014 Google, Inc. http://angularjs.org",
|
||||
"copyright": "Copyright (c) 2010-2015 Google, Inc. http://angularjs.org",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/angular/angular.js/blob/v1.2.26/LICENSE"
|
||||
"link": "https://github.com/angular/angular.js/blob/v1.4.4/LICENSE"
|
||||
},
|
||||
{
|
||||
"name": "ES6-Promise",
|
||||
"version": "2.0.0",
|
||||
"version": "3.0.2",
|
||||
"description": "Promise polyfill for pre-ECMAScript 6 browsers",
|
||||
"author": "Yehuda Katz, Tom Dale, Stefan Penner and contributors",
|
||||
"website": "https://github.com/jakearchibald/es6-promise",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user