src/cm/media/js/client/c_util.js
changeset 0 40c8f766c9b8
child 341 053551f213fb
equal deleted inserted replaced
-1:000000000000 0:40c8f766c9b8
       
     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 } ;