From 1b0303e517f1ab37c2f5c04b2ff46c8cc8733f16 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Sun, 23 Nov 2014 15:41:20 -0800 Subject: [PATCH] [Common UI] Initial commonUI bundles Bring in work on general-purpose and over-arching user interface bundles from the sandbox transition branch. WTD-574. --- platform/commonUI/browse/bundle.json | 126 + .../commonUI/browse/lib/screenfull.min.js | 6 + .../browse/res/templates/browse-object.html | 26 + .../commonUI/browse/res/templates/browse.html | 25 + .../res/templates/browse/object-header.html | 7 + .../browse/res/templates/create-button.html | 9 + .../browse/res/templates/create-menu.html | 30 + .../browse/res/templates/items/grid-item.html | 26 + .../browse/res/templates/items/items.html | 6 + .../browse/res/templates/topbar-browse.html | 15 + .../commonUI/browse/src/BrowseController.js | 53 + .../browse/src/ViewSwitcherController.js | 48 + .../browse/src/creation/CreateAction.js | 67 + .../src/creation/CreateActionProvider.js | 41 + .../src/creation/CreateButtonController.js | 36 + .../src/creation/CreateMenuController.js | 29 + .../browse/src/creation/CreateWizard.js | 79 + .../browse/src/creation/CreationService.js | 90 + .../browse/src/creation/UUIDService.js | 29 + .../browse/src/navigation/NavigateAction.js | 35 + .../src/navigation/NavigationService.js | 50 + .../browse/src/windowing/FullscreenAction.js | 41 + .../browse/src/windowing/NewWindowAction.js | 25 + platform/commonUI/dialog/bundle.json | 17 + .../dialog/res/templates/overlay.html | 28 + platform/commonUI/dialog/src/DialogService.js | 79 + platform/commonUI/edit/README.md | 1 + platform/commonUI/edit/bundle.json | 85 + .../res/templates/edit-action-buttons.html | 9 + .../edit/res/templates/edit-object.html | 33 + .../commonUI/edit/res/templates/edit.html | 10 + .../commonUI/edit/res/templates/elements.html | 11 + .../commonUI/edit/res/templates/library.html | 4 + .../edit/res/templates/topbar-edit.html | 17 + .../commonUI/edit/src/EditActionController.js | 31 + platform/commonUI/edit/src/EditController.js | 27 + .../commonUI/edit/src/actions/CancelAction.js | 51 + .../commonUI/edit/src/actions/EditAction.js | 47 + .../commonUI/edit/src/actions/RemoveAction.js | 90 + .../commonUI/edit/src/actions/SaveAction.js | 50 + .../capabilities/EditableContextCapability.js | 56 + .../EditablePersistenceCapability.js | 30 + .../edit/src/capabilities/EditorCapability.js | 55 + .../edit/src/objects/EditableDomainObject.js | 84 + .../src/objects/EditableDomainObjectCache.js | 102 + platform/commonUI/general/bundle.json | 94 + platform/commonUI/general/res/css/forms.css | 333 +++ platform/commonUI/general/res/css/items.css | 136 + platform/commonUI/general/res/css/main.css | 99 + .../general/res/css/normalize.min.css | 1 + platform/commonUI/general/res/css/plots.css | 205 ++ .../general/res/css/theme-espresso.css | 2475 +++++++++++++++++ platform/commonUI/general/res/css/tree.css | 102 + .../general/res/fonts/symbols/wtdsymbols.eot | Bin 0 -> 12578 bytes .../general/res/fonts/symbols/wtdsymbols.svg | 381 +++ .../general/res/fonts/symbols/wtdsymbols.ttf | Bin 0 -> 21308 bytes .../general/res/fonts/symbols/wtdsymbols.woff | Bin 0 -> 14404 bytes .../res/fonts/symbols/wtdsymbols.woff2 | Bin 0 -> 11664 bytes .../general/res/templates/bottombar.html | 13 + .../res/templates/containers/accordion.html | 10 + .../res/templates/controls/action-button.html | 12 + .../res/templates/controls/action-group.html | 15 + .../res/templates/controls/switcher.html | 28 + .../commonUI/general/res/templates/label.html | 7 + .../res/templates/menu/context-menu.html | 18 + .../commonUI/general/res/templates/test.html | 3 + .../general/res/templates/tree-item.html | 19 + .../commonUI/general/res/templates/tree.html | 6 + .../general/src/AccordionController.js | 29 + .../general/src/ActionGroupController.js | 59 + .../general/src/ContextMenuController.js | 27 + platform/commonUI/general/src/MCTContainer.js | 57 + .../general/src/TreeNodeController.js | 90 + 73 files changed, 6035 insertions(+) create mode 100644 platform/commonUI/browse/bundle.json create mode 100644 platform/commonUI/browse/lib/screenfull.min.js create mode 100644 platform/commonUI/browse/res/templates/browse-object.html create mode 100644 platform/commonUI/browse/res/templates/browse.html create mode 100644 platform/commonUI/browse/res/templates/browse/object-header.html create mode 100644 platform/commonUI/browse/res/templates/create-button.html create mode 100644 platform/commonUI/browse/res/templates/create-menu.html create mode 100644 platform/commonUI/browse/res/templates/items/grid-item.html create mode 100644 platform/commonUI/browse/res/templates/items/items.html create mode 100644 platform/commonUI/browse/res/templates/topbar-browse.html create mode 100644 platform/commonUI/browse/src/BrowseController.js create mode 100644 platform/commonUI/browse/src/ViewSwitcherController.js create mode 100644 platform/commonUI/browse/src/creation/CreateAction.js create mode 100644 platform/commonUI/browse/src/creation/CreateActionProvider.js create mode 100644 platform/commonUI/browse/src/creation/CreateButtonController.js create mode 100644 platform/commonUI/browse/src/creation/CreateMenuController.js create mode 100644 platform/commonUI/browse/src/creation/CreateWizard.js create mode 100644 platform/commonUI/browse/src/creation/CreationService.js create mode 100644 platform/commonUI/browse/src/creation/UUIDService.js create mode 100644 platform/commonUI/browse/src/navigation/NavigateAction.js create mode 100644 platform/commonUI/browse/src/navigation/NavigationService.js create mode 100644 platform/commonUI/browse/src/windowing/FullscreenAction.js create mode 100644 platform/commonUI/browse/src/windowing/NewWindowAction.js create mode 100644 platform/commonUI/dialog/bundle.json create mode 100644 platform/commonUI/dialog/res/templates/overlay.html create mode 100644 platform/commonUI/dialog/src/DialogService.js create mode 100644 platform/commonUI/edit/README.md create mode 100644 platform/commonUI/edit/bundle.json create mode 100644 platform/commonUI/edit/res/templates/edit-action-buttons.html create mode 100644 platform/commonUI/edit/res/templates/edit-object.html create mode 100644 platform/commonUI/edit/res/templates/edit.html create mode 100644 platform/commonUI/edit/res/templates/elements.html create mode 100644 platform/commonUI/edit/res/templates/library.html create mode 100644 platform/commonUI/edit/res/templates/topbar-edit.html create mode 100644 platform/commonUI/edit/src/EditActionController.js create mode 100644 platform/commonUI/edit/src/EditController.js create mode 100644 platform/commonUI/edit/src/actions/CancelAction.js create mode 100644 platform/commonUI/edit/src/actions/EditAction.js create mode 100644 platform/commonUI/edit/src/actions/RemoveAction.js create mode 100644 platform/commonUI/edit/src/actions/SaveAction.js create mode 100644 platform/commonUI/edit/src/capabilities/EditableContextCapability.js create mode 100644 platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js create mode 100644 platform/commonUI/edit/src/capabilities/EditorCapability.js create mode 100644 platform/commonUI/edit/src/objects/EditableDomainObject.js create mode 100644 platform/commonUI/edit/src/objects/EditableDomainObjectCache.js create mode 100644 platform/commonUI/general/bundle.json create mode 100644 platform/commonUI/general/res/css/forms.css create mode 100644 platform/commonUI/general/res/css/items.css create mode 100644 platform/commonUI/general/res/css/main.css create mode 100755 platform/commonUI/general/res/css/normalize.min.css create mode 100644 platform/commonUI/general/res/css/plots.css create mode 100644 platform/commonUI/general/res/css/theme-espresso.css create mode 100644 platform/commonUI/general/res/css/tree.css create mode 100755 platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot create mode 100755 platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg create mode 100755 platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf create mode 100755 platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff create mode 100755 platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff2 create mode 100644 platform/commonUI/general/res/templates/bottombar.html create mode 100644 platform/commonUI/general/res/templates/containers/accordion.html create mode 100644 platform/commonUI/general/res/templates/controls/action-button.html create mode 100644 platform/commonUI/general/res/templates/controls/action-group.html create mode 100644 platform/commonUI/general/res/templates/controls/switcher.html create mode 100644 platform/commonUI/general/res/templates/label.html create mode 100644 platform/commonUI/general/res/templates/menu/context-menu.html create mode 100644 platform/commonUI/general/res/templates/test.html create mode 100644 platform/commonUI/general/res/templates/tree-item.html create mode 100644 platform/commonUI/general/res/templates/tree.html create mode 100644 platform/commonUI/general/src/AccordionController.js create mode 100644 platform/commonUI/general/src/ActionGroupController.js create mode 100644 platform/commonUI/general/src/ContextMenuController.js create mode 100644 platform/commonUI/general/src/MCTContainer.js create mode 100644 platform/commonUI/general/src/TreeNodeController.js 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 @@ +
+ + +
+ !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 0000000000000000000000000000000000000000..b8ab5ff50a7b8b5cc9d3ce2c5b7a29addaf90939 GIT binary patch literal 12578 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

