diff --git a/platform/commonUI/browse/bundle.json b/platform/commonUI/browse/bundle.json
new file mode 100644
index 0000000000..fedf8a8f79
--- /dev/null
+++ b/platform/commonUI/browse/bundle.json
@@ -0,0 +1,126 @@
+{
+ "extensions": {
+ "routes": [
+ {
+ "when": "/browse",
+ "templateUrl": "templates/browse.html"
+ },
+ {
+ "when": "",
+ "templateUrl": "templates/browse.html"
+ }
+ ],
+ "controllers": [
+ {
+ "key": "BrowseController",
+ "implementation": "BrowseController.js",
+ "depends": [ "$scope", "objectService", "navigationService" ]
+ },
+ {
+ "key": "ViewSwitcherController",
+ "implementation": "ViewSwitcherController.js",
+ "depends": [ "$scope" ]
+ },
+ {
+ "key": "CreateButtonController",
+ "implementation": "creation/CreateButtonController",
+ "depends": [ "$scope", "$document" ]
+ },
+ {
+ "key": "CreateMenuController",
+ "implementation": "creation/CreateMenuController",
+ "depends": [ "$scope" ]
+ }
+ ],
+ "templates": [
+ {
+ "key": "topbar-browse",
+ "templateUrl": "templates/topbar-browse.html"
+ }
+ ],
+ "representations": [
+ {
+ "key": "browse-object",
+ "templateUrl": "templates/browse-object.html",
+ "uses": [ "view" ]
+ },
+ {
+ "key": "create-button",
+ "templateUrl": "templates/create-button.html"
+ },
+ {
+ "key": "create-menu",
+ "templateUrl": "templates/create-menu.html",
+ "uses": [ "action" ]
+ },
+ {
+ "key": "grid-item",
+ "templateUrl": "templates/items/grid-item.html",
+ "uses": [ "type", "action" ]
+ },
+ {
+ "key": "object-header",
+ "templateUrl": "templates/browse/object-header.html",
+ "uses": [ "type" ]
+ }
+ ],
+ "services": [
+ {
+ "key": "navigationService",
+ "implementation": "navigation/NavigationService.js"
+ },
+ {
+ "key": "creationService",
+ "implementation": "creation/CreationService.js",
+ "depends": [ "persistenceService", "uuidService", "$q", "$log" ]
+ },
+ {
+ "key": "uuidService",
+ "implementation": "creation/UUIDService.js"
+ }
+ ],
+ "actions": [
+ {
+ "key": "navigate",
+ "implementation": "navigation/NavigateAction.js",
+ "depends": [ "navigationService" ]
+ },
+ {
+ "key": "window",
+ "implementation": "windowing/NewWindowAction.js",
+ "description": "Open this object in a new window.",
+ "category": "view-control",
+ "depends": [ "$window" ],
+ "group": "windowing",
+ "glyph": "y"
+ },
+ {
+ "key": "fullscreen",
+ "implementation": "windowing/FullscreenAction.js",
+ "category": "view-control",
+ "group": "windowing",
+ "glyph": "z"
+ }
+ ],
+ "views": [
+ {
+ "key": "items",
+ "name": "Items",
+ "glyph": "i",
+ "description": "Grid of available items.",
+ "templateUrl": "templates/items/items.html",
+ "uses": [ "composition" ],
+ "gestures": [ "drop" ]
+ }
+ ],
+ "components": [
+ {
+ "key": "CreateActionProvider",
+ "provides": "actionService",
+ "type": "provider",
+ "implementation": "creation/CreateActionProvider.js",
+ "depends": [ "typeService", "dialogService", "creationService" ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/platform/commonUI/browse/lib/screenfull.min.js b/platform/commonUI/browse/lib/screenfull.min.js
new file mode 100644
index 0000000000..08d698fd2c
--- /dev/null
+++ b/platform/commonUI/browse/lib/screenfull.min.js
@@ -0,0 +1,6 @@
+/*!
+* 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)}();
\ No newline at end of file
diff --git a/platform/commonUI/browse/res/templates/browse-object.html b/platform/commonUI/browse/res/templates/browse-object.html
new file mode 100644
index 0000000000..93174f9739
--- /dev/null
+++ b/platform/commonUI/browse/res/templates/browse-object.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/browse/res/templates/browse.html b/platform/commonUI/browse/res/templates/browse.html
new file mode 100644
index 0000000000..1e308274de
--- /dev/null
+++ b/platform/commonUI/browse/res/templates/browse.html
@@ -0,0 +1,25 @@
+
\ No newline at end of file
diff --git a/platform/commonUI/browse/res/templates/browse/object-header.html b/platform/commonUI/browse/res/templates/browse/object-header.html
new file mode 100644
index 0000000000..3b9b64e4ea
--- /dev/null
+++ b/platform/commonUI/browse/res/templates/browse/object-header.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/platform/commonUI/browse/res/templates/create-button.html b/platform/commonUI/browse/res/templates/create-button.html
new file mode 100644
index 0000000000..f8c6d50303
--- /dev/null
+++ b/platform/commonUI/browse/res/templates/create-button.html
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/platform/commonUI/browse/res/templates/create-menu.html b/platform/commonUI/browse/res/templates/create-menu.html
new file mode 100644
index 0000000000..99e78a2a37
--- /dev/null
+++ b/platform/commonUI/browse/res/templates/create-menu.html
@@ -0,0 +1,30 @@
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/browse/res/templates/items/grid-item.html b/platform/commonUI/browse/res/templates/items/grid-item.html
new file mode 100644
index 0000000000..ad1e81f7be
--- /dev/null
+++ b/platform/commonUI/browse/res/templates/items/grid-item.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
{{type.getGlyph()}}
+
}
+
+
+
{{model.name}}
+
+
+ {{model.composition.length}} Items
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/browse/res/templates/items/items.html b/platform/commonUI/browse/res/templates/items/items.html
new file mode 100644
index 0000000000..4e8c2fa8f7
--- /dev/null
+++ b/platform/commonUI/browse/res/templates/items/items.html
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/browse/res/templates/topbar-browse.html b/platform/commonUI/browse/res/templates/topbar-browse.html
new file mode 100644
index 0000000000..cce32ae79e
--- /dev/null
+++ b/platform/commonUI/browse/res/templates/topbar-browse.html
@@ -0,0 +1,15 @@
+
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/BrowseController.js b/platform/commonUI/browse/src/BrowseController.js
new file mode 100644
index 0000000000..53a16f7f31
--- /dev/null
+++ b/platform/commonUI/browse/src/BrowseController.js
@@ -0,0 +1,53 @@
+/*global define,Promise*/
+
+/**
+ * Module defining BrowseController. Created by vwoeltje on 11/7/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ var ROOT_OBJECT = "ROOT";
+
+ /**
+ *
+ * @constructor
+ */
+ function BrowseController($scope, objectService, navigationService) {
+ function setNavigation(domainObject) {
+ $scope.navigatedObject = domainObject;
+ //$scope.$apply("navigatedObject");
+ }
+
+ objectService.getObjects([ROOT_OBJECT]).then(function (objects) {
+ var composition = objects[ROOT_OBJECT].useCapability("composition");
+ $scope.domainObject = objects[ROOT_OBJECT];
+ if (composition) {
+ composition.then(function (c) {
+ // Navigate to the last root level component (usually "mine")
+ if (!navigationService.getNavigation()) {
+ navigationService.setNavigation(c[c.length - 1]);
+ } else {
+ $scope.navigatedObject = navigationService.getNavigation();
+ }
+ });
+ }
+ });
+
+ $scope.$on("$destroy", function () {
+ navigationService.removeListener(setNavigation);
+ });
+
+ navigationService.addListener(setNavigation);
+
+ return {
+ setNavigation: function (domainObject) {
+ navigationService.setNavigation(domainObject);
+ }
+ };
+ }
+
+ return BrowseController;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/ViewSwitcherController.js b/platform/commonUI/browse/src/ViewSwitcherController.js
new file mode 100644
index 0000000000..6a3852299e
--- /dev/null
+++ b/platform/commonUI/browse/src/ViewSwitcherController.js
@@ -0,0 +1,48 @@
+/*global define,Promise*/
+
+/**
+ * Module defining ViewSwitcherController. Created by vwoeltje on 11/7/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function ViewSwitcherController($scope) {
+ // If the view capability gets refreshed, try to
+ // keep the same option chosen.
+ function findMatchingOption(options, selected) {
+ var i;
+
+ if (selected) {
+ for (i = 0; i < options.length; i += 1) {
+ if (options[i].key === selected.key) {
+ return options[i];
+ }
+ }
+ }
+
+ return options[0];
+ }
+
+ // Get list of views, read from capability
+ $scope.$watch("view", function () {
+ var options = $scope.view || [ {} ];
+
+ $scope.switcher = {
+ options: options,
+ selected: findMatchingOption(
+ options,
+ ($scope.switcher || {}).selected
+ )
+ };
+ });
+ }
+
+ return ViewSwitcherController;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/creation/CreateAction.js b/platform/commonUI/browse/src/creation/CreateAction.js
new file mode 100644
index 0000000000..6b01d2bfce
--- /dev/null
+++ b/platform/commonUI/browse/src/creation/CreateAction.js
@@ -0,0 +1,67 @@
+/*global define,Promise*/
+
+/**
+ * Module defining CreateAction. Created by vwoeltje on 11/10/14.
+ */
+define(
+ ['./CreateWizard'],
+ function (CreateWizard) {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function CreateAction(type, parent, context, dialogService, creationService) {
+ /*
+
+ 1. Show dialog
+ a. Prepare dialog contents
+ b. Invoke dialogService
+ 2. Create new object in persistence service
+ a. Generate UUID
+ b. Store model
+ 3. Mutate destination container
+ a. Get mutation capability
+ b. Add new id to composition
+ 4. Persist destination container
+ a. ...use persistence capability.
+
+ */
+
+ function perform() {
+ var wizard = new CreateWizard(type, parent);
+
+ function persistResult(formValue) {
+ var parent = wizard.getLocation(formValue),
+ newModel = wizard.createModel(formValue);
+ return creationService.createObject(newModel, parent);
+ }
+
+ function doNothing() {
+ // Create cancelled, do nothing
+ return false;
+ }
+
+ return dialogService.getUserInput(
+ wizard.getFormModel()
+ ).then(persistResult, doNothing);
+ }
+
+ return {
+ perform: perform,
+ getMetadata: function () {
+ return {
+ key: 'create',
+ glyph: type.getGlyph(),
+ name: type.getName(),
+ description: type.getDescription(),
+ context: context
+ };
+ }
+ };
+ }
+
+ return CreateAction;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/creation/CreateActionProvider.js b/platform/commonUI/browse/src/creation/CreateActionProvider.js
new file mode 100644
index 0000000000..ae91aa43b6
--- /dev/null
+++ b/platform/commonUI/browse/src/creation/CreateActionProvider.js
@@ -0,0 +1,41 @@
+/*global define,Promise*/
+
+/**
+ * Module defining CreateActionProvider.js. Created by vwoeltje on 11/10/14.
+ */
+define(
+ ["./CreateAction"],
+ function (CreateAction) {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function CreateActionProvider(typeService, dialogService, creationService) {
+ return {
+ getActions: function (actionContext) {
+ var context = actionContext || {},
+ key = context.key,
+ destination = context.domainObject;
+
+ if (key !== 'create' || !destination) {
+ return [];
+ }
+
+ return typeService.listTypes().map(function (type) {
+ return new CreateAction(
+ type,
+ destination,
+ context,
+ dialogService,
+ creationService
+ );
+ });
+ }
+ };
+ }
+
+ return CreateActionProvider;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/creation/CreateButtonController.js b/platform/commonUI/browse/src/creation/CreateButtonController.js
new file mode 100644
index 0000000000..4762554260
--- /dev/null
+++ b/platform/commonUI/browse/src/creation/CreateButtonController.js
@@ -0,0 +1,36 @@
+/*global define,Promise*/
+
+/**
+ * Module defining CreateController. Created by vwoeltje on 11/10/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function CreateButtonController($scope, $document) {
+ function collapse() {
+ $scope.createState.visible = false;
+ $scope.$apply("createState.visible");
+ $document.off("mouseup", collapse);
+ return false;
+ }
+
+ $scope.createState = { visible: false };
+
+ $scope.toggle = function () {
+ $scope.createState.visible = !$scope.createState.visible;
+ if ($scope.createState.visible) {
+ $document.on("mouseup", collapse);
+ }
+ };
+
+ }
+
+ return CreateButtonController;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/creation/CreateMenuController.js b/platform/commonUI/browse/src/creation/CreateMenuController.js
new file mode 100644
index 0000000000..84f973d411
--- /dev/null
+++ b/platform/commonUI/browse/src/creation/CreateMenuController.js
@@ -0,0 +1,29 @@
+/*global define,Promise*/
+
+/**
+ * Module defining CreateMenuController. Created by vwoeltje on 11/10/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function CreateMenuController($scope) {
+ function refreshActions() {
+ var actionCapability = $scope.action;
+ if (actionCapability) {
+ $scope.createActions =
+ actionCapability.getActions('create');
+ }
+ }
+
+ $scope.$watch("action", refreshActions);
+ }
+
+ return CreateMenuController;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/creation/CreateWizard.js b/platform/commonUI/browse/src/creation/CreateWizard.js
new file mode 100644
index 0000000000..15c4d8df08
--- /dev/null
+++ b/platform/commonUI/browse/src/creation/CreateWizard.js
@@ -0,0 +1,79 @@
+/*global define*/
+
+/**
+ * Defines the CreateWizard, used by the CreateAction to
+ * populate the form shown in dialog based on the created type.
+ *
+ * @module core/action/create-wizard
+ */
+define(
+ function () {
+ 'use strict';
+
+ /**
+ * Construct a new CreateWizard.
+ *
+ * @param {TypeImpl} type the type of domain object to be created
+ * @param {DomainObject} parent the domain object to serve as
+ * the initial parent for the created object, in the dialog
+ * @constructor
+ * @memberof module:core/action/create-wizard
+ */
+ function CreateWizard(type, parent) {
+ var model = type.getInitialModel(),
+ properties = type.getProperties();
+
+ return {
+ getFormModel: function () {
+ var parentRow = Object.create(parent),
+ sections = [];
+
+ sections.push({
+ name: "Properties",
+ rows: properties.map(function (property) {
+ // Property definition is same as form row definition
+ var row = Object.create(property.getDefinition());
+ // But pull an initial value from the model
+ row.value = property.getValue(model);
+ return row;
+ })
+ });
+
+ // Ensure there is always a "save in" section
+ parentRow.name = "Save In";
+ parentRow.cssclass = "selector-list";
+ parentRow.control = "_locator";
+ parentRow.key = "createParent";
+ sections.push({ label: 'Location', rows: [parentRow]});
+
+ return {
+ sections: sections,
+ name: "Create a New " + type.getName()
+ };
+ },
+ getLocation: function (formValue) {
+ return formValue.createParent || parent;
+ },
+ createModel: function (formValue) {
+ // Clone
+ var newModel = JSON.parse(JSON.stringify(model));
+
+ // Always use the type from the type definition
+ newModel.type = type.getKey();
+
+ // Update all properties
+ properties.forEach(function (property) {
+ var value = formValue[property.getDefinition().key];
+ property.setValue(newModel, value);
+ });
+
+ return newModel;
+ }
+ };
+
+
+ }
+
+ return CreateWizard;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/creation/CreationService.js b/platform/commonUI/browse/src/creation/CreationService.js
new file mode 100644
index 0000000000..57ffa5f3e6
--- /dev/null
+++ b/platform/commonUI/browse/src/creation/CreationService.js
@@ -0,0 +1,90 @@
+/*global define,Promise*/
+
+/**
+ * Module defining CreateService. Created by vwoeltje on 11/10/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ var NON_PERSISTENT_WARNING =
+ "Tried to create an object in non-persistent container.",
+ NO_COMPOSITION_WARNING =
+ "Could not add to composition; no composition in ";
+
+ /**
+ *
+ * @constructor
+ */
+ function CreationService(persistenceService, uuidService, $q, $log) {
+
+ function doPersist(space, id, model) {
+ return persistenceService.createObject(
+ space,
+ id,
+ model
+ ).then(function () { return id; });
+ }
+
+ function addToComposition(id, parent) {
+ var mutatationResult = parent.useCapability("mutation", function (model) {
+ if (Array.isArray(model.composition)) {
+ if (model.composition.indexOf(id) === -1) {
+ model.composition.push(id);
+ }
+ } else {
+ $log.warn(NO_COMPOSITION_WARNING + parent.getId());
+ }
+ });
+
+ return $q.when(mutatationResult).then(function (result) {
+ var persistence = parent.getCapability("persistence");
+
+ if (!result) {
+ $log.error("Could not mutate " + parent.getId());
+ }
+
+ if (!persistence) {
+ $log.error([
+ "Expected to be able to persist ",
+ parent.getId(),
+ " but could not."
+ ].join(""));
+ return undefined;
+ }
+
+ return persistence.persist();
+ });
+ }
+
+ function createObject(model, parent) {
+ var persistence = parent.getCapability("persistence"),
+ result = $q.defer(),
+ space;
+
+ if (persistence) {
+ space = persistence.getSpace();
+ return $q.when(
+ uuidService.getUUID()
+ ).then(function (id) {
+ return doPersist(space, id, model);
+ }).then(function (id) {
+ return addToComposition(id, parent);
+ });
+ } else {
+ $log.warn(NON_PERSISTENT_WARNING);
+ $q.reject(new Error(NON_PERSISTENT_WARNING));
+ }
+
+ return result.promise;
+ }
+
+ return {
+ createObject: createObject
+ };
+ }
+
+ return CreationService;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/creation/UUIDService.js b/platform/commonUI/browse/src/creation/UUIDService.js
new file mode 100644
index 0000000000..00e7fc3c3e
--- /dev/null
+++ b/platform/commonUI/browse/src/creation/UUIDService.js
@@ -0,0 +1,29 @@
+/*global define,Promise*/
+
+/**
+ * Module defining UUIDService. Created by vwoeltje on 11/12/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function UUIDService() {
+ var counter = Date.now();
+
+ return {
+ getUUID: function () {
+ counter += 1;
+ return counter.toString(36);
+ }
+
+ };
+ }
+
+ return UUIDService;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/navigation/NavigateAction.js b/platform/commonUI/browse/src/navigation/NavigateAction.js
new file mode 100644
index 0000000000..101814201f
--- /dev/null
+++ b/platform/commonUI/browse/src/navigation/NavigateAction.js
@@ -0,0 +1,35 @@
+/*global define,Promise*/
+
+/**
+ * Module defining NavigateAction. Created by vwoeltje on 11/10/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function NavigateAction(navigationService, context) {
+ var domainObject = context.domainObject;
+
+ function perform() {
+ return Promise.resolve(
+ navigationService.setNavigation(domainObject)
+ );
+ }
+
+ return {
+ perform: perform
+ };
+ }
+
+ NavigateAction.appliesTo = function (context) {
+ return context.domainObject !== undefined;
+ };
+
+ return NavigateAction;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/navigation/NavigationService.js b/platform/commonUI/browse/src/navigation/NavigationService.js
new file mode 100644
index 0000000000..8b237a645e
--- /dev/null
+++ b/platform/commonUI/browse/src/navigation/NavigationService.js
@@ -0,0 +1,50 @@
+/*global define,Promise*/
+
+/**
+ * Module defining NavigationService. Created by vwoeltje on 11/10/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function NavigationService() {
+ var navigated,
+ callbacks = [];
+
+ function getNavigation() {
+ return navigated;
+ }
+
+ function setNavigation(value) {
+ navigated = value;
+ callbacks.forEach(function (callback) {
+ callback(value);
+ });
+ }
+
+ function addListener(callback) {
+ callbacks.push(callback);
+ }
+
+ function removeListener(callback) {
+ callbacks = callbacks.filter(function (cb) {
+ return cb !== callback;
+ });
+ }
+
+ return {
+ getNavigation: getNavigation,
+ setNavigation: setNavigation,
+ addListener: addListener,
+ removeListener: removeListener
+ };
+ }
+
+ return NavigationService;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/windowing/FullscreenAction.js b/platform/commonUI/browse/src/windowing/FullscreenAction.js
new file mode 100644
index 0000000000..50f1e389ab
--- /dev/null
+++ b/platform/commonUI/browse/src/windowing/FullscreenAction.js
@@ -0,0 +1,41 @@
+/*global define,screenfull,Promise*/
+
+/**
+ * Module defining FullscreenAction. Created by vwoeltje on 11/18/14.
+ */
+define(
+ ["../../lib/screenfull.min"],
+ function () {
+ "use strict";
+
+ var ENTER_FULLSCREEN = "Enter full screen mode.",
+ EXIT_FULLSCREEN = "Exit full screen mode.";
+
+ /**
+ *
+ * @constructor
+ */
+ function FullscreenAction(context) {
+ return {
+ perform: function () {
+ screenfull.toggle();
+ },
+ getMetadata: function () {
+ // We override getMetadata, because the glyph and
+ // description need to be determined at run-time
+ // based on whether or not we are currently
+ // full screen.
+ var metadata = Object.create(FullscreenAction);
+ metadata.glyph = screenfull.isFullscreen ? "_" : "z";
+ metadata.description = screenfull.isFullscreen ?
+ EXIT_FULLSCREEN : ENTER_FULLSCREEN;
+ metadata.group = "windowing";
+ metadata.context = context;
+ return metadata;
+ }
+ };
+ }
+
+ return FullscreenAction;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/src/windowing/NewWindowAction.js b/platform/commonUI/browse/src/windowing/NewWindowAction.js
new file mode 100644
index 0000000000..45a7b48c8a
--- /dev/null
+++ b/platform/commonUI/browse/src/windowing/NewWindowAction.js
@@ -0,0 +1,25 @@
+/*global define,Promise*/
+
+/**
+ * Module defining NewWindowAction. Created by vwoeltje on 11/18/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function NewWindowAction($window) {
+ return {
+ perform: function () {
+ $window.alert("Not yet functional. This will open objects in a new window.");
+ }
+ };
+ }
+
+ return NewWindowAction;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/dialog/bundle.json b/platform/commonUI/dialog/bundle.json
new file mode 100644
index 0000000000..1e68f82e69
--- /dev/null
+++ b/platform/commonUI/dialog/bundle.json
@@ -0,0 +1,17 @@
+{
+ "extensions": {
+ "services": [
+ {
+ "key": "dialogService",
+ "implementation": "DialogService.js",
+ "depends": [ "$document", "$compile", "$rootScope", "$timeout", "$q", "$log" ]
+ }
+ ],
+ "templates": [
+ {
+ "key": "overlay-dialog",
+ "templateUrl": "templates/overlay.html"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/platform/commonUI/dialog/res/templates/overlay.html b/platform/commonUI/dialog/res/templates/overlay.html
new file mode 100644
index 0000000000..ee11c5df06
--- /dev/null
+++ b/platform/commonUI/dialog/res/templates/overlay.html
@@ -0,0 +1,28 @@
+
+
+
+
x
+
+
+
{{ngModel.title}}
+
All fields marked * are required.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/dialog/src/DialogService.js b/platform/commonUI/dialog/src/DialogService.js
new file mode 100644
index 0000000000..644127ace9
--- /dev/null
+++ b/platform/commonUI/dialog/src/DialogService.js
@@ -0,0 +1,79 @@
+/*global define,Promise*/
+
+/**
+ * Module defining DialogService. Created by vwoeltje on 11/10/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function DialogService($document, $compile, $rootScope, $timeout, $q, $log) {
+ var scope;
+
+ function addContent() {
+ scope = $rootScope.$new();
+ $document.find('body').prepend(
+ $compile(
+ " "
+ )(scope)
+ );
+ scope.dialog = { visible: false, value: {} };
+ }
+
+ function dismiss() {
+ scope.dialog = { visible: false, value: {} };
+ }
+
+ return {
+ getUserInput: function (formModel, value) {
+ var deferred = $q.defer();
+
+ if (!scope) {
+ addContent();
+ }
+
+ $timeout(function () {
+ if (scope.dialog.visible) {
+ $log.warn([
+ "Dialog already showing; ",
+ "unable to show ",
+ title
+ ].join(""));
+ }
+
+ scope.dialog.visible = true;
+ scope.dialog.title = formModel.name;
+ scope.dialog.message = formModel.message;
+ scope.dialog.formModel = formModel;
+ scope.dialog.value = JSON.stringify(value);
+
+ scope.dialog.confirm = function () {
+ var resultingValue;
+
+ try {
+ resultingValue = JSON.parse(scope.dialog.value);
+ } catch (e) {
+ resultingValue = {};
+ }
+ deferred.resolve(resultingValue);
+ dismiss();
+ };
+ scope.dialog.cancel = function () {
+ deferred.reject();
+ dismiss();
+ };
+ });
+
+ return deferred.promise;
+ }
+ };
+ }
+
+ return DialogService;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/README.md b/platform/commonUI/edit/README.md
new file mode 100644
index 0000000000..525c852229
--- /dev/null
+++ b/platform/commonUI/edit/README.md
@@ -0,0 +1 @@
+Contains sources and resources associated with Edit mode.
\ No newline at end of file
diff --git a/platform/commonUI/edit/bundle.json b/platform/commonUI/edit/bundle.json
new file mode 100644
index 0000000000..a9c7ec5094
--- /dev/null
+++ b/platform/commonUI/edit/bundle.json
@@ -0,0 +1,85 @@
+{
+ "extensions": {
+ "routes": [
+ {
+ "when": "/edit",
+ "templateUrl": "templates/edit.html"
+ }
+ ],
+ "controllers": [
+ {
+ "key": "EditController",
+ "implementation": "EditController.js",
+ "depends": [ "$scope", "navigationService" ]
+ },
+ {
+ "key": "EditActionController",
+ "implementation": "EditActionController.js",
+ "depends": [ "$scope" ]
+ }
+ ],
+ "actions": [
+ {
+ "key": "edit",
+ "implementation": "actions/EditAction.js",
+ "depends": [ "$location", "navigationService", "$log" ],
+ "description": "Edit this object.",
+ "category": "view-control",
+ "glyph": "p"
+ },
+ {
+ "key": "remove",
+ "category": "contextual",
+ "implementation": "actions/RemoveAction.js",
+ "glyph": "Z",
+ "name": "Remove",
+ "description": "Remove this object from its containing object.",
+ "depends": [ "$q" ]
+ },
+ {
+ "key": "save",
+ "category": "conclude-editing",
+ "implementation": "actions/SaveAction.js",
+ "name": "Save",
+ "description": "Save changes made to these objects.",
+ "depends": [ "$location" ]
+ },
+ {
+ "key": "cancel",
+ "category": "conclude-editing",
+ "implementation": "actions/CancelAction.js",
+ "name": "Cancel",
+ "description": "Discard changes made to these objects.",
+ "depends": [ "$location" ]
+ }
+ ],
+ "templates": [
+ {
+ "key": "topbar-edit",
+ "templateUrl": "templates/topbar-edit.html"
+ },
+ {
+ "key": "edit-library",
+ "templateUrl": "templates/library.html"
+ }
+ ],
+ "representations": [
+ {
+ "key": "edit-object",
+ "templateUrl": "templates/edit-object.html",
+ "uses": [ "view", "context" ]
+ },
+ {
+ "key": "edit-action-buttons",
+ "templateUrl": "templates/edit-action-buttons.html",
+ "uses": [ "action" ]
+ },
+ {
+ "key": "edit-elements",
+ "templateUrl": "templates/elements.html",
+ "uses": [ "composition" ],
+ "gestures": [ "drop" ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/platform/commonUI/edit/res/templates/edit-action-buttons.html b/platform/commonUI/edit/res/templates/edit-action-buttons.html
new file mode 100644
index 0000000000..fed104f122
--- /dev/null
+++ b/platform/commonUI/edit/res/templates/edit-action-buttons.html
@@ -0,0 +1,9 @@
+
+
+
+ {{currentAction.getMetadata().name}}
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/edit/res/templates/edit-object.html b/platform/commonUI/edit/res/templates/edit-object.html
new file mode 100644
index 0000000000..82267f7c0b
--- /dev/null
+++ b/platform/commonUI/edit/res/templates/edit-object.html
@@ -0,0 +1,33 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/edit/res/templates/edit.html b/platform/commonUI/edit/res/templates/edit.html
new file mode 100644
index 0000000000..ed42b2dcf2
--- /dev/null
+++ b/platform/commonUI/edit/res/templates/edit.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/platform/commonUI/edit/res/templates/elements.html b/platform/commonUI/edit/res/templates/elements.html
new file mode 100644
index 0000000000..f72c340ef7
--- /dev/null
+++ b/platform/commonUI/edit/res/templates/elements.html
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/platform/commonUI/edit/res/templates/library.html b/platform/commonUI/edit/res/templates/library.html
new file mode 100644
index 0000000000..8f27bc045a
--- /dev/null
+++ b/platform/commonUI/edit/res/templates/library.html
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/platform/commonUI/edit/res/templates/topbar-edit.html b/platform/commonUI/edit/res/templates/topbar-edit.html
new file mode 100644
index 0000000000..54a6101d12
--- /dev/null
+++ b/platform/commonUI/edit/res/templates/topbar-edit.html
@@ -0,0 +1,17 @@
+
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/EditActionController.js b/platform/commonUI/edit/src/EditActionController.js
new file mode 100644
index 0000000000..4559dc9bb9
--- /dev/null
+++ b/platform/commonUI/edit/src/EditActionController.js
@@ -0,0 +1,31 @@
+/*global define,Promise*/
+
+/**
+ * Module defining EditActionController. Created by vwoeltje on 11/17/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ * Controller which supplies action instances for Save/Cancel.
+ * @constructor
+ */
+ function EditActionController($scope) {
+ function updateActions() {
+ if (!$scope.action) {
+ $scope.editActions = [];
+ } else {
+ $scope.editActions = $scope.action.getActions({
+ category: 'conclude-editing'
+ });
+ }
+ }
+
+ $scope.$watch("action", updateActions);
+ }
+
+ return EditActionController;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/EditController.js b/platform/commonUI/edit/src/EditController.js
new file mode 100644
index 0000000000..073f321120
--- /dev/null
+++ b/platform/commonUI/edit/src/EditController.js
@@ -0,0 +1,27 @@
+/*global define,Promise*/
+
+/**
+ * Module defining EditController. Created by vwoeltje on 11/14/14.
+ */
+define(
+ ["./objects/EditableDomainObject"],
+ function (EditableDomainObject) {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function EditController($scope, navigationService) {
+ function setNavigation(domainObject) {
+ $scope.navigatedObject =
+ domainObject && new EditableDomainObject(domainObject);
+ }
+
+ setNavigation(navigationService.getNavigation());
+ navigationService.addListener(setNavigation);
+ }
+
+ return EditController;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/actions/CancelAction.js b/platform/commonUI/edit/src/actions/CancelAction.js
new file mode 100644
index 0000000000..d88055b363
--- /dev/null
+++ b/platform/commonUI/edit/src/actions/CancelAction.js
@@ -0,0 +1,51 @@
+/*global define*/
+
+/**
+ * The "Save" action; the action triggered by clicking Save from
+ * Edit Mode. Exits the editing user interface and invokes object
+ * capabilities to persist the changes that have been made.
+ */
+define(
+ function () {
+ 'use strict';
+
+ function CancelAction($location, context) {
+ var domainObject = context.domainObject;
+
+ // Look up the object's "editor.completion" capability;
+ // this is introduced by EditableDomainObject which is
+ // used to insulate underlying objects from changes made
+ // during editing.
+ function getEditorCapability() {
+ return domainObject.getCapability("editor");
+ }
+
+ // Invoke any save behavior introduced by the editor.completion
+ // capability.
+ function doCancel(editor) {
+ return editor.cancel();
+ }
+
+ // Discard the current root view (which will be the editing
+ // UI, which will have been pushed atop the Browise UI.)
+ function returnToBrowse() {
+ $location.path("/browse");
+ }
+
+ return {
+ perform: function () {
+ return doCancel(getEditorCapability())
+ .then(returnToBrowse);
+ }
+ };
+ }
+
+ CancelAction.appliesTo = function (context) {
+ var domainObject = (context || {}).domainObject;
+ return domainObject !== undefined &&
+ domainObject.hasCapability("editor");
+ };
+
+ return CancelAction;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/actions/EditAction.js b/platform/commonUI/edit/src/actions/EditAction.js
new file mode 100644
index 0000000000..daadce8b52
--- /dev/null
+++ b/platform/commonUI/edit/src/actions/EditAction.js
@@ -0,0 +1,47 @@
+/*global define,Promise*/
+
+/**
+ * Module defining EditAction. Created by vwoeltje on 11/14/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ var NULL_ACTION = {
+ perform: function () {
+ return undefined;
+ }
+ };
+
+ /**
+ *
+ * @constructor
+ */
+ function EditAction($location, navigationService, $log, context) {
+ var domainObject = (context || {}).domainObject;
+
+ if (!domainObject) {
+ $log.error([
+ "No domain object to edit; ",
+ "edit action is not valid."
+ ].join(""));
+
+ return NULL_ACTION;
+ }
+
+ return {
+ perform: function () {
+ navigationService.setNavigation(domainObject);
+ $location.path("/edit");
+ }
+ };
+ }
+
+ EditAction.appliesTo = function (context) {
+ return (context || {}).domainObject !== undefined;
+ };
+
+ return EditAction;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/actions/RemoveAction.js b/platform/commonUI/edit/src/actions/RemoveAction.js
new file mode 100644
index 0000000000..1430e3f51e
--- /dev/null
+++ b/platform/commonUI/edit/src/actions/RemoveAction.js
@@ -0,0 +1,90 @@
+/*global define*/
+
+/**
+ * Module defining RemoveAction. Created by vwoeltje on 11/17/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ * Construct an action which will remove the provided object manifestation.
+ * The object will be removed from its parent's composition; the parent
+ * is looked up via the "context" capability (so this will be the
+ * immediate ancestor by which this specific object was reached.)
+ *
+ * @param {DomainObject} object the object to be removed
+ * @param {ActionContext} context the context in which this action is performed
+ * @constructor
+ * @memberof module:editor/actions/remove-action
+ */
+ function RemoveAction($q, context) {
+ var object = (context || {}).domainObject;
+
+ /**
+ * Check whether an object ID matches the ID of the object being
+ * removed (used to filter a parent's composition to handle the
+ * removal.)
+ */
+ function isNotObject(otherObjectId) {
+ return otherObjectId !== object.getId();
+ }
+
+ /**
+ * Mutate a parent object such that it no longer contains the object
+ * which is being removed.
+ */
+ function doMutate(model) {
+ model.composition = model.composition.filter(isNotObject);
+ }
+
+ /**
+ * Invoke persistence on a domain object. This will be called upon
+ * the removed object's parent (as its composition will have changed.)
+ */
+ function doPersist(domainObject) {
+ var persistence = domainObject.getCapability('persistence');
+ return persistence && persistence.persist();
+ }
+
+ /**
+ * Remove the object from its parent, as identified by its context
+ * capability.
+ * @param {ContextCapability} contextCapability the "context" capability
+ * of the domain object being removed.
+ */
+ function removeFromContext(contextCapability) {
+ var parent = contextCapability.getParent();
+ $q.when(
+ parent.useCapability('mutation', doMutate)
+ ).then(function () {
+ return doPersist(parent);
+ });
+ }
+
+ return {
+ /**
+ * Perform this action.
+ * @return {module:core/promises.Promise} a promise which will be
+ * fulfilled when the action has completed.
+ */
+ perform: function () {
+ return $q.when(object.getCapability('context'))
+ .then(removeFromContext);
+ }
+ };
+ }
+
+ // Object needs to have a parent for Remove to be applicable
+ /*RemoveAction.appliesTo = function (context) {
+ var object = context.domainObject,
+ contextCapability = object && object.getCapability("context"),
+ parent = contextCapability && contextCapability.getParent();
+ return parent !== undefined &&
+ Array.isArray(parent.getModel().composition);
+ };*/
+
+ return RemoveAction;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/actions/SaveAction.js b/platform/commonUI/edit/src/actions/SaveAction.js
new file mode 100644
index 0000000000..6c42ee82c1
--- /dev/null
+++ b/platform/commonUI/edit/src/actions/SaveAction.js
@@ -0,0 +1,50 @@
+/*global define*/
+
+/**
+ * The "Save" action; the action triggered by clicking Save from
+ * Edit Mode. Exits the editing user interface and invokes object
+ * capabilities to persist the changes that have been made.
+ */
+define(
+ function () {
+ 'use strict';
+
+ function SaveAction($location, context) {
+ var domainObject = context.domainObject;
+
+ // Look up the object's "editor.completion" capability;
+ // this is introduced by EditableDomainObject which is
+ // used to insulate underlying objects from changes made
+ // during editing.
+ function getEditorCapability() {
+ return domainObject.getCapability("editor");
+ }
+
+ // Invoke any save behavior introduced by the editor.completion
+ // capability.
+ function doSave(editor) {
+ return editor.save();
+ }
+
+ // Discard the current root view (which will be the editing
+ // UI, which will have been pushed atop the Browise UI.)
+ function returnToBrowse() {
+ $location.path("/browse");
+ }
+
+ return {
+ perform: function () {
+ return doSave(getEditorCapability()).then(returnToBrowse);
+ }
+ };
+ }
+
+ SaveAction.appliesTo = function (context) {
+ var domainObject = (context || {}).domainObject;
+ return domainObject !== undefined &&
+ domainObject.hasCapability("editor");
+ };
+
+ return SaveAction;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/capabilities/EditableContextCapability.js b/platform/commonUI/edit/src/capabilities/EditableContextCapability.js
new file mode 100644
index 0000000000..1d3584ff34
--- /dev/null
+++ b/platform/commonUI/edit/src/capabilities/EditableContextCapability.js
@@ -0,0 +1,56 @@
+/*global define*/
+
+/**
+ * Wrapper for both "context" and "composition" capabilities;
+ * ensures that any domain objects reachable in Edit mode
+ * are also wrapped as EditableDomainObjects
+ */
+define(
+ [],
+ function () {
+ 'use strict';
+
+ return function EditableContextCapability(
+ contextCapability,
+ editableObject,
+ domainObject,
+ factory
+ ) {
+ var capability = Object.create(contextCapability);
+
+ function isDomainObject(obj) {
+ return typeof obj.getId === 'function' &&
+ typeof obj.getModel === 'function' &&
+ typeof obj.getCapability === 'function';
+ }
+
+ function makeEditableObject(obj) {
+ return isDomainObject(obj) ?
+ factory.getEditableObject(obj) :
+ obj;
+ }
+
+ function makeEditable(obj) {
+ return Array.isArray(obj) ?
+ obj.map(makeEditableObject) :
+ makeEditableObject(obj);
+ }
+
+ // Replace all methods; return only editable domain objects.
+ Object.keys(contextCapability).forEach(function (k) {
+ capability[k] = function () {
+ var result = contextCapability[k].apply(
+ capability,
+ arguments
+ );
+
+ return result.then ? // promise-like
+ result.then(makeEditable) :
+ makeEditable(result);
+ };
+ });
+
+ return capability;
+ };
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js b/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js
new file mode 100644
index 0000000000..17357d12d6
--- /dev/null
+++ b/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js
@@ -0,0 +1,30 @@
+/*global define*/
+
+/**
+ * Editable Persistence Capability. Overrides the persistence capability
+ * normally exhibited by a domain object to ensure that changes made
+ * during edit mode are not immediately stored to the database or other
+ * backing storage.
+ */
+define(
+ function () {
+ 'use strict';
+
+ return function EditablePersistenceCapability(
+ persistenceCapability,
+ editableObject,
+ domainObject,
+ cache
+ ) {
+ var persistence = Object.create(persistenceCapability);
+
+ // Simply trigger refresh of in-view objects; do not
+ // write anything to database.
+ persistence.persist = function () {
+ cache.markDirty(editableObject);
+ };
+
+ return persistence;
+ };
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js
new file mode 100644
index 0000000000..921c57f8c0
--- /dev/null
+++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js
@@ -0,0 +1,55 @@
+/*global define*/
+
+/**
+ * Implements "save" and "cancel" as capabilities of
+ * the object. In editing mode, user is seeing/using
+ * a copy of the object (an EditableDomainObject)
+ * which is disconnected from persistence; the Save
+ * and Cancel actions can use this capability to
+ * propagate changes from edit mode to the underlying
+ * actual persistable object.
+ */
+define(
+ [],
+ function () {
+ 'use strict';
+
+ return function EditorCapability(
+ persistenceCapability,
+ editableObject,
+ domainObject,
+ cache
+ ) {
+
+ function doMutate() {
+ return domainObject.useCapability('mutation', function () {
+ return editableObject.getModel();
+ });
+ }
+
+ function doPersist() {
+ return persistenceCapability.persist();
+ }
+
+ function saveOthers() {
+ return cache.saveAll();
+ }
+
+ function markClean() {
+ return cache.markClean(editableObject);
+ }
+
+ return {
+ save: function () {
+ return Promise.resolve(doMutate())
+ .then(doPersist)
+ .then(markClean)
+ .then(saveOthers);
+ },
+ cancel: function () {
+ return Promise.resolve(undefined);
+ }
+ };
+ };
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/objects/EditableDomainObject.js b/platform/commonUI/edit/src/objects/EditableDomainObject.js
new file mode 100644
index 0000000000..14aa5435a0
--- /dev/null
+++ b/platform/commonUI/edit/src/objects/EditableDomainObject.js
@@ -0,0 +1,84 @@
+/*global define*/
+
+/**
+ * Defines EditableDomainObject, which wraps domain objects
+ * such that user code may work with and mutate a copy of the
+ * domain object model; these changes may then be propagated
+ * up to the real domain object (or not) by way of invoking
+ * save or cancel behaviors of the "editor.completion"
+ * capability (a capability intended as internal to edit
+ * mode; invoked by way of the Save and Cancel actions.)
+ */
+define(
+ [
+ '../capabilities/EditablePersistenceCapability',
+ '../capabilities/EditableContextCapability',
+ '../capabilities/EditorCapability',
+ './EditableDomainObjectCache'
+ ],
+ function (
+ EditablePersistenceCapability,
+ EditableContextCapability,
+ EditorCapability,
+ EditableDomainObjectCache
+ ) {
+ "use strict";
+
+ var capabilityFactories = {
+ persistence: EditablePersistenceCapability,
+ context: EditableContextCapability,
+ composition: EditableContextCapability,
+ editor: EditorCapability
+ };
+
+ // Handle special case where "editor.completion" wraps persistence
+ // (other capability overrides wrap capabilities of the same type.)
+ function getDelegateArguments(name, args) {
+ return name === "editor" ? ['persistence'] : args;
+ }
+
+ /**
+ * An EditableDomainObject overrides capabilities
+ * which need to behave differently in edit mode,
+ * and provides a "working copy" of the object's
+ * model to allow changes to be easily cancelled.
+ */
+ function EditableDomainObject(domainObject) {
+ // The cache will hold all domain objects reached from
+ // the initial EditableDomainObject; this ensures that
+ // different versions of the same editable domain object
+ // are not shown in different sections of the same Edit
+ // UI, which might thereby fall out of sync.
+ var cache;
+
+ // Constructor for EditableDomainObject, which adheres
+ // to the same shared cache.
+ function EditableDomainObjectImpl(domainObject) {
+ var model = JSON.parse(JSON.stringify(domainObject.getModel())),
+ editableObject = Object.create(domainObject);
+
+ // Only provide the cloned model.
+ editableObject.getModel = function () { return model; };
+
+ // Override certain capabilities
+ editableObject.getCapability = function (name) {
+ var delegateArguments = getDelegateArguments(name, arguments),
+ capability = domainObject.getCapability.apply(this, delegateArguments),
+ factory = capabilityFactories[name];
+
+ return (factory && capability) ?
+ factory(capability, editableObject, domainObject, cache) :
+ capability;
+ };
+
+ return editableObject;
+ }
+
+ cache = new EditableDomainObjectCache(EditableDomainObjectImpl);
+
+ return cache.getEditableObject(domainObject);
+ }
+
+ return EditableDomainObject;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js b/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js
new file mode 100644
index 0000000000..ccaac78f77
--- /dev/null
+++ b/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js
@@ -0,0 +1,102 @@
+/*global define*/
+
+
+/**
+ * An editable domain object cache stores domain objects that have been
+ * made editable, in a group that can be saved all-at-once. This supports
+ * Edit mode, which is launched for a specific object but may contain
+ * changes across many objects.
+ *
+ * Editable domain objects have certain specific capabilities overridden
+ * to ensure that changes made while in edit mode do not propagate up
+ * to the objects used in browse mode (or to persistence) until the user
+ * initiates a Save.
+ *
+ * @module editor/object/editable-domain-object-cache
+ */
+define(
+ function () {
+ 'use strict';
+
+ /**
+ * Construct a new cache for editable domain objects. This can be used
+ * to get-or-create editable objects, particularly to support wrapping
+ * of objects retrieved via composition or context capabilities as
+ * editable domain objects.
+ *
+ * @param {Constructor} EditableDomainObject a
+ * constructor function which takes a regular domain object as
+ * an argument, and returns an editable domain object as its
+ * result.
+ * @constructor
+ * @memberof module:editor/object/editable-domain-object-cache
+ */
+ function EditableDomainObjectCache(EditableDomainObject) {
+ var cache = {},
+ dirty = {};
+
+ return {
+ /**
+ * Wrap this domain object in an editable form, or pull such
+ * an object from the cache if one already exists.
+ *
+ * @param {DomainObject} domainObject the regular domain object
+ * @returns {DomainObject} the domain object in an editable form
+ */
+ getEditableObject: function (domainObject) {
+ var id = domainObject.getId();
+ return (cache[id] =
+ cache[id] || new EditableDomainObject(domainObject));
+ },
+ /**
+ * Mark an editable domain object (presumably already cached)
+ * as having received modifications during editing; it should be
+ * included in the bulk save invoked when editing completes.
+ *
+ * @param {DomainObject} domainObject the domain object
+ */
+ markDirty: function (domainObject) {
+ dirty[domainObject.getId()] = domainObject;
+ },
+ /**
+ * Mark an object (presumably already cached) as having had its
+ * changes saved (and thus no longer needing to be subject to a
+ * save operation.)
+ *
+ * @param {DomainObject} domainObject the domain object
+ */
+ markClean: function (domainObject) {
+ delete dirty[domainObject.getId()];
+ },
+ /**
+ * Initiate a save on all objects that have been cached.
+ */
+ saveAll: function () {
+ var object;
+
+ // Most save logic is handled by the "editor.completion"
+ // capability, but this in turn will typically invoke
+ // Save All. An infinite loop is avoided by marking
+ // objects as clean as we go.
+
+ function doSave(editCapability) {
+ return editCapability.save();
+ }
+
+ while (Object.keys(dirty).length > 0) {
+ // Pick the first dirty object
+ object = dirty[Object.keys(dirty)[0]];
+
+ // Mark non-dirty to avoid successive invocations
+ this.markClean(object);
+
+ // Invoke its save behavior
+ object.getCapability('editor.completion').then(doSave);
+ }
+ }
+ };
+ }
+
+ return EditableDomainObjectCache;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/general/bundle.json b/platform/commonUI/general/bundle.json
new file mode 100644
index 0000000000..91cfca9b3b
--- /dev/null
+++ b/platform/commonUI/general/bundle.json
@@ -0,0 +1,94 @@
+{
+ "name": "General UI elements",
+ "description": "General UI elements, meant to be reused across modes.",
+ "resources": "res",
+ "extensions": {
+ "templates": [
+ {
+ "key": "bottombar",
+ "templateUrl": "templates/bottombar.html"
+ },
+ {
+ "key": "switcher",
+ "templateUrl": "templates/controls/switcher.html"
+ },
+ {
+ "key": "action-button",
+ "templateUrl": "templates/controls/action-button.html"
+ }
+ ],
+ "controllers": [
+ {
+ "key": "TreeNodeController",
+ "implementation": "TreeNodeController.js",
+ "depends": [ "$scope", "navigationService" ]
+ },
+ {
+ "key": "ActionGroupController",
+ "implementation": "ActionGroupController.js",
+ "depends": [ "$scope" ]
+ },
+ {
+ "key": "AccordionController",
+ "implementation": "AccordionController.js"
+ },
+ {
+ "key": "ContextMenuController",
+ "implementation": "ContextMenuController.js",
+ "depends": [ "$scope" ]
+ }
+ ],
+ "directives": [
+ {
+ "key": "mctContainer",
+ "implementation": "MCTContainer.js",
+ "depends": [ "containers[]" ]
+ }
+ ],
+ "containers": [
+ {
+ "key": "accordion",
+ "templateUrl": "templates/containers/accordion.html",
+ "attributes": [ "title" ]
+ }
+ ],
+ "representations": [
+ {
+ "key": "tree",
+ "templateUrl": "templates/tree.html",
+ "uses": [ "composition" ]
+ },
+ {
+ "key": "test",
+ "templateUrl": "templates/test.html"
+ },
+ {
+ "key": "tree-item",
+ "templateUrl": "templates/tree-item.html",
+ "uses": [ "action" ]
+ },
+ {
+ "key": "label",
+ "templateUrl": "templates/label.html",
+ "uses": [ "type" ],
+ "gestures": [ "drag", "menu" ]
+ },
+ {
+ "key": "node",
+ "templateUrl": "templates/label.html",
+ "uses": [ "type" ],
+ "gestures": [ "drag", "menu" ]
+ },
+ {
+ "key": "action-group",
+ "templateUrl": "templates/controls/action-group.html",
+ "uses": [ "action" ]
+ },
+ {
+ "key": "context-menu",
+ "templateUrl": "templates/menu/context-menu.html",
+ "uses": [ "action" ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/platform/commonUI/general/res/css/forms.css b/platform/commonUI/general/res/css/forms.css
new file mode 100644
index 0000000000..bfcc0e5d9c
--- /dev/null
+++ b/platform/commonUI/general/res/css/forms.css
@@ -0,0 +1,333 @@
+/* line 2, ../sass/forms/_elems.scss */
+.form .section-header {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ background: rgba(255, 255, 255, 0.1);
+ font-size: 0.8em;
+ margin-top: 5px;
+ padding: 5px; }
+ /* line 8, ../sass/forms/_elems.scss */
+ .form .section-header:first-child {
+ margin-top: 0; }
+/* line 12, ../sass/forms/_elems.scss */
+.form .form-section {
+ position: relative; }
+/* line 16, ../sass/forms/_elems.scss */
+.form .form-row {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ *zoom: 1;
+ border-top: 1px solid #4d4d4d;
+ margin-top: 5px;
+ padding: 5px;
+ position: relative; }
+ /* line 25, ../sass/forms/_elems.scss */
+ .form .form-row:first-child {
+ border-top: none; }
+ /* line 29, ../sass/forms/_elems.scss */
+ .form .form-row .label,
+ .form .form-row .controls {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ *zoom: 1;
+ box-sizing: border-box;
+ font-size: 0.75rem;
+ line-height: 22px;
+ min-height: 22px; }
+ /* line 39, ../sass/forms/_elems.scss */
+ .form .form-row > .label {
+ float: left;
+ position: relative;
+ white-space: nowrap;
+ width: 20%; }
+ /* line 47, ../sass/forms/_elems.scss */
+ .form .form-row .value {
+ color: #cccccc; }
+ /* line 51, ../sass/forms/_elems.scss */
+ .form .form-row .controls {
+ float: left;
+ position: relative;
+ width: 79%; }
+ /* line 58, ../sass/forms/_elems.scss */
+ .form .form-row .field-hints {
+ color: #666666; }
+ /* line 62, ../sass/forms/_elems.scss */
+ .form .form-row .selector-list {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ background: rgba(0, 0, 0, 0.2);
+ position: relative;
+ height: 150px;
+ max-width: 50%; }
+ /* line 70, ../sass/forms/_elems.scss */
+ .form .form-row .selector-list .wrapper {
+ overflow-y: auto;
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ bottom: 5px;
+ left: 5px; }
+
+/* line 84, ../sass/forms/_elems.scss */
+label.form-control.checkbox input {
+ margin-right: 5px;
+ vertical-align: top; }
+
+/* line 90, ../sass/forms/_elems.scss */
+.hint {
+ font-size: 0.9em; }
+
+/* line 1, ../sass/forms/_textarea.scss */
+.edit-main textarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ background: #666666;
+ border: none;
+ border-bottom: 1px solid #999999;
+ color: #cccccc;
+ outline: none;
+ padding: 5px;
+ position: absolute;
+ height: 100%;
+ width: 100%; }
+ /* line 11, ../sass/forms/_mixins.scss */
+ .edit-main textarea.error {
+ background: rgba(255, 0, 0, 0.5); }
+
+/* line 1, ../sass/forms/_text-input.scss */
+input[type="text"] {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ background: #666666;
+ border: none;
+ border-bottom: 1px solid #999999;
+ color: #cccccc;
+ outline: none;
+ padding: 0 3px;
+ height: 22px;
+ line-height: 22px;
+ vertical-align: middle; }
+ /* line 11, ../sass/forms/_mixins.scss */
+ input[type="text"].error {
+ background: rgba(255, 0, 0, 0.5); }
+ /* line 6, ../sass/forms/_text-input.scss */
+ input[type="text"].numeric {
+ text-align: right; }
+
+/* line 1, ../sass/forms/_selects.scss */
+.form-control.select {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #404040));
+ background-image: -webkit-linear-gradient(#4d4d4d, #404040);
+ background-image: -moz-linear-gradient(#4d4d4d, #404040);
+ background-image: -o-linear-gradient(#4d4d4d, #404040);
+ background-image: linear-gradient(#4d4d4d, #404040);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #666666;
+ color: #999999;
+ display: inline-block;
+ margin-right: 5px;
+ margin-top: 1px;
+ padding: 0 25px 0 0;
+ position: relative;
+ overflow: hidden;
+ vertical-align: middle; }
+ /* line 82, ../sass/_mixins.scss */
+ .form-control.select:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #4d4d4d));
+ background-image: -webkit-linear-gradient(#666666, #4d4d4d);
+ background-image: -moz-linear-gradient(#666666, #4d4d4d);
+ background-image: -o-linear-gradient(#666666, #4d4d4d);
+ background-image: linear-gradient(#666666, #4d4d4d); }
+ /* line 11, ../sass/forms/_selects.scss */
+ .form-control.select span.arw {
+ display: block;
+ pointer-events: none;
+ position: absolute;
+ right: 8%;
+ top: 10%; }
+ /* line 18, ../sass/forms/_selects.scss */
+ .form-control.select select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: none;
+ box-shadow: none;
+ background-color: transparent;
+ background-image: none;
+ cursor: pointer;
+ padding: 3px 5px 4px 5px;
+ width: 150%; }
+ /* line 32, ../sass/forms/_selects.scss */
+ .form-control.select select:focus {
+ outline: none; }
+
+/* line 2, ../sass/forms/_channel-selector.scss */
+.channel-selector .line {
+ margin-bottom: 5px;
+ min-height: 22px; }
+/* line 6, ../sass/forms/_channel-selector.scss */
+.channel-selector .treeview {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ background: #666666;
+ border: none;
+ border-bottom: 1px solid #999999;
+ color: #cccccc;
+ outline: none;
+ padding: 0 3px;
+ background: #3b3b3b;
+ border-bottom: 1px solid #4d4d4d;
+ min-height: 300px;
+ max-height: 400px;
+ overflow: auto;
+ padding: 5px; }
+ /* line 11, ../sass/forms/_mixins.scss */
+ .channel-selector .treeview.error {
+ background: rgba(255, 0, 0, 0.5); }
+/* line 15, ../sass/forms/_channel-selector.scss */
+.channel-selector .btns-add-remove {
+ margin-top: 150px; }
+ /* line 18, ../sass/forms/_channel-selector.scss */
+ .channel-selector .btns-add-remove .btn {
+ display: block;
+ font-size: 1.5em;
+ margin-bottom: 5px;
+ padding: 10px;
+ text-align: center; }
+
+/* line 2, ../sass/forms/_datetime.scss */
+.complex.datetime span {
+ display: inline-block;
+ margin-right: 5px; }
+/* line 15, ../sass/forms/_datetime.scss */
+.complex.datetime .fields {
+ margin-top: 3px 0;
+ padding: 3px 0; }
+/* line 20, ../sass/forms/_datetime.scss */
+.complex.datetime .date {
+ width: 85px; }
+ /* line 23, ../sass/forms/_datetime.scss */
+ .complex.datetime .date input {
+ width: 80px; }
+/* line 29, ../sass/forms/_datetime.scss */
+.complex.datetime .time.sm {
+ width: 45px; }
+ /* line 32, ../sass/forms/_datetime.scss */
+ .complex.datetime .time.sm input {
+ width: 40px; }
+
+/* line 2, ../sass/forms/_filter.scss */
+.filter input.filter {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ background: #666666;
+ border: none;
+ border-bottom: 1px solid #999999;
+ color: #cccccc;
+ outline: none;
+ padding: 0 3px;
+ background: #3b3b3b;
+ border-bottom: 1px solid #4d4d4d; }
+ /* line 11, ../sass/forms/_mixins.scss */
+ .filter input.filter.error {
+ background: rgba(255, 0, 0, 0.5); }
+/* line 5, ../sass/forms/_filter.scss */
+.filter .icon.ui-symbol {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ display: inline-block;
+ font-size: 1.3em;
+ height: 22px;
+ line-height: 22px;
+ padding: 0px 5px;
+ vertical-align: middle; }
+ /* line 13, ../sass/forms/_filter.scss */
+ .filter .icon.ui-symbol:hover {
+ background: rgba(255, 255, 255, 0.1); }
+
+/* line 20, ../sass/forms/_filter.scss */
+.top-bar input.filter {
+ font-size: .8em;
+ height: 35px;
+ line-height: 35px;
+ margin-right: 5px;
+ margin-top: -5px;
+ padding-left: 10px;
+ padding-right: 10px; }
+/* line 31, ../sass/forms/_filter.scss */
+.top-bar .icon-filter {
+ font-size: 1.4em; }
diff --git a/platform/commonUI/general/res/css/items.css b/platform/commonUI/general/res/css/items.css
new file mode 100644
index 0000000000..2213cfea60
--- /dev/null
+++ b/platform/commonUI/general/res/css/items.css
@@ -0,0 +1,136 @@
+/* line 1, ../sass/items/_item.scss */
+.items-holder {
+ overflow: hidden;
+ *zoom: 1;
+ overflow-y: auto; }
+ /* line 5, ../sass/items/_item.scss */
+ .items-holder .item.grid-item {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #595959), color-stop(100%, #4d4d4d));
+ background-image: -webkit-linear-gradient(#595959, #4d4d4d);
+ background-image: -moz-linear-gradient(#595959, #4d4d4d);
+ background-image: -o-linear-gradient(#595959, #4d4d4d);
+ background-image: linear-gradient(#595959, #4d4d4d);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #737373;
+ color: #999999;
+ display: inline-block;
+ box-sizing: border-box;
+ cursor: pointer;
+ float: left;
+ height: 200px;
+ width: 200px;
+ margin-bottom: 3px;
+ margin-right: 3px;
+ position: relative; }
+ /* line 82, ../sass/_mixins.scss */
+ .items-holder .item.grid-item:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #737373), color-stop(100%, #595959));
+ background-image: -webkit-linear-gradient(#737373, #595959);
+ background-image: -moz-linear-gradient(#737373, #595959);
+ background-image: -o-linear-gradient(#737373, #595959);
+ background-image: linear-gradient(#737373, #595959); }
+ /* line 18, ../sass/items/_item.scss */
+ .items-holder .item.grid-item:hover .item-main .item-type {
+ color: #0099cc !important; }
+ /* line 21, ../sass/items/_item.scss */
+ .items-holder .item.grid-item:hover .item-main .item-open {
+ display: block; }
+ /* line 26, ../sass/items/_item.scss */
+ .items-holder .item.grid-item .bar.top-bar.abs {
+ bottom: auto;
+ height: 20px;
+ line-height: 20px;
+ z-index: 5; }
+ /* line 31, ../sass/items/_item.scss */
+ .items-holder .item.grid-item .bar.top-bar.abs .left, .items-holder .item.grid-item .bar.top-bar.abs .right {
+ width: auto; }
+ /* line 33, ../sass/items/_item.scss */
+ .items-holder .item.grid-item .bar.top-bar.abs .left .icon, .items-holder .item.grid-item .bar.top-bar.abs .right .icon {
+ margin-left: 5px; }
+ /* line 38, ../sass/items/_item.scss */
+ .items-holder .item.grid-item .bar.bottom-bar.abs {
+ top: auto;
+ height: 40px;
+ padding: 5px; }
+ /* line 44, ../sass/items/_item.scss */
+ .items-holder .item.grid-item .item-main {
+ z-index: 1; }
+ /* line 52, ../sass/items/_item.scss */
+ .items-holder .item.grid-item .item-main .item-type {
+ color: #737373;
+ text-align: center;
+ font-size: 7em;
+ line-height: 180px; }
+ /* line 58, ../sass/items/_item.scss */
+ .items-holder .item.grid-item .item-main .item-open {
+ display: none;
+ font-size: 5em;
+ line-height: 180px;
+ left: auto;
+ width: 30px; }
+ /* line 66, ../sass/items/_item.scss */
+ .items-holder .item.grid-item .title {
+ text-shadow: rgba(0, 0, 0, 0.1) 0 1px 2px;
+ color: #cccccc;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis; }
+ /* line 74, ../sass/items/_item.scss */
+ .items-holder .item.grid-item .details {
+ font-size: 0.8em; }
+ /* line 77, ../sass/items/_item.scss */
+ .items-holder .item.grid-item.selected {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #00bfff), color-stop(100%, #00ace6));
+ background-image: -webkit-linear-gradient(#00bfff, #00ace6);
+ background-image: -moz-linear-gradient(#00bfff, #00ace6);
+ background-image: -o-linear-gradient(#00bfff, #00ace6);
+ background-image: linear-gradient(#00bfff, #00ace6);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #33ccff;
+ color: #999999;
+ display: inline-block;
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #33ccff), color-stop(100%, #0099cc));
+ background-image: -webkit-linear-gradient(#33ccff, #0099cc);
+ background-image: -moz-linear-gradient(#33ccff, #0099cc);
+ background-image: -o-linear-gradient(#33ccff, #0099cc);
+ background-image: linear-gradient(#33ccff, #0099cc);
+ color: #80dfff; }
+ /* line 90, ../sass/_mixins.scss */
+ .items-holder .item.grid-item.selected:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #66d9ff), color-stop(100%, #00bfff));
+ background-image: -webkit-linear-gradient(#66d9ff, #00bfff);
+ background-image: -moz-linear-gradient(#66d9ff, #00bfff);
+ background-image: -o-linear-gradient(#66d9ff, #00bfff);
+ background-image: linear-gradient(#66d9ff, #00bfff); }
+ /* line 82, ../sass/items/_item.scss */
+ .items-holder .item.grid-item.selected .item-type, .items-holder .item.grid-item.selected .top-bar .icon:not(.alert) {
+ color: #80dfff; }
+ /* line 83, ../sass/items/_item.scss */
+ .items-holder .item.grid-item.selected .item-main .item-open {
+ color: #80dfff; }
+ /* line 84, ../sass/items/_item.scss */
+ .items-holder .item.grid-item.selected .title {
+ color: white; }
+ /* line 86, ../sass/items/_item.scss */
+ .items-holder .item.grid-item.selected:hover .item-main .item-type {
+ color: white !important; }
diff --git a/platform/commonUI/general/res/css/main.css b/platform/commonUI/general/res/css/main.css
new file mode 100644
index 0000000000..a674a4af3c
--- /dev/null
+++ b/platform/commonUI/general/res/css/main.css
@@ -0,0 +1,99 @@
+/*
+Syntax error: Undefined variable: "$colorBodyBg".
+ on line 66 of /Users/iMac/dev/nasa/wtd-dev/platform/sass/_effects.scss, in `boxOutline'
+ from line 7 of /Users/iMac/dev/nasa/wtd-dev/platform/sass/_effects.scss
+ from line 10 of /Users/iMac/dev/nasa/wtd-dev/platform/sass/main.scss
+
+Backtrace:
+/Users/iMac/dev/nasa/wtd-dev/platform/sass/_effects.scss:66:in `boxOutline'
+/Users/iMac/dev/nasa/wtd-dev/platform/sass/_effects.scss:7
+/Users/iMac/dev/nasa/wtd-dev/platform/sass/main.scss:10
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/script/variable.rb:49:in `_perform'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/script/node.rb:40:in `perform'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/script/funcall.rb:93:in `_perform'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/script/funcall.rb:93:in `map'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/script/funcall.rb:93:in `_perform'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/script/node.rb:40:in `perform'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:56:in `perform_arguments'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:50:in `zip'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:50:in `perform_arguments'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:261:in `visit_mixin'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `send'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:98:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:53:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:53:in `map'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:53:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:107:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:119:in `with_environment'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:106:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:318:in `visit_rule'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `send'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:98:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:225:in `visit_import'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:225:in `map'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:225:in `visit_import'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `send'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:98:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:53:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:53:in `map'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:53:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:107:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:119:in `with_environment'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:106:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:126:in `visit_root'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `send'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/base.rb:37:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:98:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:7:in `send'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/visitors/perform.rb:7:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/tree/root_node.rb:20:in `render'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/engine.rb:315:in `_render'
+/Library/Ruby/Gems/1.8/gems/sass-3.2.5/lib/sass/../sass/engine.rb:262:in `render'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:140:in `compile'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:126:in `timed'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:139:in `compile'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/logger.rb:45:in `red'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:138:in `compile'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:118:in `compile_if_required'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:103:in `run'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:101:in `each'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:101:in `run'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:126:in `timed'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/compiler.rb:100:in `run'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/commands/watch_project.rb:147:in `recompile'
+/Library/Ruby/Site/1.8/rubygems/custom_require.rb:36:in `to_proc'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/path.rb:73:in `call'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/path.rb:73:in `run_callback'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/path.rb:55:in `callback_action'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/path.rb:35:in `update'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/state/directory.rb:39:in `modified'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/state/directory.rb:37:in `each'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/state/directory.rb:37:in `modified'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/state/directory.rb:18:in `refresh'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/backends/polling.rb:17:in `run'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/backends/polling.rb:17:in `each'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/backends/polling.rb:17:in `run'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/backends/polling.rb:15:in `loop'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/backends/polling.rb:15:in `run'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm/monitor.rb:26:in `run'
+/Library/Ruby/Gems/1.8/gems/fssm-0.2.9/lib/fssm.rb:70:in `monitor'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/commands/watch_project.rb:87:in `perform'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/commands/base.rb:18:in `execute'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/commands/project_base.rb:19:in `execute'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/exec/sub_command_ui.rb:43:in `perform!'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/lib/compass/exec/sub_command_ui.rb:15:in `run!'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/bin/compass:30
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/bin/compass:44:in `call'
+/Library/Ruby/Gems/1.8/gems/compass-0.12.2/bin/compass:44
+/usr/bin/compass:23:in `load'
+/usr/bin/compass:23
+*/
+body:before {
+ white-space: pre;
+ font-family: monospace;
+ content: "Syntax error: Undefined variable: \"$colorBodyBg\".\A on line 66 of /Users/iMac/dev/nasa/wtd-dev/platform/sass/_effects.scss, in `boxOutline'\A from line 7 of /Users/iMac/dev/nasa/wtd-dev/platform/sass/_effects.scss\A from line 10 of /Users/iMac/dev/nasa/wtd-dev/platform/sass/main.scss"; }
diff --git a/platform/commonUI/general/res/css/normalize.min.css b/platform/commonUI/general/res/css/normalize.min.css
new file mode 100755
index 0000000000..378226f3f3
--- /dev/null
+++ b/platform/commonUI/general/res/css/normalize.min.css
@@ -0,0 +1 @@
+/*! normalize.css v1.1.2 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}
\ No newline at end of file
diff --git a/platform/commonUI/general/res/css/plots.css b/platform/commonUI/general/res/css/plots.css
new file mode 100644
index 0000000000..605345b283
--- /dev/null
+++ b/platform/commonUI/general/res/css/plots.css
@@ -0,0 +1,205 @@
+/* line 10, ../sass/plots/_plots-main.scss */
+.gl-plot {
+ color: #999999;
+ font-size: 0.7rem;
+ position: relative;
+ width: 100%;
+ height: 100%; }
+ /* line 17, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-axis-area {
+ position: absolute; }
+ /* line 20, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-axis-area.gl-plot-x {
+ top: auto;
+ right: 0;
+ bottom: 5px;
+ left: 60px;
+ height: 32px;
+ width: auto;
+ overflow: hidden; }
+ /* line 29, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-axis-area.gl-plot-y {
+ top: 29px;
+ right: auto;
+ bottom: 37px;
+ left: 0;
+ width: 60px; }
+ /* line 38, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-coords {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ background: rgba(255, 199, 0, 0.5);
+ color: #e6e6e6;
+ padding: 2px 5px;
+ position: absolute;
+ top: 39px;
+ right: auto;
+ bottom: auto;
+ left: 70px;
+ z-index: 10; }
+ /* line 50, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-coords:empty {
+ display: none; }
+ /* line 55, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-display-area {
+ position: absolute;
+ top: 29px;
+ right: 0;
+ bottom: 37px;
+ left: 60px;
+ cursor: crosshair;
+ border: 1px solid #4d4d4d; }
+ /* line 65, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-label {
+ color: #cccccc;
+ position: absolute;
+ text-align: center; }
+ /* line 72, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-label.gl-plot-x-label {
+ top: auto;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: auto; }
+ /* line 80, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-label.gl-plot-y-label {
+ -webkit-transform-origin: 50% 0;
+ -moz-transform-origin: 50% 0;
+ -ms-transform-origin: 50% 0;
+ -o-transform-origin: 50% 0;
+ transform-origin: 50% 0;
+ -webkit-transform: translateX(-50%) rotate(-90deg);
+ -moz-transform: translateX(-50%) rotate(-90deg);
+ -ms-transform: translateX(-50%) rotate(-90deg);
+ -o-transform: translateX(-50%) rotate(-90deg);
+ transform: translateX(-50%) rotate(-90deg);
+ display: inline-block;
+ margin-left: 5px;
+ left: 0;
+ top: 50%;
+ white-space: nowrap; }
+ /* line 93, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-y-options {
+ position: absolute;
+ top: 50%;
+ right: auto;
+ bottom: auto;
+ left: auto5px;
+ margin-top: -16px;
+ height: auto;
+ min-height: 32px;
+ width: 32px; }
+ /* line 107, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-hash {
+ position: absolute;
+ border: 0 rgba(255, 255, 255, 0.3) dashed; }
+ /* line 110, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-hash.hash-v {
+ border-right-width: 1px;
+ height: 100%; }
+ /* line 114, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-hash.hash-h {
+ border-bottom-width: 1px;
+ width: 100%; }
+ /* line 120, ../sass/plots/_plots-main.scss */
+ .gl-plot .gl-plot-legend {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: auto;
+ left: 0;
+ height: 24px;
+ overflow-x: hidden;
+ overflow-y: auto; }
+
+/* line 148, ../sass/plots/_plots-main.scss */
+.gl-plot-legend .plot-legend-item,
+.gl-plot-legend .legend-item,
+.legend .plot-legend-item,
+.legend .legend-item {
+ display: inline-block;
+ margin-right: 10px; }
+ /* line 151, ../sass/plots/_plots-main.scss */
+ .gl-plot-legend .plot-legend-item span,
+ .gl-plot-legend .legend-item span,
+ .legend .plot-legend-item span,
+ .legend .legend-item span {
+ vertical-align: middle; }
+ /* line 155, ../sass/plots/_plots-main.scss */
+ .gl-plot-legend .plot-legend-item .plot-color-swatch,
+ .gl-plot-legend .plot-legend-item .color-swatch,
+ .gl-plot-legend .legend-item .plot-color-swatch,
+ .gl-plot-legend .legend-item .color-swatch,
+ .legend .plot-legend-item .plot-color-swatch,
+ .legend .plot-legend-item .color-swatch,
+ .legend .legend-item .plot-color-swatch,
+ .legend .legend-item .color-swatch {
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ -ms-border-radius: 2px;
+ -o-border-radius: 2px;
+ border-radius: 2px;
+ display: inline-block;
+ height: 8px;
+ width: 8px;
+ margin-right: 3px; }
+
+/* line 169, ../sass/plots/_plots-main.scss */
+.tick {
+ position: absolute;
+ border: 0 rgba(255, 255, 255, 0.3) solid; }
+ /* line 172, ../sass/plots/_plots-main.scss */
+ .tick.tick-x {
+ border-right-width: 1px;
+ height: 100%; }
+
+/* line 180, ../sass/plots/_plots-main.scss */
+.gl-plot-tick,
+.tick-label {
+ font-size: 0.7rem;
+ position: absolute;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis; }
+ /* line 188, ../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 {
+ right: auto;
+ bottom: auto;
+ left: auto;
+ height: auto;
+ width: 20%;
+ margin-left: -10%;
+ text-align: center; }
+ /* line 198, ../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 {
+ top: auto;
+ height: 1em;
+ width: auto;
+ margin-bottom: -0.5em;
+ text-align: right; }
+
+/* line 209, ../sass/plots/_plots-main.scss */
+.gl-plot-tick.gl-plot-x-tick-label {
+ top: 5px; }
+/* line 212, ../sass/plots/_plots-main.scss */
+.gl-plot-tick.gl-plot-y-tick-label {
+ right: 5px;
+ left: 5px; }
+
+/* line 219, ../sass/plots/_plots-main.scss */
+.tick-label.tick-label-x {
+ top: 0; }
+/* line 222, ../sass/plots/_plots-main.scss */
+.tick-label.tick-label-y {
+ right: 0;
+ left: 0; }
diff --git a/platform/commonUI/general/res/css/theme-espresso.css b/platform/commonUI/general/res/css/theme-espresso.css
new file mode 100644
index 0000000000..7865432448
--- /dev/null
+++ b/platform/commonUI/general/res/css/theme-espresso.css
@@ -0,0 +1,2475 @@
+/* CONSTANTS */
+/* line 17, ../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font: inherit;
+ font-size: 100%;
+ vertical-align: baseline; }
+
+/* line 22, ../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */
+html {
+ line-height: 1; }
+
+/* line 24, ../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */
+ol, ul {
+ list-style: none; }
+
+/* line 26, ../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */
+table {
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+/* line 28, ../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */
+caption, th, td {
+ text-align: left;
+ font-weight: normal;
+ vertical-align: middle; }
+
+/* line 30, ../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */
+q, blockquote {
+ quotes: none; }
+/* line 103, ../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */
+q:before, q:after, blockquote:before, blockquote:after {
+ content: "";
+ content: none; }
+
+/* line 32, ../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */
+a img {
+ border: none; }
+
+/* line 116, ../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary {
+ display: block; }
+
+/* line 2, ../sass/_effects.scss */
+.disabled,
+a.disabled {
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30);
+ opacity: 0.3;
+ pointer-events: none !important;
+ cursor: default !important; }
+
+/* line 8, ../sass/_effects.scss */
+.incised {
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.8) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.8) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.8) 0 1px 5px;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3); }
+
+/* line 13, ../sass/_effects.scss */
+.outline {
+ border: 1px solid #666666; }
+
+/* line 17, ../sass/_effects.scss */
+.test {
+ background-color: rgba(255, 204, 0, 0.2); }
+
+@font-face {
+ /*
+ * Use http://www.fontsquirrel.com/tools/webfont-generator to gen fonts
+ * Use Advanced mode, be sure to check Fix Vertical Metrics
+ */
+ font-family: 'symbolsfont';
+ src: url("../fonts/symbols/wtdsymbols.eot");
+ src: url("../fonts/symbols/wtdsymbols.eot?#iefix") format("embedded-opentype"), url("../fonts/symbols/wtdsymbols.woff") format("woff"), url("../fonts/symbols/wtdsymbols.woff2") format("woff2"), url("../fonts/symbols/wtdsymbols.ttf") format("truetype"), url("../fonts/symbols/wtdsymbols.svg#armataregular") format("svg");
+ font-weight: normal;
+ font-style: normal; }
+
+/* line 17, ../sass/_global.scss */
+a {
+ color: #ccc;
+ cursor: pointer;
+ text-decoration: none; }
+/* line 21, ../sass/_global.scss */
+a:hover {
+ color: #fff; }
+
+/* line 26, ../sass/_global.scss */
+body, html {
+ background-color: #333333;
+ color: #999999;
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ margin: 5px;
+ overflow: hidden; }
+
+/* line 35, ../sass/_global.scss */
+em {
+ color: rgba(255, 255, 255, 0.2);
+ font-style: normal; }
+
+/* line 40, ../sass/_global.scss */
+input, textarea {
+ font-family: Helvetica, Arial, sans-serif; }
+
+/* line 44, ../sass/_global.scss */
+h1, h2, h3 {
+ margin: 0; }
+
+/* line 48, ../sass/_global.scss */
+h1 {
+ font-size: 1.7em;
+ font-weight: normal;
+ margin-bottom: 20px; }
+
+/* line 54, ../sass/_global.scss */
+span {
+ box-sizing: border-box; }
+
+/* line 58, ../sass/_global.scss */
+.abs {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: auto;
+ width: auto; }
+
+/* line 68, ../sass/_global.scss */
+.code {
+ font-family: "Lucida Console", monospace;
+ font-size: 0.7em;
+ line-height: 150%;
+ white-space: pre; }
+
+/* line 75, ../sass/_global.scss */
+.centered {
+ text-align: center; }
+
+/* line 79, ../sass/_global.scss */
+.colorKey {
+ color: #0099cc; }
+
+/* line 83, ../sass/_global.scss */
+.ds {
+ -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 4px 10px 2px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 4px 10px 2px;
+ box-shadow: rgba(0, 0, 0, 0.7) 0 4px 10px 2px; }
+
+/* line 88, ../sass/_global.scss */
+.hide,
+.hidden {
+ display: none !important; }
+
+/* line 1, ../sass/_fonts.scss */
+.ui-symbol {
+ font-family: 'symbolsfont'; }
+
+/* line 13, ../sass/user-environ/_layout.scss */
+.browse-area,
+.edit-area,
+.editor {
+ -webkit-border-radius: 4.5px;
+ -moz-border-radius: 4.5px;
+ -ms-border-radius: 4.5px;
+ -o-border-radius: 4.5px;
+ border-radius: 4.5px;
+ position: absolute; }
+
+/* line 24, ../sass/user-environ/_layout.scss */
+.user-environ .browse-area,
+.user-environ .edit-area,
+.user-environ .editor {
+ top: 45px;
+ right: 5px;
+ bottom: 30px;
+ left: 5px; }
+/* line 33, ../sass/user-environ/_layout.scss */
+.user-environ .edit-area .tool-bar {
+ bottom: auto;
+ height: 35px;
+ line-height: 33px; }
+/* line 38, ../sass/user-environ/_layout.scss */
+.user-environ .edit-area .work-area {
+ top: 45px; }
+/* line 43, ../sass/user-environ/_layout.scss */
+.user-environ .bottom-bar {
+ top: auto;
+ right: 5px;
+ bottom: 5px;
+ left: 5px;
+ height: 20px; }
+/* line 49, ../sass/user-environ/_layout.scss */
+.user-environ .bottom-bar .status-holder {
+ right: 100px; }
+/* line 52, ../sass/user-environ/_layout.scss */
+.user-environ .bottom-bar .app-logo {
+ left: auto;
+ width: 95px; }
+
+/* line 60, ../sass/user-environ/_layout.scss */
+.contents {
+ box-sizing: border-box;
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ bottom: 5px;
+ left: 5px; }
+/* line 68, ../sass/user-environ/_layout.scss */
+.contents.nomargin {
+ right: 0px;
+ bottom: 0px;
+ left: 0px; }
+
+/* line 77, ../sass/user-environ/_layout.scss */
+.bar .icon.major {
+ margin-right: 5px; }
+/* line 80, ../sass/user-environ/_layout.scss */
+.bar.abs {
+ text-wrap: none;
+ white-space: nowrap; }
+/* line 84, ../sass/user-environ/_layout.scss */
+.bar.abs.left,
+.bar.abs .left {
+ width: 45%;
+ right: auto; }
+/* line 89, ../sass/user-environ/_layout.scss */
+.bar.abs.right,
+.bar.abs .right {
+ width: 45%;
+ left: auto;
+ right: 0;
+ text-align: right; }
+/* line 94, ../sass/user-environ/_layout.scss */
+.bar.abs.right .icon.major,
+.bar.abs .right .icon.major {
+ margin-left: 15px; }
+
+/* line 104, ../sass/user-environ/_layout.scss */
+.cols {
+ overflow: hidden;
+ *zoom: 1; }
+/* line 106, ../sass/user-environ/_layout.scss */
+.cols .col {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ *zoom: 1;
+ float: left;
+ margin-left: 1.5%;
+ padding-left: 5px;
+ position: relative; }
+/* line 114, ../sass/user-environ/_layout.scss */
+.cols .col:first-child {
+ margin-left: 0;
+ padding-left: 0; }
+/* line 121, ../sass/user-environ/_layout.scss */
+.cols.cols-2 .col-1 {
+ min-width: 250px;
+ width: 48.5%; }
+/* line 127, ../sass/user-environ/_layout.scss */
+.cols.cols-16 .col-1 {
+ min-width: 31.25px;
+ width: 4.75%; }
+/* line 130, ../sass/user-environ/_layout.scss */
+.cols.cols-16 .col-2 {
+ min-width: 62.5px;
+ width: 11%; }
+/* line 133, ../sass/user-environ/_layout.scss */
+.cols.cols-16 .col-7 {
+ min-width: 218.75px;
+ width: 42.25%; }
+/* line 139, ../sass/user-environ/_layout.scss */
+.cols.cols-32 .col-2 {
+ min-width: 31.25px;
+ width: 4.75%; }
+/* line 142, ../sass/user-environ/_layout.scss */
+.cols.cols-32 .col-15 {
+ min-width: 234.375px;
+ width: 45.375%; }
+
+/* line 148, ../sass/user-environ/_layout.scss */
+.pane {
+ position: absolute; }
+/* line 151, ../sass/user-environ/_layout.scss */
+.pane.treeview .create-btn-holder {
+ bottom: auto;
+ height: 35px; }
+/* line 154, ../sass/user-environ/_layout.scss */
+.pane.treeview .tree-holder {
+ overflow: auto;
+ top: 40px; }
+/* line 163, ../sass/user-environ/_layout.scss */
+.pane.items .object-holder {
+ top: 40px; }
+/* line 168, ../sass/user-environ/_layout.scss */
+.pane.edit-main .object-holder {
+ top: 0; }
+/* line 174, ../sass/user-environ/_layout.scss */
+.pane .object-holder {
+ overflow: auto; }
+
+/* line 182, ../sass/user-environ/_layout.scss */
+.split-layout.horizontal > .pane {
+ margin-top: 5px; }
+/* line 184, ../sass/user-environ/_layout.scss */
+.split-layout.horizontal > .pane:first-child {
+ margin-top: 0; }
+/* line 191, ../sass/user-environ/_layout.scss */
+.split-layout.vertical > .pane {
+ margin-left: 5px; }
+/* line 193, ../sass/user-environ/_layout.scss */
+.split-layout.vertical > .pane > .holder {
+ left: 0;
+ right: 0; }
+/* line 197, ../sass/user-environ/_layout.scss */
+.split-layout.vertical > .pane:first-child {
+ margin-left: 0; }
+/* line 199, ../sass/user-environ/_layout.scss */
+.split-layout.vertical > .pane:first-child .holder {
+ right: 5px; }
+
+/* line 208, ../sass/user-environ/_layout.scss */
+.vscroll {
+ overflow-y: auto; }
+
+/* line 1, ../sass/_badges.scss */
+.badge {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffd233), color-stop(100%, #ffc700));
+ background-image: -webkit-linear-gradient(#ffd233, #ffc700);
+ background-image: -moz-linear-gradient(#ffd233, #ffc700);
+ background-image: -o-linear-gradient(#ffd233, #ffc700);
+ background-image: linear-gradient(#ffd233, #ffc700);
+ color: #333333;
+ display: inline-block;
+ text-align: center; }
+
+/* line 8, ../sass/_badges.scss */
+.top-bar .badge {
+ -webkit-border-radius: 4.5px;
+ -moz-border-radius: 4.5px;
+ -ms-border-radius: 4.5px;
+ -o-border-radius: 4.5px;
+ border-radius: 4.5px;
+ font-size: 1.4em;
+ height: 35px;
+ line-height: 35px;
+ margin-right: 5px;
+ width: 35px;
+ vertical-align: middle; }
+
+/* line 33, ../sass/_badges.scss */
+.super-menu .badge {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #00bfff), color-stop(100%, #0099cc));
+ background-image: -webkit-linear-gradient(#00bfff, #0099cc);
+ background-image: -moz-linear-gradient(#00bfff, #0099cc);
+ background-image: -o-linear-gradient(#00bfff, #0099cc);
+ background-image: linear-gradient(#00bfff, #0099cc);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ padding: 2px 7px; }
+
+/* line 1, ../sass/_icons.scss */
+.triangle {
+ width: 0;
+ height: 0;
+ border-top: 5px solid transparent;
+ border-left: 5px solid #0099cc;
+ border-bottom: 5px solid transparent; }
+/* line 5, ../sass/_icons.scss */
+.triangle.triangle-down {
+ width: 0;
+ height: 0;
+ border-left: 5px solid transparent;
+ border-top: 5px solid #0099cc;
+ border-right: 5px solid transparent; }
+
+/* line 12, ../sass/_icons.scss */
+.ui-symbol.icon {
+ color: #0099cc;
+ text-shadow: rgba(0, 0, 0, 0.1) 0 1px 2px; }
+/* line 15, ../sass/_icons.scss */
+.ui-symbol.icon.alert {
+ color: #ff3c00; }
+/* line 17, ../sass/_icons.scss */
+.ui-symbol.icon.alert:hover {
+ color: #ff8a66; }
+/* line 21, ../sass/_icons.scss */
+.ui-symbol.icon.major {
+ font-size: 1.65em; }
+
+/* line 33, ../sass/_icons.scss */
+.bar .icon {
+ display: inline-block; }
+
+/* line 37, ../sass/_icons.scss */
+.invoke-menu {
+ color: #0099cc;
+ display: inline-block;
+ font-size: 1rem;
+ vertical-align: middle; }
+/* line 123, ../sass/_mixins.scss */
+.invoke-menu:hover {
+ color: #33ccff; }
+
+/* line 45, ../sass/_icons.scss */
+.btn-menu .invoke-menu,
+.icon.major .invoke-menu {
+ margin-left: 5px; }
+
+/* line 49, ../sass/_icons.scss */
+.icon-buttons-main .invoke-menu {
+ color: #666666; }
+/* line 123, ../sass/_mixins.scss */
+.icon-buttons-main .invoke-menu:hover {
+ color: #999999; }
+
+/* line 57, ../sass/_icons.scss */
+.object-header .type-icon {
+ color: #ffc700; }
+
+/* line 64, ../sass/_icons.scss */
+.menu .type-icon,
+.tree-item .type-icon,
+.icon-btn .menu.dropdown .icon,
+.super-menu.menu.dropdown .icon {
+ font-size: 1.395rem;
+ line-height: 1.695rem;
+ position: absolute; }
+
+/* line 1, ../sass/lists/_tabular.scss */
+.w1 {
+ background: #4d4d4d;
+ padding-top: 20px;
+ position: relative; }
+
+/* line 6, ../sass/lists/_tabular.scss */
+.w2 {
+ background: #1a1a1a;
+ overflow-y: auto; }
+
+/* line 11, ../sass/lists/_tabular.scss */
+.tabular {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-spacing: 0;
+ border-collapse: collapse;
+ display: table;
+ font-size: 0.8em;
+ width: 100%; }
+/* line 18, ../sass/lists/_tabular.scss */
+.tabular .tr {
+ display: table-row; }
+/* line 20, ../sass/lists/_tabular.scss */
+.tabular .tr:first-child .td {
+ border-top: none; }
+/* line 23, ../sass/lists/_tabular.scss */
+.tabular .tr:hover {
+ background: rgba(255, 255, 255, 0.1); }
+/* line 26, ../sass/lists/_tabular.scss */
+.tabular .tr.header {
+ display: table-header-group; }
+/* line 28, ../sass/lists/_tabular.scss */
+.tabular .tr.header .th {
+ border: none;
+ color: transparent;
+ height: 0px;
+ line-height: 0;
+ padding: 0 5px;
+ white-space: nowrap;
+ vertical-align: middle; }
+/* line 36, ../sass/lists/_tabular.scss */
+.tabular .tr.header .th:first-child em {
+ border-left: none; }
+/* line 40, ../sass/lists/_tabular.scss */
+.tabular .tr.header .th.sort em:after {
+ display: inline-block;
+ font-family: symbolsfont;
+ margin-left: 5px; }
+/* line 45, ../sass/lists/_tabular.scss */
+.tabular .tr.header .th.sort.asc em:after {
+ content: '0'; }
+/* line 46, ../sass/lists/_tabular.scss */
+.tabular .tr.header .th.sort.desc em:after {
+ content: '1'; }
+/* line 48, ../sass/lists/_tabular.scss */
+.tabular .tr.header .th em {
+ border-left: 1px solid rgba(255, 255, 255, 0.1);
+ color: #b3b3b3;
+ cursor: pointer;
+ display: block;
+ font-style: normal;
+ font-weight: bold;
+ height: 20px;
+ line-height: 20px;
+ margin-left: -5px;
+ padding: 0 5px;
+ position: absolute;
+ top: 0;
+ vertical-align: middle; }
+/* line 63, ../sass/lists/_tabular.scss */
+.tabular .tr.header .th em:hover {
+ color: #e6e6e6; }
+/* line 69, ../sass/lists/_tabular.scss */
+.tabular .tr .th, .tabular .tr .td {
+ display: table-cell; }
+/* line 72, ../sass/lists/_tabular.scss */
+.tabular .tr .td {
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ padding: 2px 5px; }
+/* line 75, ../sass/lists/_tabular.scss */
+.tabular .tr .td.numeric {
+ text-align: right; }
+
+/*********************************** TYPE STYLES */
+/* line 4, ../sass/controls/_buttons.scss */
+.t-btn {
+ cursor: pointer; }
+
+/*********************************** STYLE STYLES */
+/* line 10, ../sass/controls/_buttons.scss */
+.s-btn, .s-icon-btn {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ text-shadow: rgba(0, 0, 0, 0.3) 0 1px 1px;
+ line-height: 1.2em;
+ padding: 0 10px;
+ text-decoration: none; }
+/* line 18, ../sass/controls/_buttons.scss */
+.s-btn.s-very-subtle, .s-very-subtle.s-icon-btn {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #404040));
+ background-image: -webkit-linear-gradient(#4d4d4d, #404040);
+ background-image: -moz-linear-gradient(#4d4d4d, #404040);
+ background-image: -o-linear-gradient(#4d4d4d, #404040);
+ background-image: linear-gradient(#4d4d4d, #404040);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #666666;
+ color: #999999;
+ display: inline-block; }
+/* line 37, ../sass/_mixins.scss */
+.s-btn.s-very-subtle:hover, .s-very-subtle.s-icon-btn:hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #595959));
+ background-image: -webkit-linear-gradient(#666666, #595959);
+ background-image: -moz-linear-gradient(#666666, #595959);
+ background-image: -o-linear-gradient(#666666, #595959);
+ background-image: linear-gradient(#666666, #595959); }
+
+/* line 23, ../sass/controls/_buttons.scss */
+.s-icon-btn {
+ font-size: 1.2em; }
+/* line 26, ../sass/controls/_buttons.scss */
+.s-icon-btn .icon {
+ color: #0099cc; }
+/* line 30, ../sass/controls/_buttons.scss */
+.s-icon-btn:not(.disabled):hover .icon {
+ color: #33ccff; }
+/* line 34, ../sass/controls/_buttons.scss */
+.s-icon-btn.labeled {
+ padding: 0 5px; }
+/* line 36, ../sass/controls/_buttons.scss */
+.s-icon-btn.labeled .icon {
+ font-size: 1.5em; }
+/* line 39, ../sass/controls/_buttons.scss */
+.s-icon-btn.labeled .title-label {
+ margin-left: 5px; }
+
+/*********************************** LAYOUT STYLES */
+/* line 50, ../sass/controls/_buttons.scss */
+span.l-btn,
+span.l-btn span,
+a.l-btn,
+a.l-btn span {
+ display: inline-block; }
+
+/* line 3, ../sass/controls/_controls.scss */
+.control.view-control .icon {
+ display: inline-block;
+ margin: -1px 5px 1px 2px;
+ vertical-align: middle; }
+/* line 7, ../sass/controls/_controls.scss */
+.control.view-control .icon.triangle-down {
+ margin: 2px 2px -2px 0px; }
+/* line 12, ../sass/controls/_controls.scss */
+.control.view-control .label {
+ display: inline-block;
+ font-size: 11px;
+ vertical-align: middle; }
+/* line 18, ../sass/controls/_controls.scss */
+.control.view-control .toggle {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ display: inline-block;
+ padding: 1px 6px 4px 4px; }
+/* line 22, ../sass/controls/_controls.scss */
+.control.view-control .toggle:hover {
+ background: rgba(255, 255, 255, 0.1); }
+
+/* line 29, ../sass/controls/_controls.scss */
+.accordion {
+ margin-top: 5px; }
+/* line 32, ../sass/controls/_controls.scss */
+.accordion:first-child {
+ margin-top: 0; }
+/* line 35, ../sass/controls/_controls.scss */
+.accordion .accordion-head {
+ -webkit-border-radius: 2.25px;
+ -moz-border-radius: 2.25px;
+ -ms-border-radius: 2.25px;
+ -o-border-radius: 2.25px;
+ border-radius: 2.25px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ background: rgba(153, 153, 153, 0.2);
+ cursor: pointer;
+ font-size: 0.75em;
+ line-height: 18px;
+ margin-bottom: 5px;
+ padding: 0 5px;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: auto;
+ left: 0;
+ width: auto;
+ height: 18px;
+ text-transform: uppercase; }
+/* line 49, ../sass/controls/_controls.scss */
+.accordion .accordion-head:hover {
+ background: rgba(153, 153, 153, 0.4); }
+/* line 52, ../sass/controls/_controls.scss */
+.accordion .accordion-head:after {
+ content: "^";
+ display: block;
+ font-family: 'symbolsfont';
+ font-size: 1.2em;
+ position: absolute;
+ right: 5px;
+ text-transform: none;
+ top: 0; }
+/* line 62, ../sass/controls/_controls.scss */
+.accordion .accordion-head:not(.expanded):after {
+ content: "v"; }
+/* line 66, ../sass/controls/_controls.scss */
+.accordion .accordion-contents {
+ position: absolute;
+ top: 23px;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ overflow-y: auto;
+ overflow-x: hidden; }
+
+/* line 74, ../sass/controls/_controls.scss */
+.btn {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ text-shadow: rgba(0, 0, 0, 0.3) 0 1px 1px;
+ padding: 0 10px;
+ text-decoration: none; }
+/* line 84, ../sass/controls/_controls.scss */
+.btn.create-btn {
+ height: 35px;
+ line-height: 35px;
+ font-size: 1.1em;
+ padding: 0 15px 0 10px; }
+/* line 90, ../sass/controls/_controls.scss */
+.btn.create-btn .menu {
+ margin-left: -10px; }
+/* line 93, ../sass/controls/_controls.scss */
+.btn.create-btn .ui-symbol.major {
+ font-size: 1.1em; }
+/* line 97, ../sass/controls/_controls.scss */
+.btn.major {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #00bfff), color-stop(100%, #00ace6));
+ background-image: -webkit-linear-gradient(#00bfff, #00ace6);
+ background-image: -moz-linear-gradient(#00bfff, #00ace6);
+ background-image: -o-linear-gradient(#00bfff, #00ace6);
+ background-image: linear-gradient(#00bfff, #00ace6);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #33ccff;
+ color: #999999;
+ display: inline-block;
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #33ccff), color-stop(100%, #0099cc));
+ background-image: -webkit-linear-gradient(#33ccff, #0099cc);
+ background-image: -moz-linear-gradient(#33ccff, #0099cc);
+ background-image: -o-linear-gradient(#33ccff, #0099cc);
+ background-image: linear-gradient(#33ccff, #0099cc);
+ color: #ccf2ff; }
+/* line 90, ../sass/_mixins.scss */
+.btn.major:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #66d9ff), color-stop(100%, #00bfff));
+ background-image: -webkit-linear-gradient(#66d9ff, #00bfff);
+ background-image: -moz-linear-gradient(#66d9ff, #00bfff);
+ background-image: -o-linear-gradient(#66d9ff, #00bfff);
+ background-image: linear-gradient(#66d9ff, #00bfff); }
+/* line 102, ../sass/controls/_controls.scss */
+.btn.major:hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #1ac6ff), color-stop(100%, #00bfff));
+ background-image: -webkit-linear-gradient(#1ac6ff, #00bfff);
+ background-image: -moz-linear-gradient(#1ac6ff, #00bfff);
+ background-image: -o-linear-gradient(#1ac6ff, #00bfff);
+ background-image: linear-gradient(#1ac6ff, #00bfff);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #4dd2ff;
+ color: #999999;
+ display: inline-block;
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4dd2ff), color-stop(100%, #00ace6));
+ background-image: -webkit-linear-gradient(#4dd2ff, #00ace6);
+ background-image: -moz-linear-gradient(#4dd2ff, #00ace6);
+ background-image: -o-linear-gradient(#4dd2ff, #00ace6);
+ background-image: linear-gradient(#4dd2ff, #00ace6);
+ color: #ccf2ff; }
+/* line 90, ../sass/_mixins.scss */
+.btn.major:hover:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #80dfff), color-stop(100%, #1ac6ff));
+ background-image: -webkit-linear-gradient(#80dfff, #1ac6ff);
+ background-image: -moz-linear-gradient(#80dfff, #1ac6ff);
+ background-image: -o-linear-gradient(#80dfff, #1ac6ff);
+ background-image: linear-gradient(#80dfff, #1ac6ff); }
+/* line 106, ../sass/controls/_controls.scss */
+.btn.major .invoke-menu {
+ color: #ccf2ff; }
+/* line 110, ../sass/controls/_controls.scss */
+.btn.normal {
+ padding: 5px 7px; }
+/* line 114, ../sass/controls/_controls.scss */
+.btn.outline:hover {
+ background: rgba(255, 255, 255, 0.1); }
+/* line 118, ../sass/controls/_controls.scss */
+.btn.subtle {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #808080), color-stop(100%, #737373));
+ background-image: -webkit-linear-gradient(#808080, #737373);
+ background-image: -moz-linear-gradient(#808080, #737373);
+ background-image: -o-linear-gradient(#808080, #737373);
+ background-image: linear-gradient(#808080, #737373);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #999999;
+ color: #cccccc;
+ display: inline-block; }
+/* line 82, ../sass/_mixins.scss */
+.btn.subtle:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #999999), color-stop(100%, #808080));
+ background-image: -webkit-linear-gradient(#999999, #808080);
+ background-image: -moz-linear-gradient(#999999, #808080);
+ background-image: -o-linear-gradient(#999999, #808080);
+ background-image: linear-gradient(#999999, #808080); }
+/* line 122, ../sass/controls/_controls.scss */
+.btn.very-subtle {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #404040));
+ background-image: -webkit-linear-gradient(#4d4d4d, #404040);
+ background-image: -moz-linear-gradient(#4d4d4d, #404040);
+ background-image: -o-linear-gradient(#4d4d4d, #404040);
+ background-image: linear-gradient(#4d4d4d, #404040);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #666666;
+ color: #b3b3b3;
+ display: inline-block; }
+/* line 82, ../sass/_mixins.scss */
+.btn.very-subtle:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #4d4d4d));
+ background-image: -webkit-linear-gradient(#666666, #4d4d4d);
+ background-image: -moz-linear-gradient(#666666, #4d4d4d);
+ background-image: -o-linear-gradient(#666666, #4d4d4d);
+ background-image: linear-gradient(#666666, #4d4d4d); }
+/* line 125, ../sass/controls/_controls.scss */
+.btn.lg {
+ -webkit-border-radius: 4.5px;
+ -moz-border-radius: 4.5px;
+ -ms-border-radius: 4.5px;
+ -o-border-radius: 4.5px;
+ border-radius: 4.5px;
+ font-size: 1.2em;
+ padding: 7px 25px; }
+/* line 131, ../sass/controls/_controls.scss */
+.btn.icon-btn .icon {
+ color: #0099cc; }
+/* line 135, ../sass/controls/_controls.scss */
+.btn.icon-btn:not(.disabled):hover .icon {
+ color: #33ccff; }
+
+/* line 145, ../sass/controls/_controls.scss */
+.btn-bar .btn,
+.btn-bar .btn-set,
+.btn-bar .t-btn {
+ display: inline-block;
+ margin-left: 5px; }
+
+/* line 157, ../sass/controls/_controls.scss */
+.control-group {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-left: 1px solid #4d4d4d;
+ padding: 0 5px;
+ position: relative; }
+/* line 164, ../sass/controls/_controls.scss */
+.control-group:first-child {
+ border-left: none;
+ padding-left: 0; }
+
+/* line 170, ../sass/controls/_controls.scss */
+.btn-set {
+ display: inline-block;
+ position: relative; }
+/* line 175, ../sass/controls/_controls.scss */
+.btn-set .btn,
+.btn-set .t-btn {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+ border-left: 1px solid #666666;
+ margin-left: 0; }
+/* line 179, ../sass/controls/_controls.scss */
+.btn-set .btn:first-child,
+.btn-set .t-btn:first-child {
+ border-left: none;
+ -moz-border-radius-topleft: 3px;
+ -webkit-border-top-left-radius: 3px;
+ border-top-left-radius: 3px;
+ -moz-border-radius-bottomleft: 3px;
+ -webkit-border-bottom-left-radius: 3px;
+ border-bottom-left-radius: 3px; }
+/* line 183, ../sass/controls/_controls.scss */
+.btn-set .btn:last-child,
+.btn-set .t-btn:last-child {
+ -moz-border-radius-topright: 3px;
+ -webkit-border-top-right-radius: 3px;
+ border-top-right-radius: 3px;
+ -moz-border-radius-bottomright: 3px;
+ -webkit-border-bottom-right-radius: 3px;
+ border-bottom-right-radius: 3px; }
+
+/* line 194, ../sass/controls/_controls.scss */
+.object-browse-bar .btn,
+.object-browse-bar .t-btn,
+.top-bar .buttons-main .btn,
+.top-bar .buttons-main .t-btn,
+.tool-bar .btn,
+.tool-bar .t-btn {
+ display: inline-block;
+ font-size: 12.6px;
+ height: 28px;
+ line-height: 28px; }
+/* line 200, ../sass/controls/_controls.scss */
+.object-browse-bar .btn .icon:not(.invoke-menu),
+.object-browse-bar .t-btn .icon:not(.invoke-menu),
+.top-bar .buttons-main .btn .icon:not(.invoke-menu),
+.top-bar .buttons-main .t-btn .icon:not(.invoke-menu),
+.tool-bar .btn .icon:not(.invoke-menu),
+.tool-bar .t-btn .icon:not(.invoke-menu) {
+ font-size: 150%;
+ vertical-align: middle; }
+
+/* line 208, ../sass/controls/_controls.scss */
+label.checkbox.custom {
+ cursor: pointer;
+ display: inline-block;
+ line-height: 14px;
+ margin-right: 20px;
+ padding-left: 19px;
+ position: relative; }
+/* line 218, ../sass/controls/_controls.scss */
+label.checkbox.custom em {
+ color: #999999;
+ display: inline-block;
+ height: 14px;
+ min-width: 14px; }
+/* line 223, ../sass/controls/_controls.scss */
+label.checkbox.custom em:before {
+ -webkit-border-radius: 2.25px;
+ -moz-border-radius: 2.25px;
+ -ms-border-radius: 2.25px;
+ -o-border-radius: 2.25px;
+ border-radius: 2.25px;
+ background: #666666;
+ border-bottom: 1px solid gray;
+ box-sizing: border-box;
+ content: " ";
+ font-family: 'symbolsfont';
+ font-size: 0.8em;
+ display: inline-block;
+ margin-right: 5px;
+ height: 14px;
+ width: 14px;
+ left: 0;
+ top: 0;
+ position: absolute;
+ text-align: center; }
+/* line 241, ../sass/controls/_controls.scss */
+label.checkbox.custom.no-text {
+ overflow: hidden;
+ margin-right: 0;
+ padding-left: 0;
+ height: 14px;
+ width: 14px; }
+/* line 247, ../sass/controls/_controls.scss */
+label.checkbox.custom.no-text em {
+ overflow: hidden; }
+/* line 251, ../sass/controls/_controls.scss */
+label.checkbox.custom input {
+ display: none; }
+/* line 253, ../sass/controls/_controls.scss */
+label.checkbox.custom input:checked ~ em:before {
+ background: #0099cc;
+ color: #ccf2ff;
+ content: "2"; }
+
+/* line 261, ../sass/controls/_controls.scss */
+.input-labeled {
+ margin-left: 5px; }
+/* line 263, ../sass/controls/_controls.scss */
+.input-labeled label {
+ display: inline-block;
+ margin-right: 3px; }
+/* line 267, ../sass/controls/_controls.scss */
+.input-labeled.inline {
+ display: inline-block; }
+/* line 270, ../sass/controls/_controls.scss */
+.input-labeled:first-child {
+ margin-left: 0; }
+
+/* line 275, ../sass/controls/_controls.scss */
+.btn-menu label.checkbox.custom {
+ margin-left: 5px; }
+
+/* line 280, ../sass/controls/_controls.scss */
+.item .checkbox.checked label {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ border-bottom: none; }
+
+/* line 286, ../sass/controls/_controls.scss */
+.btn-menu {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #404040));
+ background-image: -webkit-linear-gradient(#4d4d4d, #404040);
+ background-image: -moz-linear-gradient(#4d4d4d, #404040);
+ background-image: -o-linear-gradient(#4d4d4d, #404040);
+ background-image: linear-gradient(#4d4d4d, #404040);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #666666;
+ color: #999999;
+ display: inline-block;
+ height: 20px;
+ line-height: 20px; }
+/* line 82, ../sass/_mixins.scss */
+.btn-menu:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #4d4d4d));
+ background-image: -webkit-linear-gradient(#666666, #4d4d4d);
+ background-image: -moz-linear-gradient(#666666, #4d4d4d);
+ background-image: -o-linear-gradient(#666666, #4d4d4d);
+ background-image: linear-gradient(#666666, #4d4d4d); }
+/* line 293, ../sass/controls/_controls.scss */
+.btn-menu.dropdown {
+ padding-right: 7px; }
+/* line 298, ../sass/controls/_controls.scss */
+.btn-menu:not(.disabled):hover {
+ color: #cccccc; }
+/* line 302, ../sass/controls/_controls.scss */
+.btn-menu.btn-invoke-menu {
+ color: #0099cc;
+ padding: 0 5px; }
+/* line 306, ../sass/controls/_controls.scss */
+.btn-menu.btn-invoke-menu:hover {
+ color: deepskyblue; }
+/* line 311, ../sass/controls/_controls.scss */
+.btn-menu .type-icon {
+ margin-right: 5px; }
+/* line 314, ../sass/controls/_controls.scss */
+.btn-menu .menu {
+ text-align: left; }
+/* line 317, ../sass/controls/_controls.scss */
+.btn-menu .menu .ui-symbol.icon {
+ width: 12px; }
+
+/* line 323, ../sass/controls/_controls.scss */
+.top-bar .btn-menu {
+ height: 35px;
+ line-height: 35px;
+ padding-right: 10px; }
+/* line 331, ../sass/controls/_controls.scss */
+.top-bar .btn-menu.browse-btn {
+ margin-right: 5px;
+ padding-left: 35px; }
+/* line 334, ../sass/controls/_controls.scss */
+.top-bar .btn-menu.browse-btn .badge {
+ -webkit-border-radius: 4.5px;
+ -moz-border-radius: 4.5px;
+ -ms-border-radius: 4.5px;
+ -o-border-radius: 4.5px;
+ border-radius: 4.5px;
+ display: block;
+ font-size: 1em;
+ line-height: 25px;
+ position: absolute;
+ top: 5px;
+ left: 5px;
+ bottom: 5px;
+ right: auto;
+ width: 25px;
+ height: auto; }
+
+/******************************************************** OBJECT-HEADER */
+/* line 351, ../sass/controls/_controls.scss */
+.object-header {
+ display: inline-block;
+ font-size: 1em; }
+/* line 354, ../sass/controls/_controls.scss */
+.object-header .title {
+ color: white; }
+/* line 357, ../sass/controls/_controls.scss */
+.object-header .type-icon {
+ font-size: 1.5em;
+ margin-right: 5px;
+ vertical-align: middle; }
+
+/* line 366, ../sass/controls/_controls.scss */
+.top-bar .object-header,
+.object-browse-bar .object-header {
+ font-size: 1.2em; }
+/* line 368, ../sass/controls/_controls.scss */
+.top-bar .object-header span,
+.object-browse-bar .object-header span {
+ display: inline-block;
+ margin-right: 5px; }
+
+/******************************************************** VIEW-CONTROLS */
+/* line 377, ../sass/controls/_controls.scss */
+.view-controls .view-type {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ box-sizing: border-box;
+ display: inline-block;
+ margin-left: 5px;
+ height: 20px;
+ line-height: 20px;
+ padding-left: 5px;
+ padding-right: 5px; }
+/* line 388, ../sass/controls/_controls.scss */
+.view-controls .view-type.cur {
+ background: #666666; }
+
+/* line 393, ../sass/controls/_controls.scss */
+.edit-mode .top-bar .control-set.edit-view-controls {
+ margin-right: 50px; }
+
+/******************************************************** SLIDERS */
+/* line 404, ../sass/controls/_controls.scss */
+.slider .slot {
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ -ms-border-radius: 2px;
+ -o-border-radius: 2px;
+ border-radius: 2px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px;
+ background-color: rgba(0, 0, 0, 0.4);
+ border-bottom: 1px solid rgba(77, 77, 77, 0.4);
+ border-right: 1px solid rgba(77, 77, 77, 0.4);
+ height: 50%;
+ width: auto;
+ position: absolute;
+ top: 25%;
+ right: 0;
+ bottom: auto;
+ left: 0; }
+/* line 415, ../sass/controls/_controls.scss */
+.slider .knob {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #404040));
+ background-image: -webkit-linear-gradient(#4d4d4d, #404040);
+ background-image: -moz-linear-gradient(#4d4d4d, #404040);
+ background-image: -o-linear-gradient(#4d4d4d, #404040);
+ background-image: linear-gradient(#4d4d4d, #404040);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #666666;
+ color: #999999;
+ display: inline-block;
+ cursor: ew-resize;
+ position: absolute;
+ height: 100%;
+ width: 12px;
+ top: 0;
+ auto: 0;
+ bottom: auto;
+ left: auto; }
+/* line 82, ../sass/_mixins.scss */
+.slider .knob:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #4d4d4d));
+ background-image: -webkit-linear-gradient(#666666, #4d4d4d);
+ background-image: -moz-linear-gradient(#666666, #4d4d4d);
+ background-image: -o-linear-gradient(#666666, #4d4d4d);
+ background-image: linear-gradient(#666666, #4d4d4d); }
+/* line 54, ../sass/_mixins.scss */
+.slider .knob:before {
+ content: '';
+ display: block;
+ height: auto;
+ position: absolute;
+ z-index: 2;
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ left: 2px;
+ bottom: 5px;
+ top: 5px; }
+/* line 75, ../sass/_mixins.scss */
+.slider .knob:not(.disabled):hover:before {
+ border-color: rgba(0, 153, 204, 0.9); }
+/* line 426, ../sass/controls/_controls.scss */
+.slider .knob:before {
+ top: 1px;
+ bottom: 3px;
+ left: 5px; }
+/* line 433, ../sass/controls/_controls.scss */
+.slider .range {
+ background: rgba(0, 153, 204, 0.6);
+ cursor: ew-resize;
+ position: absolute;
+ top: 0;
+ right: auto;
+ bottom: 0;
+ left: auto;
+ height: auto;
+ width: auto; }
+/* line 443, ../sass/controls/_controls.scss */
+.slider .range:hover {
+ background: rgba(0, 153, 204, 0.7); }
+
+/******************************************************** BROWSER ELEMENTS */
+/* line 451, ../sass/controls/_controls.scss */
+::-webkit-scrollbar {
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ -ms-border-radius: 2px;
+ -o-border-radius: 2px;
+ border-radius: 2px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px;
+ background-color: rgba(0, 0, 0, 0.4);
+ border-bottom: 1px solid rgba(77, 77, 77, 0.4);
+ border-right: 1px solid rgba(77, 77, 77, 0.4);
+ height: 10px;
+ width: 10px; }
+
+/* line 457, ../sass/controls/_controls.scss */
+::-webkit-scrollbar-thumb {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 20, color-stop(0%, #666666), color-stop(100%, #595959));
+ background-image: -webkit-linear-gradient(#666666, #595959 20px);
+ background-image: -moz-linear-gradient(#666666, #595959 20px);
+ background-image: -o-linear-gradient(#666666, #595959 20px);
+ background-image: linear-gradient(#666666, #595959 20px);
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ -ms-border-radius: 1px;
+ -o-border-radius: 1px;
+ border-radius: 1px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid gray; }
+/* line 464, ../sass/controls/_controls.scss */
+::-webkit-scrollbar-thumb:hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 20, color-stop(0%, #808080), color-stop(100%, #737373));
+ background-image: -webkit-linear-gradient(#808080, #737373 20px);
+ background-image: -moz-linear-gradient(#808080, #737373 20px);
+ background-image: -o-linear-gradient(#808080, #737373 20px);
+ background-image: linear-gradient(#808080, #737373 20px); }
+
+/* line 469, ../sass/controls/_controls.scss */
+::-webkit-scrollbar-corner {
+ background: rgba(0, 0, 0, 0.4); }
+
+/* line 2, ../sass/controls/_lists.scss */
+.checkbox-list label.checkbox.custom {
+ display: block;
+ margin-bottom: 5px; }
+/* line 6, ../sass/controls/_lists.scss */
+.checkbox-list li {
+ margin-bottom: 5px; }
+
+/******************************************************** MENUS */
+/* line 2, ../sass/controls/_menus.scss */
+.menu-element {
+ cursor: pointer;
+ position: relative; }
+/* line 8, ../sass/controls/_menus.scss */
+.menu-element .menu {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #595959), color-stop(100%, #4d4d4d));
+ background-image: -webkit-linear-gradient(#595959, #4d4d4d);
+ background-image: -moz-linear-gradient(#595959, #4d4d4d);
+ background-image: -o-linear-gradient(#595959, #4d4d4d);
+ background-image: linear-gradient(#595959, #4d4d4d);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #737373;
+ color: #999999;
+ display: inline-block;
+ text-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
+ display: block;
+ padding: 3px 0;
+ position: absolute;
+ z-index: 10; }
+/* line 16, ../sass/controls/_menus.scss */
+.menu-element .menu ul {
+ margin: 0;
+ padding: 0; }
+/* line 131, ../sass/_mixins.scss */
+.menu-element .menu ul li {
+ list-style-type: none;
+ margin: 0;
+ padding: 0; }
+/* line 18, ../sass/controls/_menus.scss */
+.menu-element .menu ul li {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-top: 1px solid #737373;
+ line-height: 1.5rem;
+ padding: 3px 10px 3px 32px;
+ white-space: nowrap; }
+/* line 25, ../sass/controls/_menus.scss */
+.menu-element .menu ul li:first-child {
+ border: none; }
+/* line 28, ../sass/controls/_menus.scss */
+.menu-element .menu ul li:hover {
+ background: #737373; }
+/* line 30, ../sass/controls/_menus.scss */
+.menu-element .menu ul li:hover a {
+ color: white; }
+/* line 33, ../sass/controls/_menus.scss */
+.menu-element .menu ul li:hover .icon {
+ color: #33ccff; }
+/* line 37, ../sass/controls/_menus.scss */
+.menu-element .menu ul li a {
+ color: #d9d9d9;
+ display: block; }
+/* line 41, ../sass/controls/_menus.scss */
+.menu-element .menu ul li .type-icon {
+ left: 10px; }
+/* line 47, ../sass/controls/_menus.scss */
+.menu-element .super-menu {
+ width: 400px;
+ height: 420px; }
+/* line 54, ../sass/controls/_menus.scss */
+.menu-element .super-menu .contents {
+ overflow: none; }
+/* line 55, ../sass/controls/_menus.scss */
+.menu-element .super-menu .pane {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box; }
+/* line 57, ../sass/controls/_menus.scss */
+.menu-element .super-menu .pane.left {
+ border-right: 1px solid rgba(255, 255, 255, 0.2);
+ left: 0;
+ padding-right: 5px;
+ right: auto;
+ width: 220.0px;
+ overflow-x: hidden;
+ overflow-y: auto; }
+/* line 67, ../sass/controls/_menus.scss */
+.menu-element .super-menu .pane.left ul li {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ border-top: none; }
+/* line 73, ../sass/controls/_menus.scss */
+.menu-element .super-menu .pane.left ul li:hover {
+ background: #737373; }
+/* line 76, ../sass/controls/_menus.scss */
+.menu-element .super-menu .pane.left ul li .icon {
+ text-shadow: rgba(0, 0, 0, 0.4) 0 1px 2px;
+ left: 5px; }
+/* line 83, ../sass/controls/_menus.scss */
+.menu-element .super-menu .pane.right {
+ left: 220.0px;
+ right: 0;
+ padding: 15px;
+ width: auto; }
+/* line 94, ../sass/controls/_menus.scss */
+.menu-element .menu-item-description .desc-area.icon {
+ position: relative;
+ color: #8c8c8c;
+ font-size: 8em;
+ left: 0;
+ height: 150px;
+ line-height: 150px; }
+/* line 107, ../sass/controls/_menus.scss */
+.menu-element .menu-item-description .desc-area.description {
+ color: #8c8c8c;
+ font-size: 0.8em; }
+/* line 111, ../sass/controls/_menus.scss */
+.menu-element .menu-item-description .desc-area.title {
+ color: #d9d9d9;
+ font-size: 1.2em;
+ margin-bottom: 1rem; }
+/* line 118, ../sass/controls/_menus.scss */
+.menu-element .context-menu {
+ font-size: 0.80rem;
+ pointer-events: auto; }
+/* line 124, ../sass/controls/_menus.scss */
+.menu-element .context-menu.menu {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #8c8c8c), color-stop(100%, #808080));
+ background-image: -webkit-linear-gradient(#8c8c8c, #808080);
+ background-image: -moz-linear-gradient(#8c8c8c, #808080);
+ background-image: -o-linear-gradient(#8c8c8c, #808080);
+ background-image: linear-gradient(#8c8c8c, #808080);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #a6a6a6;
+ color: #999999;
+ display: inline-block; }
+/* line 126, ../sass/controls/_menus.scss */
+.menu-element .context-menu.menu ul li {
+ padding-left: 30px; }
+/* line 128, ../sass/controls/_menus.scss */
+.menu-element .context-menu.menu ul li a {
+ color: white; }
+/* line 129, ../sass/controls/_menus.scss */
+.menu-element .context-menu.menu ul li .icon {
+ color: #1ac6ff; }
+/* line 132, ../sass/controls/_menus.scss */
+.menu-element .context-menu.menu ul li .type-icon {
+ left: 5px; }
+/* line 135, ../sass/controls/_menus.scss */
+.menu-element .context-menu.menu ul li:hover .icon {
+ color: #33ccff; }
+
+/* line 143, ../sass/controls/_menus.scss */
+.context-menu-holder {
+ pointer-events: none;
+ position: absolute;
+ height: 200px;
+ width: 170px;
+ z-index: 59; }
+/* line 149, ../sass/controls/_menus.scss */
+.context-menu-holder .context-menu-wrapper {
+ position: absolute;
+ height: 100%;
+ width: 100%; }
+/* line 156, ../sass/controls/_menus.scss */
+.context-menu-holder.go-left .context-menu {
+ right: 0; }
+/* line 157, ../sass/controls/_menus.scss */
+.context-menu-holder.go-up .context-menu {
+ bottom: 0; }
+
+/* line 161, ../sass/controls/_menus.scss */
+.btn-bar.right .menu,
+.menus-to-left .menu {
+ left: auto;
+ right: 0;
+ width: auto; }
+
+/* line 2, ../sass/forms/_elems.scss */
+.form .section-header {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ background: rgba(255, 255, 255, 0.1);
+ font-size: 0.8em;
+ margin-top: 5px;
+ padding: 5px; }
+/* line 8, ../sass/forms/_elems.scss */
+.form .section-header:first-child {
+ margin-top: 0; }
+/* line 12, ../sass/forms/_elems.scss */
+.form .form-section {
+ position: relative; }
+/* line 16, ../sass/forms/_elems.scss */
+.form .form-row {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ *zoom: 1;
+ border-top: 1px solid #4d4d4d;
+ margin-top: 5px;
+ padding: 5px;
+ position: relative; }
+/* line 25, ../sass/forms/_elems.scss */
+.form .form-row:first-child {
+ border-top: none; }
+/* line 29, ../sass/forms/_elems.scss */
+.form .form-row .label,
+.form .form-row .controls {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ *zoom: 1;
+ box-sizing: border-box;
+ font-size: 0.75rem;
+ line-height: 22px;
+ min-height: 22px; }
+/* line 39, ../sass/forms/_elems.scss */
+.form .form-row > .label {
+ float: left;
+ position: relative;
+ white-space: nowrap;
+ width: 20%; }
+/* line 47, ../sass/forms/_elems.scss */
+.form .form-row .value {
+ color: #cccccc; }
+/* line 51, ../sass/forms/_elems.scss */
+.form .form-row .controls {
+ float: left;
+ position: relative;
+ width: 79%; }
+/* line 58, ../sass/forms/_elems.scss */
+.form .form-row .field-hints {
+ color: #666666; }
+/* line 62, ../sass/forms/_elems.scss */
+.form .form-row .selector-list {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ background: rgba(0, 0, 0, 0.2);
+ position: relative;
+ height: 150px;
+ max-width: 50%; }
+/* line 70, ../sass/forms/_elems.scss */
+.form .form-row .selector-list .wrapper {
+ overflow-y: auto;
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ bottom: 5px;
+ left: 5px; }
+
+/* line 84, ../sass/forms/_elems.scss */
+label.form-control.checkbox input {
+ margin-right: 5px;
+ vertical-align: top; }
+
+/* line 90, ../sass/forms/_elems.scss */
+.hint {
+ font-size: 0.9em; }
+
+/* line 4, ../sass/forms/_validation.scss */
+.validates > .label {
+ padding-right: 25px; }
+/* line 7, ../sass/forms/_validation.scss */
+.validates > .label::after {
+ display: block;
+ position: absolute;
+ top: 0;
+ right: 10px;
+ bottom: 0;
+ left: auto;
+ height: auto;
+ width: 15px;
+ font-family: symbolsfont;
+ font-size: 1.1em;
+ text-align: right;
+ vertical-align: middle; }
+/* line 25, ../sass/forms/_validation.scss */
+.validates.invalid > .label::after, .validates.invalid.req > .label::after {
+ color: #ff9900;
+ content: "x"; }
+/* line 32, ../sass/forms/_validation.scss */
+.validates.valid > .label::after, .validates.valid.req > .label::after {
+ color: #33cc33;
+ content: "2"; }
+/* line 38, ../sass/forms/_validation.scss */
+.validates.req > .label::after {
+ color: #ffc700;
+ content: "*"; }
+
+/* line 45, ../sass/forms/_validation.scss */
+span.req {
+ color: #ffc700; }
+
+/* line 1, ../sass/forms/_text-input.scss */
+input[type="text"] {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ background: #666666;
+ border: none;
+ border-bottom: 1px solid #999999;
+ color: #cccccc;
+ outline: none;
+ padding: 0 3px;
+ height: 22px;
+ line-height: 22px;
+ vertical-align: middle; }
+/* line 11, ../sass/forms/_mixins.scss */
+input[type="text"].error {
+ background: rgba(255, 0, 0, 0.5); }
+/* line 6, ../sass/forms/_text-input.scss */
+input[type="text"].numeric {
+ text-align: right; }
+
+/* line 1, ../sass/forms/_selects.scss */
+.form-control.select {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #404040));
+ background-image: -webkit-linear-gradient(#4d4d4d, #404040);
+ background-image: -moz-linear-gradient(#4d4d4d, #404040);
+ background-image: -o-linear-gradient(#4d4d4d, #404040);
+ background-image: linear-gradient(#4d4d4d, #404040);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #666666;
+ color: #999999;
+ display: inline-block;
+ margin-right: 5px;
+ margin-top: 1px;
+ padding: 0 25px 0 0;
+ position: relative;
+ overflow: hidden;
+ vertical-align: middle; }
+/* line 82, ../sass/_mixins.scss */
+.form-control.select:not(.disabled):hover {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #4d4d4d));
+ background-image: -webkit-linear-gradient(#666666, #4d4d4d);
+ background-image: -moz-linear-gradient(#666666, #4d4d4d);
+ background-image: -o-linear-gradient(#666666, #4d4d4d);
+ background-image: linear-gradient(#666666, #4d4d4d); }
+/* line 11, ../sass/forms/_selects.scss */
+.form-control.select span.arw {
+ display: block;
+ pointer-events: none;
+ position: absolute;
+ right: 8%;
+ top: 10%; }
+/* line 18, ../sass/forms/_selects.scss */
+.form-control.select select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: none;
+ box-shadow: none;
+ background-color: transparent;
+ background-image: none;
+ cursor: pointer;
+ padding: 3px 5px 4px 5px;
+ width: 150%; }
+/* line 32, ../sass/forms/_selects.scss */
+.form-control.select select:focus {
+ outline: none; }
+
+/* line 2, ../sass/forms/_channel-selector.scss */
+.channel-selector .line {
+ margin-bottom: 5px;
+ min-height: 22px; }
+/* line 6, ../sass/forms/_channel-selector.scss */
+.channel-selector .treeview {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ background: #666666;
+ border: none;
+ border-bottom: 1px solid #999999;
+ color: #cccccc;
+ outline: none;
+ padding: 0 3px;
+ background: #3b3b3b;
+ border-bottom: 1px solid #4d4d4d;
+ min-height: 300px;
+ max-height: 400px;
+ overflow: auto;
+ padding: 5px; }
+/* line 11, ../sass/forms/_mixins.scss */
+.channel-selector .treeview.error {
+ background: rgba(255, 0, 0, 0.5); }
+/* line 15, ../sass/forms/_channel-selector.scss */
+.channel-selector .btns-add-remove {
+ margin-top: 150px; }
+/* line 18, ../sass/forms/_channel-selector.scss */
+.channel-selector .btns-add-remove .btn {
+ display: block;
+ font-size: 1.5em;
+ margin-bottom: 5px;
+ padding: 10px;
+ text-align: center; }
+
+/* line 2, ../sass/forms/_datetime.scss */
+.complex.datetime span {
+ display: inline-block;
+ margin-right: 5px; }
+/* line 15, ../sass/forms/_datetime.scss */
+.complex.datetime .fields {
+ margin-top: 3px 0;
+ padding: 3px 0; }
+/* line 20, ../sass/forms/_datetime.scss */
+.complex.datetime .date {
+ width: 85px; }
+/* line 23, ../sass/forms/_datetime.scss */
+.complex.datetime .date input {
+ width: 80px; }
+/* line 29, ../sass/forms/_datetime.scss */
+.complex.datetime .time.sm {
+ width: 45px; }
+/* line 32, ../sass/forms/_datetime.scss */
+.complex.datetime .time.sm input {
+ width: 40px; }
+
+/* line 2, ../sass/forms/_filter.scss */
+.filter input.filter {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ box-shadow: inset rgba(0, 0, 0, 0.5) 0 1px 5px;
+ background: #666666;
+ border: none;
+ border-bottom: 1px solid #999999;
+ color: #cccccc;
+ outline: none;
+ padding: 0 3px;
+ background: #3b3b3b;
+ border-bottom: 1px solid #4d4d4d; }
+/* line 11, ../sass/forms/_mixins.scss */
+.filter input.filter.error {
+ background: rgba(255, 0, 0, 0.5); }
+/* line 5, ../sass/forms/_filter.scss */
+.filter .icon.ui-symbol {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ display: inline-block;
+ font-size: 1.3em;
+ height: 22px;
+ line-height: 22px;
+ padding: 0px 5px;
+ vertical-align: middle; }
+/* line 13, ../sass/forms/_filter.scss */
+.filter .icon.ui-symbol:hover {
+ background: rgba(255, 255, 255, 0.1); }
+
+/* line 20, ../sass/forms/_filter.scss */
+.top-bar input.filter {
+ font-size: .8em;
+ height: 35px;
+ line-height: 35px;
+ margin-right: 5px;
+ margin-top: -5px;
+ padding-left: 10px;
+ padding-right: 10px; }
+/* line 31, ../sass/forms/_filter.scss */
+.top-bar .icon-filter {
+ font-size: 1.4em; }
+
+/* line 10, ../sass/plots/_plots-main.scss */
+.gl-plot {
+ color: #999999;
+ font-size: 0.7rem;
+ position: relative;
+ width: 100%;
+ height: 100%; }
+/* line 17, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-axis-area {
+ position: absolute; }
+/* line 20, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-axis-area.gl-plot-x {
+ top: auto;
+ right: 0;
+ bottom: 5px;
+ left: 60px;
+ height: 32px;
+ width: auto;
+ overflow: hidden; }
+/* line 29, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-axis-area.gl-plot-y {
+ top: 29px;
+ right: auto;
+ bottom: 37px;
+ left: 0;
+ width: 60px; }
+/* line 38, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-coords {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ background: rgba(255, 199, 0, 0.5);
+ color: #e6e6e6;
+ padding: 2px 5px;
+ position: absolute;
+ top: 39px;
+ right: auto;
+ bottom: auto;
+ left: 70px;
+ z-index: 10; }
+/* line 50, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-coords:empty {
+ display: none; }
+/* line 55, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-display-area {
+ position: absolute;
+ top: 29px;
+ right: 0;
+ bottom: 37px;
+ left: 60px;
+ cursor: crosshair;
+ border: 1px solid #4d4d4d; }
+/* line 65, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-label {
+ color: #cccccc;
+ position: absolute;
+ text-align: center; }
+/* line 72, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-label.gl-plot-x-label {
+ top: auto;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: auto; }
+/* line 80, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-label.gl-plot-y-label {
+ -webkit-transform-origin: 50% 0;
+ -moz-transform-origin: 50% 0;
+ -ms-transform-origin: 50% 0;
+ -o-transform-origin: 50% 0;
+ transform-origin: 50% 0;
+ -webkit-transform: translateX(-50%) rotate(-90deg);
+ -moz-transform: translateX(-50%) rotate(-90deg);
+ -ms-transform: translateX(-50%) rotate(-90deg);
+ -o-transform: translateX(-50%) rotate(-90deg);
+ transform: translateX(-50%) rotate(-90deg);
+ display: inline-block;
+ margin-left: 5px;
+ left: 0;
+ top: 50%;
+ white-space: nowrap; }
+/* line 93, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-y-options {
+ position: absolute;
+ top: 50%;
+ right: auto;
+ bottom: auto;
+ left: auto5px;
+ margin-top: -16px;
+ height: auto;
+ min-height: 32px;
+ width: 32px; }
+/* line 107, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-hash {
+ position: absolute;
+ border: 0 rgba(255, 255, 255, 0.3) dashed; }
+/* line 110, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-hash.hash-v {
+ border-right-width: 1px;
+ height: 100%; }
+/* line 114, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-hash.hash-h {
+ border-bottom-width: 1px;
+ width: 100%; }
+/* line 120, ../sass/plots/_plots-main.scss */
+.gl-plot .gl-plot-legend {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: auto;
+ left: 0;
+ height: 24px;
+ overflow-x: hidden;
+ overflow-y: auto; }
+
+/* line 148, ../sass/plots/_plots-main.scss */
+.gl-plot-legend .plot-legend-item,
+.gl-plot-legend .legend-item,
+.legend .plot-legend-item,
+.legend .legend-item {
+ display: inline-block;
+ margin-right: 10px; }
+/* line 151, ../sass/plots/_plots-main.scss */
+.gl-plot-legend .plot-legend-item span,
+.gl-plot-legend .legend-item span,
+.legend .plot-legend-item span,
+.legend .legend-item span {
+ vertical-align: middle; }
+/* line 155, ../sass/plots/_plots-main.scss */
+.gl-plot-legend .plot-legend-item .plot-color-swatch,
+.gl-plot-legend .plot-legend-item .color-swatch,
+.gl-plot-legend .legend-item .plot-color-swatch,
+.gl-plot-legend .legend-item .color-swatch,
+.legend .plot-legend-item .plot-color-swatch,
+.legend .plot-legend-item .color-swatch,
+.legend .legend-item .plot-color-swatch,
+.legend .legend-item .color-swatch {
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ -ms-border-radius: 2px;
+ -o-border-radius: 2px;
+ border-radius: 2px;
+ display: inline-block;
+ height: 8px;
+ width: 8px;
+ margin-right: 3px; }
+
+/* line 169, ../sass/plots/_plots-main.scss */
+.tick {
+ position: absolute;
+ border: 0 rgba(255, 255, 255, 0.3) solid; }
+/* line 172, ../sass/plots/_plots-main.scss */
+.tick.tick-x {
+ border-right-width: 1px;
+ height: 100%; }
+
+/* line 180, ../sass/plots/_plots-main.scss */
+.gl-plot-tick,
+.tick-label {
+ font-size: 0.7rem;
+ position: absolute;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis; }
+/* line 188, ../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 {
+ right: auto;
+ bottom: auto;
+ left: auto;
+ height: auto;
+ width: 20%;
+ margin-left: -10%;
+ text-align: center; }
+/* line 198, ../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 {
+ top: auto;
+ height: 1em;
+ width: auto;
+ margin-bottom: -0.5em;
+ text-align: right; }
+
+/* line 209, ../sass/plots/_plots-main.scss */
+.gl-plot-tick.gl-plot-x-tick-label {
+ top: 5px; }
+/* line 212, ../sass/plots/_plots-main.scss */
+.gl-plot-tick.gl-plot-y-tick-label {
+ right: 5px;
+ left: 5px; }
+
+/* line 219, ../sass/plots/_plots-main.scss */
+.tick-label.tick-label-x {
+ top: 0; }
+/* line 222, ../sass/plots/_plots-main.scss */
+.tick-label.tick-label-y {
+ right: 0;
+ left: 0; }
+
+/* line 2, ../sass/overlay/_overlay.scss */
+.overlay .blocker {
+ background: rgba(0, 0, 0, 0.7);
+ z-index: 100; }
+/* line 6, ../sass/overlay/_overlay.scss */
+.overlay .btn.close {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ bottom: auto;
+ left: auto; }
+/* line 13, ../sass/overlay/_overlay.scss */
+.overlay > .holder {
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #404040));
+ background-image: -webkit-linear-gradient(#4d4d4d, #404040);
+ background-image: -moz-linear-gradient(#4d4d4d, #404040);
+ background-image: -o-linear-gradient(#4d4d4d, #404040);
+ background-image: linear-gradient(#4d4d4d, #404040);
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
+ border-top: 1px solid #666666;
+ color: #999999;
+ display: inline-block;
+ -webkit-border-radius: 9px;
+ -moz-border-radius: 9px;
+ -ms-border-radius: 9px;
+ -o-border-radius: 9px;
+ border-radius: 9px;
+ color: #999999;
+ top: 15%;
+ right: 15%;
+ bottom: 15%;
+ left: 15%;
+ z-index: 101; }
+/* line 20, ../sass/overlay/_overlay.scss */
+.overlay > .holder > .contents {
+ top: 20px;
+ right: 20px;
+ bottom: 20px;
+ left: 20px; }
+/* line 25, ../sass/overlay/_overlay.scss */
+.overlay .title {
+ font-size: 1.3em; }
+/* line 29, ../sass/overlay/_overlay.scss */
+.overlay .top-bar {
+ height: 60px; }
+/* line 33, ../sass/overlay/_overlay.scss */
+.overlay .editor {
+ top: 70px;
+ bottom: 50px;
+ left: 0;
+ right: 0; }
+/* line 39, ../sass/overlay/_overlay.scss */
+.overlay .bottom-bar {
+ top: auto;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ font-size: 1em;
+ height: 40px;
+ text-align: right; }
+/* line 44, ../sass/overlay/_overlay.scss */
+.overlay .bottom-bar .btn {
+ margin-left: 10px; }
+
+/* line 4, ../sass/user-environ/_frame.scss */
+.frame.child-frame.panel {
+ background: #333333;
+ border: 1px solid #4d4d4d; }
+/* line 7, ../sass/user-environ/_frame.scss */
+.frame.child-frame.panel:hover {
+ border-color: #666666; }
+/* line 11, ../sass/user-environ/_frame.scss */
+.frame > .object-header.abs {
+ font-size: 0.75em;
+ height: 20px; }
+/* line 15, ../sass/user-environ/_frame.scss */
+.frame > .object-holder.abs {
+ top: 23px; }
+
+/* line 21, ../sass/user-environ/_frame.scss */
+.edit-main .frame.child-frame.panel:hover {
+ border-color: #0099cc;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px;
+ box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; }
+
+/* line 1, ../sass/user-environ/_top-bar.scss */
+.top-bar {
+ line-height: 35px; }
+/* line 7, ../sass/user-environ/_top-bar.scss */
+.top-bar.browse, .top-bar.edit {
+ top: 5px;
+ right: 5px;
+ bottom: auto;
+ left: 5px;
+ height: 35px; }
+/* line 15, ../sass/user-environ/_top-bar.scss */
+.top-bar .title {
+ color: #fff; }
+/* line 20, ../sass/user-environ/_top-bar.scss */
+.top-bar .buttons-main {
+ font-size: 0.8em;
+ left: auto;
+ text-align: right; }
+/* line 25, ../sass/user-environ/_top-bar.scss */
+.top-bar .buttons-main .btn {
+ margin-left: 5px; }
+
+/* line 33, ../sass/user-environ/_top-bar.scss */
+.edit-mode .top-bar .buttons-main {
+ white-space: nowrap; }
+/* line 37, ../sass/user-environ/_top-bar.scss */
+.edit-mode .top-bar .buttons-main.abs {
+ bottom: auto;
+ left: auto; }
+
+/* line 1, ../sass/user-environ/_bottom-bar.scss */
+.ue-bottom-bar {
+ color: gray;
+ font-size: 0.7em;
+ line-height: 16px; }
+/* line 5, ../sass/user-environ/_bottom-bar.scss */
+.ue-bottom-bar .status-holder {
+ -webkit-border-radius: 5.25px;
+ -moz-border-radius: 5.25px;
+ -ms-border-radius: 5.25px;
+ -o-border-radius: 5.25px;
+ border-radius: 5.25px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ background: black;
+ border-bottom: 1px solid #4d4d4d;
+ padding: 2px 5px;
+ text-transform: uppercase; }
+/* line 13, ../sass/user-environ/_bottom-bar.scss */
+.ue-bottom-bar .app-logo {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 0.8em;
+ line-height: 10px;
+ padding-top: 1px;
+ text-transform: uppercase; }
+/* line 19, ../sass/user-environ/_bottom-bar.scss */
+.ue-bottom-bar .app-logo.logo-warp {
+ background: url("../images/logo-warp.png") no-repeat left top;
+ color: #999999;
+ font-size: 0.7rem;
+ padding-top: 3px;
+ text-align: right; }
+
+/* line 29, ../sass/user-environ/_bottom-bar.scss */
+.status.block {
+ display: inline-block;
+ margin-right: 20px; }
+/* line 32, ../sass/user-environ/_bottom-bar.scss */
+.status.block .status-indicator {
+ -webkit-border-radius: 2.7px;
+ -moz-border-radius: 2.7px;
+ -ms-border-radius: 2.7px;
+ -o-border-radius: 2.7px;
+ border-radius: 2.7px;
+ -webkit-box-shadow: inset rgba(0, 0, 0, 0.5) 0 0 3px;
+ -moz-box-shadow: inset rgba(0, 0, 0, 0.5) 0 0 3px;
+ box-shadow: inset rgba(0, 0, 0, 0.5) 0 0 3px;
+ text-shadow: rgba(0, 0, 0, 0.3) 0 0 2px;
+ display: inline-block;
+ font-size: 1.25em;
+ vertical-align: middle;
+ margin-right: 5px; }
+/* line 40, ../sass/user-environ/_bottom-bar.scss */
+.status.block .status-indicator.ok {
+ color: #009900; }
+/* line 43, ../sass/user-environ/_bottom-bar.scss */
+.status.block .status-indicator.caution {
+ color: #ffaa00; }
+
+/* line 1, ../sass/user-environ/_object-browse.scss */
+.object-browse-bar {
+ height: 35px;
+ line-height: 35px; }
+/* line 5, ../sass/user-environ/_object-browse.scss */
+.object-browse-bar .items-select .btn-menu {
+ margin-right: 15px; }
+
+/* line 1, ../sass/user-environ/_tool-bar.scss */
+.tool-bar {
+ border-bottom: 1px solid #4d4d4d; }
+/* line 3, ../sass/user-environ/_tool-bar.scss */
+.tool-bar .control-group {
+ height: 35px; }
+/* line 6, ../sass/user-environ/_tool-bar.scss */
+.tool-bar input[type="text"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: .9em;
+ height: 28px;
+ margin-bottom: 1px;
+ position: relative; }
+/* line 12, ../sass/user-environ/_tool-bar.scss */
+.tool-bar input[type="text"].sm {
+ width: 28px; }
+/* line 16, ../sass/user-environ/_tool-bar.scss */
+.tool-bar .input-labeled label {
+ font-size: 12.6px; }
+
+/* line 1, ../sass/helpers/_bubbles.scss */
+.bubble-wrapper {
+ -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px;
+ box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px;
+ position: absolute;
+ z-index: 10; }
+/* line 8, ../sass/helpers/_bubbles.scss */
+.bubble-wrapper .bubble {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ display: inline-block;
+ background: #990000;
+ color: #ff9999;
+ font-size: 0.8rem;
+ font-style: italic;
+ max-width: 200px;
+ padding: 4px 8px; }
+/* line 17, ../sass/helpers/_bubbles.scss */
+.bubble-wrapper .bubble:before {
+ content: "";
+ position: absolute;
+ width: 0;
+ height: 0; }
+/* line 24, ../sass/helpers/_bubbles.scss */
+.bubble-wrapper.arw-left .bubble:before {
+ right: 100%;
+ top: 50%;
+ margin-top: -7px;
+ border-top: 7px solid transparent;
+ border-bottom: 7px solid transparent;
+ border-right: 10.5px solid #990000; }
+/* line 32, ../sass/helpers/_bubbles.scss */
+.bubble-wrapper.arw-down .bubble:before {
+ left: 50%;
+ top: 100%;
+ margin-left: -7px;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-top: 10.5px solid #990000; }
+
+/* line 4, ../sass/helpers/_splitter.scss */
+.split-layout .splitter {
+ background-color: #404040;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0 0 3px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.4) 0 0 3px;
+ box-shadow: rgba(0, 0, 0, 0.4) 0 0 3px;
+ overflow: hidden;
+ position: absolute;
+ z-index: 1; }
+/* line 11, ../sass/helpers/_splitter.scss */
+.split-layout.horizontal {
+ overflow: hidden; }
+/* line 14, ../sass/helpers/_splitter.scss */
+.split-layout.horizontal .pane {
+ left: 0;
+ right: 0; }
+/* line 18, ../sass/helpers/_splitter.scss */
+.split-layout.horizontal > .splitter {
+ cursor: row-resize;
+ left: 0;
+ right: 0;
+ width: auto;
+ height: 5px; }
+/* line 54, ../sass/_mixins.scss */
+.split-layout.horizontal > .splitter:before {
+ content: '';
+ display: block;
+ height: auto;
+ position: absolute;
+ z-index: 2;
+ border-top: 1px dotted #1a1a1a;
+ top: 2px;
+ left: 5px;
+ right: 5px; }
+/* line 75, ../sass/_mixins.scss */
+.split-layout.horizontal > .splitter:not(.disabled):hover:before {
+ border-color: rgba(0, 153, 204, 0.9); }
+/* line 28, ../sass/helpers/_splitter.scss */
+.split-layout.vertical .pane {
+ top: 0;
+ bottom: 0; }
+/* line 32, ../sass/helpers/_splitter.scss */
+.split-layout.vertical > .splitter {
+ bottom: 0;
+ cursor: col-resize;
+ width: 5px; }
+/* line 54, ../sass/_mixins.scss */
+.split-layout.vertical > .splitter:before {
+ content: '';
+ display: block;
+ height: auto;
+ position: absolute;
+ z-index: 2;
+ border-left: 1px dotted #1a1a1a;
+ left: 2px;
+ bottom: 5px;
+ top: 5px; }
+/* line 75, ../sass/_mixins.scss */
+.split-layout.vertical > .splitter:not(.disabled):hover:before {
+ border-color: rgba(0, 153, 204, 0.9); }
+
+/* line 41, ../sass/helpers/_splitter.scss */
+.browse-area .splitter {
+ top: 40px; }
+
+/* line 45, ../sass/helpers/_splitter.scss */
+.edit-area .splitter {
+ top: 0; }
+
+@-webkit-keyframes rotation {
+ /* line 2, ../sass/helpers/_wait-spinner.scss */
+ from {
+ -webkit-transform: rotate(0deg); }
+
+ /* line 3, ../sass/helpers/_wait-spinner.scss */
+ to {
+ -webkit-transform: rotate(359deg); } }
+
+@-moz-keyframes rotation {
+ /* line 7, ../sass/helpers/_wait-spinner.scss */
+ from {
+ -moz-transform: rotate(0deg); }
+
+ /* line 8, ../sass/helpers/_wait-spinner.scss */
+ to {
+ -moz-transform: rotate(359deg); } }
+
+@-o-keyframes rotation {
+ /* line 12, ../sass/helpers/_wait-spinner.scss */
+ from {
+ -o-transform: rotate(0deg); }
+
+ /* line 13, ../sass/helpers/_wait-spinner.scss */
+ to {
+ -o-transform: rotate(359deg); } }
+
+@keyframes rotation {
+ /* line 17, ../sass/helpers/_wait-spinner.scss */
+ from {
+ transform: rotate(0deg); }
+
+ /* line 18, ../sass/helpers/_wait-spinner.scss */
+ to {
+ transform: rotate(359deg); } }
+
+/* line 22, ../sass/helpers/_wait-spinner.scss */
+.t-wait-spinner,
+.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.5em;
+ border-radius: 100%;
+ top: 50%;
+ left: 50%;
+ height: auto;
+ width: auto;
+ padding: 5%;
+ pointer-events: none;
+ margin-top: -5%;
+ margin-left: -5%;
+ z-index: 2; }
+
+/* line 34, ../sass/helpers/_wait-spinner.scss */
+.l-wait-spinner-holder {
+ pointer-events: none;
+ position: absolute; }
+/* line 38, ../sass/helpers/_wait-spinner.scss */
+.l-wait-spinner-holder.align-left .t-wait-spinner {
+ left: 0;
+ margin-left: 0; }
+/* line 43, ../sass/helpers/_wait-spinner.scss */
+.l-wait-spinner-holder.full-size {
+ display: inline-block;
+ height: 100%;
+ width: 100%; }
+/* line 46, ../sass/helpers/_wait-spinner.scss */
+.l-wait-spinner-holder.full-size .t-wait-spinner {
+ top: 0;
+ margin-top: 0;
+ padding: 30%; }
+
+/* line 55, ../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;
+ border-radius: 100%;
+ height: 18px;
+ width: 18px;
+ margin: 0 !important;
+ padding: 0 !important;
+ top: 2px;
+ left: 0; }
diff --git a/platform/commonUI/general/res/css/tree.css b/platform/commonUI/general/res/css/tree.css
new file mode 100644
index 0000000000..4122c31bb6
--- /dev/null
+++ b/platform/commonUI/general/res/css/tree.css
@@ -0,0 +1,102 @@
+/* line 1, ../sass/tree/_tree.scss */
+ul.tree {
+ margin: 0;
+ padding: 0; }
+ /* line 131, ../sass/_mixins.scss */
+ ul.tree li {
+ list-style-type: none;
+ margin: 0;
+ padding: 0; }
+ /* line 4, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: background-color 0.25s;
+ -moz-transition: background-color 0.25s;
+ -o-transition: background-color 0.25s;
+ transition: background-color 0.25s;
+ display: block;
+ font-size: 0.80rem;
+ height: 1.5rem;
+ line-height: 1.5rem;
+ margin-bottom: 3px;
+ position: relative; }
+ /* line 17, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item.loading {
+ color: #666666;
+ font-style: italic; }
+ /* line 20, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item.loading .wait-spinner {
+ margin-left: 14px; }
+ /* line 24, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item:not(.loading) {
+ cursor: pointer; }
+ /* line 26, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item:not(.loading):hover {
+ background: #404040;
+ color: #cccccc; }
+ /* line 29, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item:not(.loading):hover .context-trigger {
+ display: block; }
+ /* line 32, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item:not(.loading):hover .icon {
+ color: #33ccff; }
+ /* line 37, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item .selected {
+ color: #fff; }
+ /* line 40, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item .view-control {
+ display: inline-block;
+ width: 10px; }
+ /* line 46, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item .view-control:hover {
+ color: #ffc700; }
+ /* line 50, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item .context-trigger {
+ display: none;
+ top: -1px;
+ position: absolute;
+ right: 3px; }
+ /* line 56, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item .context-trigger .btn-invoke-menu {
+ font-size: 0.75em;
+ height: 0.9rem;
+ line-height: 0.9rem; }
+ /* line 62, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item .icon {
+ text-shadow: rgba(0, 0, 0, 0.6) 0 1px 2px;
+ color: #0099cc;
+ left: 15px; }
+ /* line 67, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item .icon .alert {
+ text-shadow: rgba(0, 0, 0, 0.3) 0 1px 2px;
+ background: #333333;
+ color: #ff3c00;
+ font-size: 0.7em;
+ margin-top: -3px;
+ top: 0;
+ right: auto;
+ bottom: auto;
+ left: 9px;
+ height: auto;
+ width: auto;
+ position: absolute;
+ z-index: 2; }
+ /* line 83, ../sass/tree/_tree.scss */
+ ul.tree li .tree-item .title-label {
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 37px;
+ right: 25px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ height: 1.5rem;
+ bottom: auto;
+ white-space: nowrap; }
+ /* line 98, ../sass/tree/_tree.scss */
+ ul.tree ul.tree {
+ margin-left: 15px; }
diff --git a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot
new file mode 100755
index 0000000000..b8ab5ff50a
Binary files /dev/null and b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot differ
diff --git a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg
new file mode 100755
index 0000000000..0198bec408
--- /dev/null
+++ b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg
@@ -0,0 +1,381 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf
new file mode 100755
index 0000000000..014495ec83
Binary files /dev/null and b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf differ
diff --git a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff
new file mode 100755
index 0000000000..c5d0893050
Binary files /dev/null and b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff differ
diff --git a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff2 b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff2
new file mode 100755
index 0000000000..2f2d374c79
Binary files /dev/null and b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff2 differ
diff --git a/platform/commonUI/general/res/templates/bottombar.html b/platform/commonUI/general/res/templates/bottombar.html
new file mode 100644
index 0000000000..fc62d56f91
--- /dev/null
+++ b/platform/commonUI/general/res/templates/bottombar.html
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/platform/commonUI/general/res/templates/containers/accordion.html b/platform/commonUI/general/res/templates/containers/accordion.html
new file mode 100644
index 0000000000..f549fa13b4
--- /dev/null
+++ b/platform/commonUI/general/res/templates/containers/accordion.html
@@ -0,0 +1,10 @@
+
+
+ {{container.title}}
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/general/res/templates/controls/action-button.html b/platform/commonUI/general/res/templates/controls/action-button.html
new file mode 100644
index 0000000000..beeb0627c8
--- /dev/null
+++ b/platform/commonUI/general/res/templates/controls/action-button.html
@@ -0,0 +1,12 @@
+
+
+ {{parameters.action.getMetadata().glyph}}
+
+
+ {{parameters.action.getMetadata().name}}
+
+
diff --git a/platform/commonUI/general/res/templates/controls/action-group.html b/platform/commonUI/general/res/templates/controls/action-group.html
new file mode 100644
index 0000000000..dd9deeb975
--- /dev/null
+++ b/platform/commonUI/general/res/templates/controls/action-group.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/general/res/templates/controls/switcher.html b/platform/commonUI/general/res/templates/controls/switcher.html
new file mode 100644
index 0000000000..ba1df9d5b4
--- /dev/null
+++ b/platform/commonUI/general/res/templates/controls/switcher.html
@@ -0,0 +1,28 @@
+
+
+
+ {{ngModel.selected.glyph}}
+ {{ngModel.selected.name}}
+
\ No newline at end of file
diff --git a/platform/commonUI/general/res/templates/label.html b/platform/commonUI/general/res/templates/label.html
new file mode 100644
index 0000000000..d053199b49
--- /dev/null
+++ b/platform/commonUI/general/res/templates/label.html
@@ -0,0 +1,7 @@
+
+
+ {{type.getGlyph()}}
+ !
+
+ {{model.name}}
+
diff --git a/platform/commonUI/general/res/templates/menu/context-menu.html b/platform/commonUI/general/res/templates/menu/context-menu.html
new file mode 100644
index 0000000000..3edae0637a
--- /dev/null
+++ b/platform/commonUI/general/res/templates/menu/context-menu.html
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/platform/commonUI/general/res/templates/test.html b/platform/commonUI/general/res/templates/test.html
new file mode 100644
index 0000000000..d0b6d29bb4
--- /dev/null
+++ b/platform/commonUI/general/res/templates/test.html
@@ -0,0 +1,3 @@
+
+ {{model.name}}
+
\ No newline at end of file
diff --git a/platform/commonUI/general/res/templates/tree-item.html b/platform/commonUI/general/res/templates/tree-item.html
new file mode 100644
index 0000000000..757957e996
--- /dev/null
+++ b/platform/commonUI/general/res/templates/tree-item.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/general/res/templates/tree.html b/platform/commonUI/general/res/templates/tree.html
new file mode 100644
index 0000000000..8a60580c7b
--- /dev/null
+++ b/platform/commonUI/general/res/templates/tree.html
@@ -0,0 +1,6 @@
+
diff --git a/platform/commonUI/general/src/AccordionController.js b/platform/commonUI/general/src/AccordionController.js
new file mode 100644
index 0000000000..56e2e74d23
--- /dev/null
+++ b/platform/commonUI/general/src/AccordionController.js
@@ -0,0 +1,29 @@
+/*global define,Promise*/
+
+/**
+ * Module defining AccordionController. Created by vwoeltje on 11/14/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function AccordionController() {
+ var isExpanded = true;
+ return {
+ toggle: function () {
+ isExpanded = !isExpanded;
+ },
+ expanded: function () {
+ return isExpanded;
+ }
+ };
+ }
+
+ return AccordionController;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/general/src/ActionGroupController.js b/platform/commonUI/general/src/ActionGroupController.js
new file mode 100644
index 0000000000..b9fb3e8d42
--- /dev/null
+++ b/platform/commonUI/general/src/ActionGroupController.js
@@ -0,0 +1,59 @@
+/*global define,Promise*/
+
+/**
+ * Module defining ActionGroupController. Created by vwoeltje on 11/14/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function ActionGroupController($scope) {
+ function groupActions(actions) {
+ var groups = {},
+ ungrouped = [];
+
+ function assignToGroup(action) {
+ var metadata = action.getMetadata(),
+ group = metadata.group;
+ if (group) {
+ groups[group] = groups[group] || [];
+ groups[group].push(action);
+ } else {
+ ungrouped.push(action);
+ }
+ }
+
+ actions.forEach(assignToGroup);
+
+ $scope.ungrouped = ungrouped;
+ $scope.groups = Object.keys(groups).map(function (k) {
+ return groups[k];
+ });
+ }
+
+ function updateGroups() {
+ var actionCapability = $scope.action,
+ params = $scope.parameters ? $scope.parameters : {},
+ category = params.category;
+
+ if (actionCapability && category) {
+ groupActions(actionCapability.getActions({ category: category }));
+ }
+ }
+
+ $scope.$watch("domainObject", updateGroups);
+ $scope.$watch("action", updateGroups);
+ $scope.$watch("parameters.category", updateGroups);
+
+ $scope.ungrouped = [];
+ $scope.groups = [];
+ }
+
+ return ActionGroupController;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/general/src/ContextMenuController.js b/platform/commonUI/general/src/ContextMenuController.js
new file mode 100644
index 0000000000..a3dcbf1ae9
--- /dev/null
+++ b/platform/commonUI/general/src/ContextMenuController.js
@@ -0,0 +1,27 @@
+/*global define,Promise*/
+
+/**
+ * Module defining ContextMenuController. Created by vwoeltje on 11/17/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function ContextMenuController($scope) {
+ function updateActions() {
+ $scope.menuActions = $scope.action ?
+ $scope.action.getActions({ category: 'contextual' }) :
+ [];
+ }
+
+ $scope.$watch("action", updateActions);
+ }
+
+ return ContextMenuController;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/general/src/MCTContainer.js b/platform/commonUI/general/src/MCTContainer.js
new file mode 100644
index 0000000000..f8bba684bd
--- /dev/null
+++ b/platform/commonUI/general/src/MCTContainer.js
@@ -0,0 +1,57 @@
+/*global define,Promise*/
+
+/**
+ * Module defining MCTContainer. Created by vwoeltje on 11/17/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function MCTContainer(containers) {
+ var containerMap = {};
+
+ // Initialize container map from extensions
+ containers.forEach(function (container) {
+ var key = container.key;
+ containerMap[key] = Object.create(container);
+ containerMap[key].templateUrl = [
+ container.bundle.path,
+ container.bundle.resources,
+ container.templateUrl
+ ].join("/");
+ });
+
+ return {
+ restrict: 'E',
+ transclude: true,
+ scope: true,
+ link: function (scope, element, attrs) {
+ var key = attrs.key,
+ container = containerMap[key],
+ alias = "container",
+ copiedAttributes = {};
+
+ if (container) {
+ alias = container.alias || alias;
+ (container.attributes || []).forEach(function (attr) {
+ copiedAttributes[attr] = attrs[attr];
+ });
+ }
+
+ scope[alias] = copiedAttributes;
+ },
+ templateUrl: function (element, attrs) {
+ var key = attrs.key;
+ return containerMap[key].templateUrl;
+ }
+ };
+ }
+
+ return MCTContainer;
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/general/src/TreeNodeController.js b/platform/commonUI/general/src/TreeNodeController.js
new file mode 100644
index 0000000000..64b9e8677b
--- /dev/null
+++ b/platform/commonUI/general/src/TreeNodeController.js
@@ -0,0 +1,90 @@
+/*global define,Promise*/
+
+/**
+ * Module defining TreeNodeController. Created by vwoeltje on 11/10/14.
+ */
+define(
+ [],
+ function () {
+ "use strict";
+
+ /**
+ *
+ * @constructor
+ */
+ function TreeNodeController($scope, navigationService) {
+ var navigatedObject = navigationService.getNavigation();
+
+ function idsEqual(objA, objB) {
+ return objA && objB && (objA.getId() === objB.getId());
+ }
+
+ function parentOf(domainObject) {
+ var context = domainObject &&
+ domainObject.getCapability("context");
+ return context && context.getParent();
+ }
+
+ function getId(obj) {
+ return obj.getId();
+ }
+
+ function isOnNavigationPath(nodeObject, navObject) {
+ var nodeContext = nodeObject &&
+ nodeObject.getCapability('context'),
+ navContext = navObject &&
+ navObject.getCapability('context'),
+ nodePath,
+ navPath;
+
+ if (nodeContext && navContext) {
+ nodePath = nodeContext.getPath().map(getId);
+ navPath = navContext.getPath().map(getId);
+ return (navPath.length > nodePath.length) &&
+ nodePath.map(function (id, i) {
+ return id === navPath[i];
+ }).reduce(function (a, b) {
+ return a && b;
+ }, true);
+
+ }
+ return false; // No context to judge by
+ }
+
+ function checkNavigation() {
+ var nodeObject = $scope.domainObject;
+
+ $scope.node.isSelected =
+ idsEqual(nodeObject, navigatedObject) &&
+ idsEqual(parentOf(nodeObject), parentOf(navigatedObject));
+ // Expand if necessary
+ if (!$scope.node.expanded && isOnNavigationPath(nodeObject, navigatedObject)) {
+ $scope.toggle();
+ }
+ }
+
+ function setNavigation(object) {
+ navigatedObject = object;
+ checkNavigation();
+ }
+
+ $scope.node = { expanded: false };
+
+ $scope.toggle = function () {
+ var expanded = !$scope.node.expanded;
+ $scope.node.expanded = expanded;
+
+ // Trigger load of composition, if needed
+ $scope.node.domainObject = $scope.domainObject;
+ };
+
+ navigationService.addListener(setNavigation);
+ $scope.$on("$destroy", function () {
+ navigationService.removeListener(setNavigation);
+ });
+ $scope.$watch("domainObject", checkNavigation);
+ }
+
+ return TreeNodeController;
+ }
+);
\ No newline at end of file