http://2012.igem.org/wiki/index.php?title=Team:Evry/arbor/src/etc.js&feed=atom&action=history
Team:Evry/arbor/src/etc.js - Revision history
2024-03-28T21:08:22Z
Revision history for this page on the wiki
MediaWiki 1.16.0
http://2012.igem.org/wiki/index.php?title=Team:Evry/arbor/src/etc.js&diff=124633&oldid=prev
TriCer: Created page with "// // etc.js // // misc utilities // var trace = function(msg){ if (typeof(window)=='undefined' || !window.console) return var len = arguments.length var args = []..."
2012-09-18T18:22:27Z
<p>Created page with "// // etc.js // // misc utilities // var trace = function(msg){ if (typeof(window)=='undefined' || !window.console) return var len = arguments.length var args = []..."</p>
<p><b>New page</b></p><div>//<br />
// etc.js<br />
//<br />
// misc utilities<br />
//<br />
<br />
var trace = function(msg){<br />
if (typeof(window)=='undefined' || !window.console) return<br />
var len = arguments.length<br />
var args = []<br />
for (var i=0; i<len; i++) args.push("arguments["+i+"]")<br />
eval("console.log("+args.join(",")+")")<br />
} <br />
<br />
var dirname = function(path){<br />
var pth = path.replace(/^\/?(.*?)\/?$/,"$1").split('/')<br />
pth.pop()<br />
return "/"+pth.join("/")<br />
}<br />
var basename = function(path){<br />
// var pth = path.replace(/^\//,'').split('/')<br />
var pth = path.replace(/^\/?(.*?)\/?$/,"$1").split('/')<br />
<br />
var base = pth.pop()<br />
if (base=="") return null<br />
else return base<br />
}<br />
<br />
var _ordinalize_re = /(\d)(?=(\d\d\d)+(?!\d))/g<br />
var ordinalize = function(num){<br />
var norm = ""+num<br />
if (num < 11000){<br />
norm = (""+num).replace(_ordinalize_re, "$1,")<br />
} else if (num < 1000000){<br />
norm = Math.floor(num/1000)+"k"<br />
} else if (num < 1000000000){<br />
norm = (""+Math.floor(num/1000)).replace(_ordinalize_re, "$1,")+"m"<br />
}<br />
return norm<br />
}<br />
<br />
/* Nano Templates (Tomasz Mazur, Jacek Becela) */<br />
var nano = function(template, data){<br />
return template.replace(/\{([\w\-\.]*)}/g, function(str, key){<br />
var keys = key.split("."), value = data[keys.shift()]<br />
$.each(keys, function(){ <br />
if (value.hasOwnProperty(this)) value = value[this] <br />
else value = str<br />
})<br />
return value<br />
})<br />
}<br />
<br />
var objcopy = function(old){<br />
if (old===undefined) return undefined<br />
if (old===null) return null<br />
<br />
if (old.parentNode) return old<br />
switch (typeof old){<br />
case "string":<br />
return old.substring(0)<br />
break<br />
<br />
case "number":<br />
return old + 0<br />
break<br />
<br />
case "boolean":<br />
return old === true<br />
break<br />
}<br />
<br />
var newObj = ($.isArray(old)) ? [] : {}<br />
$.each(old, function(ik, v){<br />
newObj[ik] = objcopy(v)<br />
})<br />
return newObj<br />
}<br />
<br />
var objmerge = function(dst, src){<br />
dst = dst || {}<br />
src = src || {}<br />
var merge = objcopy(dst)<br />
for (var k in src) merge[k] = src[k]<br />
return merge<br />
}<br />
<br />
var objcmp = function(a, b, strict_ordering){<br />
if (!a || !b) return a===b // handle null+undef<br />
if (typeof a != typeof b) return false // handle type mismatch<br />
if (typeof a != 'object'){<br />
// an atomic type<br />
return a===b<br />
}else{<br />
// a collection type<br />
<br />
// first compare buckets<br />
if ($.isArray(a)){<br />
if (!($.isArray(b))) return false<br />
if (a.length != b.length) return false<br />
}else{<br />
var a_keys = []; for (var k in a) if (a.hasOwnProperty(k)) a_keys.push(k)<br />
var b_keys = []; for (var k in b) if (b.hasOwnProperty(k)) b_keys.push(k)<br />
if (!strict_ordering){<br />
a_keys.sort()<br />
b_keys.sort()<br />
}<br />
if (a_keys.join(',') !== b_keys.join(',')) return false<br />
}<br />
<br />
// then compare contents<br />
var same = true<br />
$.each(a, function(ik){<br />
var diff = objcmp(a[ik], b[ik])<br />
same = same && diff<br />
if (!same) return false<br />
})<br />
return same<br />
}<br />
}<br />
<br />
var objkeys = function(obj){<br />
var keys = []<br />
$.each(obj, function(k,v){ if (obj.hasOwnProperty(k)) keys.push(k) })<br />
return keys<br />
}<br />
<br />
var objcontains = function(obj){<br />
if (!obj || typeof obj!='object') return false<br />
for (var i=1, j=arguments.length; i<j; i++){<br />
if (obj.hasOwnProperty(arguments[i])) return true<br />
}<br />
return false<br />
}<br />
<br />
var uniq = function(arr){<br />
// keep in mind that this is only sensible with a list of strings<br />
// anything else, objkey type coercion will turn it into one anyway<br />
var len = arr.length<br />
var set = {}<br />
for (var i=0; i<len; i++){<br />
set[arr[i]] = true<br />
}<br />
<br />
return objkeys(set) <br />
}<br />
<br />
var arbor_path = function(){<br />
var candidates = $("script").map(function(elt){<br />
var src = $(this).attr('src')<br />
if (!src) return<br />
if (src.match(/arbor[^\/\.]*.js|dev.js/)){<br />
return src.match(/.*\//) || "/"<br />
}<br />
})<br />
<br />
if (candidates.length>0) return candidates[0] <br />
else return null<br />
}</div>
TriCer