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 @@ +
+ {{type.getGlyph()}} + {{parameters.mode}} + {{type.getName()}} + {{model.name}} + v +
\ 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 @@ + +
+
+
+
+ +
+
+ +
P
+
+
+
+
{{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 @@ +
+ +
+ + *Browse Allv + + + M +
+
+ !v + + Gv +
+
\ 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 @@ +
+
+
+ . + Connected +
+ +
+ +
\ 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 @@ + + + + {{node.expanded ? "v" : ">"}} + + + + + + + + + \ 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