[Search] Menu opening

Menu opens when icon is pressed. Closes when
cliked away from, but not when clicked on.
This commit is contained in:
slhale
2015-08-13 13:59:56 -07:00
parent 2e767c94c4
commit c8694f182a
5 changed files with 151 additions and 33 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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": [

View File

@@ -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>

View 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;
}
);