diff -r f3521a11d878 -r 918767a9c8d3 Wikipedia/utils.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Wikipedia/utils.js Tue Mar 09 10:34:58 2010 +0000 @@ -0,0 +1,256 @@ +// //////////////////////////////////////////////////////////////////////////// +// Symbian Foundation Example Code +// +// This software is in the public domain. No copyright is claimed, and you +// may use it for any purpose without license from the Symbian Foundation. +// No warranty for any purpose is expressed or implied by the authors or +// the Symbian Foundation. +// //////////////////////////////////////////////////////////////////////////// + +var logEnabled = true; + +// Opens a URL in a separate browser window +function openURL(url) { + if (window.widget) { + // in WRT + widget.openURL(url); + } else { + // outside WRT + window.open(url, "NewWindow"); + } +} + +function increaseFontSize(){ + if (window.widget) { + setCssBodyFontSize(currentFontSize + 2); + } +} + +function decreaseFontSize(){ + if (window.widget) { + if (currentFontSize > 4) { + setCssBodyFontSize(currentFontSize - 2); + } + } +} + +function setCssBodyFontSize(size){ + if (window.widget) { + currentFontSize = size; + var sizestring = "" + size; + document.body.style.fontSize = sizestring + "px"; + widget.setPreferenceForKey(sizestring, "fontsize"); + } +} + + +function log(txt) { + if (logEnabled) { +// txt = txt.replace(//g, unescape("%26gt%3B")); +// txt = txt.replace(//g, ">"); + document.getElementById("debugdiv").innerHTML = txt + "
" + document.getElementById("debugdiv").innerHTML; + } +} + +function setupLog() { + if (logEnabled) { + if (window.widget) { + var logMenuItem = new MenuItem("Toggle log", 99); + logMenuItem.onSelect = function() { + var div = document.getElementById("debugdiv"); + var main = document.getElementById("uimandiv"); + if ( div.style.display == "none" ) { + div.style.display = ""; + main.style.display = "none"; + } else { + div.style.display = "none"; + main.style.display = ""; + } + } + menu.append(logMenuItem); + } + } +} + +function shorten(text, len) { + if ( text.length < len + 3 ) return text; + return text.substring(0,len) + "..."; +} + +function uniDecode(text) { + var ptr = 0; + var buf = ""; + while ( ptr < text.length ){ + if ( text.charAt(ptr) == '%' ) { + // read next two chars and interpret as hex UTF-8 char code + var hex = ""; + ptr ++; + hex += text.charAt(ptr) ; + ptr ++; + hex += text.charAt(ptr) ; + var ccode = unhex(hex); + // decode utf-8 + if (ccode < 128) { // 1 byte char + buf += String.fromCharCode(ccode); + ptr++; + } + else if((ccode > 191) && (ccode < 224)) { // 2 byte char + var hex2 = ""; + ptr ++; // move to % + ptr ++; // move to first hex digit + hex2 += text.charAt(ptr) ; + ptr ++; + hex2 += text.charAt(ptr) ; + var ccode2 = unhex(hex2); + // need more stuff to get char + buf += String.fromCharCode(((ccode & 31) << 6) | (ccode2 & 63)); + ptr ++; + } + else { // 3 byte char + var hex2 = ""; + ptr ++; // move to % + ptr ++; // move to first hex digit + hex2 += text.charAt(ptr) ; + ptr ++; + hex2 += text.charAt(ptr) ; + var ccode2 = unhex(hex2); + var hex3 = ""; + ptr ++; // move to % + ptr ++; // move to first hex digit + hex3 += text.charAt(ptr) ; + ptr ++; + hex3 += text.charAt(ptr) ; + var ccode3 = unhex(hex2); + buf += String.fromCharCode(((ccode & 15) << 12) | ((ccode2 & 63) << 6) | (ccode3 & 63)); + ptr++; + } + } else { + buf += text.charAt(ptr); + ptr ++; + } + } + return buf; +} + +function unhex(hx) { + var val = 0; + for ( var i = 0 ; i < hx.length ; i ++ ) { + val = val * 16; + switch(hx.charAt(i)) { + case '0': continue; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': { + val += parseInt(hx.charAt(i)); + break; + } + case 'A': + case 'a':{ + val += 10; + break; + } + case 'B': + case 'b':{ + val += 11; + break; + } + case 'C': + case 'c':{ + val += 12; + break; + } + case 'D': + case 'd':{ + val += 13; + break; + } + case 'E': + case 'e':{ + val += 14; + break; + } + case 'F': + case 'f':{ + val += 15; + break; + } + } + } + return val; +} + +function shortFormatTime(ts) { + var date = new Date(ts); + var ret = ""; + ret += pad(2,"0", date.getDate()); + ret += "/"; + ret += pad(2,"0",(1+date.getMonth())); + ret += " "; + ret += pad(2,"0", date.getHours()); + ret += ":"; + ret += pad(2,"0",date.getMinutes()); + return ret; +} + + +function nocache(url) { + if (url.indexOf("?") == -1) { + url += "?"; + } else { + url += "&"; + } + url += "xnocache=" + (new Date().getTime()); + return url; +} + +function pad(_num, _char, _val) { + var buf = ""+ _val; + while(buf.length < _num){ + buf = _char + "" + buf; + } +// alert("pad: num=" +num + ", char=" + char + ", val=" + val +", result=" +buf ); + return buf; +} + +function getViewRep(view) { + if ( view == null ) { + return "null"; + } else if (view) { + return view.caption; + } else { + return "undefined"; + } +} + + +function ViewCache(size) { + this.size = size; + this.names = new Array(); + this.views = new Array(); +} + +ViewCache.prototype.addView = function(name,view) { + this.names.splice(0,0,name); + this.views.splice(0,0,view); + + if (this.names.length > this.size) { + this.names.splice(this.size, 1); + this.views.splice(this.size, 1); + } +} + +ViewCache.prototype.getView = function(name){ + for ( var i = 0 ; i < this.names.length ; i++ ) { + if ( name == this.names[i] ) { + return this.views[i]; + } + } + return null; +} \ No newline at end of file