From 8a1281475c7e0d5482e18339ee14b85136819c00 Mon Sep 17 00:00:00 2001 From: Maurizio Vitale Date: Thu, 13 Jul 2017 15:07:48 +0100 Subject: [PATCH] [ADF-1039] Search results highlighting (#2080) * Provide a way to highlight the searched word * Add unit test --- .../search/search-bar.component.html | 1 + ng2-components/ng2-alfresco-core/index.ts | 3 ++ .../src/pipes/text-highlight.pipe.ts | 40 +++++++++++++++++++ ng2-components/ng2-alfresco-search/README.md | 1 + ...alfresco-search-autocomplete.component.css | 4 ++ ...lfresco-search-autocomplete.component.html | 5 ++- ...esco-search-autocomplete.component.spec.ts | 19 +++++++++ .../alfresco-search-autocomplete.component.ts | 3 ++ .../alfresco-search-control.component.html | 1 + .../alfresco-search-control.component.ts | 3 ++ 10 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 ng2-components/ng2-alfresco-core/src/pipes/text-highlight.pipe.ts diff --git a/demo-shell-ng2/app/components/search/search-bar.component.html b/demo-shell-ng2/app/components/search/search-bar.component.html index 821646954e..8b1cbfbc7e 100644 --- a/demo-shell-ng2/app/components/search/search-bar.component.html +++ b/demo-shell-ng2/app/components/search/search-bar.component.html @@ -1,6 +1,7 @@ { + return t.length > 0; + }).join('|'); + const regex = new RegExp(pattern, 'gi'); + let result = text.replace(regex, (match) => `${match}`); + return result; + } else { + return text; + } + } +} diff --git a/ng2-components/ng2-alfresco-search/README.md b/ng2-components/ng2-alfresco-search/README.md index ad4f3d0944..5cff15e890 100644 --- a/ng2-components/ng2-alfresco-search/README.md +++ b/ng2-components/ng2-alfresco-search/README.md @@ -58,6 +58,7 @@ results component embedded inside the same component. | inputType | string | "text" | Type of the input field to render, e.g. "search" or "text" (default) | | expandable | boolean | true | Whether to use an expanding search control, if false then a regular input is used. | | autocomplete | boolean | true | Whether the browser should offer field auto-completion for the input field to the user. | +| highlight | boolean | false | Use the true value if you want to see the searched word highlighted. | | liveSearchEnabled | boolean | true | Whether find-as-you-type suggestions should be offered for matching content items. Set to false to disable. | | liveSearchRoot | string | "-root-" | NodeRef or node name where the search should start. | | liveSearchResultType | string | | Node type to filter live search results by, e.g. 'cm:content'. | diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.css b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.css index 1ccc53a98c..1dfb52fcff 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.css +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.css @@ -37,6 +37,10 @@ text-overflow: ellipsis; } +:host /deep/ .highlight { + color: #33afdf; +} + @media screen and (max-width: 400px) { :host { right: 0; diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.html b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.html index 04e51ce444..1dd634df15 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.html +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.html @@ -11,7 +11,10 @@ attr.data-automation-id="autocomplete_result_for_{{result.entry.name}}"> {{result.entry.name}} -
{{result.entry.name}}
+
+ +
+
{{result.entry.createdByUser.displayName}}
diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.spec.ts b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.spec.ts index 3671d49e88..376fb04177 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.spec.ts +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.spec.ts @@ -110,6 +110,25 @@ describe('AlfrescoSearchAutocompleteComponent', () => { updateSearchTerm('searchTerm'); }); + it('should highlight the searched word', (done) => { + component.highlight = true; + spyOn(searchService, 'getQueryNodesPromise') + .and.returnValue(Promise.resolve(results)); + + component.resultsLoad.subscribe(() => { + fixture.detectChanges(); + let el: any = element.querySelectorAll('table[data-automation-id="autocomplete_results"] tbody tr')[1].children[1].children[0]; + expect(el.innerText).toEqual('MyDoc'); + let spanHighlight = el.children[0]; + expect(spanHighlight.classList[0]).toEqual('highlight'); + expect(spanHighlight.innerText).toEqual('My'); + done(); + }); + + updateSearchTerm('My'); + + }); + it('should limit the number of returned search results to the configured maximum', (done) => { spyOn(searchService, 'getQueryNodesPromise') diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.ts b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.ts index f22daf819c..596bbeaf13 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.ts +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.ts @@ -52,6 +52,9 @@ export class AlfrescoSearchAutocompleteComponent implements OnInit, OnChanges { @Input() resultType: string = null; + @Input() + highlight: boolean = false; + @Output() fileSelect: EventEmitter = new EventEmitter(); diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.html b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.html index 65a7868738..f7d47f613f 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.html +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.html @@ -28,6 +28,7 @@ [resultType]="liveSearchResultType" [resultSort]="liveSearchResultSort" [maxResults]="liveSearchMaxResults" + [highlight]="highlight" [ngClass]="{active: searchActive, valid: searchValid}" (fileSelect)="onFileClicked($event)" (searchFocus)="onAutoCompleteFocus($event)" diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.ts b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.ts index cc946b4354..2ceb45dd30 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.ts +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.ts @@ -41,6 +41,9 @@ export class AlfrescoSearchControlComponent implements OnInit, OnDestroy { @Input() expandable: boolean = true; + @Input() + highlight: boolean = false; + @Output() searchChange = new EventEmitter();