diff -r 000000000000 -r 54498df70f5d Symbian.org/preview/script/lib/widget.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian.org/preview/script/lib/widget.js Fri Jun 05 16:18:05 2009 +0100 @@ -0,0 +1,388 @@ +/** + * Widget object constructor + * @param {void} + * widget() + * @return {void} + */ +function Widget() +{ + // widget identifier, dummy value + this.identifier = 14021981; + this.isrotationsupported = true; + + // widget event triggers + this.onshow = null; + this.onhide = null; + + /* + * Custom extra functionalities to support + */ + this.path = document.location.pathname; + this.sysAPI = null; + this.onload = null; + this.opacity = 50; + this.interval = 20; + this.isFront = false; + this.preferenceArray = new Array(); + this.preferenceKey = 0; +} + + +/** + * Launches the browser with the specified url + * @param {String} url + * openURL() + * @return {Void} + */ +Widget.prototype.openURL = function(url) +{ + if (url) { + window.open(url ,"New Widget Window",'height=200 width=250'); + } +} + + +/** + * Returns previously stored preference associated with the specified key + * @param {String} Key preference value to be fetch + * preferenceForKey() + * @return {String} Value + */ +Widget.prototype.preferenceForKey = function(key){ + var name = "Nokia_WRT#" + this.path + "#" + key; + var result = readCookie(document, name); + return result; +} + + +/** + * Stores the key associated with the specified preference + * @param {String} Preference value to be stored + * @param {String} Key Preference value associated to + * setPreferenceForKey() + * @return {Void} + */ +Widget.prototype.setPreferenceForKey = function(preference, key) +{ + var value; + //Specifying null for the preference parameter removes the specified key from the preferences + if(key == null){ + if(this.preferenceKey>0){ + this.preferenceKey--; + } + //delete from cookies + } + value = "Nokia_WRT#"+this.path+"#"+key; + this.preferenceArray[this.preferenceKey] = value; + + createCookie(document,value,preference,240000); + this.preferenceKey++; + + //save cookie for cookies + updateMainCookie(document); +} + + + +/** + * Toggle between Tabbed navigation mode or Cursor mode + * @param {Boolean} Value + * setNavigationEnabled() + * @return {Void} + */ +Widget.prototype.setNavigationEnabled = function(bool) +{ + //This function can not be used on preview browser +} + + + +/** + * Open S0-Application identified by UID along with the specified params + * @param {Integer} Uid hexadecimal value to a specified application + * @param {String} Value + * openApplication() + * @return {Void} + */ +Widget.prototype.openApplication = function(Uid, param) +{ + alert("openApplication function won't be simulated in this application"); +} + + + +/** + * Prepares the Widget.to do transition to specified transitionState + * @param {String} Value Transition state + * prepareForTransition() + * @return {Void} + */ +Widget.prototype.prepareForTransition = function(transitionState) +{ + this.isFront = ("" + transitionState).toLowerCase() != "toback"; + window.document.getElementsByTagName("body")[0].style.opacity = "0.3"; +} + + + + +/** + * Does the animation to make the transition between the specified transitionState + * @param {Void} + * performTransition() + * @return {Void} + */ +Widget.prototype.performTransition = function() +{ + var _self = this; + this.opacity = 0; + this.interval = window.setInterval(function() { + _self.opacity += 0.2; + if (_self.opacity > 1) { + _self.opacity = 1; + } + window.document.getElementsByTagName("body")[0].style.opacity = _self.opacity + ""; + if (_self.opacity >= 1) { + window.clearInterval(_self.interval); + window.document.getElementsByTagName("body")[0].style.opacity = "1"; + } + //do nothing + }, 50); + //do nothing +} + + + + + +/** + * Set the preferred screen orientation to landscape. + * The display will flip if the phone display orientation + * is portrait and the phone supports landscape mode. + * @param {Void} + * setDisplayLandscape() + * @return {Void} + */ +Widget.prototype.setDisplayLandscape = function(){ + try + { + if (this.isrotationsupported && childToParent_Reference.Emulator.orientation_mode != 'landscape') + { + childToParent_Reference.Emulator.changeOrientation(childToParent_Reference.$('DisplayOrientation')); + } + } + catch (e) {} +} + + + + +/** + * Set the preferred screen orientation to portrait. + * The display will flip if the phone display orientation + * is landscape and the phone supports portrait mode. + * @param {Void} + * setDisplayPortrait() + * @return {Void} + */ +Widget.prototype.setDisplayPortrait = function() +{ + try + { + if (this.isrotationsupported && childToParent_Reference.Emulator.orientation_mode != 'portrait') + { + childToParent_Reference.Emulator.changeOrientation(childToParent_Reference.$('DisplayOrientation')); + } + } + catch (e) {} +} + +/** + * Allows the definition of a function to be called + * when a Widget.is displayed + * @param {Void} + * onshow() + * @return {Void} + */ +Widget.prototype.onshow = function() +{ + // to be implemented +} + + + + +/** + * Allows the definition of a function to be called + * when a Widget.sent into the background (hidden) + * @param {Void} + * onhide() + * @return {Void} + */ +Widget.prototype.onhide = function() +{ + // to be implemented +} + + + +/** + * This function returns the System API if sysinfo is included in document embed + */ +Widget.prototype.enableSystemApi = function() +{ + + // Identify, and Attach System-Info-Object properties + try + { + var parentIframeRef = window.parent.frames[0]; + if(parentIframeRef) + { + if (parentIframeRef.document.embeds.length > 0) { + for (var i = 0; i < parentIframeRef.document.embeds.length; i++) + { + //match the system Info API embed tag + if (parentIframeRef.document.embeds[i].type == 'application/x-systeminfo-widget') + { + new systemAPI(parentIframeRef.document.embeds[i]); + widget.sysAPI = parentIframeRef.document.embeds[i]; + } + } + } + } + } + catch (e) { + alert('Error in attachSysInfo: ' + e); + } + + // Attach menu object to window + window.menu = new Menu(); + + // Attach window reference to the Parent Window + window.parent.Emulator.parentToChild_Reference = window; + + // add event listener to window.focus + window.onfocus = function(){ menu.cancel(); } + + // add event listener to window.focus + window.onunload = function() + { + try + { + // Trigger Callback of Widget.onHide function + if(typeof(widget.onhide) == 'function') + { + widget.onhide(); + } + } + catch(e){ errorLog('widget.onhide: '+e.description, 0); } + } + + + /* + * Used as a bridge between, Child widget & Parent window + */ + window.childToParent_Reference = window.parent; + +} + +/* + * support functions for widget object + */ + +/** + * This function stores cookie for all the cookies + * to help finding cookies of the same document while clearing preferences + * @param doucment -- Document object + */ +function updateMainCookie(doucment){ + var temp=""; + name = "Nokia_WRT#"+widget.path; + for (var k = 0; k