|
0
|
1 |
_changeIds = function(elt, suffix) { |
|
|
2 |
if (elt.id) |
|
|
3 |
elt.id = elt.id + suffix ; |
|
|
4 |
var c = elt.firstChild ; |
|
|
5 |
while (c != null) { |
|
|
6 |
_changeIds(c, suffix) ; |
|
|
7 |
c = c.nextSibling ; |
|
|
8 |
} |
|
|
9 |
} ; |
|
|
10 |
|
|
|
11 |
suffix = 0 ; |
|
|
12 |
domDuplicate = function(elt) { |
|
|
13 |
var newElt = elt.cloneNode(true) ; |
|
|
14 |
suffix++ ; |
|
|
15 |
_changeIds(newElt, '-'+suffix) ; |
|
|
16 |
return newElt ; |
|
|
17 |
} ; |
|
|
18 |
|
|
|
19 |
getDuplicated = function(elt) { |
|
|
20 |
return document.getElementById(elt.id + '-' + suffix) ; |
|
|
21 |
} ; |
|
|
22 |
|
|
|
23 |
logSel = function(selection) { |
|
|
24 |
log('text :' + selection['text'] + ', start id : ' + selection['start']['elt'].id + ' , start offset : ' + selection['start']['offset'] + ' , end id : ' + selection['end']['elt'].id + 'end offset : ' + selection['end']['offset']) ; |
|
|
25 |
} ; |
|
|
26 |
|
|
|
27 |
log = function (msg) { |
|
|
28 |
var log = document.getElementById("log") ; |
|
|
29 |
log.innerHTML = log.innerHTML + "<li>" + msg + "</li>" ; |
|
|
30 |
} ; |
|
|
31 |
|
|
|
32 |
// from ext |
|
|
33 |
urlEncode = function(o){ |
|
|
34 |
if(!o){ |
|
|
35 |
return ""; |
|
|
36 |
} |
|
|
37 |
var buf = []; |
|
|
38 |
for(var key in o){ |
|
|
39 |
var ov = o[key], k = encodeURIComponent(key); |
|
|
40 |
var type = typeof ov; |
|
|
41 |
if(type == 'undefined'){ |
|
|
42 |
buf.push(k, "=&"); |
|
|
43 |
}else if(type != "function" && type != "object"){ |
|
|
44 |
buf.push(k, "=", encodeURIComponent(ov), "&"); |
|
|
45 |
}else if(CY.Lang.isArray(ov)){ |
|
|
46 |
if (ov.length) { |
|
|
47 |
for(var i = 0, len = ov.length; i < len; i++) { |
|
|
48 |
buf.push(k, "=", encodeURIComponent(ov[i] === undefined ? '' : ov[i]), "&"); |
|
|
49 |
} |
|
|
50 |
} else { |
|
|
51 |
buf.push(k, "=&"); |
|
|
52 |
} |
|
|
53 |
} |
|
|
54 |
} |
|
|
55 |
buf.pop(); |
|
|
56 |
return buf.join(""); |
|
|
57 |
}; |
|
|
58 |
|
|
|
59 |
//from ext |
|
|
60 |
/** |
|
|
61 |
* Takes an encoded URL and and converts it to an object. e.g. Ext.urlDecode("foo=1&bar=2"); would return {foo: 1, bar: 2} or Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", true); would return {foo: 1, bar: [2, 3, 4]}. |
|
|
62 |
* @param {String} string |
|
|
63 |
* @param {Boolean} overwrite (optional) Items of the same name will overwrite previous values instead of creating an an array (Defaults to false). |
|
|
64 |
* @return {Object} A literal with members |
|
|
65 |
*/ |
|
|
66 |
urlDecode = function(string, overwrite){ |
|
|
67 |
if(!string || !string.length){ |
|
|
68 |
return {}; |
|
|
69 |
} |
|
|
70 |
var obj = {}; |
|
|
71 |
var pairs = string.split('&'); |
|
|
72 |
var pair, name, value; |
|
|
73 |
for(var i = 0, len = pairs.length; i < len; i++){ |
|
|
74 |
pair = pairs[i].split('='); |
|
|
75 |
name = decodeURIComponent(pair[0]); |
|
|
76 |
value = decodeURIComponent(pair[1]); |
|
|
77 |
if(overwrite !== true){ |
|
|
78 |
if(typeof obj[name] == "undefined"){ |
|
|
79 |
obj[name] = value; |
|
|
80 |
}else if(typeof obj[name] == "string"){ |
|
|
81 |
obj[name] = [obj[name]]; |
|
|
82 |
obj[name].push(value); |
|
|
83 |
}else{ |
|
|
84 |
obj[name].push(value); |
|
|
85 |
} |
|
|
86 |
}else{ |
|
|
87 |
obj[name] = value; |
|
|
88 |
} |
|
|
89 |
} |
|
|
90 |
return obj; |
|
|
91 |
}; |
|
|
92 |
|
|
|
93 |
|
|
|
94 |
areSortedArraysEqual = function (a1, a2) { |
|
|
95 |
if (a1.length != a2.length) |
|
|
96 |
return false ; |
|
|
97 |
for (var i = 0, ilen = a1.length ; i < ilen ; i++) { |
|
|
98 |
if (a1[i] != a2[i]) |
|
|
99 |
return false ; |
|
|
100 |
} |
|
|
101 |
return true |
|
|
102 |
} ; |
|
|
103 |
|
|
|
104 |
// in place ordering! |
|
|
105 |
quicksort = function (vec) { |
|
|
106 |
_quicksort(vec, 0, vec.length-1) ; |
|
|
107 |
}; |
|
|
108 |
|
|
|
109 |
// cf. http://www.4guysfromrolla.com/webtech/012799-1.shtml |
|
|
110 |
_quicksort = function (vec, loBound, hiBound) |
|
|
111 |
/************************************************************** |
|
|
112 |
This function adapted from the algorithm given in: |
|
|
113 |
Data Abstractions & Structures Using C++, by |
|
|
114 |
Mark Headington and David Riley, pg. 586. |
|
|
115 |
|
|
|
116 |
quicksort is the fastest array sorting routine for |
|
|
117 |
unordered arrays. Its big O is n log n. |
|
|
118 |
**************************************************************/ |
|
|
119 |
{ |
|
|
120 |
|
|
|
121 |
var pivot, loSwap, hiSwap, temp; |
|
|
122 |
|
|
|
123 |
// Two items to sort |
|
|
124 |
if (hiBound - loBound == 1) |
|
|
125 |
{ |
|
|
126 |
if (vec[loBound] > vec[hiBound]) |
|
|
127 |
{ |
|
|
128 |
temp = vec[loBound]; |
|
|
129 |
vec[loBound] = vec[hiBound]; |
|
|
130 |
vec[hiBound] = temp; |
|
|
131 |
} |
|
|
132 |
return; |
|
|
133 |
} |
|
|
134 |
|
|
|
135 |
// Three or more items to sort |
|
|
136 |
pivot = vec[parseInt((loBound + hiBound) / 2)]; |
|
|
137 |
vec[parseInt((loBound + hiBound) / 2)] = vec[loBound]; |
|
|
138 |
vec[loBound] = pivot; |
|
|
139 |
loSwap = loBound + 1; |
|
|
140 |
hiSwap = hiBound; |
|
|
141 |
|
|
|
142 |
do { |
|
|
143 |
// Find the right loSwap |
|
|
144 |
while (loSwap <= hiSwap && vec[loSwap] <= pivot) |
|
|
145 |
loSwap++; |
|
|
146 |
|
|
|
147 |
// Find the right hiSwap |
|
|
148 |
while (vec[hiSwap] > pivot) |
|
|
149 |
hiSwap--; |
|
|
150 |
|
|
|
151 |
// Swap values if loSwap is less than hiSwap |
|
|
152 |
if (loSwap < hiSwap) |
|
|
153 |
{ |
|
|
154 |
temp = vec[loSwap]; |
|
|
155 |
vec[loSwap] = vec[hiSwap]; |
|
|
156 |
vec[hiSwap] = temp; |
|
|
157 |
} |
|
|
158 |
} while (loSwap < hiSwap); |
|
|
159 |
|
|
|
160 |
vec[loBound] = vec[hiSwap]; |
|
|
161 |
vec[hiSwap] = pivot; |
|
|
162 |
|
|
|
163 |
|
|
|
164 |
// Recursively call function... the beauty of quicksort |
|
|
165 |
|
|
|
166 |
// 2 or more items in first section |
|
|
167 |
if (loBound < hiSwap - 1) |
|
|
168 |
_quicksort(vec, loBound, hiSwap - 1); |
|
|
169 |
|
|
|
170 |
|
|
|
171 |
// 2 or more items in second section |
|
|
172 |
if (hiSwap + 1 < hiBound) |
|
|
173 |
_quicksort(vec, hiSwap + 1, hiBound); |
|
|
174 |
} ; |