fomantic-ui 2.10.0-beta.63 → 2.10.0-beta.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +0 -3
- package/changelog-setup.js +10 -10
- package/dist/components/accordion.css +1 -1
- package/dist/components/accordion.js +40 -41
- package/dist/components/accordion.min.css +1 -1
- package/dist/components/accordion.min.js +2 -2
- package/dist/components/ad.css +1 -1
- package/dist/components/ad.min.css +1 -1
- package/dist/components/api.js +57 -61
- package/dist/components/api.min.js +2 -2
- package/dist/components/breadcrumb.css +1 -1
- package/dist/components/breadcrumb.min.css +1 -1
- package/dist/components/button.css +1 -1
- package/dist/components/button.min.css +1 -1
- package/dist/components/calendar.css +1 -1
- package/dist/components/calendar.js +205 -206
- package/dist/components/calendar.min.css +1 -1
- package/dist/components/calendar.min.js +2 -2
- package/dist/components/card.css +1 -1
- package/dist/components/card.min.css +1 -1
- package/dist/components/checkbox.css +1 -1
- package/dist/components/checkbox.js +29 -30
- package/dist/components/checkbox.min.css +1 -1
- package/dist/components/checkbox.min.js +2 -2
- package/dist/components/comment.css +1 -1
- package/dist/components/comment.min.css +1 -1
- package/dist/components/container.css +1 -1
- package/dist/components/container.min.css +1 -1
- package/dist/components/dimmer.css +1 -1
- package/dist/components/dimmer.js +22 -23
- package/dist/components/dimmer.min.css +1 -1
- package/dist/components/dimmer.min.js +2 -2
- package/dist/components/divider.css +1 -1
- package/dist/components/divider.min.css +1 -1
- package/dist/components/dropdown.css +1 -1
- package/dist/components/dropdown.js +285 -307
- package/dist/components/dropdown.min.css +1 -1
- package/dist/components/dropdown.min.js +2 -2
- package/dist/components/embed.css +1 -1
- package/dist/components/embed.js +31 -32
- package/dist/components/embed.min.css +1 -1
- package/dist/components/embed.min.js +2 -2
- package/dist/components/emoji.css +1 -1
- package/dist/components/emoji.min.css +1 -1
- package/dist/components/feed.css +1 -1
- package/dist/components/feed.min.css +1 -1
- package/dist/components/flag.css +1 -1
- package/dist/components/flag.min.css +1 -1
- package/dist/components/flyout.css +1 -1
- package/dist/components/flyout.js +79 -84
- package/dist/components/flyout.min.css +1 -1
- package/dist/components/flyout.min.js +2 -2
- package/dist/components/form.css +1 -1
- package/dist/components/form.js +142 -147
- package/dist/components/form.min.css +1 -1
- package/dist/components/form.min.js +2 -2
- package/dist/components/grid.css +1 -1
- package/dist/components/grid.min.css +1 -1
- package/dist/components/header.css +1 -1
- package/dist/components/header.min.css +1 -1
- package/dist/components/icon.css +1 -1
- package/dist/components/icon.min.css +1 -1
- package/dist/components/image.css +1 -1
- package/dist/components/image.min.css +1 -1
- package/dist/components/input.css +1 -1
- package/dist/components/input.min.css +1 -1
- package/dist/components/item.css +1 -1
- package/dist/components/item.min.css +1 -1
- package/dist/components/label.css +1 -1
- package/dist/components/label.min.css +1 -1
- package/dist/components/list.css +1 -1
- package/dist/components/list.min.css +1 -1
- package/dist/components/loader.css +1 -1
- package/dist/components/loader.min.css +1 -1
- package/dist/components/menu.css +1 -1
- package/dist/components/menu.min.css +1 -1
- package/dist/components/message.css +1 -1
- package/dist/components/message.min.css +1 -1
- package/dist/components/modal.css +1 -1
- package/dist/components/modal.js +86 -85
- package/dist/components/modal.min.css +1 -1
- package/dist/components/modal.min.js +2 -2
- package/dist/components/nag.css +1 -1
- package/dist/components/nag.js +27 -28
- package/dist/components/nag.min.css +1 -1
- package/dist/components/nag.min.js +2 -2
- package/dist/components/placeholder.css +1 -1
- package/dist/components/placeholder.min.css +1 -1
- package/dist/components/popup.css +1 -1
- package/dist/components/popup.js +72 -84
- package/dist/components/popup.min.css +1 -1
- package/dist/components/popup.min.js +2 -2
- package/dist/components/progress.css +1 -1
- package/dist/components/progress.js +54 -55
- package/dist/components/progress.min.css +1 -1
- package/dist/components/progress.min.js +2 -2
- package/dist/components/rail.css +1 -1
- package/dist/components/rail.min.css +1 -1
- package/dist/components/rating.css +1 -1
- package/dist/components/rating.js +33 -34
- package/dist/components/rating.min.css +1 -1
- package/dist/components/rating.min.js +2 -2
- package/dist/components/reset.css +47 -208
- package/dist/components/reset.min.css +2 -2
- package/dist/components/reveal.css +1 -1
- package/dist/components/reveal.min.css +1 -1
- package/dist/components/search.css +1 -1
- package/dist/components/search.js +95 -102
- package/dist/components/search.min.css +1 -1
- package/dist/components/search.min.js +2 -2
- package/dist/components/segment.css +1 -1
- package/dist/components/segment.min.css +1 -1
- package/dist/components/shape.css +1 -1
- package/dist/components/shape.js +44 -45
- package/dist/components/shape.min.css +1 -1
- package/dist/components/shape.min.js +2 -2
- package/dist/components/sidebar.css +1 -1
- package/dist/components/sidebar.js +56 -64
- package/dist/components/sidebar.min.css +1 -1
- package/dist/components/sidebar.min.js +2 -2
- package/dist/components/site.css +1 -1
- package/dist/components/site.js +16 -17
- package/dist/components/site.min.css +1 -1
- package/dist/components/site.min.js +2 -2
- package/dist/components/slider.css +1 -1
- package/dist/components/slider.js +144 -149
- package/dist/components/slider.min.css +1 -1
- package/dist/components/slider.min.js +2 -2
- package/dist/components/state.js +24 -25
- package/dist/components/state.min.js +2 -2
- package/dist/components/statistic.css +1 -1
- package/dist/components/statistic.min.css +1 -1
- package/dist/components/step.css +1 -1
- package/dist/components/step.min.css +1 -1
- package/dist/components/sticky.css +1 -1
- package/dist/components/sticky.js +53 -56
- package/dist/components/sticky.min.css +1 -1
- package/dist/components/sticky.min.js +2 -2
- package/dist/components/tab.css +1 -1
- package/dist/components/tab.js +56 -62
- package/dist/components/tab.min.css +1 -1
- package/dist/components/tab.min.js +2 -2
- package/dist/components/table.css +1 -1
- package/dist/components/table.min.css +1 -1
- package/dist/components/text.css +1 -1
- package/dist/components/text.min.css +1 -1
- package/dist/components/toast.css +1 -1
- package/dist/components/toast.js +39 -38
- package/dist/components/toast.min.css +1 -1
- package/dist/components/toast.min.js +2 -2
- package/dist/components/transition.css +1 -1
- package/dist/components/transition.js +35 -38
- package/dist/components/transition.min.css +1 -1
- package/dist/components/transition.min.js +2 -2
- package/dist/components/visibility.js +86 -89
- package/dist/components/visibility.min.js +2 -2
- package/dist/semantic.css +98 -268
- package/dist/semantic.js +1811 -1903
- package/dist/semantic.min.css +2 -2
- package/dist/semantic.min.js +2 -2
- package/package.json +1 -1
- package/scripts/nightly-version.js +3 -3
- package/src/definitions/behaviors/api.js +56 -60
- package/src/definitions/behaviors/form.js +141 -146
- package/src/definitions/behaviors/state.js +23 -24
- package/src/definitions/behaviors/visibility.js +85 -88
- package/src/definitions/globals/site.js +15 -16
- package/src/definitions/modules/accordion.js +39 -40
- package/src/definitions/modules/calendar.js +204 -205
- package/src/definitions/modules/checkbox.js +28 -29
- package/src/definitions/modules/dimmer.js +21 -22
- package/src/definitions/modules/dropdown.js +284 -306
- package/src/definitions/modules/embed.js +30 -31
- package/src/definitions/modules/flyout.js +78 -83
- package/src/definitions/modules/modal.js +85 -84
- package/src/definitions/modules/nag.js +26 -27
- package/src/definitions/modules/popup.js +71 -83
- package/src/definitions/modules/progress.js +53 -54
- package/src/definitions/modules/rating.js +32 -33
- package/src/definitions/modules/search.js +94 -101
- package/src/definitions/modules/shape.js +43 -44
- package/src/definitions/modules/sidebar.js +55 -63
- package/src/definitions/modules/slider.js +143 -148
- package/src/definitions/modules/sticky.js +52 -55
- package/src/definitions/modules/tab.js +55 -61
- package/src/definitions/modules/toast.js +38 -37
- package/src/definitions/modules/transition.js +34 -37
- package/src/themes/default/globals/reset.overrides +45 -201
- package/tasks/admin/components/create.js +11 -11
- package/tasks/admin/components/init.js +11 -12
- package/tasks/admin/components/update.js +19 -20
- package/tasks/admin/distributions/create.js +26 -38
- package/tasks/admin/distributions/init.js +11 -12
- package/tasks/admin/distributions/update.js +18 -19
- package/tasks/admin/register.js +7 -7
- package/tasks/build/assets.js +1 -1
- package/tasks/build/css.js +1 -1
- package/tasks/build/javascript.js +1 -1
- package/tasks/config/admin/github.js +1 -1
- package/tasks/config/admin/templates/css-package.js +1 -1
- package/tasks/config/admin/templates/less-package.js +1 -1
- package/tasks/config/project/config.js +7 -7
- package/tasks/config/project/install.js +12 -12
- package/tasks/config/project/release.js +5 -11
- package/tasks/config/tasks.js +5 -5
- package/tasks/config/user.js +1 -4
- package/tasks/docs/metadata.js +11 -12
- package/tasks/install.js +12 -10
- package/test/meteor/assets.js +3 -3
- package/test/meteor/fonts.js +10 -11
- package/test/modules/module.spec.js +18 -18
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* # Fomantic-UI 2.10.0-beta.
|
|
2
|
+
* # Fomantic-UI 2.10.0-beta.65+923b474 - Search
|
|
3
3
|
* https://github.com/fomantic/Fomantic-UI/
|
|
4
4
|
*
|
|
5
5
|
*
|
|
@@ -20,47 +20,45 @@
|
|
|
20
20
|
: globalThis;
|
|
21
21
|
|
|
22
22
|
$.fn.search = function (...args) {
|
|
23
|
-
|
|
23
|
+
const $allModules = $(this);
|
|
24
24
|
|
|
25
25
|
let time = Date.now();
|
|
26
26
|
let performance = [];
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
const parameters = args[0];
|
|
29
|
+
const methodInvoked = typeof parameters === 'string';
|
|
30
|
+
const queryArguments = args.slice(1);
|
|
31
31
|
let returnedValue;
|
|
32
32
|
$allModules.each(function () {
|
|
33
|
-
|
|
33
|
+
const settings = $.isPlainObject(parameters)
|
|
34
34
|
? $.extend(true, {}, $.fn.search.settings, parameters)
|
|
35
35
|
: $.extend({}, $.fn.search.settings);
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
const className = settings.className;
|
|
38
|
+
const metadata = settings.metadata;
|
|
39
|
+
const regExp = settings.regExp;
|
|
40
|
+
const fields = settings.fields;
|
|
41
|
+
const selector = settings.selector;
|
|
42
|
+
const error = settings.error;
|
|
43
|
+
const namespace = settings.namespace;
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
const eventNamespace = '.' + namespace;
|
|
46
|
+
const moduleNamespace = namespace + '-module';
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
const $module = $(this);
|
|
49
49
|
let $prompt = $module.find(selector.prompt);
|
|
50
50
|
let $searchButton = $module.find(selector.searchButton);
|
|
51
51
|
let $results = $module.find(selector.results);
|
|
52
52
|
let $result = $module.find(selector.result);
|
|
53
53
|
let $category = $module.find(selector.category);
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
const element = this;
|
|
56
56
|
let instance = $module.data(moduleNamespace);
|
|
57
57
|
|
|
58
58
|
let disabledBubbled = false;
|
|
59
59
|
let resultsDismissed = false;
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
module = {
|
|
61
|
+
const module = {
|
|
64
62
|
|
|
65
63
|
initialize: function () {
|
|
66
64
|
module.verbose('Initializing module');
|
|
@@ -158,8 +156,8 @@
|
|
|
158
156
|
}
|
|
159
157
|
},
|
|
160
158
|
blur: function (event) {
|
|
161
|
-
|
|
162
|
-
|
|
159
|
+
const pageLostFocus = document.activeElement === this;
|
|
160
|
+
const callback = function () {
|
|
163
161
|
module.cancel.query();
|
|
164
162
|
module.remove.focus();
|
|
165
163
|
module.timer = setTimeout(function () {
|
|
@@ -204,18 +202,18 @@
|
|
|
204
202
|
},
|
|
205
203
|
click: function (event) {
|
|
206
204
|
module.debug('Search result selected');
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
205
|
+
const $result = $(this);
|
|
206
|
+
const $title = $result.find(selector.title).eq(0);
|
|
207
|
+
const $link = $result.is('a[href]') ? $result : $();
|
|
208
|
+
const href = $link.attr('href') || false;
|
|
209
|
+
const target = $link.attr('target') || false;
|
|
212
210
|
// title is used for result lookup
|
|
213
|
-
|
|
211
|
+
const value = $title.length > 0
|
|
214
212
|
? $title.text()
|
|
215
213
|
: false;
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
214
|
+
const results = module.get.results();
|
|
215
|
+
const result = $result.data(metadata.result) || module.get.result(value, results);
|
|
216
|
+
const oldValue = module.get.value();
|
|
219
217
|
if (isFunction(settings.onSelect) && settings.onSelect.call(element, result, results) === false) {
|
|
220
218
|
module.debug('Custom onSelect callback cancelled default select action');
|
|
221
219
|
disabledBubbled = true;
|
|
@@ -239,18 +237,14 @@
|
|
|
239
237
|
},
|
|
240
238
|
},
|
|
241
239
|
ensureVisible: function ($el) {
|
|
242
|
-
let elTop;
|
|
243
|
-
let elBottom;
|
|
244
|
-
let resultsScrollTop;
|
|
245
|
-
let resultsHeight;
|
|
246
240
|
if ($el.length === 0) {
|
|
247
241
|
return;
|
|
248
242
|
}
|
|
249
|
-
elTop = $el.position().top;
|
|
250
|
-
elBottom = elTop + $el.outerHeight(true);
|
|
243
|
+
const elTop = $el.position().top;
|
|
244
|
+
const elBottom = elTop + $el.outerHeight(true);
|
|
251
245
|
|
|
252
|
-
resultsScrollTop = $results.scrollTop();
|
|
253
|
-
resultsHeight = $results.height();
|
|
246
|
+
const resultsScrollTop = $results.scrollTop();
|
|
247
|
+
const resultsHeight = $results.height();
|
|
254
248
|
|
|
255
249
|
if (elTop < 0) {
|
|
256
250
|
$results.scrollTop(resultsScrollTop + elTop);
|
|
@@ -260,15 +254,15 @@
|
|
|
260
254
|
},
|
|
261
255
|
handleKeyboard: function (event) {
|
|
262
256
|
// force selector refresh
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
257
|
+
const $result = $module.find(selector.result);
|
|
258
|
+
const $category = $module.find(selector.category);
|
|
259
|
+
const $activeResult = $result.filter('.' + className.active);
|
|
260
|
+
const currentIndex = $result.index($activeResult);
|
|
261
|
+
const resultSize = $result.length;
|
|
262
|
+
const hasActiveResult = $activeResult.length > 0;
|
|
263
|
+
|
|
264
|
+
const keyCode = event.which;
|
|
265
|
+
const keys = {
|
|
272
266
|
backspace: 8,
|
|
273
267
|
enter: 13,
|
|
274
268
|
escape: 27,
|
|
@@ -337,7 +331,7 @@
|
|
|
337
331
|
|
|
338
332
|
setup: {
|
|
339
333
|
api: function (searchTerm, callback) {
|
|
340
|
-
|
|
334
|
+
const apiSettings = {
|
|
341
335
|
debug: settings.debug,
|
|
342
336
|
on: false,
|
|
343
337
|
cache: settings.cache,
|
|
@@ -346,7 +340,7 @@
|
|
|
346
340
|
query: searchTerm,
|
|
347
341
|
},
|
|
348
342
|
};
|
|
349
|
-
|
|
343
|
+
const apiCallbacks = {
|
|
350
344
|
onSuccess: function (response, $module, xhr) {
|
|
351
345
|
module.parse.response.call(element, response, searchTerm);
|
|
352
346
|
callback();
|
|
@@ -405,8 +399,8 @@
|
|
|
405
399
|
if (!event.target) {
|
|
406
400
|
return;
|
|
407
401
|
}
|
|
408
|
-
|
|
409
|
-
|
|
402
|
+
const $target = $(event.target);
|
|
403
|
+
const isInDOM = document.documentElement.contains(event.target);
|
|
410
404
|
|
|
411
405
|
return isInDOM && $target.closest(selector.message).length > 0;
|
|
412
406
|
},
|
|
@@ -429,8 +423,8 @@
|
|
|
429
423
|
}
|
|
430
424
|
},
|
|
431
425
|
inputEvent: function () {
|
|
432
|
-
|
|
433
|
-
|
|
426
|
+
const prompt = $prompt[0];
|
|
427
|
+
const inputEvent = prompt !== undefined && prompt.oninput !== undefined
|
|
434
428
|
? 'input'
|
|
435
429
|
: (prompt !== undefined && prompt.onpropertychange !== undefined
|
|
436
430
|
? 'propertychange'
|
|
@@ -514,8 +508,8 @@
|
|
|
514
508
|
callback = isFunction(callback)
|
|
515
509
|
? callback
|
|
516
510
|
: function () {};
|
|
517
|
-
|
|
518
|
-
|
|
511
|
+
const searchTerm = module.get.value();
|
|
512
|
+
const cache = module.read.cache(searchTerm);
|
|
519
513
|
if (module.has.minimumCharacters()) {
|
|
520
514
|
if (cache) {
|
|
521
515
|
module.debug('Reading result from cache', searchTerm);
|
|
@@ -545,7 +539,6 @@
|
|
|
545
539
|
search: {
|
|
546
540
|
local: function (searchTerm) {
|
|
547
541
|
let results = module.search.object(searchTerm, settings.source);
|
|
548
|
-
let searchHTML;
|
|
549
542
|
module.set.loading();
|
|
550
543
|
module.save.results(results);
|
|
551
544
|
module.debug('Returned full local search results', results);
|
|
@@ -556,7 +549,7 @@
|
|
|
556
549
|
if (settings.type === 'category') {
|
|
557
550
|
results = module.create.categoryResults(results);
|
|
558
551
|
}
|
|
559
|
-
searchHTML = module.generateResults({
|
|
552
|
+
const searchHTML = module.generateResults({
|
|
560
553
|
results: results,
|
|
561
554
|
});
|
|
562
555
|
module.remove.loading();
|
|
@@ -580,17 +573,17 @@
|
|
|
580
573
|
},
|
|
581
574
|
object: function (searchTerm, source = settings.source, searchFields = settings.searchFields) {
|
|
582
575
|
searchTerm = module.remove.diacritics(String(searchTerm));
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
576
|
+
const results = [];
|
|
577
|
+
const exactResults = [];
|
|
578
|
+
const fuzzyResults = [];
|
|
579
|
+
const searchExp = searchTerm.replace(regExp.escape, '\\$&');
|
|
580
|
+
const matchRegExp = new RegExp(regExp.beginsWith + searchExp, settings.ignoreSearchCase ? 'i' : '');
|
|
588
581
|
|
|
589
582
|
// avoid duplicates when pushing results
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
583
|
+
const addResult = function (array, result) {
|
|
584
|
+
const notResult = !results.includes(result);
|
|
585
|
+
const notFuzzyResult = !fuzzyResults.includes(result);
|
|
586
|
+
const notExactResults = !exactResults.includes(result);
|
|
594
587
|
if (notResult && notFuzzyResult && notExactResults) {
|
|
595
588
|
array.push(result);
|
|
596
589
|
}
|
|
@@ -608,11 +601,11 @@
|
|
|
608
601
|
return [];
|
|
609
602
|
}
|
|
610
603
|
// iterate through search fields looking for matches
|
|
611
|
-
|
|
604
|
+
const lastSearchFieldIndex = searchFields.length - 1;
|
|
612
605
|
$.each(source, function (label, content) {
|
|
613
|
-
|
|
606
|
+
const concatenatedContent = [];
|
|
614
607
|
$.each(searchFields, function (index, field) {
|
|
615
|
-
|
|
608
|
+
const fieldExists = typeof content[field] === 'string' || typeof content[field] === 'number';
|
|
616
609
|
if (fieldExists) {
|
|
617
610
|
let text;
|
|
618
611
|
text = typeof content[field] === 'string'
|
|
@@ -655,7 +648,7 @@
|
|
|
655
648
|
return term.includes(query);
|
|
656
649
|
},
|
|
657
650
|
wordSearch: function (query, term, matchAll) {
|
|
658
|
-
|
|
651
|
+
const allWords = query.split(/\s+/);
|
|
659
652
|
let found = false;
|
|
660
653
|
for (const w of allWords) {
|
|
661
654
|
found = module.exactSearch(w, term);
|
|
@@ -667,8 +660,8 @@
|
|
|
667
660
|
return found;
|
|
668
661
|
},
|
|
669
662
|
fuzzySearch: function (query, term) {
|
|
670
|
-
|
|
671
|
-
|
|
663
|
+
const termLength = term.length;
|
|
664
|
+
const queryLength = query.length;
|
|
672
665
|
if (typeof query !== 'string') {
|
|
673
666
|
return false;
|
|
674
667
|
}
|
|
@@ -684,7 +677,7 @@
|
|
|
684
677
|
}
|
|
685
678
|
for (let characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {
|
|
686
679
|
let continueSearch = false;
|
|
687
|
-
|
|
680
|
+
const queryCharacter = query.codePointAt(characterIndex);
|
|
688
681
|
while (nextCharacterIndex < termLength) {
|
|
689
682
|
if (term.codePointAt(nextCharacterIndex++) === queryCharacter) {
|
|
690
683
|
continueSearch = true;
|
|
@@ -704,11 +697,11 @@
|
|
|
704
697
|
parse: {
|
|
705
698
|
response: function (response, searchTerm) {
|
|
706
699
|
if (Array.isArray(response)) {
|
|
707
|
-
|
|
700
|
+
const o = {};
|
|
708
701
|
o[fields.results] = response;
|
|
709
702
|
response = o;
|
|
710
703
|
}
|
|
711
|
-
|
|
704
|
+
const searchHTML = module.generateResults(response);
|
|
712
705
|
module.verbose('Parsing server response', response);
|
|
713
706
|
if (response !== undefined && searchTerm !== undefined && response[fields.results] !== undefined) {
|
|
714
707
|
module.addResults(searchHTML);
|
|
@@ -732,8 +725,8 @@
|
|
|
732
725
|
|
|
733
726
|
has: {
|
|
734
727
|
minimumCharacters: function () {
|
|
735
|
-
|
|
736
|
-
|
|
728
|
+
const searchTerm = module.get.value();
|
|
729
|
+
const numCharacters = searchTerm.length;
|
|
737
730
|
|
|
738
731
|
return numCharacters >= settings.minCharacters;
|
|
739
732
|
},
|
|
@@ -741,7 +734,7 @@
|
|
|
741
734
|
if ($results.length === 0) {
|
|
742
735
|
return false;
|
|
743
736
|
}
|
|
744
|
-
|
|
737
|
+
const html = $results.html();
|
|
745
738
|
|
|
746
739
|
return html !== '';
|
|
747
740
|
},
|
|
@@ -749,7 +742,7 @@
|
|
|
749
742
|
|
|
750
743
|
clear: {
|
|
751
744
|
cache: function (value) {
|
|
752
|
-
|
|
745
|
+
const cache = $module.data(metadata.cache);
|
|
753
746
|
if (!value) {
|
|
754
747
|
module.debug('Clearing cache', value);
|
|
755
748
|
$module.removeData(metadata.cache);
|
|
@@ -766,7 +759,7 @@
|
|
|
766
759
|
|
|
767
760
|
read: {
|
|
768
761
|
cache: function (name) {
|
|
769
|
-
|
|
762
|
+
const cache = $module.data(metadata.cache);
|
|
770
763
|
if (settings.cache) {
|
|
771
764
|
module.verbose('Checking cache for generated html for query', name);
|
|
772
765
|
|
|
@@ -781,7 +774,7 @@
|
|
|
781
774
|
|
|
782
775
|
create: {
|
|
783
776
|
categoryResults: function (results) {
|
|
784
|
-
|
|
777
|
+
const categoryResults = {};
|
|
785
778
|
$.each(results, function (index, result) {
|
|
786
779
|
if (!result.category) {
|
|
787
780
|
return;
|
|
@@ -800,7 +793,7 @@
|
|
|
800
793
|
return categoryResults;
|
|
801
794
|
},
|
|
802
795
|
id: function (resultIndex, categoryIndex) {
|
|
803
|
-
|
|
796
|
+
const resultID = resultIndex + 1; // not zero indexed
|
|
804
797
|
let letterID;
|
|
805
798
|
let id;
|
|
806
799
|
if (categoryIndex !== undefined) {
|
|
@@ -827,7 +820,7 @@
|
|
|
827
820
|
inject: {
|
|
828
821
|
result: function (result, resultIndex, categoryIndex) {
|
|
829
822
|
module.verbose('Injecting result into results');
|
|
830
|
-
|
|
823
|
+
const $selectedResult = categoryIndex !== undefined
|
|
831
824
|
? $results
|
|
832
825
|
.children().eq(categoryIndex)
|
|
833
826
|
.children(selector.results)
|
|
@@ -884,7 +877,7 @@
|
|
|
884
877
|
|
|
885
878
|
write: {
|
|
886
879
|
cache: function (name, value) {
|
|
887
|
-
|
|
880
|
+
const cache = $module.data(metadata.cache) !== undefined
|
|
888
881
|
? $module.data(metadata.cache)
|
|
889
882
|
: {};
|
|
890
883
|
if (settings.cache) {
|
|
@@ -935,7 +928,7 @@
|
|
|
935
928
|
silent: settings.silent,
|
|
936
929
|
duration: settings.duration,
|
|
937
930
|
onShow: function () {
|
|
938
|
-
|
|
931
|
+
const $firstResult = $module.find(selector.result).eq(0);
|
|
939
932
|
module.ensureVisible($firstResult);
|
|
940
933
|
},
|
|
941
934
|
onComplete: function () {
|
|
@@ -983,9 +976,9 @@
|
|
|
983
976
|
|
|
984
977
|
generateResults: function (response) {
|
|
985
978
|
module.debug('Generating html from response', response);
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
979
|
+
const template = settings.templates[settings.type];
|
|
980
|
+
const isProperObject = $.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results]);
|
|
981
|
+
const isProperArray = Array.isArray(response[fields.results]) && response[fields.results].length > 0;
|
|
989
982
|
let html = '';
|
|
990
983
|
if (isProperObject || isProperArray) {
|
|
991
984
|
if (settings.maxResults > 0) {
|
|
@@ -998,13 +991,13 @@
|
|
|
998
991
|
}
|
|
999
992
|
}
|
|
1000
993
|
if (settings.highlightMatches) {
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
994
|
+
const results = response[fields.results];
|
|
995
|
+
const regExpIgnore = settings.ignoreSearchCase ? 'i' : '';
|
|
996
|
+
const querySplit = [...module.get.value()];
|
|
997
|
+
const diacriticReg = settings.ignoreDiacritics ? '[\u0300-\u036F]?' : '';
|
|
998
|
+
const htmlReg = '(?![^<]*>)';
|
|
999
|
+
const markedRegExp = new RegExp(htmlReg + '(' + querySplit.join(diacriticReg + ')(.*?)' + htmlReg + '(') + diacriticReg + ')', regExpIgnore);
|
|
1000
|
+
const markedReplacer = function (...args) {
|
|
1008
1001
|
args = args.slice(1, querySplit.length * 2).map(function (x, i) {
|
|
1009
1002
|
return i & 1 ? x : '<mark>' + x + '</mark>'; // eslint-disable-line no-bitwise
|
|
1010
1003
|
});
|
|
@@ -1013,7 +1006,7 @@
|
|
|
1013
1006
|
};
|
|
1014
1007
|
$.each(results, function (label, content) {
|
|
1015
1008
|
$.each(settings.searchFields, function (index, field) {
|
|
1016
|
-
|
|
1009
|
+
const fieldExists = typeof content[field] === 'string' || typeof content[field] === 'number';
|
|
1017
1010
|
if (fieldExists) {
|
|
1018
1011
|
let markedHTML = typeof content[field] === 'string'
|
|
1019
1012
|
? content[field]
|
|
@@ -1142,7 +1135,7 @@
|
|
|
1142
1135
|
query = query.split(/[ .]/);
|
|
1143
1136
|
maxDepth = query.length - 1;
|
|
1144
1137
|
$.each(query, function (depth, value) {
|
|
1145
|
-
|
|
1138
|
+
const camelCaseValue = depth !== maxDepth
|
|
1146
1139
|
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
|
|
1147
1140
|
: query;
|
|
1148
1141
|
if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
|
|
@@ -1386,8 +1379,8 @@
|
|
|
1386
1379
|
},
|
|
1387
1380
|
category: function (response, settings) {
|
|
1388
1381
|
let html = '';
|
|
1389
|
-
|
|
1390
|
-
|
|
1382
|
+
const fields = settings.fields;
|
|
1383
|
+
const escape = settings.templates.escape;
|
|
1391
1384
|
if (response[fields.categoryResults] !== undefined) {
|
|
1392
1385
|
// each category
|
|
1393
1386
|
$.each(response[fields.categoryResults], function (index, category) {
|
|
@@ -1459,8 +1452,8 @@
|
|
|
1459
1452
|
},
|
|
1460
1453
|
standard: function (response, settings) {
|
|
1461
1454
|
let html = '';
|
|
1462
|
-
|
|
1463
|
-
|
|
1455
|
+
const fields = settings.fields;
|
|
1456
|
+
const escape = settings.templates.escape;
|
|
1464
1457
|
if (response[fields.results] !== undefined) {
|
|
1465
1458
|
// each result
|
|
1466
1459
|
$.each(response[fields.results], function (index, result) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* # Fomantic UI - 2.10.0-beta.
|
|
2
|
+
* # Fomantic UI - 2.10.0-beta.65+923b474
|
|
3
3
|
* https://github.com/fomantic/Fomantic-UI
|
|
4
4
|
* https://fomantic-ui.com/
|
|
5
5
|
*
|
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
* https://opensource.org/licenses/MIT
|
|
9
9
|
*
|
|
10
10
|
*/
|
|
11
|
-
!function(j,F,q){"use strict";function D(e){return"function"==typeof e&&"number"!=typeof e.nodeType}F=void 0!==F&&F.Math===Math?F:globalThis,j.fn.search=function(...e){let S=j(this),x=Date.now(),C=[],A=e[0],w="string"==typeof A,T=e.slice(1),k;return S.each(function(){let f=j.isPlainObject(A)?j.extend(!0,{},j.fn.search.settings,A):j.extend({},j.fn.search.settings),g=f.className,u=f.metadata,i=f.regExp,l=f.fields,h=f.selector,p=f.error;var e=f.namespace;let n="."+e,t=e+"-module",v=j(this),m=v.find(h.prompt),s=v.find(h.searchButton),r=v.find(h.results),a=v.find(h.result),o=void v.find(h.category),d=this,c=v.data(t),y=!1,b=!1,R;R={initialize:function(){R.verbose("Initializing module"),R.get.settings(),R.determine.searchFields(),R.bind.events(),R.set.type(),R.create.results(),R.instantiate()},instantiate:function(){R.verbose("Storing instance of module",R),c=R,v.data(t,R)},destroy:function(){R.verbose("Destroying instance"),v.off(n).removeData(t)},refresh:function(){R.debug("Refreshing selector cache"),m=v.find(h.prompt),s=v.find(h.searchButton),o=v.find(h.category),r=v.find(h.results),a=v.find(h.result)},refreshResults:function(){r=v.find(h.results),a=v.find(h.result)},bind:{events:function(){R.verbose("Binding events to search"),f.automatic&&(v.on(R.get.inputEvent()+n,h.prompt,R.event.input),m.attr("autocomplete",R.is.chrome()?"fomantic-search":"off")),v.on("focus"+n,h.prompt,R.event.focus).on("blur"+n,h.prompt,R.event.blur).on("keydown"+n,h.prompt,R.handleKeyboard).on("click"+n,h.searchButton,R.query).on("mousedown"+n,h.results,R.event.result.mousedown).on("mouseup"+n,h.results,R.event.result.mouseup).on("click"+n,h.result,R.event.result.click).on("click"+n,h.remove,R.event.remove.click)}},determine:{searchFields:function(){A&&void 0!==A.searchFields&&(f.searchFields=Array.isArray(A.searchFields)?A.searchFields:[A.searchFields])}},event:{input:function(){f.searchDelay?(clearTimeout(R.timer),R.timer=setTimeout(function(){R.is.focused()&&R.query()},f.searchDelay)):R.query()},focus:function(){R.set.focus(),f.searchOnFocus&&R.has.minimumCharacters()&&R.query(function(){R.can.show()&&R.showResults()})},blur:function(e){var t=q.activeElement===this;function s(){R.cancel.query(),R.remove.focus(),R.timer=setTimeout(function(){R.hideResults()},f.hideDelay)}t||(b=!1,R.resultsClicked?(R.debug("Determining if user action caused search to close"),v.one("click.close"+n,h.results,function(e){R.is.inMessage(e)||y?m.trigger("focus"):(y=!1,R.is.animating()||R.is.hidden()||s())})):(R.debug("Input blurred without user action, closing results"),s()))},remove:{click:function(){R.clear.value(),m.trigger("focus")}},result:{mousedown:function(){R.resultsClicked=!0},mouseup:function(){R.resultsClicked=!1},click:function(e){R.debug("Search result selected");let t=j(this),s=t.find(h.title).eq(0),i=t.is("a[href]")?t:j();var n=i.attr("href")||!1,r=i.attr("target")||!1,a=0<s.length&&s.text(),o=R.get.results(),c=t.data(u.result)||R.get.result(a,o),l=R.get.value();if(D(f.onSelect)&&!1===f.onSelect.call(d,c,o))return R.debug("Custom onSelect callback cancelled default select action"),void(y=!0);R.hideResults(),a&&R.get.value()===l&&R.set.value(a),n&&(e.preventDefault(),R.verbose("Opening search link found in result",i),"_blank"===r||e.ctrlKey?F.open(n):F.location.href=n)}}},ensureVisible:function(e){var t,s,i;0!==e.length&&(e=(t=e.position().top)+e.outerHeight(!0),s=r.scrollTop(),i=r.height(),t<0?r.scrollTop(s+t):i<e&&r.scrollTop(s+(e-i)))},handleKeyboard:function(e){let t=v.find(h.result),s=v.find(h.category);var i=t.filter("."+g.active),n=t.index(i),r=t.length,i=0<i.length,a=e.which;let o=13,c=27,l=38,u=40,d;if(a===c&&(R.is.visible()?R.hideResults():(R.verbose("Escape key pressed, blurring search field"),m.trigger("blur")),e.stopPropagation(),b=!0),R.is.visible())if(a===o){if(R.verbose("Enter key pressed, selecting active result"),0<t.filter("."+g.active).length)return R.event.result.click.call(t.filter("."+g.active),e),e.preventDefault(),!1}else a===l&&i?(R.verbose("Up key pressed, changing active result"),d=n-1<0?n:n-1,s.removeClass(g.active),t.removeClass(g.active).eq(d).addClass(g.active).closest(s).addClass(g.active),R.ensureVisible(t.eq(d)),e.preventDefault()):a===u&&(R.verbose("Down key pressed, changing active result"),d=r<=n+1?n:n+1,s.removeClass(g.active),t.removeClass(g.active).eq(d).addClass(g.active).closest(s).addClass(g.active),R.ensureVisible(t.eq(d)),e.preventDefault());else a===o&&(R.verbose("Enter key pressed, executing query"),R.query(),R.set.buttonPressed(),m.one("keyup",R.remove.buttonFocus))},setup:{api:function(i,n){var e={debug:f.debug,on:!1,cache:f.cache,action:"search",urlData:{query:i}},t={onSuccess:function(e,t,s){R.parse.response.call(d,e,i),n(),f.apiSettings&&"function"==typeof f.apiSettings.onSuccess&&f.apiSettings.onSuccess.call(this,e,t,s)},onFailure:function(e,t,s){R.displayMessage(p.serverError),n(),f.apiSettings&&"function"==typeof f.apiSettings.onFailure&&f.apiSettings.onFailure.call(this,e,t,s)},onAbort:function(e,t,s){f.apiSettings&&"function"==typeof f.apiSettings.onAbort&&f.apiSettings.onAbort.call(this,e,t,s)},onError:function(e,t,s){R.error(),f.apiSettings&&"function"==typeof f.apiSettings.onError&&f.apiSettings.onError.call(this,e,t,s)}};j.extend(!0,e,f.apiSettings,t),R.verbose("Setting up API request",e),v.api(e)}},can:{useAPI:function(){return void 0!==j.fn.api},show:function(){return R.is.focused()&&!R.is.visible()&&!R.is.empty()},transition:function(){return f.transition&&void 0!==j.fn.transition}},is:{animating:function(){return r.hasClass(g.animating)},chrome:function(){return!!F.chrome&&!F.StyleMedia},hidden:function(){return r.hasClass(g.hidden)},inMessage:function(t){if(t.target){let e=j(t.target);return q.documentElement.contains(t.target)&&0<e.closest(h.message).length}},empty:function(){return""===r.html()},visible:function(){return 0<r.filter(":visible").length},focused:function(){return 0<m.filter(":focus").length}},get:{settings:function(){j.isPlainObject(A)&&A.searchFullText&&(f.fullTextSearch=A.searchFullText,R.error(f.error.oldSearchSyntax,d))},inputEvent:function(){var e=m[0];return void 0!==e&&void 0!==e.oninput?"input":void 0!==e&&void 0!==e.onpropertychange?"propertychange":"keyup"},value:function(){return m.val()},results:function(){return v.data(u.results)},result:function(s=R.get.value(),e=R.get.results()){let i=!1;return"category"===f.type?(R.debug("Finding result that matches",s),j.each(e,function(e,t){if(Array.isArray(t.results)&&(i=R.search.object(s,t.results)[0]))return!1})):(R.debug("Finding result in results object",s),i=R.search.object(s,e)[0]),i||!1}},select:{firstResult:function(){R.verbose("Selecting first result"),a.first().addClass(g.active)}},set:{focus:function(){v.addClass(g.focus)},loading:function(){v.addClass(g.loading)},value:function(e){R.verbose("Setting search input value",e),m.val(e)},type:function(e=f.type){g[e]&&v.addClass(g[e])},buttonPressed:function(){s.addClass(g.pressed)}},remove:{loading:function(){v.removeClass(g.loading)},focus:function(){v.removeClass(g.focus)},buttonPressed:function(){s.removeClass(g.pressed)},diacritics:function(e){return f.ignoreDiacritics?e.normalize("NFD").replace(/[\u0300-\u036F]/g,""):e}},query:function(e=function(){}){e=D(e)?e:function(){};var t=R.get.value(),s=R.read.cache(t);R.has.minimumCharacters()?(s?(R.debug("Reading result from cache",t),R.save.results(s.results),f.onResults.call(d,s.results,!0),R.addResults(s.html),R.inject.id(s.results),e()):(R.debug("Querying for",t),j.isPlainObject(f.source)||Array.isArray(f.source)?(R.search.local(t),e()):R.can.useAPI()?R.search.remote(t,e):(R.error(p.source),e())),f.onSearchQuery.call(d,t)):R.hideResults()},search:{local:function(e){let t=R.search.object(e,f.source);var s;R.set.loading(),R.save.results(t),R.debug("Returned full local search results",t),0<f.maxResults&&(R.debug("Using specified max results",t),t=t.slice(0,f.maxResults)),"category"===f.type&&(t=R.create.categoryResults(t)),s=R.generateResults({results:t}),R.remove.loading(),R.addResults(s),R.inject.id(t),R.write.cache(e,{html:s,results:t})},remote:function(e,t){t=D(t)?t:function(){},v.api("is loading")&&v.api("abort"),R.setup.api(e,t),v.api("query")},object:function(r,e=f.source,t=f.searchFields){r=R.remove.diacritics(String(r));let a=[],o=[],c=[];var s=r.replace(i.escape,"\\$&");function l(e,t){var s=!a.includes(t),i=!c.includes(t),n=!o.includes(t);s&&i&&n&&e.push(t)}let u=new RegExp(i.beginsWith+s,f.ignoreSearchCase?"i":"");if(Array.isArray(t)||(t=[t]),void 0===e||!1===e)return R.error(p.source),[];let d=t.length-1;return j.each(e,function(e,i){let n=[];j.each(t,function(t,s){if("string"==typeof i[s]||"number"==typeof i[s]){let e;if(e="string"==typeof i[s]?R.remove.diacritics(i[s]):i[s].toString(),e=j("<div/>",{html:e}).text().trim(),"all"===f.fullTextSearch){if(n.push(e),t<d)return!0;e=n.join(" ")}"all"!==f.fullTextSearch&&-1!==e.search(u)?l(a,i):"exact"===f.fullTextSearch&&R.exactSearch(r,e)||"some"===f.fullTextSearch&&R.wordSearch(r,e)||"all"===f.fullTextSearch&&R.wordSearch(r,e,!0)?l(o,i):!0===f.fullTextSearch&&R.fuzzySearch(r,e)&&l(c,i)}})}),[...a,...o,...c]}},exactSearch:function(e,t){return f.ignoreSearchCase&&(e=e.toLowerCase(),t=t.toLowerCase()),t.includes(e)},wordSearch:function(e,t,s){let i=!1;for(const n of e.split(/\s+/))if(!(i=R.exactSearch(n,t))&&s||i&&!s)break;return i},fuzzySearch:function(i,n){var r=n.length,e=i.length;if("string"!=typeof i)return!1;if(f.ignoreSearchCase&&(i=i.toLowerCase(),n=n.toLowerCase()),r<e)return!1;if(e===r)return i===n;for(let t=0,s=0;t<e;t++){let e=!1;for(var a=i.codePointAt(t);s<r;)if(n.codePointAt(s++)===a){e=!0;break}if(!e)return!1}return!0},parse:{response:function(t,e){if(Array.isArray(t)){let e={};e[l.results]=t,t=e}var s=R.generateResults(t);R.verbose("Parsing server response",t),void 0!==t&&void 0!==e&&void 0!==t[l.results]&&(R.addResults(s),R.inject.id(t[l.results]),R.write.cache(e,{html:s,results:t[l.results]}),R.save.results(t[l.results]))}},cancel:{query:function(){R.can.useAPI()&&v.api("abort")}},has:{minimumCharacters:function(){return R.get.value().length>=f.minCharacters},results:function(){return 0!==r.length&&""!==r.html()}},clear:{cache:function(e){let t=v.data(u.cache);e?t&&t[e]&&(R.debug("Removing value from cache",e),delete t[e],v.data(u.cache,t)):(R.debug("Clearing cache",e),v.removeData(u.cache))},value:function(){R.set.value("")}},read:{cache:function(e){var t=v.data(u.cache);return!!f.cache&&(R.verbose("Checking cache for generated html for query",e),"object"==typeof t&&void 0!==t[e]&&t[e])}},create:{categoryResults:function(e){let s={};return j.each(e,function(e,t){t.category&&(void 0===s[t.category]?(R.verbose("Creating new category of results",t.category),s[t.category]={name:t.category,results:[t]}):s[t.category].results.push(t))}),s},id:function(e,t){e+=1;let s;return void 0!==t?(t=String.fromCodePoint(97+t),s=t+e,R.verbose("Creating category result id",s)):(s=e,R.verbose("Creating result id",s)),s},results:function(){0===r.length&&(r=j("<div />").addClass(g.results).appendTo(v))}},inject:{result:function(e,t,s){R.verbose("Injecting result into results");let i=(void 0!==s?r.children().eq(s).children(h.results).first():r).children(h.result).eq(t);R.verbose("Injecting results metadata",i),i.data(u.result,e)},id:function(e){R.debug("Injecting unique ids into results");let s=0,i=0;return"category"===f.type?j.each(e,function(e,t){0<t.results.length&&(i=0,j.each(t.results,function(e,t){void 0===t.id&&(t.id=R.create.id(i,s)),R.inject.result(t,i,s),i++}),s++)}):j.each(e,function(e,t){void 0===t.id&&(t.id=R.create.id(i)),R.inject.result(t,i),i++}),e}},save:{results:function(e){R.verbose("Saving current search results to metadata",e),v.data(u.results,e)}},write:{cache:function(e,t){let s=void 0!==v.data(u.cache)?v.data(u.cache):{};f.cache&&(R.verbose("Writing generated html to cache",e,t),s[e]=t,v.data(u.cache,s))}},addResults:function(e){if(D(f.onResultsAdd)&&!1===f.onResultsAdd.call(r,e))return R.debug("onResultsAdd callback cancelled default action"),!1;e?(r.html(e),R.refreshResults(),f.selectFirstResult&&R.select.firstResult(),R.showResults()):R.hideResults(function(){r.empty()})},showResults:function(e){e=D(e)?e:function(){},b||!R.is.visible()&&R.has.results()&&(R.can.transition()?(R.debug("Showing results with css animations"),r.transition({animation:f.transition+" in",debug:f.debug,verbose:f.verbose,silent:f.silent,duration:f.duration,onShow:function(){var e=v.find(h.result).eq(0);R.ensureVisible(e)},onComplete:function(){e()},queue:!0})):(R.debug("Showing results with javascript"),r.stop().fadeIn(f.duration,f.easing)),f.onResultsOpen.call(r))},hideResults:function(e){e=D(e)?e:function(){},R.is.visible()&&(R.can.transition()?(R.debug("Hiding results with css animations"),r.transition({animation:f.transition+" out",debug:f.debug,verbose:f.verbose,silent:f.silent,duration:f.duration,onComplete:function(){e()},queue:!0})):(R.debug("Hiding results with javascript"),r.stop().fadeOut(f.duration,f.easing)),f.onResultsClose.call(r))},generateResults:function(a){R.debug("Generating html from response",a);let e=f.templates[f.type];var s=j.isPlainObject(a[l.results])&&!j.isEmptyObject(a[l.results]),i=Array.isArray(a[l.results])&&0<a[l.results].length;let t="";if(s||i){if(0<f.maxResults&&(s?"standard"===f.type&&R.error(p.maxResults):a[l.results]=a[l.results].slice(0,f.maxResults)),f.highlightMatches){i=a[l.results],s=f.ignoreSearchCase?"i":"";let t=[...R.get.value()];var o=f.ignoreDiacritics?"[̀-ͯ]?":"",c="(?![^<]*>)";let n=new RegExp(c+"("+t.join(o+")(.*?)"+c+"(")+o+")",s),r=function(...e){return(e=e.slice(1,2*t.length).map(function(e,t){return 1&t?e:"<mark>"+e+"</mark>"})).join("")};j.each(i,function(s,i){j.each(f.searchFields,function(e,t){if("string"==typeof i[t]||"number"==typeof i[t]){let e="string"==typeof i[t]?i[t]:i[t].toString();e=(e=f.ignoreDiacritics?e.normalize("NFD"):e).replace(/<\/?mark>/g,""),a[l.results][s][t]=e.replace(n,r)}})})}D(e)?t=e(a,f):R.error(p.noTemplate,!1)}else f.showNoResults&&(t=R.displayMessage(p.noResults,"empty",p.noResultsHeader));return f.onResults.call(d,a),t},displayMessage:function(e,t="standard",s=!1){return R.debug("Displaying message",e,t,s),R.addResults(f.templates.message(e,t,s)),f.templates.message(e,t,s)},setting:function(e,t){if(j.isPlainObject(e))j.extend(!0,f,e);else{if(void 0===t)return f[e];f[e]=t}},internal:function(e,t){if(j.isPlainObject(e))j.extend(!0,R,e);else{if(void 0===t)return R[e];R[e]=t}},debug:function(...e){!f.silent&&f.debug&&(f.performance?R.performance.log(e):(R.debug=Function.prototype.bind.call(console.info,console,f.name+":"),R.debug.apply(console,e)))},verbose:function(...e){!f.silent&&f.verbose&&f.debug&&(f.performance?R.performance.log(e):(R.verbose=Function.prototype.bind.call(console.info,console,f.name+":"),R.verbose.apply(console,e)))},error:function(...e){f.silent||(R.error=Function.prototype.bind.call(console.error,console,f.name+":"),R.error.apply(console,e))},performance:{log:function(e){var t,s;f.performance&&(s=(t=Date.now())-(x||t),x=t,C.push({Name:e[0],Arguments:e.slice(1),Element:d,"Execution Time":s})),clearTimeout(R.performance.timer),R.performance.timer=setTimeout(function(){R.performance.display()},500)},display:function(){let e=f.name+":",s=0;x=!1,clearTimeout(R.performance.timer),j.each(C,function(e,t){s+=t["Execution Time"]}),e+=" "+s+"ms",1<S.length&&(e+=" ("+S.length+")"),0<C.length&&(console.groupCollapsed(e),console.table(C),console.groupEnd()),C=[]}},invoke:function(i,e=T,t=d){let n=c,r,a,s;return"string"==typeof i&&void 0!==n&&(i=i.split(/[ .]/),r=i.length-1,j.each(i,function(e,t){var s=e!==r?t+i[e+1].charAt(0).toUpperCase()+i[e+1].slice(1):i;if(j.isPlainObject(n[s])&&e!==r)n=n[s];else{if(void 0!==n[s])return a=n[s],!1;{if(!j.isPlainObject(n[t])||e===r)return void 0!==n[t]?a=n[t]:R.error(p.method,i),!1;n=n[t]}}})),D(a)?s=a.apply(t,e):void 0!==a&&(s=a),Array.isArray(k)?k.push(s):void 0!==k?k=[k,s]:void 0!==s&&(k=s),a}},w?(void 0===c&&R.initialize(),R.invoke(A)):(void 0!==c&&c.invoke("destroy"),R.initialize())}),void 0!==k?k:this},j.fn.search.settings={name:"Search",namespace:"search",silent:!1,debug:!1,verbose:!1,performance:!0,type:"standard",minCharacters:1,selectFirstResult:!1,apiSettings:!1,source:!1,searchOnFocus:!0,searchFields:["id","title","description"],displayField:"",fullTextSearch:"exact",highlightMatches:!1,ignoreDiacritics:!1,ignoreSearchCase:!0,automatic:!0,hideDelay:0,searchDelay:200,maxResults:7,cache:!0,showNoResults:!0,preserveHTML:!1,transition:"scale",duration:200,easing:"easeOutExpo",onSelect:!1,onResultsAdd:!1,onSearchQuery:function(e){},onResults:function(e,t){},onResultsOpen:function(){},onResultsClose:function(){},className:{animating:"animating",active:"active",category:"category",empty:"empty",focus:"focus",hidden:"hidden",loading:"loading",results:"results",pressed:"down"},error:{source:"Cannot search. No source used, and Fomantic API module was not included",noResultsHeader:"No Results",noResults:"Your search returned no results",noTemplate:"A valid template name was not specified.",oldSearchSyntax:"searchFullText setting has been renamed fullTextSearch for consistency, please adjust your settings.",serverError:"There was an issue querying the server.",maxResults:"Results must be an array to use maxResults setting",method:"The method you called is not defined."},metadata:{cache:"cache",results:"results",result:"result"},regExp:{escape:/[$()*+./?[\\\]^{|}-]/g,beginsWith:"(?:\\s|^)"},fields:{categories:"results",categoryName:"name",categoryResults:"results",description:"description",image:"image",alt:"alt",price:"price",results:"results",title:"title",url:"url",id:"id",class:"class",action:"action",actionText:"text",actionURL:"url"},selector:{prompt:".prompt",remove:"> .icon.input > .remove.icon",searchButton:".search.button",results:".results",message:".results > .message",category:".category",result:".result",title:".title, .name"},templates:{escape:function(e,t){if(void 0!==t&&t.preserveHTML)return e;const s={'"':""","&":"&","'":"'","<":"<",">":">"};return e=(e=String(e).replace(/["&'<>]/g,e=>s[e])).replace(/<(\/)*mark>/g,"<$1mark>")},message:function(e,t,s){let i="";return void 0!==e&&void 0!==t&&(i+='<div class="message '+t+'">',s&&(i+='<div class="header">'+s+"</div>"),i=i+' <div class="description">'+e+"</div></div>"),i},category:function(e,s){let i="",n=s.fields,r=s.templates.escape;return void 0!==e[n.categoryResults]&&(j.each(e[n.categoryResults],function(e,t){void 0!==t[n.results]&&0<t.results.length&&(i+='<div class="category">',void 0!==t[n.categoryName]&&(i+='<div class="name">'+r(t[n.categoryName],s)+"</div>"),i+='<div class="results">',j.each(t.results,function(e,t){i=(i=(i+=t[n.url]?'<a href="'+t[n.url].replaceAll('"',"")+'" ':"<div ")+(void 0!==t[n.id]?' id="'+t[n.id].replaceAll('"',"")+'" ':""))+(void 0!==t[n.class]?' class="result '+t[n.class].replaceAll('"',"")+'">':' class="result">'),void 0!==t[n.image]&&(i+='<div class="image"> <img src="'+t[n.image].replaceAll('"',"")+'"'+(t[n.alt]?' alt="'+t[n.alt].replaceAll('"',"")+'"':"")+"></div>"),i+='<div class="content">',void 0!==t[n.price]&&(i+='<div class="price">'+r(t[n.price],s)+"</div>"),void 0!==t[n.title]&&(i+='<div class="title">'+r(t[n.title],s)+"</div>"),void 0!==t[n.description]&&(i+='<div class="description">'+r(t[n.description],s)+"</div>"),i=(i+="</div>")+(t[n.url]?"</a>":"</div>")}),i+="</div></div>")}),e[n.action]&&(i+=!1===n.actionURL?'<div class="action">'+r(e[n.action][n.actionText],s)+"</div>":'<a href="'+e[n.action][n.actionURL].replaceAll('"',"")+'" class="action">'+r(e[n.action][n.actionText],s)+"</a>"),i)},standard:function(e,s){let i="",n=s.fields,r=s.templates.escape;return void 0!==e[n.results]&&(j.each(e[n.results],function(e,t){i=(i=(i+=t[n.url]?'<a href="'+t[n.url].replaceAll('"',"")+'" ':"<div ")+(void 0!==t[n.id]?'id="'+t[n.id].replaceAll('"',"")+'" ':""))+(void 0!==t[n.class]?'class="result '+t[n.class].replaceAll('"',"")+'">':'class="result">'),void 0!==t[n.image]&&(i+='<div class="image"> <img src="'+t[n.image].replaceAll('"',"")+'"'+(t[n.alt]?' alt="'+t[n.alt].replaceAll('"',"")+'"':"")+"></div>"),i+='<div class="content">',void 0!==t[n.price]&&(i+='<div class="price">'+r(t[n.price],s)+"</div>"),void 0!==t[n.title]&&(i+='<div class="title">'+r(t[n.title],s)+"</div>"),void 0!==t[n.description]&&(i+='<div class="description">'+r(t[n.description],s)+"</div>"),i=(i+="</div>")+(t[n.url]?"</a>":"</div>")}),e[n.action]&&(i+=!1===n.actionURL?'<div class="action">'+r(e[n.action][n.actionText],s)+"</div>":'<a href="'+e[n.action][n.actionURL].replaceAll('"',"")+'" class="action">'+r(e[n.action][n.actionText],s)+"</a>"),i)}}},j.extend(j.easing,{easeOutExpo:function(e){return 1===e?1:1-2**(-10*e)}})}(jQuery,window,document);
|
|
11
|
+
!function(j,F,q){"use strict";function D(e){return"function"==typeof e&&"number"!=typeof e.nodeType}F=void 0!==F&&F.Math===Math?F:globalThis,j.fn.search=function(...e){const l=j(this);let x=Date.now(),C=[];const A=e[0],w="string"==typeof A,T=e.slice(1);let k;return l.each(function(){const f=j.isPlainObject(A)?j.extend(!0,{},j.fn.search.settings,A):j.extend({},j.fn.search.settings),g=f.className,u=f.metadata,n=f.regExp,d=f.fields,h=f.selector,p=f.error;var e=f.namespace;const i="."+e,t=e+"-module",v=j(this);let m=v.find(h.prompt),s=v.find(h.searchButton),r=v.find(h.results),a=v.find(h.result),o=void v.find(h.category);const y=this;let c=v.data(t),b=!1,R=!1;const S={initialize:function(){S.verbose("Initializing module"),S.get.settings(),S.determine.searchFields(),S.bind.events(),S.set.type(),S.create.results(),S.instantiate()},instantiate:function(){S.verbose("Storing instance of module",S),c=S,v.data(t,S)},destroy:function(){S.verbose("Destroying instance"),v.off(i).removeData(t)},refresh:function(){S.debug("Refreshing selector cache"),m=v.find(h.prompt),s=v.find(h.searchButton),o=v.find(h.category),r=v.find(h.results),a=v.find(h.result)},refreshResults:function(){r=v.find(h.results),a=v.find(h.result)},bind:{events:function(){S.verbose("Binding events to search"),f.automatic&&(v.on(S.get.inputEvent()+i,h.prompt,S.event.input),m.attr("autocomplete",S.is.chrome()?"fomantic-search":"off")),v.on("focus"+i,h.prompt,S.event.focus).on("blur"+i,h.prompt,S.event.blur).on("keydown"+i,h.prompt,S.handleKeyboard).on("click"+i,h.searchButton,S.query).on("mousedown"+i,h.results,S.event.result.mousedown).on("mouseup"+i,h.results,S.event.result.mouseup).on("click"+i,h.result,S.event.result.click).on("click"+i,h.remove,S.event.remove.click)}},determine:{searchFields:function(){A&&void 0!==A.searchFields&&(f.searchFields=Array.isArray(A.searchFields)?A.searchFields:[A.searchFields])}},event:{input:function(){f.searchDelay?(clearTimeout(S.timer),S.timer=setTimeout(function(){S.is.focused()&&S.query()},f.searchDelay)):S.query()},focus:function(){S.set.focus(),f.searchOnFocus&&S.has.minimumCharacters()&&S.query(function(){S.can.show()&&S.showResults()})},blur:function(e){var t=q.activeElement===this;function s(){S.cancel.query(),S.remove.focus(),S.timer=setTimeout(function(){S.hideResults()},f.hideDelay)}t||(R=!1,S.resultsClicked?(S.debug("Determining if user action caused search to close"),v.one("click.close"+i,h.results,function(e){S.is.inMessage(e)||b?m.trigger("focus"):(b=!1,S.is.animating()||S.is.hidden()||s())})):(S.debug("Input blurred without user action, closing results"),s()))},remove:{click:function(){S.clear.value(),m.trigger("focus")}},result:{mousedown:function(){S.resultsClicked=!0},mouseup:function(){S.resultsClicked=!1},click:function(e){S.debug("Search result selected");const t=j(this),s=t.find(h.title).eq(0),n=t.is("a[href]")?t:j();var i=n.attr("href")||!1,r=n.attr("target")||!1,a=0<s.length&&s.text(),o=S.get.results(),c=t.data(u.result)||S.get.result(a,o),l=S.get.value();if(D(f.onSelect)&&!1===f.onSelect.call(y,c,o))return S.debug("Custom onSelect callback cancelled default select action"),void(b=!0);S.hideResults(),a&&S.get.value()===l&&S.set.value(a),i&&(e.preventDefault(),S.verbose("Opening search link found in result",n),"_blank"===r||e.ctrlKey?F.open(i):F.location.href=i)}}},ensureVisible:function(e){var t,s,n;0!==e.length&&(e=(t=e.position().top)+e.outerHeight(!0),s=r.scrollTop(),n=r.height(),t<0?r.scrollTop(s+t):n<e&&r.scrollTop(s+(e-n)))},handleKeyboard:function(e){const t=v.find(h.result),s=v.find(h.category);var n=t.filter("."+g.active),i=t.index(n),r=t.length,n=0<n.length,a=e.which;const o=13,c=27,l=38,u=40;let d;if(a===c&&(S.is.visible()?S.hideResults():(S.verbose("Escape key pressed, blurring search field"),m.trigger("blur")),e.stopPropagation(),R=!0),S.is.visible())if(a===o){if(S.verbose("Enter key pressed, selecting active result"),0<t.filter("."+g.active).length)return S.event.result.click.call(t.filter("."+g.active),e),e.preventDefault(),!1}else a===l&&n?(S.verbose("Up key pressed, changing active result"),d=i-1<0?i:i-1,s.removeClass(g.active),t.removeClass(g.active).eq(d).addClass(g.active).closest(s).addClass(g.active),S.ensureVisible(t.eq(d)),e.preventDefault()):a===u&&(S.verbose("Down key pressed, changing active result"),d=r<=i+1?i:i+1,s.removeClass(g.active),t.removeClass(g.active).eq(d).addClass(g.active).closest(s).addClass(g.active),S.ensureVisible(t.eq(d)),e.preventDefault());else a===o&&(S.verbose("Enter key pressed, executing query"),S.query(),S.set.buttonPressed(),m.one("keyup",S.remove.buttonFocus))},setup:{api:function(n,i){var e={debug:f.debug,on:!1,cache:f.cache,action:"search",urlData:{query:n}},t={onSuccess:function(e,t,s){S.parse.response.call(y,e,n),i(),f.apiSettings&&"function"==typeof f.apiSettings.onSuccess&&f.apiSettings.onSuccess.call(this,e,t,s)},onFailure:function(e,t,s){S.displayMessage(p.serverError),i(),f.apiSettings&&"function"==typeof f.apiSettings.onFailure&&f.apiSettings.onFailure.call(this,e,t,s)},onAbort:function(e,t,s){f.apiSettings&&"function"==typeof f.apiSettings.onAbort&&f.apiSettings.onAbort.call(this,e,t,s)},onError:function(e,t,s){S.error(),f.apiSettings&&"function"==typeof f.apiSettings.onError&&f.apiSettings.onError.call(this,e,t,s)}};j.extend(!0,e,f.apiSettings,t),S.verbose("Setting up API request",e),v.api(e)}},can:{useAPI:function(){return void 0!==j.fn.api},show:function(){return S.is.focused()&&!S.is.visible()&&!S.is.empty()},transition:function(){return f.transition&&void 0!==j.fn.transition}},is:{animating:function(){return r.hasClass(g.animating)},chrome:function(){return!!F.chrome&&!F.StyleMedia},hidden:function(){return r.hasClass(g.hidden)},inMessage:function(e){if(e.target){const t=j(e.target);return q.documentElement.contains(e.target)&&0<t.closest(h.message).length}},empty:function(){return""===r.html()},visible:function(){return 0<r.filter(":visible").length},focused:function(){return 0<m.filter(":focus").length}},get:{settings:function(){j.isPlainObject(A)&&A.searchFullText&&(f.fullTextSearch=A.searchFullText,S.error(f.error.oldSearchSyntax,y))},inputEvent:function(){var e=m[0];return void 0!==e&&void 0!==e.oninput?"input":void 0!==e&&void 0!==e.onpropertychange?"propertychange":"keyup"},value:function(){return m.val()},results:function(){return v.data(u.results)},result:function(s=S.get.value(),e=S.get.results()){let n=!1;return"category"===f.type?(S.debug("Finding result that matches",s),j.each(e,function(e,t){if(Array.isArray(t.results)&&(n=S.search.object(s,t.results)[0]))return!1})):(S.debug("Finding result in results object",s),n=S.search.object(s,e)[0]),n||!1}},select:{firstResult:function(){S.verbose("Selecting first result"),a.first().addClass(g.active)}},set:{focus:function(){v.addClass(g.focus)},loading:function(){v.addClass(g.loading)},value:function(e){S.verbose("Setting search input value",e),m.val(e)},type:function(e=f.type){g[e]&&v.addClass(g[e])},buttonPressed:function(){s.addClass(g.pressed)}},remove:{loading:function(){v.removeClass(g.loading)},focus:function(){v.removeClass(g.focus)},buttonPressed:function(){s.removeClass(g.pressed)},diacritics:function(e){return f.ignoreDiacritics?e.normalize("NFD").replace(/[\u0300-\u036F]/g,""):e}},query:function(e=function(){}){e=D(e)?e:function(){};var t=S.get.value(),s=S.read.cache(t);S.has.minimumCharacters()?(s?(S.debug("Reading result from cache",t),S.save.results(s.results),f.onResults.call(y,s.results,!0),S.addResults(s.html),S.inject.id(s.results),e()):(S.debug("Querying for",t),j.isPlainObject(f.source)||Array.isArray(f.source)?(S.search.local(t),e()):S.can.useAPI()?S.search.remote(t,e):(S.error(p.source),e())),f.onSearchQuery.call(y,t)):S.hideResults()},search:{local:function(e){let t=S.search.object(e,f.source);S.set.loading(),S.save.results(t),S.debug("Returned full local search results",t),0<f.maxResults&&(S.debug("Using specified max results",t),t=t.slice(0,f.maxResults)),"category"===f.type&&(t=S.create.categoryResults(t));var s=S.generateResults({results:t});S.remove.loading(),S.addResults(s),S.inject.id(t),S.write.cache(e,{html:s,results:t})},remote:function(e,t){t=D(t)?t:function(){},v.api("is loading")&&v.api("abort"),S.setup.api(e,t),v.api("query")},object:function(r,e=f.source,t=f.searchFields){r=S.remove.diacritics(String(r));const a=[],o=[],c=[];var s=r.replace(n.escape,"\\$&");function l(e,t){var s=!a.includes(t),n=!c.includes(t),i=!o.includes(t);s&&n&&i&&e.push(t)}const u=new RegExp(n.beginsWith+s,f.ignoreSearchCase?"i":"");if(Array.isArray(t)||(t=[t]),void 0===e||!1===e)return S.error(p.source),[];const d=t.length-1;return j.each(e,function(e,n){const i=[];j.each(t,function(t,s){if("string"==typeof n[s]||"number"==typeof n[s]){let e;if(e="string"==typeof n[s]?S.remove.diacritics(n[s]):n[s].toString(),e=j("<div/>",{html:e}).text().trim(),"all"===f.fullTextSearch){if(i.push(e),t<d)return!0;e=i.join(" ")}"all"!==f.fullTextSearch&&-1!==e.search(u)?l(a,n):"exact"===f.fullTextSearch&&S.exactSearch(r,e)||"some"===f.fullTextSearch&&S.wordSearch(r,e)||"all"===f.fullTextSearch&&S.wordSearch(r,e,!0)?l(o,n):!0===f.fullTextSearch&&S.fuzzySearch(r,e)&&l(c,n)}})}),[...a,...o,...c]}},exactSearch:function(e,t){return f.ignoreSearchCase&&(e=e.toLowerCase(),t=t.toLowerCase()),t.includes(e)},wordSearch:function(e,t,s){let n=!1;for(const i of e.split(/\s+/))if(!(n=S.exactSearch(i,t))&&s||n&&!s)break;return n},fuzzySearch:function(n,i){var r=i.length,e=n.length;if("string"!=typeof n)return!1;if(f.ignoreSearchCase&&(n=n.toLowerCase(),i=i.toLowerCase()),r<e)return!1;if(e===r)return n===i;for(let t=0,s=0;t<e;t++){let e=!1;for(var a=n.codePointAt(t);s<r;)if(i.codePointAt(s++)===a){e=!0;break}if(!e)return!1}return!0},parse:{response:function(e,t){if(Array.isArray(e)){const n={};n[d.results]=e,e=n}var s=S.generateResults(e);S.verbose("Parsing server response",e),void 0!==e&&void 0!==t&&void 0!==e[d.results]&&(S.addResults(s),S.inject.id(e[d.results]),S.write.cache(t,{html:s,results:e[d.results]}),S.save.results(e[d.results]))}},cancel:{query:function(){S.can.useAPI()&&v.api("abort")}},has:{minimumCharacters:function(){return S.get.value().length>=f.minCharacters},results:function(){return 0!==r.length&&""!==r.html()}},clear:{cache:function(e){const t=v.data(u.cache);e?t&&t[e]&&(S.debug("Removing value from cache",e),delete t[e],v.data(u.cache,t)):(S.debug("Clearing cache",e),v.removeData(u.cache))},value:function(){S.set.value("")}},read:{cache:function(e){var t=v.data(u.cache);return!!f.cache&&(S.verbose("Checking cache for generated html for query",e),"object"==typeof t&&void 0!==t[e]&&t[e])}},create:{categoryResults:function(e){const s={};return j.each(e,function(e,t){t.category&&(void 0===s[t.category]?(S.verbose("Creating new category of results",t.category),s[t.category]={name:t.category,results:[t]}):s[t.category].results.push(t))}),s},id:function(e,t){e+=1;let s;return void 0!==t?(t=String.fromCodePoint(97+t),s=t+e,S.verbose("Creating category result id",s)):(s=e,S.verbose("Creating result id",s)),s},results:function(){0===r.length&&(r=j("<div />").addClass(g.results).appendTo(v))}},inject:{result:function(e,t,s){S.verbose("Injecting result into results");const n=(void 0!==s?r.children().eq(s).children(h.results).first():r).children(h.result).eq(t);S.verbose("Injecting results metadata",n),n.data(u.result,e)},id:function(e){S.debug("Injecting unique ids into results");let s=0,n=0;return"category"===f.type?j.each(e,function(e,t){0<t.results.length&&(n=0,j.each(t.results,function(e,t){void 0===t.id&&(t.id=S.create.id(n,s)),S.inject.result(t,n,s),n++}),s++)}):j.each(e,function(e,t){void 0===t.id&&(t.id=S.create.id(n)),S.inject.result(t,n),n++}),e}},save:{results:function(e){S.verbose("Saving current search results to metadata",e),v.data(u.results,e)}},write:{cache:function(e,t){const s=void 0!==v.data(u.cache)?v.data(u.cache):{};f.cache&&(S.verbose("Writing generated html to cache",e,t),s[e]=t,v.data(u.cache,s))}},addResults:function(e){if(D(f.onResultsAdd)&&!1===f.onResultsAdd.call(r,e))return S.debug("onResultsAdd callback cancelled default action"),!1;e?(r.html(e),S.refreshResults(),f.selectFirstResult&&S.select.firstResult(),S.showResults()):S.hideResults(function(){r.empty()})},showResults:function(e){e=D(e)?e:function(){},R||!S.is.visible()&&S.has.results()&&(S.can.transition()?(S.debug("Showing results with css animations"),r.transition({animation:f.transition+" in",debug:f.debug,verbose:f.verbose,silent:f.silent,duration:f.duration,onShow:function(){var e=v.find(h.result).eq(0);S.ensureVisible(e)},onComplete:function(){e()},queue:!0})):(S.debug("Showing results with javascript"),r.stop().fadeIn(f.duration,f.easing)),f.onResultsOpen.call(r))},hideResults:function(e){e=D(e)?e:function(){},S.is.visible()&&(S.can.transition()?(S.debug("Hiding results with css animations"),r.transition({animation:f.transition+" out",debug:f.debug,verbose:f.verbose,silent:f.silent,duration:f.duration,onComplete:function(){e()},queue:!0})):(S.debug("Hiding results with javascript"),r.stop().fadeOut(f.duration,f.easing)),f.onResultsClose.call(r))},generateResults:function(i){S.debug("Generating html from response",i);const e=f.templates[f.type];var t=j.isPlainObject(i[d.results])&&!j.isEmptyObject(i[d.results]),s=Array.isArray(i[d.results])&&0<i[d.results].length;let n="";if(t||s){if(0<f.maxResults&&(t?"standard"===f.type&&S.error(p.maxResults):i[d.results]=i[d.results].slice(0,f.maxResults)),f.highlightMatches){s=i[d.results],t=f.ignoreSearchCase?"i":"";const o=[...S.get.value()];var r=f.ignoreDiacritics?"[̀-ͯ]?":"",a="(?![^<]*>)";const c=new RegExp(a+"("+o.join(r+")(.*?)"+a+"(")+r+")",t),l=function(...e){return(e=e.slice(1,2*o.length).map(function(e,t){return 1&t?e:"<mark>"+e+"</mark>"})).join("")};j.each(s,function(s,n){j.each(f.searchFields,function(e,t){if("string"==typeof n[t]||"number"==typeof n[t]){let e="string"==typeof n[t]?n[t]:n[t].toString();e=(e=f.ignoreDiacritics?e.normalize("NFD"):e).replace(/<\/?mark>/g,""),i[d.results][s][t]=e.replace(c,l)}})})}D(e)?n=e(i,f):S.error(p.noTemplate,!1)}else f.showNoResults&&(n=S.displayMessage(p.noResults,"empty",p.noResultsHeader));return f.onResults.call(y,i),n},displayMessage:function(e,t="standard",s=!1){return S.debug("Displaying message",e,t,s),S.addResults(f.templates.message(e,t,s)),f.templates.message(e,t,s)},setting:function(e,t){if(j.isPlainObject(e))j.extend(!0,f,e);else{if(void 0===t)return f[e];f[e]=t}},internal:function(e,t){if(j.isPlainObject(e))j.extend(!0,S,e);else{if(void 0===t)return S[e];S[e]=t}},debug:function(...e){!f.silent&&f.debug&&(f.performance?S.performance.log(e):(S.debug=Function.prototype.bind.call(console.info,console,f.name+":"),S.debug.apply(console,e)))},verbose:function(...e){!f.silent&&f.verbose&&f.debug&&(f.performance?S.performance.log(e):(S.verbose=Function.prototype.bind.call(console.info,console,f.name+":"),S.verbose.apply(console,e)))},error:function(...e){f.silent||(S.error=Function.prototype.bind.call(console.error,console,f.name+":"),S.error.apply(console,e))},performance:{log:function(e){var t,s;f.performance&&(s=(t=Date.now())-(x||t),x=t,C.push({Name:e[0],Arguments:e.slice(1),Element:y,"Execution Time":s})),clearTimeout(S.performance.timer),S.performance.timer=setTimeout(function(){S.performance.display()},500)},display:function(){let e=f.name+":",s=0;x=!1,clearTimeout(S.performance.timer),j.each(C,function(e,t){s+=t["Execution Time"]}),e+=" "+s+"ms",1<l.length&&(e+=" ("+l.length+")"),0<C.length&&(console.groupCollapsed(e),console.table(C),console.groupEnd()),C=[]}},invoke:function(n,e=T,t=y){let i=c,r,a,s;return"string"==typeof n&&void 0!==i&&(n=n.split(/[ .]/),r=n.length-1,j.each(n,function(e,t){var s=e!==r?t+n[e+1].charAt(0).toUpperCase()+n[e+1].slice(1):n;if(j.isPlainObject(i[s])&&e!==r)i=i[s];else{if(void 0!==i[s])return a=i[s],!1;{if(!j.isPlainObject(i[t])||e===r)return void 0!==i[t]?a=i[t]:S.error(p.method,n),!1;i=i[t]}}})),D(a)?s=a.apply(t,e):void 0!==a&&(s=a),Array.isArray(k)?k.push(s):void 0!==k?k=[k,s]:void 0!==s&&(k=s),a}};w?(void 0===c&&S.initialize(),S.invoke(A)):(void 0!==c&&c.invoke("destroy"),S.initialize())}),void 0!==k?k:this},j.fn.search.settings={name:"Search",namespace:"search",silent:!1,debug:!1,verbose:!1,performance:!0,type:"standard",minCharacters:1,selectFirstResult:!1,apiSettings:!1,source:!1,searchOnFocus:!0,searchFields:["id","title","description"],displayField:"",fullTextSearch:"exact",highlightMatches:!1,ignoreDiacritics:!1,ignoreSearchCase:!0,automatic:!0,hideDelay:0,searchDelay:200,maxResults:7,cache:!0,showNoResults:!0,preserveHTML:!1,transition:"scale",duration:200,easing:"easeOutExpo",onSelect:!1,onResultsAdd:!1,onSearchQuery:function(e){},onResults:function(e,t){},onResultsOpen:function(){},onResultsClose:function(){},className:{animating:"animating",active:"active",category:"category",empty:"empty",focus:"focus",hidden:"hidden",loading:"loading",results:"results",pressed:"down"},error:{source:"Cannot search. No source used, and Fomantic API module was not included",noResultsHeader:"No Results",noResults:"Your search returned no results",noTemplate:"A valid template name was not specified.",oldSearchSyntax:"searchFullText setting has been renamed fullTextSearch for consistency, please adjust your settings.",serverError:"There was an issue querying the server.",maxResults:"Results must be an array to use maxResults setting",method:"The method you called is not defined."},metadata:{cache:"cache",results:"results",result:"result"},regExp:{escape:/[$()*+./?[\\\]^{|}-]/g,beginsWith:"(?:\\s|^)"},fields:{categories:"results",categoryName:"name",categoryResults:"results",description:"description",image:"image",alt:"alt",price:"price",results:"results",title:"title",url:"url",id:"id",class:"class",action:"action",actionText:"text",actionURL:"url"},selector:{prompt:".prompt",remove:"> .icon.input > .remove.icon",searchButton:".search.button",results:".results",message:".results > .message",category:".category",result:".result",title:".title, .name"},templates:{escape:function(e,t){if(void 0!==t&&t.preserveHTML)return e;const s={'"':""","&":"&","'":"'","<":"<",">":">"};return e=(e=String(e).replace(/["&'<>]/g,e=>s[e])).replace(/<(\/)*mark>/g,"<$1mark>")},message:function(e,t,s){let n="";return void 0!==e&&void 0!==t&&(n+='<div class="message '+t+'">',s&&(n+='<div class="header">'+s+"</div>"),n=n+' <div class="description">'+e+"</div></div>"),n},category:function(e,s){let n="";const i=s.fields,r=s.templates.escape;return void 0!==e[i.categoryResults]&&(j.each(e[i.categoryResults],function(e,t){void 0!==t[i.results]&&0<t.results.length&&(n+='<div class="category">',void 0!==t[i.categoryName]&&(n+='<div class="name">'+r(t[i.categoryName],s)+"</div>"),n+='<div class="results">',j.each(t.results,function(e,t){n=(n=(n+=t[i.url]?'<a href="'+t[i.url].replaceAll('"',"")+'" ':"<div ")+(void 0!==t[i.id]?' id="'+t[i.id].replaceAll('"',"")+'" ':""))+(void 0!==t[i.class]?' class="result '+t[i.class].replaceAll('"',"")+'">':' class="result">'),void 0!==t[i.image]&&(n+='<div class="image"> <img src="'+t[i.image].replaceAll('"',"")+'"'+(t[i.alt]?' alt="'+t[i.alt].replaceAll('"',"")+'"':"")+"></div>"),n+='<div class="content">',void 0!==t[i.price]&&(n+='<div class="price">'+r(t[i.price],s)+"</div>"),void 0!==t[i.title]&&(n+='<div class="title">'+r(t[i.title],s)+"</div>"),void 0!==t[i.description]&&(n+='<div class="description">'+r(t[i.description],s)+"</div>"),n=(n+="</div>")+(t[i.url]?"</a>":"</div>")}),n+="</div></div>")}),e[i.action]&&(n+=!1===i.actionURL?'<div class="action">'+r(e[i.action][i.actionText],s)+"</div>":'<a href="'+e[i.action][i.actionURL].replaceAll('"',"")+'" class="action">'+r(e[i.action][i.actionText],s)+"</a>"),n)},standard:function(e,s){let n="";const i=s.fields,r=s.templates.escape;return void 0!==e[i.results]&&(j.each(e[i.results],function(e,t){n=(n=(n+=t[i.url]?'<a href="'+t[i.url].replaceAll('"',"")+'" ':"<div ")+(void 0!==t[i.id]?'id="'+t[i.id].replaceAll('"',"")+'" ':""))+(void 0!==t[i.class]?'class="result '+t[i.class].replaceAll('"',"")+'">':'class="result">'),void 0!==t[i.image]&&(n+='<div class="image"> <img src="'+t[i.image].replaceAll('"',"")+'"'+(t[i.alt]?' alt="'+t[i.alt].replaceAll('"',"")+'"':"")+"></div>"),n+='<div class="content">',void 0!==t[i.price]&&(n+='<div class="price">'+r(t[i.price],s)+"</div>"),void 0!==t[i.title]&&(n+='<div class="title">'+r(t[i.title],s)+"</div>"),void 0!==t[i.description]&&(n+='<div class="description">'+r(t[i.description],s)+"</div>"),n=(n+="</div>")+(t[i.url]?"</a>":"</div>")}),e[i.action]&&(n+=!1===i.actionURL?'<div class="action">'+r(e[i.action][i.actionText],s)+"</div>":'<a href="'+e[i.action][i.actionURL].replaceAll('"',"")+'" class="action">'+r(e[i.action][i.actionText],s)+"</a>"),n)}}},j.extend(j.easing,{easeOutExpo:function(e){return 1===e?1:1-2**(-10*e)}})}(jQuery,window,document);
|