From ce31ff1f219a5d15f4ed99b8007204038ba6a591 Mon Sep 17 00:00:00 2001 From: Lotte Hofstede Date: Fri, 20 Oct 2017 17:14:55 +0200 Subject: [PATCH] 44988: search sidebar finished --- resources/i18n/en.json | 5 ++ .../layout-controls.component.html | 4 + .../layout-controls.component.scss | 15 ++++ .../layout-controls.component.ts | 23 ++++++ .../+search-page/search-page.component.html | 41 +++++++--- .../+search-page/search-page.component.scss | 79 ++++++++++++++++++- src/app/+search-page/search-page.component.ts | 10 +++ src/app/+search-page/search-page.module.ts | 6 +- .../search-sidebar.component.html | 14 +++- .../search-sidebar.component.scss | 22 +----- .../search-sidebar.component.ts | 5 +- .../search-view-switch.component.html | 10 --- .../search-view-switch.component.scss | 3 - .../search-view-switch.component.ts | 25 ------ src/app/app.component.scss | 4 + .../search-result-list-element.component.scss | 2 +- src/styles/_custom_variables.scss | 3 +- src/styles/_functions.scss | 4 + src/styles/_variables.scss | 1 + 19 files changed, 195 insertions(+), 81 deletions(-) create mode 100644 src/app/+search-page/layout-controls/layout-controls.component.html create mode 100644 src/app/+search-page/layout-controls/layout-controls.component.scss create mode 100644 src/app/+search-page/layout-controls/layout-controls.component.ts delete mode 100644 src/app/+search-page/search-view-switch/search-view-switch.component.html delete mode 100644 src/app/+search-page/search-view-switch/search-view-switch.component.scss delete mode 100644 src/app/+search-page/search-view-switch/search-view-switch.component.ts create mode 100644 src/styles/_functions.scss diff --git a/resources/i18n/en.json b/resources/i18n/en.json index 3388190295..4218ebba86 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -77,6 +77,11 @@ }, "results": { "title": "Search Results" + }, + "sidebar": { + "close": "Back to results", + "open": "Search Tools", + "results": "results" } }, "loading": { diff --git a/src/app/+search-page/layout-controls/layout-controls.component.html b/src/app/+search-page/layout-controls/layout-controls.component.html new file mode 100644 index 0000000000..453ea69e87 --- /dev/null +++ b/src/app/+search-page/layout-controls/layout-controls.component.html @@ -0,0 +1,4 @@ +
+ + +
\ No newline at end of file diff --git a/src/app/+search-page/layout-controls/layout-controls.component.scss b/src/app/+search-page/layout-controls/layout-controls.component.scss new file mode 100644 index 0000000000..93a5bc6704 --- /dev/null +++ b/src/app/+search-page/layout-controls/layout-controls.component.scss @@ -0,0 +1,15 @@ +@import '../../../styles/variables.scss'; +@import '../../../styles/mixins.scss'; + +:host { + display: inline-block; + button { + border: none; + background-color: white; + padding: 0; + color: map-get($theme-colors, primary); + i { + font-size: $button-height; + } + } +} diff --git a/src/app/+search-page/layout-controls/layout-controls.component.ts b/src/app/+search-page/layout-controls/layout-controls.component.ts new file mode 100644 index 0000000000..8d7b4b707f --- /dev/null +++ b/src/app/+search-page/layout-controls/layout-controls.component.ts @@ -0,0 +1,23 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +/** + * This component renders a simple item page. + * The route parameter 'id' is used to request the item it represents. + * All fields of the item that should be displayed, are defined in its template. + */ + +@Component({ + selector: 'ds-layout-controls', + styleUrls: ['./layout-controls.component.scss'], + templateUrl: './layout-controls.component.html', +}) + +export class LayoutControlsComponent { + @Input() isList = true; + @Output() toggleList = new EventEmitter(); + + setList(isList: boolean) { + this.isList = isList; + this.toggleList.emit(isList); + } +} diff --git a/src/app/+search-page/search-page.component.html b/src/app/+search-page/search-page.component.html index a27a60baf4..6b26c11ea1 100644 --- a/src/app/+search-page/search-page.component.html +++ b/src/app/+search-page/search-page.component.html @@ -1,14 +1,33 @@
- -
- +
+ + - -
-
+
+
+ +
+
+ + +
+ +
+
+
+
\ No newline at end of file diff --git a/src/app/+search-page/search-page.component.scss b/src/app/+search-page/search-page.component.scss index 4e53906667..bc71b299ce 100644 --- a/src/app/+search-page/search-page.component.scss +++ b/src/app/+search-page/search-page.component.scss @@ -1,9 +1,84 @@ @import '../../styles/variables.scss'; @import '../../styles/mixins.scss'; -#search-content { - margin-left: $search-sidebar-width; +#search-body { + position: relative; +} + +#search-content, #search-form { + display: block; @include media-breakpoint-down(sm) { margin-left: 0; } +} + +/deep/ .search-controls { + margin-bottom: $spacer; +} + +#search-body { + &.row-offcanvas { + width: 100%; + } + @include media-breakpoint-down(sm) { + position: relative; + -webkit-transition: all .25s ease-out; + -o-transition: all .25s ease-out; + transition: all .25s ease-out; + + &.row-offcanvas { + position: relative; + -webkit-transition: all .25s ease-out; + -o-transition: all .25s ease-out; + transition: all .25s ease-out; + } + + &.row-offcanvas-right { + right: 0; + } + + &.row-offcanvas-left { + left: 0; + } + + &.row-offcanvas-right + #search-sidebar { + right: -100%; /* 12 columns */ + } + + &.row-offcanvas-right.active + #search-sidebar { + right: -100%; /* 6 columns */ + } + + &.row-offcanvas-left + #search-sidebar { + left: -100%; /* 12 columns */ + } + + &.row-offcanvas-left.active + #search-sidebar { + left: -100%; /* 6 columns */ + } + + &.row-offcanvas-right.active { + right: 100%; /* 6 columns */ + } + + &.row-offcanvas-left.active { + left: 100%; /* 6 columns */ + } + + #search-sidebar { + position: absolute; + top: 0; + width: 100%; /* 6 columns */ + } + } +} + +.sidebar-md-fixed { + @include media-breakpoint-up(md) { + position: fixed; + } } \ No newline at end of file diff --git a/src/app/+search-page/search-page.component.ts b/src/app/+search-page/search-page.component.ts index 639e966a9b..64727245dc 100644 --- a/src/app/+search-page/search-page.component.ts +++ b/src/app/+search-page/search-page.component.ts @@ -33,6 +33,8 @@ export class SearchPageComponent implements OnInit, OnDestroy { currentParams = {}; searchOptions: SearchOptions; scopeList: RemoteData; + isSidebarActive = false; + isListView = true; constructor( private service: SearchService, @@ -89,4 +91,12 @@ export class SearchPageComponent implements OnInit, OnDestroy { ngOnDestroy() { this.sub.unsubscribe(); } + + setSidebarActive(show: boolean) { + this.isSidebarActive = show; + } + + setListView(isList: boolean) { + this.isListView = isList; + } } diff --git a/src/app/+search-page/search-page.module.ts b/src/app/+search-page/search-page.module.ts index 1bd07da7a8..0df318cbdc 100644 --- a/src/app/+search-page/search-page.module.ts +++ b/src/app/+search-page/search-page.module.ts @@ -13,7 +13,7 @@ import { CollectionSearchResultListElementComponent } from '../object-list/searc import { CommunitySearchResultListElementComponent } from '../object-list/search-result-list-element/community-search-result/community-search-result-list-element.component'; import { SearchService } from './search-service/search.service'; import { SearchSidebarComponent } from './search-sidebar/search-sidebar.component'; -import { SearchViewSwitchComponent } from './search-view-switch/search-view-switch.component'; +import { LayoutControlsComponent } from './layout-controls/layout-controls.component'; @NgModule({ imports: [ @@ -27,10 +27,10 @@ import { SearchViewSwitchComponent } from './search-view-switch/search-view-swit SearchPageComponent, SearchResultsComponent, SearchSidebarComponent, - SearchViewSwitchComponent, ItemSearchResultListElementComponent, CollectionSearchResultListElementComponent, - CommunitySearchResultListElementComponent + CommunitySearchResultListElementComponent, + LayoutControlsComponent ], providers: [ SearchService diff --git a/src/app/+search-page/search-sidebar/search-sidebar.component.html b/src/app/+search-page/search-sidebar/search-sidebar.component.html index 03e930ad7e..9ba8677313 100644 --- a/src/app/+search-page/search-sidebar/search-sidebar.component.html +++ b/src/app/+search-page/search-sidebar/search-sidebar.component.html @@ -1,4 +1,12 @@ -
-
-
+
+ +
+ Place filters and other search config here +
\ No newline at end of file diff --git a/src/app/+search-page/search-sidebar/search-sidebar.component.scss b/src/app/+search-page/search-sidebar/search-sidebar.component.scss index 34f9a5d542..c8c0a60225 100644 --- a/src/app/+search-page/search-sidebar/search-sidebar.component.scss +++ b/src/app/+search-page/search-sidebar/search-sidebar.component.scss @@ -2,25 +2,7 @@ @import '../../../styles/mixins.scss'; :host { - display: block; - position: fixed; - background-color: red; - width: $search-sidebar-width; - padding: $spacer; - #filter1, #filter2 { - width: 100%; - } - #filter1 { - height: 300px; - background-color: yellow; - } - #filter2 { - height: 200px; - background-color: green; - } - - @include media-breakpoint-down(sm) { - width: 100%; - display: none; + .results { + line-height: $button-height; } } diff --git a/src/app/+search-page/search-sidebar/search-sidebar.component.ts b/src/app/+search-page/search-sidebar/search-sidebar.component.ts index e8e95cf6fa..beec358a6c 100644 --- a/src/app/+search-page/search-sidebar/search-sidebar.component.ts +++ b/src/app/+search-page/search-sidebar/search-sidebar.component.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; /** * This component renders a simple item page. @@ -13,7 +13,8 @@ import { Component } from '@angular/core'; }) export class SearchSidebarComponent { + @Input() resultCount; + @Output() toggleSidebar = new EventEmitter(); constructor() { - console.log('test'); } } diff --git a/src/app/+search-page/search-view-switch/search-view-switch.component.html b/src/app/+search-page/search-view-switch/search-view-switch.component.html deleted file mode 100644 index 0823d28b8f..0000000000 --- a/src/app/+search-page/search-view-switch/search-view-switch.component.html +++ /dev/null @@ -1,10 +0,0 @@ -
-
- TODO - -
-
- {{resultCount}} - -
-
\ No newline at end of file diff --git a/src/app/+search-page/search-view-switch/search-view-switch.component.scss b/src/app/+search-page/search-view-switch/search-view-switch.component.scss deleted file mode 100644 index bf483af453..0000000000 --- a/src/app/+search-page/search-view-switch/search-view-switch.component.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import '../../../styles/variables.scss'; -@import '../../../styles/mixins.scss'; - diff --git a/src/app/+search-page/search-view-switch/search-view-switch.component.ts b/src/app/+search-page/search-view-switch/search-view-switch.component.ts deleted file mode 100644 index 0cbd0d70f1..0000000000 --- a/src/app/+search-page/search-view-switch/search-view-switch.component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Component, Input } from '@angular/core'; - -/** - * This component renders a simple item page. - * The route parameter 'id' is used to request the item it represents. - * All fields of the item that should be displayed, are defined in its template. - */ - -@Component({ - selector: 'ds-search-view-switch', - styleUrls: ['./search-view-switch.component.scss'], - templateUrl: './search-view-switch.component.html', -}) - -export class SearchViewSwitchComponent { - @Input() resultCount; - @Input() active; - constructor() { - console.log('test'); - } - - switchView(b: boolean) { - this.active = b; - } -} diff --git a/src/app/app.component.scss b/src/app/app.component.scss index d274f5fe4a..01c72ecef2 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -6,6 +6,10 @@ html { position: relative; min-height: 100%; } + +body { + overflow-x: hidden; +} // Sticky Footer .outer-wrapper { diff --git a/src/app/object-list/search-result-list-element/search-result-list-element.component.scss b/src/app/object-list/search-result-list-element/search-result-list-element.component.scss index d688753eb3..5ec8b5d81b 100644 --- a/src/app/object-list/search-result-list-element/search-result-list-element.component.scss +++ b/src/app/object-list/search-result-list-element/search-result-list-element.component.scss @@ -1,6 +1,6 @@ @import '../../../styles/variables.scss'; :host { - /deep/ em { + ::ng-deep em { font-weight: bold; font-style: normal; } diff --git a/src/styles/_custom_variables.scss b/src/styles/_custom_variables.scss index 92d5933b9c..12ebfd6618 100644 --- a/src/styles/_custom_variables.scss +++ b/src/styles/_custom_variables.scss @@ -1,2 +1,3 @@ $content-spacing: $spacer * 1.5; -$search-sidebar-width: 300px; \ No newline at end of file + +$button-height: $input-btn-padding-y * 2 + $input-btn-line-height + calculateRem($input-btn-border-width*2); \ No newline at end of file diff --git a/src/styles/_functions.scss b/src/styles/_functions.scss new file mode 100644 index 0000000000..16c5040e03 --- /dev/null +++ b/src/styles/_functions.scss @@ -0,0 +1,4 @@ +@function calculateRem($size) { + $remSize: $size / 16px; + @return $remSize; +} \ No newline at end of file diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss index 812a19d418..4b5300e3f9 100644 --- a/src/styles/_variables.scss +++ b/src/styles/_variables.scss @@ -2,4 +2,5 @@ @import '../../node_modules/font-awesome/scss/variables.scss'; @import '../../node_modules/bootstrap/scss/functions.scss'; @import '../../node_modules/bootstrap/scss/variables.scss'; +@import '_functions.scss'; @import 'custom_variables.scss'; \ No newline at end of file