PageSourceSearch

https://www.carpetonesumner.com/root/assets/js/gnix.search.helper.js

js carpetonesumner.com collected 2026-10-04 01:13:45 UTC 2,874 bytes, 116 lines download raw bytes

1(function (window) {
2	var helpers = window.SearchHelpers || (window.SearchHelpers = {});
3
4	helpers.getFullImageUrl = function (imageUrl, catalogImageBaseUrl) {
5		if (!imageUrl) {
6			return '';
7		}
8
9		var lowerUrl = imageUrl.toLowerCase();
10		if (lowerUrl.indexOf('http://') === 0 || lowerUrl.indexOf('https://') === 0) {
11			return imageUrl;
12		}
13
14		var cleanPath = imageUrl.indexOf('/') === 0 ? imageUrl.substring(1) : imageUrl;
15		return catalogImageBaseUrl + '/' + cleanPath;
16	};
17
18	helpers.escapeHtml = function (text) {
19		if (!text) {
20			return '';
21		}
22		var map = {
23			'&': '&',
24			'<': '&lt;',
25			'>': '&gt;',
26			'"': '&quot;',
27			"'": '&#039;'
28		};
29		return text.replace(/[&<>"']/g, function (m) { return map[m]; });
30	};
31
32	helpers.normalizeQuery = function (query, maxLength) {
33		if (!query) {
34			return '';
35		}
36
37		var max = maxLength || 255;
38		if (query.length > max) {
39			return query.substring(0, max);
40		}
41
42		return query;
43	};
44
45	helpers.buildSkuUrl = function (productUrl, sku) {
46		if (!productUrl || !sku) {
47			return productUrl || '#';
48		}
49		var lastSlashIndex = productUrl.lastIndexOf('/');
50		if (lastSlashIndex === -1) {
51			return productUrl;
52		}
53		return productUrl.substring(0, lastSlashIndex + 1) + encodeURIComponent(sku);
54	};
55
56	helpers.addColorQueryParam = function (productUrl, colorName) {
57		if (!productUrl || !colorName) {
58			return productUrl;
59		}
60
61		var colorValue = colorName.toLowerCase();
62		var urlParts = productUrl.split('#');
63		var baseUrl = urlParts[0];
64		var hash = urlParts.length > 1 ? '#' + urlParts[1] : '';
65		var colorRegex = /([?&])color=[^&]*/i;
66
67		if (colorRegex.test(baseUrl)) {
68			return baseUrl.replace(colorRegex, '$1color=' + encodeURIComponent(colorValue)) + hash;
69		}
70
71		var separator = baseUrl.indexOf('?') === -1 ? '?' : '&';
72		return baseUrl + separator + 'color=' + encodeURIComponent(colorValue) + hash;
73	};
74
75	helpers.getPreferredSkuForQuery = function (productData, query, maxTerms) {
76		if (!productData || !productData.skus || productData.skus.length === 0) {
77			return null;
78		}
79
80		var terms = (query || '')
81			.toLowerCase()
82			.split(/\s+/)
83			.filter(function (term) { return term && term.length >= 3; });
84
85		var max = maxTerms || 5;
86		terms = terms.slice(0, max);
87		if (terms.length === 0) {
88			return null;
89		}
90
91		var bestSku = null;
92		var bestScore = 0;
93
94		for (var i = 0; i < productData.skus.length; i++) {
95			var sku = productData.skus[i];
96			if (!sku || !sku.color || !sku.imageUrl) {
97				continue;
98			}
99
100			var colorText = sku.color.toLowerCase();
101			var hits = 0;
102			for (var t = 0; t < terms.length; t++) {
103				if (colorText.indexOf(terms[t]) !== -1) {
104					hits++;
105				}
106			}
107
108			if (hits > bestScore) {
109				bestScore = hits;
110				bestSku = sku;
111			}
112		}
113
114		return bestSku;
115	};
116})(window);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.