From 34ca7a420a4a6775abdd0fd0989dc9e04c7f91f4 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 19 Sep 2018 11:31:41 +0200 Subject: [PATCH 01/17] add basic UI scaffolding for search --- .../application/umbsearch.directive.js | 52 +++++++++++++++++++ src/Umbraco.Web.UI.Client/src/less/belle.less | 1 + .../components/application/umb-search.less | 25 +++++++++ .../components/application/umb-search.html | 27 ++++++++++ .../Umbraco/Views/Default.cshtml | 2 + 5 files changed, 107 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbsearch.directive.js create mode 100644 src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less create mode 100644 src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbsearch.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbsearch.directive.js new file mode 100644 index 0000000000..96d1bb5eb9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbsearch.directive.js @@ -0,0 +1,52 @@ +(function () { + 'use strict'; + + /** + * A component to render the pop up search field + */ + var umbSearch = { + templateUrl: 'views/components/application/umb-search.html', + controllerAs: 'vm', + controller: umbSearchController, + bindings: { + onClose: "&" + } + }; + + function umbSearchController($scope, backdropService) { + + var vm = this; + + vm.searchResults = []; + + vm.$onInit = onInit; + vm.search = search; + vm.closeSearch = closeSearch; + + function onInit() { + console.log("init search thingy"); + backdropService.open(); + } + + /** + * Used to proxy a callback + */ + function closeSearch() { + if(vm.onClose) { + vm.onClose(); + } + } + + /** + * Used to search + * @param {string} searchQuery + */ + function search(searchQuery) { + console.log(searchQuery); + } + + } + + angular.module('umbraco.directives').component('umbSearch', umbSearch); + +})(); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/less/belle.less b/src/Umbraco.Web.UI.Client/src/less/belle.less index b2f2f99dd5..37ba0366eb 100644 --- a/src/Umbraco.Web.UI.Client/src/less/belle.less +++ b/src/Umbraco.Web.UI.Client/src/less/belle.less @@ -84,6 +84,7 @@ @import "components/application/umb-app-content.less"; @import "components/application/umb-tour.less"; @import "components/application/umb-backdrop.less"; +@import "components/application/umb-search.less"; @import "components/application/umb-drawer.less"; @import "components/application/umb-language-picker.less"; @import "components/application/umb-dashboard.less"; diff --git a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less new file mode 100644 index 0000000000..22f2c62712 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less @@ -0,0 +1,25 @@ + +.umb-search { + position: fixed; + z-index: @zindexUmbOverlay; + width: 660px; + max-width: 90%; + height: 70px; + // transition: opacity 60ms ease-in-out; + transform: translate(-50%, -50%); + left: 50%; + top: 20%; + border-radius: @baseBorderRadius; + background: @white; + position: fixed; + box-shadow: 0 10px 20px rgba(0,0,0,.12),0 6px 6px rgba(0,0,0,.14); +} + +.umb-search-input.umb-search-input { + width: 100%; + height: 70px; + border: none; + padding: 20px; + border-radius: @baseBorderRadius; + font-size: 22px; +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html new file mode 100644 index 0000000000..a5ffb4a7a3 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html @@ -0,0 +1,27 @@ + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/Views/Default.cshtml b/src/Umbraco.Web.UI/Umbraco/Views/Default.cshtml index dea4c52bc5..7214c362d2 100644 --- a/src/Umbraco.Web.UI/Umbraco/Views/Default.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/Views/Default.cshtml @@ -88,6 +88,8 @@ + + Date: Wed, 19 Sep 2018 14:24:21 +0200 Subject: [PATCH 02/17] add styling for search results + basic wire up of search service --- .../application/umbsearch.directive.js | 31 +++++++++- .../components/application/umb-search.less | 58 ++++++++++++++++++- .../components/application/umb-search.html | 38 +++++++----- 3 files changed, 106 insertions(+), 21 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbsearch.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbsearch.directive.js index 96d1bb5eb9..5f15da9d65 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbsearch.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbsearch.directive.js @@ -13,17 +13,19 @@ } }; - function umbSearchController($scope, backdropService) { + function umbSearchController($scope, backdropService, searchService) { var vm = this; - vm.searchResults = []; - vm.$onInit = onInit; vm.search = search; vm.closeSearch = closeSearch; function onInit() { + + vm.searchResults = []; + vm.hasResults = false; + console.log("init search thingy"); backdropService.open(); } @@ -43,6 +45,29 @@ */ function search(searchQuery) { console.log(searchQuery); + if(searchQuery.length > 0) { + var search = {"term": searchQuery}; + searchService.searchAll(search).then(function(result){ + + //result is a dictionary of group Title and it's results + var filtered = {}; + _.each(result, function (value, key) { + if (value.results.length > 0) { + filtered[key] = value; + } + }); + + vm.searchResults = filtered; + // check if search has results + vm.hasResults = Object.keys(vm.searchResults).length > 0; + console.log("results", vm.searchResults); + console.log("has results", vm.hasResults); + }); + + } else { + vm.searchResults = []; + vm.hasResults = false; + } } } diff --git a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less index 22f2c62712..462e8e0e10 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less @@ -1,12 +1,14 @@ +/* + Search wrapper +*/ .umb-search { position: fixed; z-index: @zindexUmbOverlay; width: 660px; max-width: 90%; - height: 70px; // transition: opacity 60ms ease-in-out; - transform: translate(-50%, -50%); + transform: translate(-50%, 0); left: 50%; top: 20%; border-radius: @baseBorderRadius; @@ -15,6 +17,9 @@ box-shadow: 0 10px 20px rgba(0,0,0,.12),0 6px 6px rgba(0,0,0,.14); } +/* + Search field +*/ .umb-search-input.umb-search-input { width: 100%; height: 70px; @@ -22,4 +27,53 @@ padding: 20px; border-radius: @baseBorderRadius; font-size: 22px; + margin-bottom: 0; +} + +/* + Search results +*/ +.umb-search-results { + max-height: 50vh; + overflow-y: auto; +} + +.umb-search-group__title { + background: @gray-10; + padding: 3px 20px; +} + +.umb-search-items { + list-style: none; + margin: 0; + padding-top: 4px; + padding-bottom: 4px; +} + +.umb-search-item > a { + padding: 6px 20px; + display: flex; +} + +.umb-search-item > a:hover, +.umb-search-item > a:focus { + background-color: @gray-10; + text-decoration: none; + outline: none; +} + +.umb-search-result__icon { + font-size: 18px; + margin-right: 8px; + color: @gray-1; +} + +.umb-search-result__meta { + display: flex; + flex-direction: column; +} + +.umb-search-result__description { + color: @gray-5; + font-size: 13px; } \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html index a5ffb4a7a3..2b27890633 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html @@ -4,24 +4,30 @@ - - + + \ No newline at end of file From 5b4c27313325d185cf5ac96626fb986eee9a18fb Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 19 Sep 2018 14:50:29 +0200 Subject: [PATCH 03/17] Add search icon + focus indention --- .../components/application/umb-search.less | 14 +++++++++++++- .../components/application/umb-search.html | 19 +++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less index 462e8e0e10..81249d1aee 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-search.less @@ -20,11 +20,18 @@ /* Search field */ + +.umb-search-input-icon { + font-size: 22px; + color: @gray-7; + padding-left: 20px; +} + .umb-search-input.umb-search-input { width: 100%; height: 70px; border: none; - padding: 20px; + padding: 20px 20px 20px 15px; border-radius: @baseBorderRadius; font-size: 22px; margin-bottom: 0; @@ -62,6 +69,11 @@ outline: none; } +.umb-search-item > a:focus { + padding-left: 25px; + transition: padding 60ms ease-in-out; +} + .umb-search-result__icon { font-size: 18px; margin-right: 8px; diff --git a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html index 2b27890633..2e425b762e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html @@ -1,14 +1,17 @@