150 lines
8.9 KiB
HTML
150 lines
8.9 KiB
HTML
<div ux-id="rs-ka-search" role="dialog" aria-labelledby="modalLabel">
|
|
<span class="modal-content__508-hidden-span">{{'common.labels.508BeginContent' | i18n}}</span>
|
|
|
|
<div loading-spinner if="state.processing" overlay="true" centered="true"></div>
|
|
|
|
<div class="search-resource__body">
|
|
<div class="search-resource__search-container">
|
|
<button ux-id="rs-ka-back-btn" type="button" class="small-btn_secondary search-resource__create-back-button" ng-click="toggleSearchKa()">
|
|
<i class="btn__icon-left icon-angle_left"></i>{{'resource.search.back.button' | i18n}} <!--todo: change icon-arrow to icon-angle after fonts update-->
|
|
</button>
|
|
|
|
<div ux-id="rs-ka-search-input" class="relative-position search-resource__search-inputContainer">
|
|
<input title="{{'resource.search.search.label' | i18n}}"
|
|
class="search-resource__search-input"
|
|
type="text"
|
|
ng-model="articlePlaceholder.summary"
|
|
ng-enter="searchArticle()"
|
|
auto-focus
|
|
placeholder="{{'resource.search.search.label' | i18n}}"/>
|
|
<i ux-id="rs-ka-clear-search-input" class="icon-cross item-input__delete-btn" tabindex=0 role="link"
|
|
title="{{'common.button.clear' | i18n}}" ng-if="articlePlaceholder.summary"
|
|
focus-input-on-clear ng-click="clearSearch()" ng-enter="clearSearch()">
|
|
</i>
|
|
</div>
|
|
</div>
|
|
|
|
<button ux-id="rs-ka-advanced-search-btn" type="button" class="search-resource__option-button" ng-click="toggleOptions()">
|
|
<span ng-class="state.optionIsCollapsed ? 'icon-triangle_right' : 'icon-triangle_down'"></span>
|
|
<span class="search-resource__option-button-label">{{ state.optionIsCollapsed ? ('resource.search.ShowAdvancedOptions' | i18n) : ('resource.search.HideAdvancedOptions' | i18n) }}</span>
|
|
</button>
|
|
<!-- todo: enable pop out if it is in scope
|
|
<button class="search-resource__option-button pull-right">{{'common.labels.popOut' | i18n}} <span class="icon-pop_up"></span></button>
|
|
-->
|
|
|
|
<div class="search-resource__option-display" collapse="state.optionIsCollapsed">
|
|
<div ng-if="companyState.showFilter && !comaroundEnabled">
|
|
<p>{{ (context.type === 'smartRecorder') ? ('knowledge.filter.header.smartRecorder.label' | i18n) : ('knowledge.filter.header.otherTickets.label' | i18n: getTicketLabel()) }}</p>
|
|
<div class="checkbox rs-group__filter-checkbox">
|
|
<label><input ux-id="rs-ka-select-company-state" type="checkbox" ng-model="companyState.selected"/> {{'console.column.customerCompany' | i18n}}</label>
|
|
</div>
|
|
</div>
|
|
<categories-editor
|
|
ng-if="articlePlaceholder.allCategories"
|
|
entity="articlePlaceholder"
|
|
categories="articlePlaceholder.allCategories"
|
|
multiple="true"
|
|
hide-label="true"
|
|
hide-recommendations="true">
|
|
</categories-editor>
|
|
<selection ux-id="rs-ka-template" ng-if="!comaroundEnabled" selection-items="availableSources"
|
|
selected-item="sourceOptions"
|
|
selection-callback="changeSourceOption(item)"
|
|
show-clear="true"
|
|
placeholder-text="{{'resource.search.option.source' | i18n}}"
|
|
label="label"
|
|
value="name">
|
|
</selection>
|
|
<selection ux-id="rs-ka-status" ng-if="!comaroundEnabled" selection-items="availableStatuses"
|
|
selected-item="statusOptions"
|
|
selection-callback="changeStatusOption(item)"
|
|
show-clear="true"
|
|
placeholder-text="{{'resource.search.option.status' | i18n}}"
|
|
label="label"
|
|
value="name">
|
|
</selection>
|
|
<button ux-id="rs-ka-advanced-search-btn" type="submit" class="btn_secondary" ng-click="searchArticle()" ng-disabled="!articlePlaceholder.summary.length">{{'search.placeholder' | i18n}}</button>
|
|
</div>
|
|
|
|
<div ux-id="rs-ka-search-result" class="search-resource__search-result">
|
|
|
|
<div class="rs-group__searching" ng-if="state.searching">
|
|
<div loading-spinner if="true"></div>
|
|
<span class="rs-group__searching-label">{{'resourceSlice.search.label' | i18n}}</span>
|
|
</div>
|
|
|
|
<div class="search-resource__search-result-label" ng-if="!((searchResults && searchResults.length) || state.searching || state.searchNotFound)">{{'resource.search.searchResult.label' | i18n}}</div>
|
|
|
|
<div class="search-resource__search-result-label" ng-if="state.searchNotFound">{{'person.details.knowledgeArticles.noArticlesFound' | i18n}}</div>
|
|
|
|
<div ng-if="searchResults && searchResults.length">
|
|
<h3 class="rs-group__header" tabindex="0">{{'common.labels.knowledge' | i18n}} ({{searchResults.length}})</h3>
|
|
<div class="rs-group__filter dropdown" ng-if="!comaroundEnabled">
|
|
<button ux-id="rs-ka-relevant-btn" type="button" class="btn_link dropdown-toggle" aria-label="{{'list.show' | i18n}} {{selectedSortOption.name}}">
|
|
{{'resourceSlice.knowledgeSortOption.' + selectedSortOption.name | i18n}}
|
|
<i class="icon-angle_down resource-slice__arrow-down"></i>
|
|
</button>
|
|
<ul class="dropdown-menu pull-right">
|
|
<li ng-repeat="option in sortOptions">
|
|
<div class="dropdown-item" ng-click="setSortOption(option)" role="menuitem" tabindex="0">
|
|
{{'resourceSlice.knowledgeSortOption.' + option.name | i18n}}
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="rs-group__list">
|
|
<div class="rs-group-list-item clearfix" role="listitem" tabindex="0" ng-repeat="resource in searchResults | limitTo: itemsLimit">
|
|
|
|
<div class="rs-group-list-item__icon-container">
|
|
<i class="rs-group-list-item__icon_action {{isResourceRelated(resource) ? 'icon-pin_circle' : 'icon-circle_thin_o'}}" ng-if="context.accessMappings.relationsEditAllowed && resource.isArticleActive()"
|
|
ng-keydown="handleKeydown($event, resource)" ng-click="toggleRelation(resource)" ng-enter="toggleRelation(resource)"
|
|
aria-label="{{(isResourceRelated(resource) ? 'common.button.unselect' : 'common.button.select') | i18n}} {{'common.label.resource' | i18n}}" role="button" tabindex="0">
|
|
</i>
|
|
|
|
<i ux-id="rs-ka-icon" class="rs-group-list-item__icon icon-lightbulb_o" ng-if="!resource.isDecisionTree()"></i>
|
|
<i class="rs-group-list-item__icon rs-group-list-item__icon-medium-font icon-decision-tree" ng-if="resource.isDecisionTree()"></i>
|
|
</div>
|
|
|
|
<div class="rs-group-list-item__info" tabindex="0" ng-click="setPreviewItem(resource)" ng-enter="setPreviewItem(resource)">
|
|
<div ux-id="rs-ka-id" class="rs-group-list-item__title">{{resource.displayId}}</div>
|
|
<!--Limit to is 350 for smaller title to avoid performance issues-->
|
|
<div ux-id="rs-ka-title" data-ellipsis data-ellipsis-separator="" data-ellipsis-separator-reg="titleRegExp" data-ng-bind="(resource.title || resource.desc) | removeSearchTags | limitTo: 350" title="{{(resource.title || resource.desc) | removeSearchTags}}" class="rs-group-list-item__kba-description {{resource.visited ? 'rs-group-list-item__visited' : 'rs-group-list-item__description'}}"></div>
|
|
<div class="rs-group-list-item__date row">
|
|
<div ux-id="rs-ka-status" class="col-sm-12">{{'common.labels.status' | i18n}}: {{localizedStatus(resource.additionalInformation.status.value || resource.realObject.status.value)}}</div>
|
|
<div class="col-sm-12" ng-if="!comaroundEnabled">
|
|
<span ux-id="rs-ka-version">{{'common.labels.version' | i18n }} {{resource.additionalInformation.version || resource.realObject.version}} - </span>
|
|
<span ux-id="rs-ka-modified-date">{{"search.filter.name.lastModifiedDate" | i18n}}: {{(resource.getLastModifyDate() | humanizedAbsoluteDateFormat) || ('common.labels.unknown' | i18n)}}</span>
|
|
</div>
|
|
</div>
|
|
<div class="rs-group-list-item__rating" ng-if="resource.getRating(comaroundEnabled) >= 0">
|
|
<i class="icon-thumbs_up"></i>
|
|
<span class="rs-group-list-item__ka-property_likes">{{resource.getRating(comaroundEnabled)}}%</span>
|
|
<span ng-if="resource.getNumberOfViews() !== -1">
|
|
<i class="icon-eye"></i>
|
|
<span class="rs-group-list-item__ka-property_views">{{resource.getNumberOfViews() | labelByCount: 'resourceSlice.viewCount.label'}}</span>
|
|
</span>
|
|
<div class="rs-group-list-item__ka-property" ng-if="resource.getNumberOfLinkedItems() !== -1">
|
|
<i class="icon-link"></i>
|
|
<span class="rs-group-list-item__ka-property_links">{{resource.getNumberOfLinkedItems() | labelByCount: 'resourceSlice.linkedItems.label'}}</span>
|
|
</div>
|
|
</div>
|
|
<i ux-id="preview-icon" class="icon-angle_right rs-group-list-item__preview-icon"></i>
|
|
</div>
|
|
|
|
</div>
|
|
<show-more-less limit="itemsLimit" size="{{searchResults.length}}" chunk-size="15"></show-more-less>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div ng-if="state.canCreateKnowledge">
|
|
<div class="search-resource__create-new-label">{{'resource.search.notFindingResource.label' | i18n}}</div>
|
|
|
|
<button ux-id="create-new-article-btn" type="button" class="btn_primary" ng-click="createNewArticle()">{{'resource.search.createNew.button' | i18n}}</button>
|
|
</div>
|
|
</div>
|
|
|
|
<span class="modal-content__508-hidden-span">{{'common.labels.508EndContent' | i18n}}</span>
|
|
</div>
|