mirror of
https://github.com/nasa/openmct.git
synced 2025-06-11 20:01:41 +00:00
Inline edit object names (#1700)
* Inline edit object name. Change the title-label span to a conteneditable span to allow editing object names inline. Implement a controller to handle updaing the name. Add tests. Fixes #1679 [Front-end] Add span contenteditable to input styling [Front-end] Styling for contenteditable span styling for span[contenteditable].s-status-editing in _controls.scss; removed s-filter class; [Front-end] min-width added to .s-inline-edit * [Frontend] Style tweaks, cleanup and simplification Fixes #1679 Style sanding on .s-inline-edit; added :focus outline:0 to select in _controls.scss; New .s-input-inline class; removed ng-class from object-header.html, uses :focus instead; refactoring of input-related mixins; Bring Time Conductor real-time inputs into parity Apply .s-input-inline to TC inputs; finesse .s-input-inline selector; Prevent nested inline inputs from editing Fixed nested editing prevention selector * Create an object header template for objects inside a frame. Fix code review requests. Fixes 1679
This commit is contained in:
committed by
Pete Richards
parent
a3a55d3b48
commit
1419c75503
@ -26,6 +26,7 @@ define([
|
|||||||
"./src/InspectorPaneController",
|
"./src/InspectorPaneController",
|
||||||
"./src/BrowseObjectController",
|
"./src/BrowseObjectController",
|
||||||
"./src/MenuArrowController",
|
"./src/MenuArrowController",
|
||||||
|
"./src/ObjectHeaderController",
|
||||||
"./src/navigation/NavigationService",
|
"./src/navigation/NavigationService",
|
||||||
"./src/navigation/NavigateAction",
|
"./src/navigation/NavigateAction",
|
||||||
"./src/navigation/OrphanNavigationHandler",
|
"./src/navigation/OrphanNavigationHandler",
|
||||||
@ -36,6 +37,7 @@ define([
|
|||||||
"text!./res/templates/browse-object.html",
|
"text!./res/templates/browse-object.html",
|
||||||
"text!./res/templates/items/grid-item.html",
|
"text!./res/templates/items/grid-item.html",
|
||||||
"text!./res/templates/browse/object-header.html",
|
"text!./res/templates/browse/object-header.html",
|
||||||
|
"text!./res/templates/browse/object-header-frame.html",
|
||||||
"text!./res/templates/menu-arrow.html",
|
"text!./res/templates/menu-arrow.html",
|
||||||
"text!./res/templates/back-arrow.html",
|
"text!./res/templates/back-arrow.html",
|
||||||
"text!./res/templates/items/items.html",
|
"text!./res/templates/items/items.html",
|
||||||
@ -48,6 +50,7 @@ define([
|
|||||||
InspectorPaneController,
|
InspectorPaneController,
|
||||||
BrowseObjectController,
|
BrowseObjectController,
|
||||||
MenuArrowController,
|
MenuArrowController,
|
||||||
|
ObjectHeaderController,
|
||||||
NavigationService,
|
NavigationService,
|
||||||
NavigateAction,
|
NavigateAction,
|
||||||
OrphanNavigationHandler,
|
OrphanNavigationHandler,
|
||||||
@ -58,6 +61,7 @@ define([
|
|||||||
browseObjectTemplate,
|
browseObjectTemplate,
|
||||||
gridItemTemplate,
|
gridItemTemplate,
|
||||||
objectHeaderTemplate,
|
objectHeaderTemplate,
|
||||||
|
objectHeaderFrameTemplate,
|
||||||
menuArrowTemplate,
|
menuArrowTemplate,
|
||||||
backArrowTemplate,
|
backArrowTemplate,
|
||||||
itemsTemplate,
|
itemsTemplate,
|
||||||
@ -140,6 +144,13 @@ define([
|
|||||||
"$location",
|
"$location",
|
||||||
"$attrs"
|
"$attrs"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ObjectHeaderController",
|
||||||
|
"implementation": ObjectHeaderController,
|
||||||
|
"depends": [
|
||||||
|
"$scope"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"representations": [
|
"representations": [
|
||||||
@ -173,6 +184,13 @@ define([
|
|||||||
"type"
|
"type"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "object-header-frame",
|
||||||
|
"template": objectHeaderFrameTemplate,
|
||||||
|
"uses": [
|
||||||
|
"type"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "menu-arrow",
|
"key": "menu-arrow",
|
||||||
"template": menuArrowTemplate,
|
"template": menuArrowTemplate,
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
<!--
|
||||||
|
Open MCT, Copyright (c) 2014-2017, United States Government
|
||||||
|
as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
Administration. All rights reserved.
|
||||||
|
|
||||||
|
Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
Open MCT includes source code licensed under additional open source
|
||||||
|
licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
this source code distribution or the Licensing information page available
|
||||||
|
at runtime from the About dialog for additional information.
|
||||||
|
-->
|
||||||
|
<span class='type-icon flex-elem {{type.getCssClass()}}'></span>
|
||||||
|
<span class="l-elem-wrapper l-flex-row flex-elem grows" ng-controller="ObjectHeaderController as controller">
|
||||||
|
<span ng-if="parameters.mode" class='action flex-elem'>{{parameters.mode}}</span>
|
||||||
|
<span class='title-label flex-elem holder flex-can-shrink s-input-inline'>{{model.name}}</span>
|
||||||
|
<span class='t-object-alert t-alert-unsynced flex-elem holder' title='This object is not currently displaying real-time data'></span>
|
||||||
|
<mct-representation
|
||||||
|
key="'menu-arrow'"
|
||||||
|
mct-object='domainObject'
|
||||||
|
class="flex-elem context-available-w"></mct-representation>
|
||||||
|
</span>
|
@ -20,9 +20,13 @@
|
|||||||
at runtime from the About dialog for additional information.
|
at runtime from the About dialog for additional information.
|
||||||
-->
|
-->
|
||||||
<span class='type-icon flex-elem {{type.getCssClass()}}'></span>
|
<span class='type-icon flex-elem {{type.getCssClass()}}'></span>
|
||||||
<span class="l-elem-wrapper l-flex-row flex-elem grows">
|
<span class="l-elem-wrapper l-flex-row flex-elem grows" ng-controller="ObjectHeaderController as controller">
|
||||||
<span ng-if="parameters.mode" class='action flex-elem'>{{parameters.mode}}</span>
|
<span ng-if="parameters.mode" class='action flex-elem'>{{parameters.mode}}</span>
|
||||||
<span class='title-label flex-elem holder flex-can-shrink'>{{model.name}}</span>
|
<span contenteditable="true"
|
||||||
|
class='title-label flex-elem holder flex-can-shrink s-input-inline'
|
||||||
|
ng-click="controller.edit()"
|
||||||
|
ng-blur="controller.updateName($event)"
|
||||||
|
ng-keypress="controller.updateName($event)">{{model.name}}</span>
|
||||||
<span class='t-object-alert t-alert-unsynced flex-elem holder' title='This object is not currently displaying real-time data'></span>
|
<span class='t-object-alert t-alert-unsynced flex-elem holder' title='This object is not currently displaying real-time data'></span>
|
||||||
<mct-representation
|
<mct-representation
|
||||||
key="'menu-arrow'"
|
key="'menu-arrow'"
|
||||||
|
75
platform/commonUI/browse/src/ObjectHeaderController.js
Normal file
75
platform/commonUI/browse/src/ObjectHeaderController.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2017, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
define(
|
||||||
|
[],
|
||||||
|
function () {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller to provide the ability to inline edit an object name.
|
||||||
|
*
|
||||||
|
* @constructor
|
||||||
|
* @memberof platform/commonUI/browse
|
||||||
|
*/
|
||||||
|
function ObjectHeaderController($scope) {
|
||||||
|
this.$scope = $scope;
|
||||||
|
$scope.editing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the object name on blur and enter keypress events.
|
||||||
|
*
|
||||||
|
* @param event the mouse event
|
||||||
|
*/
|
||||||
|
ObjectHeaderController.prototype.updateName = function (event) {
|
||||||
|
if (event && (event.type === 'blur' || event.which === 13)) {
|
||||||
|
var name = event.currentTarget.innerHTML;
|
||||||
|
|
||||||
|
if (name.length === 0) {
|
||||||
|
name = "Unnamed " + this.$scope.domainObject.getCapability("type").typeDef.name;
|
||||||
|
event.currentTarget.innerHTML = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name !== this.$scope.domainObject.model.name) {
|
||||||
|
this.$scope.domainObject.getCapability('mutation').mutate(function (model) {
|
||||||
|
model.name = name;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$scope.editing = false;
|
||||||
|
|
||||||
|
if (event.which === 13) {
|
||||||
|
event.currentTarget.blur();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Marks the status of the field as editing.
|
||||||
|
*/
|
||||||
|
ObjectHeaderController.prototype.edit = function () {
|
||||||
|
this.$scope.editing = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
return ObjectHeaderController;
|
||||||
|
}
|
||||||
|
);
|
120
platform/commonUI/browse/test/ObjectHeaderControllerSpec.js
Normal file
120
platform/commonUI/browse/test/ObjectHeaderControllerSpec.js
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2017, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
define(
|
||||||
|
["../src/ObjectHeaderController"],
|
||||||
|
function (ObjectHeaderController) {
|
||||||
|
|
||||||
|
describe("The object header controller", function () {
|
||||||
|
var mockScope,
|
||||||
|
mockDomainObject,
|
||||||
|
mockCapabilities,
|
||||||
|
mockMutationCapability,
|
||||||
|
mockTypeCapability,
|
||||||
|
mockEvent,
|
||||||
|
mockCurrentTarget,
|
||||||
|
controller;
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
mockMutationCapability = jasmine.createSpyObj("mutation", ["mutate"]);
|
||||||
|
mockTypeCapability = {
|
||||||
|
typeDef: {
|
||||||
|
name: ""
|
||||||
|
}
|
||||||
|
};
|
||||||
|
mockCapabilities = {
|
||||||
|
mutation: mockMutationCapability,
|
||||||
|
type: mockTypeCapability
|
||||||
|
};
|
||||||
|
|
||||||
|
mockDomainObject = jasmine.createSpyObj("domainObject", ["getCapability", "model"]);
|
||||||
|
mockDomainObject.model = {name: "Test name"};
|
||||||
|
mockDomainObject.getCapability.andCallFake(function (key) {
|
||||||
|
return mockCapabilities[key];
|
||||||
|
});
|
||||||
|
|
||||||
|
mockScope = {
|
||||||
|
domainObject: mockDomainObject
|
||||||
|
};
|
||||||
|
|
||||||
|
mockCurrentTarget = jasmine.createSpyObj("currentTarget", ["blur", "innerHTML"]);
|
||||||
|
mockCurrentTarget.blur.andReturn(mockCurrentTarget);
|
||||||
|
|
||||||
|
mockEvent = {
|
||||||
|
which: {},
|
||||||
|
type: {},
|
||||||
|
currentTarget: mockCurrentTarget
|
||||||
|
};
|
||||||
|
|
||||||
|
controller = new ObjectHeaderController(mockScope);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("updates the model with new name on blur", function () {
|
||||||
|
mockEvent.type = "blur";
|
||||||
|
mockCurrentTarget.innerHTML = "New name";
|
||||||
|
controller.updateName(mockEvent);
|
||||||
|
|
||||||
|
expect(mockMutationCapability.mutate).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("updates the model with a default for blank names", function () {
|
||||||
|
mockEvent.type = "blur";
|
||||||
|
mockCurrentTarget.innerHTML = "";
|
||||||
|
controller.updateName(mockEvent);
|
||||||
|
|
||||||
|
expect(mockCurrentTarget.innerHTML.length).not.toEqual(0);
|
||||||
|
expect(mockMutationCapability.mutate).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("does not update the model if the same name", function () {
|
||||||
|
mockEvent.type = "blur";
|
||||||
|
mockCurrentTarget.innerHTML = mockDomainObject.model.name;
|
||||||
|
controller.updateName(mockEvent);
|
||||||
|
|
||||||
|
expect(mockMutationCapability.mutate).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("updates the model on enter keypress event only", function () {
|
||||||
|
mockCurrentTarget.innerHTML = "New name";
|
||||||
|
controller.updateName(mockEvent);
|
||||||
|
|
||||||
|
expect(mockMutationCapability.mutate).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
mockEvent.which = 13;
|
||||||
|
controller.updateName(mockEvent);
|
||||||
|
|
||||||
|
expect(mockMutationCapability.mutate).toHaveBeenCalledWith(jasmine.any(Function));
|
||||||
|
|
||||||
|
mockMutationCapability.mutate.mostRecentCall.args[0](mockDomainObject.model);
|
||||||
|
|
||||||
|
expect(mockDomainObject.model.name).toBe("New name");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("blurs the field on enter key press", function () {
|
||||||
|
mockEvent.which = 13;
|
||||||
|
controller.updateName(mockEvent);
|
||||||
|
|
||||||
|
expect(mockEvent.currentTarget.blur).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
@ -111,7 +111,9 @@ $bubbleMaxW: 300px;
|
|||||||
$reqSymbolW: 15px;
|
$reqSymbolW: 15px;
|
||||||
$reqSymbolM: $interiorMargin * 2;
|
$reqSymbolM: $interiorMargin * 2;
|
||||||
$reqSymbolFontSize: 0.75em;
|
$reqSymbolFontSize: 0.75em;
|
||||||
$inputTextP: 3px 5px;
|
$inputTextPTopBtm: 3px;
|
||||||
|
$inputTextPLeftRight: 5px;
|
||||||
|
$inputTextP: $inputTextPTopBtm $inputTextPLeftRight;
|
||||||
/*************** Wait Spinner Defaults */
|
/*************** Wait Spinner Defaults */
|
||||||
$waitSpinnerD: 32px;
|
$waitSpinnerD: 32px;
|
||||||
$waitSpinnerTreeD: 20px;
|
$waitSpinnerTreeD: 20px;
|
||||||
|
@ -316,23 +316,28 @@
|
|||||||
text-shadow: $shdwItemText;
|
text-shadow: $shdwItemText;
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin input-base($bg: $colorInputBg, $fg: $colorInputFg, $shdw: rgba(black, 0.6) 0 1px 3px) {
|
@mixin input-base() {
|
||||||
@include appearance(none);
|
@include appearance(none);
|
||||||
border-radius: $controlCr;
|
border-radius: $controlCr;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
box-shadow: inset $shdw;
|
&:focus { outline: 0; }
|
||||||
background: $bg;
|
|
||||||
border: none;
|
|
||||||
color: $fg;
|
|
||||||
outline: none;
|
|
||||||
&.error {
|
&.error {
|
||||||
background-color: $colorFormFieldErrorBg;
|
background-color: $colorFormFieldErrorBg;
|
||||||
color: $colorFormFieldErrorFg;
|
color: $colorFormFieldErrorFg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin nice-input($bg: $colorInputBg, $fg: $colorInputFg) {
|
@mixin s-input($bg: $colorInputBg, $fg: $colorInputFg, $shdw: rgba(black, 0.6) 0 1px 3px) {
|
||||||
@include input-base($bg, $fg);
|
@include input-base();
|
||||||
|
background: $bg;
|
||||||
|
box-shadow: inset $shdw;
|
||||||
|
color: $fg;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin nice-input($bg: $colorInputBg, $fg: $colorInputFg, $shdw: rgba(black, 0.6) 0 1px 3px) {
|
||||||
|
@include s-input($bg, $fg, $shdw);
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin contextArrow() {
|
@mixin contextArrow() {
|
||||||
@ -344,7 +349,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@mixin nice-textarea($bg: $colorBodyBg, $fg: $colorBodyFg) {
|
@mixin nice-textarea($bg: $colorBodyBg, $fg: $colorBodyFg) {
|
||||||
@include input-base($bg, $fg);
|
@include nice-input($bg, $fg);
|
||||||
padding: $interiorMargin;
|
padding: $interiorMargin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,12 +234,16 @@ textarea {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************** INPUTS */
|
/******************************************************** INPUTS */
|
||||||
|
%input-base {
|
||||||
|
@include input-base();
|
||||||
|
}
|
||||||
|
|
||||||
input[type="text"],
|
input[type="text"],
|
||||||
input[type="search"],
|
input[type="search"],
|
||||||
input[type="number"] {
|
input[type="number"] {
|
||||||
@include nice-input();
|
@include nice-input();
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
padding: $inputTextP;
|
padding: $inputTextPTopBtm $inputTextPLeftRight;
|
||||||
&.numeric {
|
&.numeric {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
@ -283,6 +287,32 @@ textarea.lg { position: relative; height: 300px; }
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*[contenteditable].s-input-inline,
|
||||||
|
input[type="text"].s-input-inline,
|
||||||
|
.s-input-inline input[type="text"] {
|
||||||
|
// A text input or contenteditable element that indicates edit affordance on hover and looks like an input on focus
|
||||||
|
@extend %input-base;
|
||||||
|
@include trans-prop-nice((padding, box-shadow), 250ms);
|
||||||
|
background: none;
|
||||||
|
box-shadow: none;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
min-width: 20px;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
padding-left: $inputTextPLeftRight;
|
||||||
|
padding-right: $inputTextPLeftRight;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
border-color: rgba($colorBodyFg, 0.2);
|
||||||
|
}
|
||||||
|
&:focus {
|
||||||
|
@include s-input();
|
||||||
|
border-color: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************** SELECTS */
|
/******************************************************** SELECTS */
|
||||||
.select {
|
.select {
|
||||||
@include btnSubtle($bg: $colorSelectBg);
|
@include btnSubtle($bg: $colorSelectBg);
|
||||||
@ -298,6 +328,7 @@ textarea.lg { position: relative; height: 300px; }
|
|||||||
select {
|
select {
|
||||||
@include appearance(none);
|
@include appearance(none);
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
&:focus { outline: 0; }
|
||||||
background: none;
|
background: none;
|
||||||
color: $colorSelectFg;
|
color: $colorSelectFg;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@ -129,9 +129,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.s-filter {
|
.s-filter {
|
||||||
input[type="search"] {
|
|
||||||
@include input-base();
|
|
||||||
}
|
|
||||||
.clear-icon,
|
.clear-icon,
|
||||||
.menu-icon,
|
.menu-icon,
|
||||||
&:before {
|
&:before {
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
&.t-object-type-hyperlink {
|
&.t-object-type-hyperlink {
|
||||||
// Hide the right side buttons for objects where they don't make sense
|
// Hide the right side buttons for objects where they don't make sense
|
||||||
// Note that this will hide the view Switcher button if applied
|
// Note that this will hide the view Switcher button if applied
|
||||||
// to an object that it.
|
// to an object that has it.
|
||||||
.object-browse-bar .right { display: none; }
|
.object-browse-bar .right { display: none; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,6 +120,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.t-frame-outer .s-input-inline {
|
||||||
|
// Prevent inline inputs from being edited when nested in a Layout
|
||||||
|
pointer-events: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
/********************************************************** OBJECT TYPES */
|
/********************************************************** OBJECT TYPES */
|
||||||
.t-object-type-hyperlink {
|
.t-object-type-hyperlink {
|
||||||
.object-holder {
|
.object-holder {
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
at runtime from the About dialog for additional information.
|
at runtime from the About dialog for additional information.
|
||||||
-->
|
-->
|
||||||
<!-- look at action-button for example -->
|
<!-- look at action-button for example -->
|
||||||
<span class="t-filter l-filter s-filter"
|
<span class="t-filter l-filter"
|
||||||
ng-controller="GetterSetterController">
|
ng-controller="GetterSetterController">
|
||||||
<input type="search"
|
<input type="search"
|
||||||
class="t-filter-input"
|
class="t-filter-input"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
$ueTimeConductorH: (25px, 16px, 20px); // Heights for Ticks, Data Visualization, Controls elements
|
$ueTimeConductorH: (25px, 16px, 20px); // Heights for Ticks, Data Visualization, Controls elements
|
||||||
$ueTimeConductorRtH: (25px, 3px, 20px); // Heights for elements in Real-time mode
|
$ueTimeConductorRtH: (25px, 3px, 20px); // Heights for elements in Real-time mode
|
||||||
$timeCondInputTimeSysDefW: 165px; // Default width for datetime value inputs
|
$timeCondInputTimeSysDefW: 165px; // Default width for datetime value inputs
|
||||||
$timeCondInputDeltaDefW: 60px; // Default width for delta value inputs, typically 00:00:00
|
$timeCondInputDeltaDefW: 65px; // Default width for delta value inputs, typically 00:00:00
|
||||||
$timeCondTOIIconD: 12px; // height and width of icon used for TOI indicator
|
$timeCondTOIIconD: 12px; // height and width of icon used for TOI indicator
|
||||||
$timeCondTOIValOffset: 0px;
|
$timeCondTOIValOffset: 0px;
|
||||||
$ticksBlockerFadeW: 50px;
|
$ticksBlockerFadeW: 50px;
|
||||||
|
@ -162,9 +162,6 @@
|
|||||||
.l-time-conductor-inputs {
|
.l-time-conductor-inputs {
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
}
|
}
|
||||||
input[type="text"] {
|
|
||||||
@include trans-prop-nice(padding, 250ms);
|
|
||||||
}
|
|
||||||
.time-range-input input[type="text"] {
|
.time-range-input input[type="text"] {
|
||||||
width: $timeCondInputTimeSysDefW;
|
width: $timeCondInputTimeSysDefW;
|
||||||
}
|
}
|
||||||
@ -290,18 +287,6 @@
|
|||||||
|
|
||||||
.l-time-conductor-inputs-holder {
|
.l-time-conductor-inputs-holder {
|
||||||
.l-time-range-input-w {
|
.l-time-range-input-w {
|
||||||
input[type="text"]:not(.error) {
|
|
||||||
background: transparent;
|
|
||||||
box-shadow: none;
|
|
||||||
border-radius: 0;
|
|
||||||
padding-left: 0;
|
|
||||||
padding-right: 0;
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
@include nice-input();
|
|
||||||
padding: $inputTextP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.icon-calendar {
|
.icon-calendar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
@ -309,8 +294,11 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
&.end-date {
|
&.end-date {
|
||||||
|
// Displays the current time
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
input[type="text"] {
|
input[type="text"] {
|
||||||
|
background: none;
|
||||||
|
box-shadow: none;
|
||||||
color: pullForward($colorTimeCondKeyBg, 5%);
|
color: pullForward($colorTimeCondKeyBg, 5%);
|
||||||
margin-right: $interiorMargin;
|
margin-right: $interiorMargin;
|
||||||
tab-index: -1;
|
tab-index: -1;
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
ng-model="boundsModel"
|
ng-model="boundsModel"
|
||||||
ng-blur="tcController.setOffsetsFromView(boundsModel)"
|
ng-blur="tcController.setOffsetsFromView(boundsModel)"
|
||||||
field="'startOffset'"
|
field="'startOffset'"
|
||||||
class="hrs-min-input">
|
class="s-input-inline hrs-min-input">
|
||||||
</mct-control>
|
</mct-control>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
@ -71,7 +71,7 @@
|
|||||||
ng-model="boundsModel"
|
ng-model="boundsModel"
|
||||||
ng-blur="tcController.setOffsetsFromView(boundsModel)"
|
ng-blur="tcController.setOffsetsFromView(boundsModel)"
|
||||||
field="'endOffset'"
|
field="'endOffset'"
|
||||||
class="hrs-min-input">
|
class="s-input-inline hrs-min-input">
|
||||||
</mct-control>
|
</mct-control>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<div class="abs object-browse-bar l-flex-row">
|
<div class="abs object-browse-bar l-flex-row">
|
||||||
<div class="left flex-elem l-flex-row grows">
|
<div class="left flex-elem l-flex-row grows">
|
||||||
<mct-representation
|
<mct-representation
|
||||||
key="'object-header'"
|
key="'object-header-frame'"
|
||||||
mct-object="domainObject"
|
mct-object="domainObject"
|
||||||
class="l-flex-row flex-elem object-header grows">
|
class="l-flex-row flex-elem object-header grows">
|
||||||
</mct-representation>
|
</mct-representation>
|
||||||
|
Reference in New Issue
Block a user