Wikipedia/main.js
changeset 20 918767a9c8d3
equal deleted inserted replaced
19:f3521a11d878 20:918767a9c8d3
       
     1 // ////////////////////////////////////////////////////////////////////////////
       
     2 // Symbian Foundation Example Code
       
     3 //
       
     4 // This software is in the public domain. No copyright is claimed, and you 
       
     5 // may use it for any purpose without license from the Symbian Foundation.
       
     6 // No warranty for any purpose is expressed or implied by the authors or
       
     7 // the Symbian Foundation. 
       
     8 // ////////////////////////////////////////////////////////////////////////////
       
     9 
       
    10 // Reference to the WRTKit user interface manager and main view.
       
    11 var uiManager;
       
    12 var wikiHomeView;
       
    13 var wikiHistoryView;
       
    14 var wikiBookmarksView;
       
    15 var languageSelectView;
       
    16 var helpView;
       
    17 
       
    18 // Update variables
       
    19 var myversion = "1.0rc5";
       
    20 var updateBaseUrl = "http://developer.symbian.org/wiki/" 
       
    21 var versionWikiPageUrl = updateBaseUrl + "index.php/Wikipedia_Reader_Widget";
       
    22 var versionWikiPageString = "Current widget version is [";
       
    23 var downloadUrl = updateBaseUrl + "images/b/b3/Wikipedia.wgz";
       
    24 
       
    25 var resultsPerPage = 10;
       
    26 
       
    27 // we support variety of screen sizes and orientations
       
    28 var portrait;
       
    29 var touchscreen;
       
    30 var miniview;
       
    31 
       
    32 var initCalled = false;
       
    33 
       
    34 // Called from the onload event handler to initialize the widget.
       
    35 function init(){
       
    36 	if (window.widget) {
       
    37 		setInterval("Noop();", 10000);
       
    38 	}
       
    39 	try{
       
    40 		doUiInit();
       
    41 	} catch(x) {
       
    42 		alert(x);
       
    43 	}
       
    44 }
       
    45 
       
    46 function doUiInit(){
       
    47     // set tab-navigation mode and show softkeys
       
    48     // (only if we are in the WRT environment)
       
    49     if (window.widget) {
       
    50         widget.setNavigationEnabled(false);
       
    51         menu.showSoftkeys();
       
    52     }
       
    53 
       
    54     // create UI manager
       
    55 	var elem = document.getElementById("uimandiv");
       
    56     uiManager = new UIManager(elem,null,true);
       
    57 
       
    58     // create main view
       
    59     wikiHomeView = new WikiHome();
       
    60 	wikiHistoryView = new HistoryView();
       
    61 	wikiHistoryView.previousView = wikiHomeView;
       
    62 	wikiBookmarksView = new BookmarksView();
       
    63 	wikiBookmarksView.previousView = wikiHomeView;
       
    64 
       
    65 	initHelpView();
       
    66 	initLanguageView();
       
    67 
       
    68 	initCalled = true;
       
    69 	setViewMode();
       
    70 	
       
    71 //	setupLog();
       
    72 	restoreLanguage();
       
    73     // display the main view
       
    74 	wikiHomeView.show();
       
    75 }
       
    76 
       
    77 
       
    78 
       
    79 function setViewMode() {
       
    80 	if ( !initCalled ) return;
       
    81 	portrait = window.innerWidth < window.innerHeight;
       
    82 	touchscreen = Math.min(window.innerWidth,window.innerHeight) > 240;
       
    83 	miniview = window.innerHeight < 150;
       
    84 	if ( miniview ) {
       
    85 		var main = document.getElementById("uimandiv");
       
    86 		var mini = document.getElementById("minidiv");
       
    87 		main.style.display = "none";
       
    88 		mini.style.display = "";
       
    89 	} else {
       
    90 		// no preference available, check screen size
       
    91 		if ( touchscreen ) {
       
    92 			// hi res screen, use large font
       
    93 			setLargeView();
       
    94 		}
       
    95 		else {
       
    96 			// lo res screen, use small font
       
    97 			setSmallView();
       
    98 		}
       
    99 		var main = document.getElementById("uimandiv");
       
   100 		var mini = document.getElementById("minidiv");
       
   101 		main.style.display = "";
       
   102 		mini.style.display = "none";
       
   103 	}
       
   104 }
       
   105 
       
   106 function setLargeView(){
       
   107 	document.getElementById('stylesheet').href = 'WRTKit/Resources/UI-large.css';
       
   108 //	setCssBodyFontSize(22);
       
   109 }
       
   110 
       
   111 function setSmallView(){
       
   112 	document.getElementById('stylesheet').href = 'WRTKit/Resources/UI.css';
       
   113 //	setCssBodyFontSize(14);
       
   114 }
       
   115 
       
   116 function Noop(){}
       
   117 
       
   118 
       
   119 // /////////////////////////////////////////////////////////////////////////////////
       
   120 // Help view setup
       
   121 
       
   122 function showHelp(){
       
   123 	helpView.show();
       
   124 }
       
   125 
       
   126 
       
   127 function initHelpView(){
       
   128 	helpView = new ListView();
       
   129 	var ajax = null;
       
   130 	try {
       
   131 		ajax = new Ajax();
       
   132 		ajax.open("GET", "help.txt", true);
       
   133 		ajax.onreadystatechange = function(){
       
   134 			HelpLoadComplete(ajax);
       
   135 		};
       
   136 		ajax.send(null);
       
   137 	} 
       
   138 	catch (e) {
       
   139 		alert(e);
       
   140 	}
       
   141 }
       
   142 
       
   143 function HelpLoadComplete(ajax){
       
   144     if (ajax.readyState == 4) {
       
   145 		var text;
       
   146 		if (ajax == null || ajax.responseText == undefined || ajax.responseText == null) {
       
   147 			text = "No help available.";
       
   148 //			alert("responseText=" + ajax.responseText + ", responseXML=" + ajax.responseXml + ", status=" + ajax.status);
       
   149 		}
       
   150 		else {
       
   151 			text = ajax.responseText;
       
   152 		}
       
   153 		var caption = new NavigationButton(1, "titlebar.png", "Help", true);
       
   154 		caption.addEventListener("ActionPerformed", function(){
       
   155 			wikiHomeView.show();
       
   156 		});
       
   157 		helpView.addControl(caption);
       
   158 		var docModel = ParseIntoDocModel(text);
       
   159 		var preamble = new TextPane(null, null, docModel.preface);
       
   160 		helpView.addControl(preamble);
       
   161 		for (var i = 0; i < docModel.sections.length; i++) {
       
   162 			if (docModel.sections[i].caption == "Contents") {
       
   163 				continue;
       
   164 			}
       
   165 			var control = new ContentPanel(null, docModel.sections[i].caption, docModel.sections[i].content, true, false); // foldable & expanded
       
   166 			helpView.addControl(control);
       
   167 		}
       
   168 		
       
   169 		helpView.previousView = wikiHomeView;
       
   170 	}
       
   171 }
       
   172 
       
   173 function addHelpMenuItems(){
       
   174 	var languageMenuItem = new MenuItem("Language", MENU_ITEM_MAIN_LANGUAGE);
       
   175 	languageMenuItem.onSelect = selectLanguage;
       
   176 	menu.append(languageMenuItem);
       
   177 	var updateMenuItem = new MenuItem("Check for updates", MENU_ITEM_MAIN_UPDATES);
       
   178 	updateMenuItem.onSelect = checkForUpdates;
       
   179 	menu.append(updateMenuItem);
       
   180 	var helpMenuItem = new MenuItem("Help", MENU_ITEM_MAIN_HELP);
       
   181 	helpMenuItem.onSelect = showHelp;
       
   182 	menu.append(helpMenuItem);
       
   183 }
       
   184 
       
   185 // ////////////////////////////////////////////////////////////////////////
       
   186 // Language selection
       
   187 
       
   188 function setLanguage(lang) {
       
   189 	baseUrl = lang;
       
   190 	wikiViewPageUrlBase = baseUrl + "/w/index.php?title=";
       
   191 	uiManager.showNotification(1000, "info", "Language set");
       
   192 	if ( window.widget ) {
       
   193 		widget.setPreferenceForKey(lang, "language");
       
   194 	}
       
   195 	wikiHomeView.show();
       
   196 }
       
   197 
       
   198 function selectLanguage(){
       
   199 	languageSelectView.previousView = uiManager.currentView;
       
   200 	languageSelectView.show();
       
   201 }
       
   202 
       
   203 function restoreLanguage(){
       
   204 	if (window.widget) {
       
   205 		var lang = widget.preferenceForKey("language");
       
   206 		if ( lang != undefined && lang != null ) {
       
   207 			setLanguage(lang);
       
   208 		}
       
   209 	}
       
   210 
       
   211 }
       
   212 function initLanguageView(){
       
   213 	languageSelectView = new ListView();
       
   214 	var ajax = null;
       
   215 	try {
       
   216 		ajax = new Ajax();
       
   217 		ajax.open("GET", "lang.txt", true);
       
   218 		ajax.onreadystatechange = function(){
       
   219 			LanguageLoadComplete(ajax);
       
   220 		};
       
   221 		ajax.send(null);
       
   222 	} 
       
   223 	catch (e) {
       
   224 		alert(e);
       
   225 	}
       
   226 }
       
   227 
       
   228 function LanguageLoadComplete(ajax){
       
   229     if (ajax.readyState == 4) {
       
   230 		var text;
       
   231 		if (ajax == null || ajax.responseText == undefined || ajax.responseText == null) {
       
   232 			text = "Language list not available.";
       
   233 //			alert("responseText=" + ajax.responseText + ", responseXML=" + ajax.responseXml + ", status=" + ajax.status);
       
   234 		}
       
   235 		else {
       
   236 			text = ajax.responseText;
       
   237 		}
       
   238 		var caption = new NavigationButton(1, "titlebar.png", "Languages", true);
       
   239 		caption.addEventListener("ActionPerformed", function(){
       
   240 			wikiHomeView.show();
       
   241 		});
       
   242 		languageSelectView.addControl(caption);
       
   243 		var docModel = ParseIntoDocModel(text);
       
   244 		var preamble = new TextPane(null, null, docModel.preface);
       
   245 		languageSelectView.addControl(preamble);
       
   246 		for (var i = 0; i < docModel.sections.length; i++) {
       
   247 			if (docModel.sections[i].caption == "Contents") {
       
   248 				continue;
       
   249 			}
       
   250 			var control = new ContentPanel(null, docModel.sections[i].caption, docModel.sections[i].content, true, false); // foldable & expanded
       
   251 			languageSelectView.addControl(control);
       
   252 		}
       
   253 		languageSelectView.show = function (){
       
   254 				View.prototype.show.call(this);
       
   255 				if (window.widget) {
       
   256 					widget.setNavigationEnabled(true);
       
   257 				} 
       
   258 		}
       
   259 		languageSelectView.previousView = wikiHomeView;
       
   260 	}
       
   261 }
       
   262 
       
   263 
       
   264 // auto update code
       
   265 
       
   266 var updatePageAjax = null;
       
   267 
       
   268 function checkForUpdates() {
       
   269 	uiManager.showNotification(-1, "wait", "Checking for updates...", -1);
       
   270 	updatePageAjax = new Ajax();
       
   271 	updatePageAjax.onreadystatechange = checkForUpdatesStage2;
       
   272 	updatePageAjax.open('GET', nocache(versionWikiPageUrl), true);
       
   273 	updatePageAjax.send(null);	
       
   274 }
       
   275 
       
   276 function checkForUpdatesStage2() {
       
   277     if (updatePageAjax.readyState == 4) {
       
   278 		// extract version number
       
   279 		var content = updatePageAjax.responseText;
       
   280 		var ind = content.indexOf(versionWikiPageString);
       
   281 		if ( ind == -1 ) {
       
   282 			uiManager.showNotification(3000, "warning", "Update failed, check manually.");
       
   283 			return;
       
   284 		}
       
   285 		ind += versionWikiPageString.length;
       
   286 		var ind2 = content.indexOf("]",ind);
       
   287 		if ( ind2 == -1 || (ind2-ind) > 10 ) {
       
   288 			uiManager.showNotification(3000, "warning", "Update failed, check manually.");
       
   289 			return;
       
   290 		}
       
   291 		var version = content.substring(ind,ind2);
       
   292 		// compare to this version
       
   293 		if ( version != myversion ) {
       
   294 			var answer = confirm("Install version " + version + "?\nNote: Update will clear history and bookmarks.");
       
   295 			if (answer) {
       
   296 				// ok, we have the update
       
   297 				uiManager.hideNotification();
       
   298 				openURL(nocache(downloadUrl));
       
   299 				setTimeout(function () {window.close();}, 1000);
       
   300 			} else {
       
   301 			uiManager.showNotification(3000, "info", "Update cancelled.");
       
   302 			}
       
   303 		} else {
       
   304 			uiManager.showNotification(3000, "info", "Up to date!");
       
   305 		}
       
   306 	}
       
   307 }