PageSourceSearch

https://u-szeged.hu/js/aitia/aitia_util.js?ts=1404747694

js u-szeged.hu collected 2026-09-24 08:36:42 UTC 6,585 bytes, 310 lines download raw bytes

1/**
2 * Általános (böngészőfüggetlen) segédfüggvények
3 */
4
5// Függőségek
6if ("undefined" == typeof AITIA) {
7	alert("AITIA include missing!");
8}
9
10// Többszörös include
11if ("undefined" != typeof AITIA_UTIL) {
12	 alert("AITIA_UTIL multiple insert!");
13}
14
15AITIA_UTIL = 1;
16
17Aitia.Util = {};
18
19Aitia.Util.lastDropped = {};
20
21Aitia.Util.dragging = false;
22
23Aitia.Util.treeDrags = new Array();
24
25Aitia.Util.treeDrops = new Array();
26
27Aitia.Util.treePerms = {};
28
29Aitia.Util.timers = {};
30
31/**
32 * Decimális számot hexadecimálisra alakít
33 */
34Aitia.Util.dec2Hex = function(num) {
35	var chars = '0123456789ABCDEF';
36	if (num > 255) return 'FF';
37	return chars.charAt(parseInt(num/16))+chars.charAt(num%16);
38} // dec2Hex
39
40
41/**
42 * Balról kiegészíti a számot 0-al
43 * @todo: általánosabbra alakítható
44 */
45Aitia.Util.digit2 = function(num) {
46	if (num < 10) {
47		return "0"+num;
48	}
49	return num;
50} // digit2
51
52
53/**
54 * Rendezés - Lehetne parametertől függő rendezés is (factory)
55 *  cmpFunc(a,b): -1 a < b, 0 a = b, 1 a > b
56 */
57Aitia.Util.sort = function(arr,cmpFunc) {
58	this.quicksort(arr, 0, arr.length - 1, cmpFunc);
59} // sort
60
61
62/**
63 * Rendezés - quicksort implementáció
64 */
65Aitia.Util.quicksort = function(arr,a,b,cmpFunc) {
66	var left, right;
67	var ref, w;
68	var i;
69
70	left = a; right = b;
71
72	ref = arr[parseInt((a+b)/2)];
73
74	while(left <= right) { // csökkenő sorrendben
75		// Van komperáló függvény
76		if (cmpFunc) {
77			while (cmpFunc(arr[left],ref) == 1) { ++left; } // arr[left] > ref
78			while (cmpFunc(arr[right],ref) == -1) { --right; } // arr[right] < ref
79		}
80		// Nincs
81		else {
82			while (arr[left] > ref) { ++left; }
83			while (arr[right] < ref) { --right; }
84		}
85	
86		if (left <= right) { // elemek cseréje
87			if (left != right) { //ha egyenlő, akkor nem cserél
88				w = arr[left];
89				arr[left] = arr[right];
90				arr[right] = w;
91			}
92			++left;
93			--right;
94		}
95	}
96	if (a < right) {
97		this.quicksort(arr, a, right, cmpFunc);
98	}
99	if (left < b) {
100		this.quicksort(arr, left, b, cmpFunc);
101	}
102} // quicksort
103
104
105/**
106 * Selection megszüntetése
107 */
108Aitia.Util.removeSelection = function() {
109	if (document.selection) {
110		try {
111			document.selection.empty();
112		} catch(e) {}
113	} else if (window.getSelection) {
114		window.getSelection().removeAllRanges();
115	} else {
116		try {
117			document.createElement("input").focus();
118		} catch(e) {}
119	}
120} // removeSelection
121
122
123Aitia.Util.timer = function(fn, id, time) {
124	if(this.timers[id]) {
125		clearTimeout(this.timers[id]);
126		this.timers[id] = null;
127	}
128	this.timers[id] = setTimeout(fn, time);
129}
130
131
132
133function arab2rom(number) {
134	ones     = new Array('', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX');
135	decades  = new Array('', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC');
136	hundreds = new Array('', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM');
137	tousands = new Array('', 'M', 'MM', 'MMM');
138	all = new Array(ones, decades, hundreds, tousands);
139	if (number > 3999) {
140		//alert('The number is greater than 3999!');
141		return '<ERROR>';
142	}
143	if (number < 1) {
144		//alert('The number is not positive!');
145		return '<ERROR>';
146	}
147
148	numstr = number.toString();
149	len = numstr.length;
150	romanstr = '';
151	// generation
152	for (i = 0; i < len; i++) {
153		romanstr += all[len - i - 1][numstr.charAt(i)];
154	}
155
156	return romanstr;
157}
158
159
160function rom2arab(romanstr) {
161	invalid_number_err = 'The string is not a valid roman numeral!';
162	//err = 'ERR';
163	err = null;
164
165	// maximal characters for a class, e.g. DCCC, XXXV, VIII
166	// tousands, hundreds, decades, ones
167	max = new Array(3, 4, 4, 4);
168	// can a class contain more characters or there must follow
169	// next class, i.e. after XC can follow only ones (V, I)
170	can_more = new Array(true, true, true, true);
171	simple = new Array(false, false, false, false);
172	// class chars counter: tousands, hundreds, decades, ones
173	counter = new Array(0, 0, 0, 0);
174
175	romanstr = romanstr.toUpperCase();
176	len = romanstr.length;
177	arab = 0;
178	for (i = 0; i < len; i++) {
179		switch (romanstr.charAt(i)) {
180		case 'M':
181			if ( ++counter[0] > max[0] || !can_more[0] ) {
182				//alert(invalid_number_err);
183				return err;
184			}
185			arab += 1000;
186			break;
187		case 'D':
188			can_more[0] = false;
189			if ( ++counter[1] > max[1] || !can_more[1] || simple[1] ) {
190				//alert(invalid_number_err);
191				return err;
192			}
193			switch (romanstr.charAt(i+1)) {
194			case 'M':
195				//alert(invalid_number_err);
196				return err;
197			default:
198				arab += 500;
199				simple[1] = true;
200			}
201			break;
202		case 'C':
203			can_more[0] = false;
204			if ( ++counter[1] > max[1] || !can_more[1] || simple[2] ) {
205				//alert(invalid_number_err);
206				return err;
207			}
208			switch (romanstr.charAt(i+1)) {
209			case 'M':
210				arab += 900;
211				i++;
212				can_more[1] = false;
213				break;
214			case 'D':
215				arab += 400;
216				i++;
217				can_more[1] = false;
218				break;
219			default:
220				arab += 100;
221				simple[1] = true;
222			}
223			break;
224		case 'L':
225			current = 2;
226			if ( ++counter[2] > max[2] || !can_more[2] || simple[2]) {
227				//alert(invalid_number_err);
228				return err;
229			}
230			switch (romanstr.charAt(i+1)) {
231			case 'M': case 'D': case 'C':
232				//alert(invalid_number_err);
233				return err;
234			default:
235				arab += 50;
236				simple[2] = true;
237			}
238			break;
239		case 'X':
240			current = 2;
241			if ( ++counter[2] > max[2] || !can_more[2] || simple[3] ) {
242				//alert(invalid_number_err);
243				return err;
244			}
245			switch (romanstr.charAt(i+1)) {
246			case 'M': case 'D':
247				//alert(invalid_number_err);
248				return err;
249			case 'C':
250				arab += 90;
251				i++;
252				can_more[2] = false;
253				break;
254			case 'L':
255				arab += 40;
256				i++;
257				can_more[2] = false;
258				break;
259			default:
260				arab += 10;
261				simple[2] = true;
262			}
263			break;
264		case 'V':
265			current = 3;
266			if ( ++counter[3] > max[3] || !can_more[3] || simple[3]) {
267				//alert(invalid_number_err);
268				return err;
269			}
270			switch (romanstr.charAt(i+1)) {
271			case 'M': case 'D': case 'C': case 'L': case 'X':
272				//alert(invalid_number_err);
273				return err;
274			default:
275				arab += 5;
276				simple[3] = true;
277			}
278			break;
279		case 'I':
280			current = 3;
281			if ( ++counter[3] > max[3] || !can_more[3] ) {
282				//alert(invalid_number_err);
283				return err;
284			}
285			switch (romanstr.charAt(i+1)) {
286			case 'M': case 'D': case 'C': case 'L':
287				//alert(invalid_number_err);
288				return err;
289			case 'X':
290				arab += 9;
291				i++;
292				can_more[3] = false;
293				break;
294			case 'V':
295				arab += 4;
296				i++;
297				can_more[3] = false;
298				break;
299			default:
300				arab += 1;
301				simple[3] = true;
302			}
303			break;
304		default:
305			//alert(invalid_number_err);
306			return err;
307		} // end switch (romanstr.charAt(i))
308	} // end for (i = 0; i < len; i++)
309	return arab;
310}

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.