Wikipedia/main.js
changeset 20 918767a9c8d3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Wikipedia/main.js	Tue Mar 09 10:34:58 2010 +0000
@@ -0,0 +1,307 @@
+// ////////////////////////////////////////////////////////////////////////////
+// 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. 
+// ////////////////////////////////////////////////////////////////////////////
+
+// Reference to the WRTKit user interface manager and main view.
+var uiManager;
+var wikiHomeView;
+var wikiHistoryView;
+var wikiBookmarksView;
+var languageSelectView;
+var helpView;
+
+// Update variables
+var myversion = "1.0rc5";
+var updateBaseUrl = "http://developer.symbian.org/wiki/" 
+var versionWikiPageUrl = updateBaseUrl + "index.php/Wikipedia_Reader_Widget";
+var versionWikiPageString = "Current widget version is [";
+var downloadUrl = updateBaseUrl + "images/b/b3/Wikipedia.wgz";
+
+var resultsPerPage = 10;
+
+// we support variety of screen sizes and orientations
+var portrait;
+var touchscreen;
+var miniview;
+
+var initCalled = false;
+
+// Called from the onload event handler to initialize the widget.
+function init(){
+	if (window.widget) {
+		setInterval("Noop();", 10000);
+	}
+	try{
+		doUiInit();
+	} catch(x) {
+		alert(x);
+	}
+}
+
+function doUiInit(){
+    // set tab-navigation mode and show softkeys
+    // (only if we are in the WRT environment)
+    if (window.widget) {
+        widget.setNavigationEnabled(false);
+        menu.showSoftkeys();
+    }
+
+    // create UI manager
+	var elem = document.getElementById("uimandiv");
+    uiManager = new UIManager(elem,null,true);
+
+    // create main view
+    wikiHomeView = new WikiHome();
+	wikiHistoryView = new HistoryView();
+	wikiHistoryView.previousView = wikiHomeView;
+	wikiBookmarksView = new BookmarksView();
+	wikiBookmarksView.previousView = wikiHomeView;
+
+	initHelpView();
+	initLanguageView();
+
+	initCalled = true;
+	setViewMode();
+	
+//	setupLog();
+	restoreLanguage();
+    // display the main view
+	wikiHomeView.show();
+}
+
+
+
+function setViewMode() {
+	if ( !initCalled ) return;
+	portrait = window.innerWidth < window.innerHeight;
+	touchscreen = Math.min(window.innerWidth,window.innerHeight) > 240;
+	miniview = window.innerHeight < 150;
+	if ( miniview ) {
+		var main = document.getElementById("uimandiv");
+		var mini = document.getElementById("minidiv");
+		main.style.display = "none";
+		mini.style.display = "";
+	} else {
+		// no preference available, check screen size
+		if ( touchscreen ) {
+			// hi res screen, use large font
+			setLargeView();
+		}
+		else {
+			// lo res screen, use small font
+			setSmallView();
+		}
+		var main = document.getElementById("uimandiv");
+		var mini = document.getElementById("minidiv");
+		main.style.display = "";
+		mini.style.display = "none";
+	}
+}
+
+function setLargeView(){
+	document.getElementById('stylesheet').href = 'WRTKit/Resources/UI-large.css';
+//	setCssBodyFontSize(22);
+}
+
+function setSmallView(){
+	document.getElementById('stylesheet').href = 'WRTKit/Resources/UI.css';
+//	setCssBodyFontSize(14);
+}
+
+function Noop(){}
+
+
+// /////////////////////////////////////////////////////////////////////////////////
+// Help view setup
+
+function showHelp(){
+	helpView.show();
+}
+
+
+function initHelpView(){
+	helpView = new ListView();
+	var ajax = null;
+	try {
+		ajax = new Ajax();
+		ajax.open("GET", "help.txt", true);
+		ajax.onreadystatechange = function(){
+			HelpLoadComplete(ajax);
+		};
+		ajax.send(null);
+	} 
+	catch (e) {
+		alert(e);
+	}
+}
+
+function HelpLoadComplete(ajax){
+    if (ajax.readyState == 4) {
+		var text;
+		if (ajax == null || ajax.responseText == undefined || ajax.responseText == null) {
+			text = "No help available.";
+//			alert("responseText=" + ajax.responseText + ", responseXML=" + ajax.responseXml + ", status=" + ajax.status);
+		}
+		else {
+			text = ajax.responseText;
+		}
+		var caption = new NavigationButton(1, "titlebar.png", "Help", true);
+		caption.addEventListener("ActionPerformed", function(){
+			wikiHomeView.show();
+		});
+		helpView.addControl(caption);
+		var docModel = ParseIntoDocModel(text);
+		var preamble = new TextPane(null, null, docModel.preface);
+		helpView.addControl(preamble);
+		for (var i = 0; i < docModel.sections.length; i++) {
+			if (docModel.sections[i].caption == "Contents") {
+				continue;
+			}
+			var control = new ContentPanel(null, docModel.sections[i].caption, docModel.sections[i].content, true, false); // foldable & expanded
+			helpView.addControl(control);
+		}
+		
+		helpView.previousView = wikiHomeView;
+	}
+}
+
+function addHelpMenuItems(){
+	var languageMenuItem = new MenuItem("Language", MENU_ITEM_MAIN_LANGUAGE);
+	languageMenuItem.onSelect = selectLanguage;
+	menu.append(languageMenuItem);
+	var updateMenuItem = new MenuItem("Check for updates", MENU_ITEM_MAIN_UPDATES);
+	updateMenuItem.onSelect = checkForUpdates;
+	menu.append(updateMenuItem);
+	var helpMenuItem = new MenuItem("Help", MENU_ITEM_MAIN_HELP);
+	helpMenuItem.onSelect = showHelp;
+	menu.append(helpMenuItem);
+}
+
+// ////////////////////////////////////////////////////////////////////////
+// Language selection
+
+function setLanguage(lang) {
+	baseUrl = lang;
+	wikiViewPageUrlBase = baseUrl + "/w/index.php?title=";
+	uiManager.showNotification(1000, "info", "Language set");
+	if ( window.widget ) {
+		widget.setPreferenceForKey(lang, "language");
+	}
+	wikiHomeView.show();
+}
+
+function selectLanguage(){
+	languageSelectView.previousView = uiManager.currentView;
+	languageSelectView.show();
+}
+
+function restoreLanguage(){
+	if (window.widget) {
+		var lang = widget.preferenceForKey("language");
+		if ( lang != undefined && lang != null ) {
+			setLanguage(lang);
+		}
+	}
+
+}
+function initLanguageView(){
+	languageSelectView = new ListView();
+	var ajax = null;
+	try {
+		ajax = new Ajax();
+		ajax.open("GET", "lang.txt", true);
+		ajax.onreadystatechange = function(){
+			LanguageLoadComplete(ajax);
+		};
+		ajax.send(null);
+	} 
+	catch (e) {
+		alert(e);
+	}
+}
+
+function LanguageLoadComplete(ajax){
+    if (ajax.readyState == 4) {
+		var text;
+		if (ajax == null || ajax.responseText == undefined || ajax.responseText == null) {
+			text = "Language list not available.";
+//			alert("responseText=" + ajax.responseText + ", responseXML=" + ajax.responseXml + ", status=" + ajax.status);
+		}
+		else {
+			text = ajax.responseText;
+		}
+		var caption = new NavigationButton(1, "titlebar.png", "Languages", true);
+		caption.addEventListener("ActionPerformed", function(){
+			wikiHomeView.show();
+		});
+		languageSelectView.addControl(caption);
+		var docModel = ParseIntoDocModel(text);
+		var preamble = new TextPane(null, null, docModel.preface);
+		languageSelectView.addControl(preamble);
+		for (var i = 0; i < docModel.sections.length; i++) {
+			if (docModel.sections[i].caption == "Contents") {
+				continue;
+			}
+			var control = new ContentPanel(null, docModel.sections[i].caption, docModel.sections[i].content, true, false); // foldable & expanded
+			languageSelectView.addControl(control);
+		}
+		languageSelectView.show = function (){
+				View.prototype.show.call(this);
+				if (window.widget) {
+					widget.setNavigationEnabled(true);
+				} 
+		}
+		languageSelectView.previousView = wikiHomeView;
+	}
+}
+
+
+// auto update code
+
+var updatePageAjax = null;
+
+function checkForUpdates() {
+	uiManager.showNotification(-1, "wait", "Checking for updates...", -1);
+	updatePageAjax = new Ajax();
+	updatePageAjax.onreadystatechange = checkForUpdatesStage2;
+	updatePageAjax.open('GET', nocache(versionWikiPageUrl), true);
+	updatePageAjax.send(null);	
+}
+
+function checkForUpdatesStage2() {
+    if (updatePageAjax.readyState == 4) {
+		// extract version number
+		var content = updatePageAjax.responseText;
+		var ind = content.indexOf(versionWikiPageString);
+		if ( ind == -1 ) {
+			uiManager.showNotification(3000, "warning", "Update failed, check manually.");
+			return;
+		}
+		ind += versionWikiPageString.length;
+		var ind2 = content.indexOf("]",ind);
+		if ( ind2 == -1 || (ind2-ind) > 10 ) {
+			uiManager.showNotification(3000, "warning", "Update failed, check manually.");
+			return;
+		}
+		var version = content.substring(ind,ind2);
+		// compare to this version
+		if ( version != myversion ) {
+			var answer = confirm("Install version " + version + "?\nNote: Update will clear history and bookmarks.");
+			if (answer) {
+				// ok, we have the update
+				uiManager.hideNotification();
+				openURL(nocache(downloadUrl));
+				setTimeout(function () {window.close();}, 1000);
+			} else {
+			uiManager.showNotification(3000, "info", "Update cancelled.");
+			}
+		} else {
+			uiManager.showNotification(3000, "info", "Up to date!");
+		}
+	}
+}