PageSourceSearch

https://app.nefiks.si/angular/scripts/factory/LinkManager.js?v=20201107

js nefiks.si collected 2026-10-01 13:06:16 UTC 5,569 bytes, 191 lines download raw bytes

1angular.module('nefiksApp')
2	.factory('LinkManager', function ($location) {
3		var LinkManager = function() {
4			var _checkParamValue = function(paramName, paramValue, allowedValues) {
5				if(!allowedValues || (!!allowedValues[paramName] && allowedValues[paramName].length) == 0 || !paramValue) return paramValue; //No limitations
6				
7				for(var i=0; i<allowedValues[paramName].length; i++) {
8					if(allowedValues[paramName][i] == paramValue) { //Value found
9						return paramValue;
10					}
11				}
12				return allowedValues[paramName][0]; //Return default one
13			};
14			
15			/**
16			 * Parses current hash into object.
17			 * @param nonNamedParam If not empty and first parameter is not in key=value form, then this is the name of first parameter.
18			 * @param allowedValues allowed values for keys (if key is not present then there are no limitations).
19			 */
20			this.parseHash = function(nonNamedParam, allowedValues) {
21				var hash = $location.hash();
22				var params = {};
23				if(!!hash) {
24					var spl = hash.split('&');
25					for(var i=0; i<spl.length; i++) {
26						if(spl[i].trim().length == 0) {
27							continue;
28						}
29						
30						var kv = spl[i].split('=');
31						if(i==0 && kv.length==1 && !!nonNamedParam) { //This is non named parameter
32							params[nonNamedParam] = _checkParamValue(nonNamedParam, kv[0], allowedValues);
33						} else if(kv.length == 2) {
34							params[kv[0]] = _checkParamValue(kv[0], kv[1], allowedValues);
35						}
36					}
37				}
38				return params;
39			};
40			
41			/**
42			 * Sets hash from given params.
43			 * @param nonNamedParam If not empty, this param is the first one after hash nad name is not used.
44			 * @param keepCurrent If true current hash is kept, it is extended with new params
45			 */
46			this.setHash = function(nonNamedParam, params, keepCurrent) {
47				var hash = '';
48				if(!params) {
49					if(!keepCurrent) {
50						$location.hash('');
51					}
52					return;						
53				}
54				
55				var hparam = params;
56				if(!!keepCurrent) {
57					var chp = this.parseHash(nonNamedParam, null);
58					for(var key in chp) {
59						if(!hparam[key]) {
60							hparam[key] = chp[key];
61						}
62					}
63				}
64				
65				if(!!nonNamedParam && !!hparam[nonNamedParam]) {
66					hash += hparam[nonNamedParam];
67				}
68				for(var key in hparam) {
69					if(key == nonNamedParam || !hparam[key]) {
70						continue;
71					}
72					if(hash.length > 0) hash += '&';
73					
74					hash += key + '=' + hparam[key];
75				}
76				$location.hash(hash);
77			};
78			
79			/**
80			 * Sets single value in hash. All other values are kept
81			 */
82			this.setSingleHashValue = function(paramName, paramValue) {
83				var hash = $location.hash();
84				var newHash = '';
85				var paramFound = false;
86				if(!!hash) {
87					var spl = hash.split('&');
88					for(var i=0; i<spl.length; i++) {
89						if(spl[i].trim().length == 0) {
90							continue;
91						}
92						
93						var kv = spl[i].split('=');
94						if(i==0 && kv.length==1) { //This is non named parameter
95							newHash += kv[0];
96						} else if(kv.length == 2) {
97							if(newHash.length > 0) {
98								newHash += '&';
99							}
100							if(paramName == kv[0]) {
101								if(!!paramValue) {
102									newHash += paramName + '=' + paramValue;
103								}
104								paramFound = true;
105							} else {
106								newHash += kv[0] + '=' + kv[1];
107							}
108						}
109					}
110				} 
111				
112				if(!paramFound && !!paramValue) {
113					if(newHash.length > 0) {
114						newHash += '&';
115					}
116					newHash += paramName + '=' + paramValue;
117				}
118				if(newHash.endsWith('&')) {
119					newHash = newHash.substring(0, newHash.length-1);
120				}
121				$location.hash(newHash);
122			};
123			
124			this.setPathAndHashFromFullLink = function(fullLink) {
125				if(!fullLink) return;
126				
127				var hind = fullLink.indexOf('#');
128				$location.path(hind>=0?fullLink.substring(0, hind):fullLink);
129				$location.hash(hind>=0?fullLink.substring(hind+1):'');
130			}
131			
132			/**
133			 * Returns CommonQueryParams containing common api params (page and sort params) extracted from current hash.<br/>
134			 * If any param is not contained in hash, it is filled with given default values.<br/>
135			 * If no default values are given, base default values for page(=1) and s
135ort direction (desc) are used.
136			 */
137			this.getCommonApiParamsFromHash = function(defSort, otherParams) {
138				var hp = this.parseHash();
139				
140				var defSortBy, defSortAsc;
141				if(!!defSort) {
142					defSortBy = !!defSort?defSort.by:null;
143					defSortAsc = !!defSort?defSort.asc:null;
144				}
145				
146				var cp = {
147					page: hp.page,
148					sort: {
149						by: hp.sort || defSortBy,
150						asc: hp.asc || defSortAsc
151					}
152				};
153				
154				var cqp = new CommonQueryParams(cp);
155				
156				if(!!otherParams) {
157					for(var i=0; i<otherParams.length; i++) {
158						if(!!hp[otherParams[i]]) {
159							cqp.other[otherParams[i]] = hp[otherParams[i]];
160						}
161					}
162				}
163				
164				return cqp;
165			};
166			
167			/**
168			 * Sets hash params from given api params (page and sort).
169			 * @param whatToSet Which values should be set (if null, all values are set): page and sort.
170			 */
171			this.setHashFromCommonApiParams = function(params, whatToSet) {
172				var setPage = !!params.page && (whatToSet==null || !!whatToSet.page);
173				var setSort = !!params.sort && (whatToSet==null || !!whatToSet.sort);
174				
175				if(setPage) {
176					this.setSingleHashValue('page', params.page);
177				}
178				if(setSort) {
179					this.setSingleHashValue('sby', params.sort.by);
180					this.setSingleHashValue('sasc', !!params.sort.asc);
181				}
182				if(!!params.other) {
183					for(var key in params.other) {
184						this.setSingleHashValue(key, params.other[key]);
185					}
186				}
187			};
188		};
189	
190		return new LinkManager();
191	});

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.