7lvx;cC-qF=FzQ75nHs z_4MHa3pSJb#@0)#`VO6b@bh7+T|R+^%t9M7xplwew-=jkeZPhta#UyL&Gm2~o=5Ff zclBLGj96$1F4Qd_G$#vTg@>F>XAEN;_KK%^#z>OyStK2y#T`YYl3hTuZg-Hj|H#knvb4< z8S2Qj@=G@aEj+G7LZWqT3VM!+P$=UFb$nJDgj*rp(M`eIk>EHIrYjyr)#-Nr(!2O+ ze&gRDH$*eYZis$5;dyr|0SzU~eQ$XGI`f&Jz0fg;T^jPh$|w&8Zl$7O(gy_GfR5H- zY^F`CqD~B;U?u(`We%%Fe(@rIs%Lu@FCMb+E)*aalRqauX$OCv1!uYdJdz|#;E=e) z^*Vj5MQo_uS(Ty0`L8Q-?!cvH1zimYK@;;|Baiam3({(apOteCip~ae)5RY zl6==$jrB0ZJ@JcJNYf9Rgmugmfw->?k`cM$Ok>%Ax=S;vA;t=hd?^tT71M=i(?TrW zb$3)%*e|iY4D(q~|C{~?KIA#|KG|K%>2Tx=pP>MXUE%7#3W^TubCzRxvVMrA>vYYO z(FbP7p%QL(tQtrNg+JnLn|!0$cQ+Ax76u>d<8@NAFiao)H5A1x%R&-QuD z4+JFilYMG~&vt)j~@4j)d$!oJ;oICaPJ@6fSK@Ntg{u<0* ztDJ-th*1&t*zLAu@z9_Z_S{!mxRW?AlHtq^u6Q~Rm@;;Zbhe`r3Tm~nKV zfW&1I5ged#@S{$sR;ZDKXL);;akSOp5H!4U2@f{r(GgwL8d)?k2Pbi8^YFd1G>)Mc zU7r~7jG7s~+TZh?BH0nnUMDkSfm-Xh&LB`Syup#(S60nw{K(uXml}b>SlEOOk#=@4 zBDb6{ug5%LDh6^NmYb%+SqOLBMb&GS>`471KRXIt>le&H7sXrlkx`lTjf} z`qO7564EI|B0}(0{5G_LC^TotHXg9Gr`oJ~E6(J*41*)lBkX&cCG(_LGNFWV<7npg zG3M3pd9qKb09&}KoDU!r)C5UXYvH~9>1||u?v`~mM3%PewS~r40oUp)f7}4X6b5uY{zIBSS1MkK*!Qo0b=!AV zk5}#y!zOcuf+|aZ$d=(X?)j~SN#Y7(thI~ANnrupSdl;SDlC7iG%aqzckmN-cf?j+ z@(9to;(gUd=q|UD)^jhMnZtl5p>VelWKLcx?dwht2ErO3ugj@hntC?^N~yqYl-r*) z0^dhG4h&=B2{VmSjuOVts(L_VCviMod$UdA=XZa4fpZ~YNt8?d2V zZHK3V@r4=rNFMpjV@GAbwM-db#!_phc$_bl9x0TP<^_ZVGw%!35%YN+jJ^?UXoFvM zDoq*n2In9+KJ|T#rQikv)D;j5`C7&~yzU6)bP>y7>%~+~w6q1iNzbO{%3ZTe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 0000000000000000000000000000000000000000..014495ec8321dd296da60cfe355fd45553a1255d GIT binary patch literal 21308 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 aQJ3Xp)PtxSZRoj!vOB`~e1G5NjQt;@&5GFo literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c5d089305041f174f969b0d138ca9681aeb9a235 GIT binary patch literal 14404 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 abYU +

+
+ . + 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