1 <ng-template #ccvmOption let-list="list">
2 <ng-container *ngFor="let ccv of list">
3 <option *ngIf="ccv.is_simple() === 't'" value="{{ccv.code()}}">
4 {{ccv.search_label() || ccv.value()}}
5 <ng-container *ngIf="ccv.opac_visible() === 'f'" i18n>(Hidden)</ng-container>
8 <ng-container *ngFor="let ccv of list">
9 <option *ngIf="ccv.is_simple() === 'f'" value="{{ccv.code()}}">
10 {{ccv.search_label() || ccv.value()}}
11 <ng-container *ngIf="ccv.opac_visible() === 'f'" i18n>(Hidden)</ng-container>
16 <div id='staffcat-search-form'>
18 <div *ngIf="canBeHidden()" class="row pt-1 pr-2">
19 <div class="col-lg-12 d-flex">
20 <div class="flex-1"></div><!-- push right -->
21 <a (click)="toggleFormDisplay()" class="label-with-material-icon no-href">
22 <ng-container *ngIf="hideForm()" i18n>
23 Show Search Form <span class="material-icons" aria-hidden="true">unfold_more</span>
25 <ng-container *ngIf="!hideForm()" i18n>
26 Hide Search Form <span class="material-icons" aria-hidden="true">unfold_less</span>
32 <div *ngIf="!hideForm()" class="row pt-3 pb-1 mb-1">
33 <div class="col-lg-8">
34 <ngb-tabset #searchTabs [activeId]="searchTab" (tabChange)="onTabChange($event)">
35 <ngb-tab title="Keyword Search" i18n-title id="term">
36 <ng-template ngbTabContent>
38 [ngClass]="{'mt-4': idx == 0, 'mt-1': idx > 0}"
39 *ngFor="let q of context.termSearch.query; let idx = index; trackBy:trackByIdx">
40 <div class="col-lg-2 pr-1">
41 <div *ngIf="idx == 0">
42 <select class="form-control" [(ngModel)]="context.termSearch.format">
43 <option i18n value=''>All Formats</option>
45 *ngTemplateOutlet="ccvmOption;context:{list:ccvmMap.search_format}">
50 <select class="form-control"
51 [(ngModel)]="context.termSearch.joinOp[idx]">
52 <option i18n value='&&'>And</option>
53 <option i18n value='||'>Or</option>
57 <div class="col-lg-2 pl-0 pr-2">
58 <select class="form-control"
59 (change)="preventBogusCombos(idx)"
60 [(ngModel)]="context.termSearch.fieldClass[idx]">
61 <option i18n value='keyword'>Keyword</option>
62 <option i18n value='title'>Title</option>
63 <option i18n value='jtitle'>Journal Title</option>
64 <option i18n value='author'>Author</option>
65 <option i18n value='subject'>Subject</option>
66 <option i18n value='series'>Series</option>
67 <option i18n value='bookplate'
68 *ngIf="showBookplate()">Digital Bookplate</option>
71 <div class="col-lg-2 pl-0 pr-2">
72 <select class="form-control"
73 [(ngModel)]="context.termSearch.matchOp[idx]">
74 <option i18n value='contains'>Contains</option>
75 <option i18n value='nocontains'>Does not contain</option>
76 <option i18n value='phrase'>Contains phrase</option>
77 <option [disabled]="context.termSearch.fieldClass[idx]=='keyword'"
78 i18n value='exact'>Matches exactly</option>
79 <option [disabled]="context.termSearch.fieldClass[idx]=='keyword'"
80 i18n value='starts'>Starts with</option>
83 <div class="col-lg-4 pl-0 pr-2">
84 <div class="form-group">
85 <div *ngIf="idx == 0">
86 <input type="text" class="form-control"
87 id='first-query-input'
88 [(ngModel)]="context.termSearch.query[idx]"
89 (keyup.enter)="searchByForm()"
90 placeholder="Query..."/>
93 <input type="text" class="form-control"
94 [(ngModel)]="context.termSearch.query[idx]"
95 (keyup.enter)="searchByForm()"
96 placeholder="Query..."/>
100 <div class="col-lg-2 pl-0 pr-1">
101 <button class="btn btn-sm material-icon-button"
102 (click)="addSearchRow(idx + 1)"
103 i18n-title title="Add Search Row">
104 <span class="material-icons">add_circle_outline</span>
106 <button class="btn btn-sm material-icon-button"
107 [disabled]="context.termSearch.query.length < 2"
108 (click)="delSearchRow(idx)"
109 i18n-title title="Remove Search Row">
110 <span class="material-icons">remove_circle_outline</span>
112 <button *ngIf="idx == 0"
113 class="btn btn-sm material-icon-button"
114 type="button" (click)="toggleFilters()"
115 title="Toggle Search Filters" i18n-title>
116 <span class="material-icons">more_vert</span>
121 <div class="col-lg-12 form-inline">
122 <select class="form-control mr-2" [(ngModel)]="context.sort">
123 <option value='' i18n>Sort by Relevance</option>
124 <optgroup label="Sort by Title" i18n-label>
125 <option value='titlesort' i18n>Title: A to Z</option>
126 <option value='titlesort.descending' i18n>Title: Z to A</option>
128 <optgroup label="Sort by Author" i18n-label>
129 <option value='authorsort' i18n>Author: A to Z</option>
130 <option value='authorsort.descending' i18n>Author: Z to A</option>
132 <optgroup label="Sort by Publication Date" i18n-label>
133 <option value='pubdate.descending' i18n>Date: Newest to Oldest</option>
134 <option value='pubdate' i18n>Date: Oldest to Newest</option>
136 <optgroup label="Sort by Popularity" i18n-label>
137 <option value='popularity' i18n>Most Popular</option>
138 <option value='poprel' i18n>Popularity Adjusted Relevance</option>
141 <div class="checkbox pl-2 ml-2 pt-2">
143 <input type="checkbox" [(ngModel)]="context.termSearch.available"/>
144 <span class="pl-1" i18n>Limit to Available</span>
147 <div class="checkbox pl-3 pt-2">
149 <input type="checkbox"
150 [(ngModel)]="context.termSearch.groupByMetarecord"/>
151 <span class="pl-1" i18n>Group Formats/Editions</span>
154 <div class="checkbox pl-3 pt-2">
156 <input type="checkbox" [(ngModel)]="context.global"/>
157 <span class="pl-1" i18n>Results from All Libraries</span>
160 <div class="checkbox pl-3 pt-2" *ngIf="showExcludeElectronic()">
162 <input type="checkbox"
163 [(ngModel)]="context.termSearch.excludeElectronic"/>
164 <span class="pl-1" i18n>Exclude Electronic Resources</span>
169 <div class="row" *ngIf="showFilters()">
170 <div class="col-lg-3 mt-3" *ngIf="searchFilters().includes('item_type')">
171 <select class="form-control" multiple="true"
172 [(ngModel)]="context.termSearch.ccvmFilters.item_type">
173 <option value='' i18n>All Item Types</option>
175 *ngTemplateOutlet="ccvmOption;context:{list:ccvmMap.item_type}">
179 <div class="col-lg-3 mt-3" *ngIf="searchFilters().includes('item_form')">
180 <select class="form-control" multiple="true"
181 [(ngModel)]="context.termSearch.ccvmFilters.item_form">
182 <option value='' i18n>All Item Forms</option>
184 *ngTemplateOutlet="ccvmOption;context:{list:ccvmMap.item_form}">
188 <div class="col-lg-3 mt-3" *ngIf="searchFilters().includes('item_lang')">
189 <select class="form-control"
190 [(ngModel)]="context.termSearch.ccvmFilters.item_lang" multiple="true">
191 <option value='' i18n>All Languages</option>
193 *ngTemplateOutlet="ccvmOption;context:{list:ccvmMap.item_lang}">
197 <div class="col-lg-3 mt-3" *ngIf="searchFilters().includes('audience')">
198 <select class="form-control"
199 [(ngModel)]="context.termSearch.ccvmFilters.audience" multiple="true">
200 <option value='' i18n>All Audiences</option>
202 *ngTemplateOutlet="ccvmOption;context:{list:ccvmMap.audience}">
206 <div class="col-lg-3 mt-3" *ngIf="searchFilters().includes('vr_format')">
207 <select class="form-control"
208 [(ngModel)]="context.termSearch.ccvmFilters.vr_format" multiple="true">
209 <option value='' i18n>All Video Formats</option>
211 *ngTemplateOutlet="ccvmOption;context:{list:ccvmMap.vr_format}">
215 <div class="col-lg-3 mt-3" *ngIf="searchFilters().includes('bib_level')">
216 <select class="form-control"
217 [(ngModel)]="context.termSearch.ccvmFilters.bib_level" multiple="true">
218 <option value='' i18n>All Bib Levels</option>
220 *ngTemplateOutlet="ccvmOption;context:{list:ccvmMap.bib_level}">
224 <div class="col-lg-3 mt-3" *ngIf="searchFilters().includes('lit_form')">
225 <select class="form-control"
226 [(ngModel)]="context.termSearch.ccvmFilters.lit_form" multiple="true">
227 <option value='' i18n>All Literary Forms</option>
229 *ngTemplateOutlet="ccvmOption;context:{list:ccvmMap.lit_form}">
233 <div class="col-lg-3 mt-3">
234 <select class="form-control"
235 [(ngModel)]="context.termSearch.copyLocations" multiple="true">
236 <option value='' i18n>All Shelving Locations</option>
237 <option *ngFor="let loc of copyLocations" value="{{loc.id()}}" i18n>
238 {{loc.name()}} ({{orgName(loc.owning_lib())}})
243 <div class="row mt-3" *ngIf="showFilters()">
244 <div class="col-lg-12">
245 <div class="form-inline">
246 <label for="pub-date1-input" i18n>Publication Year is</label>
247 <select class="form-control ml-2" [(ngModel)]="context.termSearch.dateOp">
248 <option value='is' i18n>Is</option>
249 <option value='before' i18n>Before</option>
250 <option value='after' i18n>After</option>
251 <option value='between' i18n>Between</option>
253 <input class="form-control ml-2" type="number"
254 [(ngModel)]="context.termSearch.date1"/>
255 <input class="form-control ml-2" type="number"
256 *ngIf="context.termSearch.dateOp == 'between'"
257 [(ngModel)]="context.termSearch.date2"/>
263 <ngb-tab title="Numeric Search" i18n-title id="ident">
264 <ng-template ngbTabContent>
265 <div class="row mt-4">
266 <div class="col-lg-12">
267 <div class="form-inline">
268 <label for="ident-type" i18n>Query Type</label>
269 <select class="form-control ml-2" name="ident-type"
270 [(ngModel)]="context.identSearch.queryType">
271 <option i18n value="identifier|isbn">ISBN</option>
272 <option i18n value="identifier|upc">UPC</option>
273 <option i18n value="identifier|issn">ISSN</option>
274 <option i18n value="identifier|lccn">LCCN</option>
275 <option i18n value="identifier|tcn">TCN</option>
276 <option i18n value="item_barcode">Item Barcode</option>
278 <label for="ident-value" class="ml-2" i18n>Value</label>
279 <input name="ident-value" id='ident-query-input'
280 type="text" class="form-control ml-2"
281 [(ngModel)]="context.identSearch.value"
282 (keyup.enter)="searchByForm()"
283 placeholder="Numeric Query..."/>
289 <ngb-tab title="MARC Search" i18n-title id="marc">
290 <ng-template ngbTabContent>
291 <div class="row mt-4">
292 <div class="col-lg-12">
293 <div class="form-inline mt-2"
294 *ngFor="let q of context.marcSearch.values; let idx = index; trackBy:trackByIdx">
295 <label for="marc-tag-{{idx}}" i18n>Tag</label>
296 <input class="form-control ml-2" size="3" type="text"
297 name="marc-tag-{{idx}}" id="{{ idx == 0 ? 'first-marc-tag' : '' }}"
298 [(ngModel)]="context.marcSearch.tags[idx]"
299 (keyup.enter)="searchByForm()"/>
300 <label for="marc-subfield-{{idx}}" class="ml-2" i18n>Subfield</label>
301 <input class="form-control ml-2" size="1" type="text"
302 name="marc-subfield-{{idx}}"
303 [(ngModel)]="context.marcSearch.subfields[idx]"
304 (keyup.enter)="searchByForm()"/>
305 <label for="marc-value-{{idx}}" class="ml-2" i18n>Value</label>
306 <input class="form-control ml-2" type="text" name="marc-value-{{idx}}"
307 [(ngModel)]="context.marcSearch.values[idx]"
308 (keyup.enter)="searchByForm()"/>
309 <button class="btn btn-sm material-icon-button ml-2"
310 (click)="addMarcSearchRow(idx + 1)">
311 <span class="material-icons">add_circle_outline</span>
313 <button class="btn btn-sm material-icon-button ml-2"
314 [disabled]="context.marcSearch.values.length < 2"
315 (click)="delMarcSearchRow(idx)">
316 <span class="material-icons">remove_circle_outline</span>
321 <div class="row mt-2">
322 <div class="checkbox pl-3">
324 <input type="checkbox" [(ngModel)]="context.global"/>
325 <span class="pl-1" i18n>Results from All Libraries</span>
331 <ngb-tab title="Browse" i18n-title id="browse">
332 <ng-template ngbTabContent>
333 <div class="row mt-4">
334 <div class="col-lg-12 form-inline">
335 <label for="field-class" i18n>Browse for</label>
336 <select class="form-control ml-2" name="field-class"
337 [(ngModel)]="context.browseSearch.fieldClass">
338 <option i18n value='title'>Title</option>
339 <option i18n value='author'>Author</option>
340 <option i18n value='subject'>Subject</option>
341 <option i18n value='series'>Series</option>
343 <label for="query" class="ml-2"> starting with </label>
344 <input type="text" class="form-control ml-2"
345 id='browse-term-input' name="query"
346 [(ngModel)]="context.browseSearch.value"
347 (keyup.enter)="searchByForm()"
348 placeholder="Browse for..."/>
353 <ngb-tab title="Shelf Browse" i18n-title id="cnbrowse">
354 <ng-template ngbTabContent>
355 <div class="row mt-4">
356 <div class="col-lg-12 form-inline">
357 <label for="cnbrowse-term-input" i18n>
358 Browse Call Numbers starting with
360 <input type="text" class="form-control ml-2"
361 id='cnbrowse-term-input' name="query"
362 [(ngModel)]="context.cnBrowseSearch.value"
363 (keyup.enter)="searchByForm()"
364 placeholder="Browse Call Numbers..."/>
371 <div class="col-lg-4">
373 <div class="col-lg-12">
375 <div class="card-body">
376 <div class="float-right d-flex">
378 (onChange)="orgOnChange($event)"
379 [initialOrg]="context.searchOrg"
380 [placeholder]="'Library'" >
382 <button class="btn btn-success mr-1 ml-1" type="button"
383 [disabled]="searchIsActive()"
384 (click)="context.pager.offset=0;searchByForm()" i18n>
387 <button class="btn btn-warning mr-1" type="button"
388 [disabled]="searchIsActive()"
389 (click)="context.reset()" i18n>
397 <div class="row mt-1">
398 <div class="col-lg-12">
399 <eg-catalog-search-templates [searchTab]="searchTab">
400 </eg-catalog-search-templates>
403 <div class="row mt-1">
404 <div class="col-lg-12">
405 <eg-catalog-basket-actions></eg-catalog-basket-actions>
410 <div class="row mb-3 pb-3">
411 <ng-container *ngIf="context.result.global_summary as gs">
412 <ng-container *ngIf="gs.suggestions as sugg">
413 <div *ngIf="sugg.one_class_one_term as ocot" class="col-lg-12 d-flex align-content-center">
414 <span class="font-weight-bold font-italic mr-1" i18n>Did you mean:</span>
415 <span *ngFor="let s of ocot.suggestions; first as isFirst">
416 <span *ngIf="!isFirst" i18n> or </span>
417 <a routerLink="/staff/catalog/search" queryParamsHandling="merge"
418 [queryParams]="{query : s.suggestion, fieldClass : ocot.class}">