[Search] Menu opening
Menu opens when icon is pressed. Closes when cliked away from, but not when clicked on.
This commit is contained in:
@@ -336,39 +336,43 @@ ul.tree {
|
|||||||
padding: 6px;
|
padding: 6px;
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
right: 0px;
|
right: 0px;
|
||||||
top: -3px; }
|
top: -3px;
|
||||||
/* line 131, ../sass/search/_search.scss */
|
transition: color .2s; }
|
||||||
|
/* line 132, ../sass/search/_search.scss */
|
||||||
|
.search-holder .search .search-bar .menu-icon:hover {
|
||||||
|
color: #a6a6a6; }
|
||||||
|
/* line 137, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar .search-menu-holder {
|
.search-holder .search .search-bar .search-menu-holder {
|
||||||
float: right;
|
float: right;
|
||||||
margin-top: 17px;
|
margin-top: 17px;
|
||||||
left: -25px; }
|
left: -25px; }
|
||||||
/* line 138, ../sass/search/_search.scss */
|
/* line 142, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar .search-menu-holder .search-menu {
|
.search-holder .search .search-bar .search-menu-holder .search-menu {
|
||||||
border-top: 0; }
|
border-top: 0; }
|
||||||
/* line 141, ../sass/search/_search.scss */
|
/* line 145, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item {
|
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
padding-right: 6px;
|
padding-right: 6px;
|
||||||
font-size: 0.8em; }
|
font-size: 0.8em; }
|
||||||
/* line 150, ../sass/search/_search.scss */
|
/* line 154, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item .search-menu-checkbox {
|
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item .search-menu-checkbox {
|
||||||
margin-top: 0.3em;
|
margin-top: 0.3em;
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
padding-right: 3px; }
|
padding-right: 3px; }
|
||||||
/* line 163, ../sass/search/_search.scss */
|
/* line 167, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item .search-menu-glyph {
|
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item .search-menu-glyph {
|
||||||
color: white; }
|
color: white; }
|
||||||
/* line 171, ../sass/search/_search.scss */
|
/* line 175, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item.special {
|
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item.special {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background-color: gray; }
|
background-color: gray; }
|
||||||
/* line 175, ../sass/search/_search.scss */
|
/* line 179, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item.special .search-menu-label {
|
.search-holder .search .search-bar .search-menu-holder .search-menu .search-menu-item.special .search-menu-label {
|
||||||
font-size: 1.1em; }
|
font-size: 1.1em; }
|
||||||
/* line 184, ../sass/search/_search.scss */
|
/* line 188, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar .search-menu-holder:after {
|
.search-holder .search .search-bar .search-menu-holder:after {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -6px;
|
top: -6px;
|
||||||
@@ -378,18 +382,18 @@ ul.tree {
|
|||||||
border-bottom: 6px solid #5e5e5e;
|
border-bottom: 6px solid #5e5e5e;
|
||||||
border-left: 6px solid transparent;
|
border-left: 6px solid transparent;
|
||||||
content: ''; }
|
content: ''; }
|
||||||
/* line 197, ../sass/search/_search.scss */
|
/* line 201, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar .menu-icon:hover + div.search-menu-holder {
|
.search-holder .search .search-bar .menu-icon:hover + div.search-menu-holder {
|
||||||
visibility: visible; }
|
visibility: visible; }
|
||||||
/* line 200, ../sass/search/_search.scss */
|
/* line 204, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-bar div.search-menu-holder:hover {
|
.search-holder .search .search-bar div.search-menu-holder:hover {
|
||||||
visibility: visible; }
|
visibility: visible; }
|
||||||
/* line 205, ../sass/search/_search.scss */
|
/* line 209, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll {
|
.search-holder .search .search-scroll {
|
||||||
top: 25px;
|
top: 25px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding-right: 5px; }
|
padding-right: 5px; }
|
||||||
/* line 213, ../sass/search/_search.scss */
|
/* line 217, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .results .search-result-item {
|
.search-holder .search .search-scroll .results .search-result-item {
|
||||||
-moz-transition: background-color 0.25s;
|
-moz-transition: background-color 0.25s;
|
||||||
-o-transition: background-color 0.25s;
|
-o-transition: background-color 0.25s;
|
||||||
@@ -399,10 +403,10 @@ ul.tree {
|
|||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
padding-top: 4px;
|
padding-top: 4px;
|
||||||
padding-bottom: 2px; }
|
padding-bottom: 2px; }
|
||||||
/* line 227, ../sass/search/_search.scss */
|
/* line 231, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .results .search-result-item .label {
|
.search-holder .search .search-scroll .results .search-result-item .label {
|
||||||
margin-left: 6px; }
|
margin-left: 6px; }
|
||||||
/* line 231, ../sass/search/_search.scss */
|
/* line 235, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .results .search-result-item .label .title-label {
|
.search-holder .search .search-scroll .results .search-result-item .label .title-label {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -414,47 +418,47 @@ ul.tree {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap; }
|
white-space: nowrap; }
|
||||||
/* line 253, ../sass/search/_search.scss */
|
/* line 257, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .results .search-result-item.selected {
|
.search-holder .search .search-scroll .results .search-result-item.selected {
|
||||||
background: #005177;
|
background: #005177;
|
||||||
color: #fff; }
|
color: #fff; }
|
||||||
/* line 257, ../sass/search/_search.scss */
|
/* line 261, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .results .search-result-item.selected .view-control {
|
.search-holder .search .search-scroll .results .search-result-item.selected .view-control {
|
||||||
color: #0099cc; }
|
color: #0099cc; }
|
||||||
/* line 260, ../sass/search/_search.scss */
|
/* line 264, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .results .search-result-item.selected .label .type-icon {
|
.search-holder .search .search-scroll .results .search-result-item.selected .label .type-icon {
|
||||||
color: #fff; }
|
color: #fff; }
|
||||||
/* line 267, ../sass/search/_search.scss */
|
/* line 271, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .results .search-result-item:not(.selected):hover {
|
.search-holder .search .search-scroll .results .search-result-item:not(.selected):hover {
|
||||||
background: #404040;
|
background: #404040;
|
||||||
color: #cccccc; }
|
color: #cccccc; }
|
||||||
/* line 270, ../sass/search/_search.scss */
|
/* line 274, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .results .search-result-item:not(.selected):hover .context-trigger {
|
.search-holder .search .search-scroll .results .search-result-item:not(.selected):hover .context-trigger {
|
||||||
display: block; }
|
display: block; }
|
||||||
/* line 273, ../sass/search/_search.scss */
|
/* line 277, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .results .search-result-item:not(.selected):hover .icon {
|
.search-holder .search .search-scroll .results .search-result-item:not(.selected):hover .icon {
|
||||||
color: #33ccff; }
|
color: #33ccff; }
|
||||||
/* line 281, ../sass/search/_search.scss */
|
/* line 285, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .load-icon {
|
.search-holder .search .search-scroll .load-icon {
|
||||||
position: relative; }
|
position: relative; }
|
||||||
/* line 283, ../sass/search/_search.scss */
|
/* line 287, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .load-icon.loading {
|
.search-holder .search .search-scroll .load-icon.loading {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
margin-left: 6px; }
|
margin-left: 6px; }
|
||||||
/* line 287, ../sass/search/_search.scss */
|
/* line 291, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .load-icon.loading .title-label {
|
.search-holder .search .search-scroll .load-icon.loading .title-label {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-size: .9em;
|
font-size: .9em;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
margin-left: 26px;
|
margin-left: 26px;
|
||||||
line-height: 24px; }
|
line-height: 24px; }
|
||||||
/* line 297, ../sass/search/_search.scss */
|
/* line 301, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .load-icon.loading .wait-spinner {
|
.search-holder .search .search-scroll .load-icon.loading .wait-spinner {
|
||||||
margin-left: 6px; }
|
margin-left: 6px; }
|
||||||
/* line 302, ../sass/search/_search.scss */
|
/* line 306, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .load-icon:not(.loading) {
|
.search-holder .search .search-scroll .load-icon:not(.loading) {
|
||||||
cursor: pointer; }
|
cursor: pointer; }
|
||||||
/* line 307, ../sass/search/_search.scss */
|
/* line 311, ../sass/search/_search.scss */
|
||||||
.search-holder .search .search-scroll .load-more-button {
|
.search-holder .search .search-scroll .load-more-button {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
|
|||||||
@@ -126,11 +126,15 @@
|
|||||||
|
|
||||||
right: 0px;
|
right: 0px;
|
||||||
top: -3px;
|
top: -3px;
|
||||||
|
|
||||||
|
transition: color .2s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: lighten($colorItemFg, 20%);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-menu-holder {
|
.search-menu-holder {
|
||||||
//visibility: hidden;
|
|
||||||
|
|
||||||
float: right;
|
float: right;
|
||||||
margin-top: $textInputHeight - 2px;
|
margin-top: $textInputHeight - 2px;
|
||||||
left: -25px;
|
left: -25px;
|
||||||
|
|||||||
@@ -19,6 +19,11 @@
|
|||||||
"key": "SearchItemController",
|
"key": "SearchItemController",
|
||||||
"implementation": "controllers/SearchItemController.js",
|
"implementation": "controllers/SearchItemController.js",
|
||||||
"depends": [ "$scope" ]
|
"depends": [ "$scope" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ClickAwayController",
|
||||||
|
"implementation": "controllers/ClickAwayController.js",
|
||||||
|
"depends": [ "$scope", "$document" ]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"templates": [
|
"templates": [
|
||||||
|
|||||||
@@ -23,7 +23,8 @@
|
|||||||
ng-controller="SearchController as controller">
|
ng-controller="SearchController as controller">
|
||||||
|
|
||||||
<!-- Search bar -->
|
<!-- Search bar -->
|
||||||
<div class="search-bar">
|
<div class="search-bar"
|
||||||
|
ng-controller="ClickAwayController as toggle">
|
||||||
|
|
||||||
<!-- Input field -->
|
<!-- Input field -->
|
||||||
<input class="search-input"
|
<input class="search-input"
|
||||||
@@ -46,12 +47,15 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- Menu icon/button 'v' -->
|
<!-- Menu icon/button 'v' -->
|
||||||
<a class="ui-symbol menu-icon">
|
<a class="ui-symbol menu-icon"
|
||||||
|
ng-click="toggle.toggle()">
|
||||||
v
|
v
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- Menu -->
|
<!-- Menu -->
|
||||||
<div class="menu-element search-menu-holder">
|
<div class="menu-element search-menu-holder"
|
||||||
|
ng-show="toggle.isActive()"
|
||||||
|
ng-click="toggle.setState(true)">
|
||||||
|
|
||||||
<div class="menu dropdown search-menu">
|
<div class="menu dropdown search-menu">
|
||||||
|
|
||||||
@@ -63,7 +67,7 @@
|
|||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
class="checkbox"
|
class="checkbox"
|
||||||
ng-model="ngModel.checkAll"
|
ng-model="ngModel.checkAll"
|
||||||
ng-change="controller.checkAll()" />
|
ng-change="controller.checkAll(); controller.updateOptions()" />
|
||||||
<em></em>
|
<em></em>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
|||||||
101
platform/search/src/controllers/ClickAwayController.js
Normal file
101
platform/search/src/controllers/ClickAwayController.js
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
* Open MCT Web includes source code licensed under additional open source
|
||||||
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||||
|
* this source code distribution or the Licensing information page available
|
||||||
|
* at runtime from the About dialog for additional information.
|
||||||
|
*****************************************************************************/
|
||||||
|
/*global define,Promise*/
|
||||||
|
|
||||||
|
define(
|
||||||
|
[],
|
||||||
|
function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A ClickAwayController is used to toggle things (such as context
|
||||||
|
* menus) where clicking elsewhere in the document while the toggle
|
||||||
|
* is in an active state is intended to dismiss the toggle.
|
||||||
|
*
|
||||||
|
* @constructor
|
||||||
|
* @param $scope the scope in which this controller is active
|
||||||
|
* @param $document the document element, injected by Angular
|
||||||
|
*/
|
||||||
|
function ClickAwayController($scope, $document) {
|
||||||
|
var state = false,
|
||||||
|
clickaway;
|
||||||
|
|
||||||
|
// Track state, but also attach and detach a listener for
|
||||||
|
// mouseup events on the document.
|
||||||
|
function deactivate() {
|
||||||
|
state = false;
|
||||||
|
$document.off("mouseup", clickaway);
|
||||||
|
}
|
||||||
|
|
||||||
|
function activate() {
|
||||||
|
state = true;
|
||||||
|
$document.on("mouseup", clickaway);
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeState() {
|
||||||
|
if (state) {
|
||||||
|
deactivate();
|
||||||
|
} else {
|
||||||
|
activate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Callback used by the document listener. Deactivates;
|
||||||
|
// note also $scope.$apply is invoked to indicate that
|
||||||
|
// the state of this controller has changed.
|
||||||
|
clickaway = function () {
|
||||||
|
deactivate();
|
||||||
|
$scope.$apply();
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
/**
|
||||||
|
* Get the current state of the toggle.
|
||||||
|
* @return {boolean} true if active
|
||||||
|
*/
|
||||||
|
isActive: function () {
|
||||||
|
return state;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Set a new state for the toggle.
|
||||||
|
* @return {boolean} true to activate
|
||||||
|
*/
|
||||||
|
setState: function (newState) {
|
||||||
|
if (state !== newState) {
|
||||||
|
changeState();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Toggle the current state; activate if it is inactive,
|
||||||
|
* deactivate if it is active.
|
||||||
|
*/
|
||||||
|
toggle: function () {
|
||||||
|
changeState();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ClickAwayController;
|
||||||
|
}
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user