diff -r f3521a11d878 -r 918767a9c8d3 Wikipedia/main.js --- /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!"); + } + } +}