# HG changeset patch # User ivanl # Date 1250869177 -3600 # Node ID b73e6caf0031e50f141ada571017b3139da4ae1f # Parent 5dc2963cd75f394b2c292f9534122413cb03bd95 Added Wiki support Added TextPane Added large view CSS and images diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/FeedPresentation.js --- a/Symbian.org/FeedPresentation.js Mon Aug 10 11:26:10 2009 +0100 +++ b/Symbian.org/FeedPresentation.js Fri Aug 21 16:39:37 2009 +0100 @@ -30,6 +30,10 @@ FeedPresenter.prototype.addPreambleItems = function(){ } +// Create and add controls to be shown before items list. +FeedPresenter.prototype.addFooterItems = function(){ +} + // No items returned, show "No messages" FeedPresenter.prototype.showNoItems = function(){ var label = new Label(null, null, "No messages"); diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/FeedUpdateBroker.js --- a/Symbian.org/FeedUpdateBroker.js Mon Aug 10 11:26:10 2009 +0100 +++ b/Symbian.org/FeedUpdateBroker.js Fri Aug 21 16:39:37 2009 +0100 @@ -51,8 +51,8 @@ var text = this.httpReq.responseText; if ( isLoginPrompt (text) ) { var self = this; - setTimeout(self.doFetchFeed(), 100); -// login(function(){self.doFetchFeed();}); +// setTimeout(self.doFetchFeed(), 100); + login(function(){self.doFetchFeed();}); return; } diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/Forums.js --- a/Symbian.org/Forums.js Mon Aug 10 11:26:10 2009 +0100 +++ b/Symbian.org/Forums.js Fri Aug 21 16:39:37 2009 +0100 @@ -489,12 +489,15 @@ case 'left': return '
' + bbcode2html(tagContent) + '
'; case 'right': return '
' + bbcode2html(tagContent) + '
'; case 'center': return '
' + bbcode2html(tagContent) + '
'; - case 'list': return tagContent; // todo + case 'list':{ + tagContent = tagContent.replace(/\[\*\]/g, "
• "); + return bbcode2html(tagContent); // todo + } case 'php': - case 'code': return '
' + tagContent + '
'; + case 'code': case 'html':{ var escaped = tagContent.replace(//g, ">"); - return '
' + escaped + '
'; + return '
' + escaped + '
'; } case 'quote': return '
Quote:
' + tagContent + '
'; case 'url': { diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/Main.js --- a/Symbian.org/Main.js Mon Aug 10 11:26:10 2009 +0100 +++ b/Symbian.org/Main.js Fri Aug 21 16:39:37 2009 +0100 @@ -24,7 +24,7 @@ var symbianOrgBaseUrlSsl = "https://developer.symbian.org"; var registrationURL = symbianOrgBaseUrl + "/main/user_profile/register.php"; var blogFeedName = "Symbian Blog"; -var blogFeedUrl = "http://blog.symbian.org/feed/"; +var blogFeedUrl = "http://blog.symbian.org/feed/rss/"; // FORUM vars and settings var symbianOrgNewThreadUrl = symbianOrgBaseUrl+"/forum/newthread.php?"; @@ -32,7 +32,7 @@ var symbianOrgLoginUrl = symbianOrgBaseUrlSsl+"/main/user_profile/login.php"; var symbianOrgLoginUsernameField = "username"; var symbianOrgLoginPasswordField = "password"; -var forumUsername = null ; +var forumUsername = null; var forumPassword = null; // Feed name, URL etc for forums @@ -51,7 +51,7 @@ var wikiBaseUrl = symbianOrgBaseUrl+"/wiki/index.php"; // Update variables -var myversion = "1.0rc14"; +var myversion = "1.0rc16"; var versionWikiPageUrl = wikiBaseUrl + "/Symbian.org_WRT_Widget"; var versionWikiPageString = "Current widget version is ["; var downloadUrl = symbianOrgBaseUrl + "/wiki/images/c/c5/Symbian.org.wgz"; @@ -76,13 +76,13 @@ var forumPasswordControl; // Constants for menu item identifiers. -var MENU_ITEM_SETTINGS = 0; -var MENU_ITEM_REFRESH = 1; -var MENU_ITEM_ABOUT = 2; -var MENU_ITEM_CHECK_UPDATE = 3; -var MENU_ITEM_LARGER_FONT = 4; -var MENU_ITEM_SMALLER_FONT = 5; - +var MENU_ITEM_HOME = 0; +var MENU_ITEM_SETTINGS = 1; +var MENU_ITEM_REFRESH = 2; +var MENU_ITEM_ABOUT = 3; +var MENU_ITEM_CHECK_UPDATE = 4; +var MENU_ITEM_LARGER_FONT = 5; +var MENU_ITEM_SMALLER_FONT = 6; // Flag indicating weather the web site login has been initiated var loginInitiated = false; var loginInitiatedCallback = null; @@ -102,7 +102,6 @@ var currentFontSize = 14; - // Called from the onload event handler to initialize the widget. function init() { @@ -112,6 +111,9 @@ widget.setNavigationEnabled(false); window.menu.showSoftkeys(); // create menu + var homeMenuItem = new MenuItem("Home", MENU_ITEM_HOME); + homeMenuItem.onSelect = menuItemSelected; + menu.append(homeMenuItem); var refreshMenuItem = new MenuItem("Refresh", MENU_ITEM_REFRESH); refreshMenuItem.onSelect = menuItemSelected; menu.append(refreshMenuItem); @@ -121,10 +123,10 @@ var updateMenuItem = new MenuItem("Check for updates", MENU_ITEM_CHECK_UPDATE); updateMenuItem.onSelect = menuItemSelected; menu.append(updateMenuItem); - var largerFontMenuItem = new MenuItem("Larger font", MENU_ITEM_LARGER_FONT); + var largerFontMenuItem = new MenuItem("Large font", MENU_ITEM_LARGER_FONT); largerFontMenuItem.onSelect = menuItemSelected; menu.append(largerFontMenuItem); - var smallerFontMenuItem = new MenuItem("Smaller font", MENU_ITEM_SMALLER_FONT); + var smallerFontMenuItem = new MenuItem("Small font", MENU_ITEM_SMALLER_FONT); smallerFontMenuItem.onSelect = menuItemSelected; menu.append(smallerFontMenuItem); var aboutMenuItem = new MenuItem("About", MENU_ITEM_ABOUT); @@ -175,7 +177,7 @@ blog = new RssReader(blogFeedName, blogFeedUrl, null, home, null); // create wiki screen - wiki = new RssReader(wikiFeedName, wikiFeedUrl, new ButtonFeedPresenter(null), home, null); + wiki = new WikiHome(home);// new RssReader(wikiFeedName, wikiFeedUrl, new ButtonFeedPresenter(null), home, null); // wiki feed contains full article text for many articles // this takes up a _lot_ of memory. Also we don't @@ -236,7 +238,6 @@ home.show(); setDefaultFontSizeForScreenSize(); -// login(null); } // Callback for when menu items are selected. @@ -252,14 +253,20 @@ uiManager.hideNotification(); settings.show(); break; + case MENU_ITEM_HOME: + currentView = home; + home.show(); + break; case MENU_ITEM_REFRESH: currentView.update(true); break; case MENU_ITEM_LARGER_FONT: - increaseFontSize(); + setLargeView(); +// increaseFontSize(); break; case MENU_ITEM_SMALLER_FONT: - decreaseFontSize(); + setSmallView(); +// decreaseFontSize(); break; case MENU_ITEM_CHECK_UPDATE: checkForUpdates(); @@ -375,24 +382,34 @@ function setDefaultFontSizeForScreenSize(){ // first check if there is a preference present if (window.widget) { - var saved = widget.preferenceForKey("fontsize"); - if ( widget.preferenceForKey("fontsize") ) { - setCssBodyFontSize(parseInt(saved)); - } - else { +// var saved = widget.preferenceForKey("fontsize"); +// if ( widget.preferenceForKey("fontsize") ) { +// setCssBodyFontSize(parseInt(saved)); +// } +// else { // no preference available, check screen size if (window.screen.width > 400 || window.screen.height > 400) { // hi res screen, use large font - setCssBodyFontSize(30); + setLargeView(); } else { // lo res screen, use small font - setCssBodyFontSize(14); + setSmallView(); } - } +// } } } +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 increaseFontSize(){ if (window.widget) { setCssBodyFontSize(currentFontSize + 2); @@ -422,6 +439,6 @@ } else { url += "&"; } - url += "nocache=" + (new Date().getTime()); + url += "xnocache=" + (new Date().getTime()); return url; } diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/RssReader.js --- a/Symbian.org/RssReader.js Mon Aug 10 11:26:10 2009 +0100 +++ b/Symbian.org/RssReader.js Fri Aug 21 16:39:37 2009 +0100 @@ -54,6 +54,7 @@ if (this.feedItemControls.length > 0 ) { this.feedItemControls[0].setFocused(true); } + this.feedPresenter.addFooterItems(); } uiManager.hideNotification(); } diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/Resources/ContentPanelFoldIcons.png Binary file Symbian.org/WRTKit/Resources/ContentPanelFoldIcons.png has changed diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/Resources/FormButtonCenterLarge.png Binary file Symbian.org/WRTKit/Resources/FormButtonCenterLarge.png has changed diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/Resources/FormButtonLeftLarge.png Binary file Symbian.org/WRTKit/Resources/FormButtonLeftLarge.png has changed diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/Resources/FormButtonRightLarge.png Binary file Symbian.org/WRTKit/Resources/FormButtonRightLarge.png has changed diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/Resources/RadioButton.png Binary file Symbian.org/WRTKit/Resources/RadioButton.png has changed diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/Resources/UI-large.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian.org/WRTKit/Resources/UI-large.css Fri Aug 21 16:39:37 2009 +0100 @@ -0,0 +1,935 @@ + /* +� Copyright 2008 Nokia Corporation. All rights reserved. + +IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia +Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation +and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If +you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example +Widget files. + +In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia +grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example +Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML, +CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60 +Widgets. + +If you redistribute the WRTKit and Example files, you must retain this entire notice in all such +redistributions of the WRTKit and Example files. + +You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products +that include the WRTKit and Example files without the prior written explicit agreement with Nokia. +Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by +Nokia herein, including but not limited to any patent rights that may be infringed by your products that +incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files +may be incorporated. + +The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO +WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED +WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION +ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + +IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR +DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY +OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, +EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +/******************************************************************************/ +/* Definition of visuals for the WRTKit user interface toolkit */ +/******************************************************************************/ + +/* Fix for font size inheritance */ +html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, +blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, +dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, +tfoot, thead, tr, th, td { + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; +} + + +/******************************************************************************/ +/* Document body rules */ + +body { + margin: 0px; + background: url("DocumentBackground.png") repeat; /* repeat-x fixed; */ + font: normal 24px Arial, sans-serif; + color: rgb(0,0,0); +} + + +/******************************************************************************/ +/* Override default WRT styling for HTML form controls */ + +/* Textarea when focused */ +textarea:focus { + outline: none; +} + +/* Textarea when hovering */ +textarea:hover { + outline: none; +} + +/* Select elements when focused */ +select:focus { + outline: none; +} + +/* Select elements when hovering */ +select:hover { + outline: none; +} + +/* Input elements when focused */ +input:focus { + outline: none; +} + +/* Input elements when hovering */ +input:hover { + outline: none; +} + +/* Link elements */ +a { + text-decoration: none; + color: rgb(0,0,0); +} + +/* Links when focused */ +a:focus { + background: none; + outline: none; +} + +/* Links when hovering */ +a:hover { + background: none; + outline: none; +} + + +/******************************************************************************/ +/* Rules for default view and document scrollbar containers */ + +/* Default view container rules */ +.ViewContainer { + margin: 0px 0px 0px 0px; +} + +/* Default document scrollbar container rules */ +.DocumentScrollbarContainer { + position: fixed; + right: 0px; + top: 0px; + height: 100%; + width: 7px; +} + + +/******************************************************************************/ +/* View style rules */ + +/* Rules for the list view */ +.ListView { + margin: 0px 0px 0px 0px; +} + +/* Rules for the list view caption */ +.ListViewCaption { + background: url("ListViewCaptionBackground.png"); + height: 35px; +} + +/* Rules for the list view caption text */ +.ListViewCaptionText { + font-size: 1.1em; + font-weight: bold; + padding: 7px 0px 0px 11px; +} + +/* Rules for the list view control list element */ +.ListViewControlList { + margin: 1px 10px 1px 3px; +} + + +/******************************************************************************/ +/* Control style rules */ + +/* Rules for control root element (rootElement) */ +.Control { + min-height: 60; +} + +/* Control assembly rules (assemblyElement) */ +.ControlAssembly { + background: url("ControlAssemblyBackground.png") repeat-x; + padding: 1px 5px; + min-height: 60; +} + +/* Control assembly in normal state */ +.ControlAssemblyNormal { + background-position: 0px 0px; +} + +/* Control assembly in focused state */ +.ControlAssemblyFocus { + background-position: 0px -250px; +} + +/* Control assembly in hovering state */ +.ControlAssemblyHover { + background-position: 0px -500px; +} + +/* Control assembly in disabled state */ +.ControlAssemblyDisabled { + background-position: 0px 0px; +} + +/* Caption for controls (captionElement) */ +.ControlCaption { + font-weight: bold; + padding: 3px 0px 0px 3px; +} + +/* Caption for controls in normal state */ +.ControlCaptionNormal { + +} + +/* Caption for controls when focused */ +.ControlCaptionFocus { + color: rgb(0,0,0); +} + +/* Caption for controls when hovering */ +.ControlCaptionHover { + +} + +/* Caption for controls when disabled */ +.ControlCaptionDisabled { + color: rgb(125,125,125); +} + +/* Control element rules (controlElement) */ +.ControlElement { + padding: 3px 3px 3px 3px; +} + +/******************************************************************************/ +/* Label */ + +/* Rules for the text value of a Label control */ +.LabelText { + +} + +/******************************************************************************/ +/* TextPane */ + +/* Rules for the text value of a TextPane control */ +.TextPane { + background: rgb(255,255,255); + font: normal 14px Arial, sans-serif; +} + +/******************************************************************************/ +/* ContentPanel */ + +/* Caption area rules for non-foldable content panels */ +.ContentPanelCaptionNonFoldable { + padding: 3px 0px 0px 3px; +} + +/* Caption area rules for foldable content panels */ +.ContentPanelCaptionFoldable { + padding: 4px 0px 3px 3px; +} + +/* Rules for fold toggling element in content panel */ +.ContentPanelFoldToggle { + background: url("ContentPanelFoldIcons.png") no-repeat; + padding-left: 16px; +} + +/* Collapsed fold */ +.ContentPanelFoldToggleCollapsed { + background-position: 0px 0px; +} + +/* Expanded fold */ +.ContentPanelFoldToggleExpanded { + background-position: 0px -100px; +} + +/* Rules for the content panel caption text */ +.ContentPanelCaptionText { + font-weight: bold; +} + +/* Caption text for content panel in normal state */ +.ContentPanelCaptionTextNormal { + +} + +/* Caption text for content panel when focused */ +.ContentPanelCaptionTextFocus { + color: rgb(0,0,0); +} + +/* Caption text for content panel when hovering */ +.ContentPanelCaptionTextHover { + +} + +/* Caption text for content panel when disabled */ +.ContentPanelCaptionTextDisabled { + color: rgb(125,125,125); +} + +/* Rules for content in the content panel */ +.ContentPanelContent { + padding: 2px 2px 2px 8px; +} + + +/******************************************************************************/ +/* FormButton */ + +/* Rules for form button */ +.FormButton { + +} + +/* Rules for form button control element */ +.FormButtonControlElement { + +} + +/* Rules for form button table (table) */ +.FormButtonTable { + width: 100%; + border-spacing: 0px; + padding: 0px; + table-layout: fixed; +} + +/* Form button row (tr) */ +.FormButtonRow { + padding: 0px; +} + +/* Rules for form button left cell (td) */ +.FormButtonLeftCell { + width: 8px; + height: 60px; + background: url("FormButtonLeftLarge.png") no-repeat; + padding: 0px; +} + +/* Rules for form button center cell (td) */ +.FormButtonCenterCell { + height: 60px; + background: url("FormButtonCenterLarge.png") repeat-x; + padding: 0px; + vertical-align: middle; + text-align: center; +} + +/* Rules for form button right cell (td) */ +.FormButtonRightCell { + width: 8px; + height: 60px; + background: url("FormButtonRightLarge.png") no-repeat; + padding: 0px; +} + +/* Rules for form button left cell in normal state (td) */ +.FormButtonLeftCellNormal { + background-position: 0px 0px; +} + +/* Rules for form button left cell in focused state (td) */ +.FormButtonLeftCellFocus { + background-position: 0px -120px; +} + +/* Rules for form button left cell in hover state (td) */ +.FormButtonLeftCellHover { + background-position: 0px -240px; +} + +/* Rules for form button left cell in disabled state (td) */ +.FormButtonLeftCellDisabled { + background-position: 0px -360px; +} + +/* Rules for form button center cell in normal state (td) */ +.FormButtonCenterCellNormal { + background-position: 0px 0px; +} + +/* Rules for form button center cell in focused state (td) */ +.FormButtonCenterCellFocus { + background-position: 0px -120px; +} + +/* Rules for form button center cell in hover state (td) */ +.FormButtonCenterCellHover { + background-position: 0px -240px; +} + +/* Rules for form button center cell in disabled state (td) */ +.FormButtonCenterCellDisabled { + background-position: 0px -360px; +} + +/* Rules for form button left cell in normal state (td) */ +.FormButtonRightCellNormal { + background-position: 0px 0px; +} + +/* Rules for form button left cell in focused state (td) */ +.FormButtonRightCellFocus { + background-position: 0px -120px; +} + +/* Rules for form button left cell in hover state (td) */ +.FormButtonRightCellHover { + background-position: 0px -240px; +} + +/* Rules for form button left cell in disabled state (td) */ +.FormButtonRightCellDisabled { + background-position: 0px -360px; +} + +/* Rules for form button text */ +.FormButtonText { + font-weight: bold; +} + +/* Form button text in normal state */ +.FormButtonTextNormal { + color: rgb(255,255,255); +} + +/* Form button text when focused */ +.FormButtonTextFocus { + color: rgb(255,255,255); +} + +/* Form button text when hovering */ +.FormButtonTextHover { + color: rgb(255,255,255); +} + +/* Form button text when disabled */ +.FormButtonTextDisabled { + color: rgb(200,200,200); +} + + +/******************************************************************************/ +/* NavigationButton */ + +/* Rules for navigation button */ +.NavigationButton { + +} + +/* Rules for navigation button control element */ +.NavigationButtonControlElement { + padding: 3px 3px 3px 3px; +} + +/* Rules for navigation button table (table) */ +.NavigationButtonTable { + border-spacing: 0px; + padding: 0px; +} + +/* Navigation button row (tr) */ +.NavigationButtonRow { + padding: 0px; +} + +/* Rules for navigation button image cell (td) */ +.NavigationButtonImageCell { + line-height: 1px; + font-size: 1px; + vertical-align: middle; +} + +/* Rules for navigation button text cell (td) */ +.NavigationButtonTextCell { + vertical-align: middle; + padding: 0px; +} + +/* Rules for navigation button image */ +.NavigationButtonImage { + padding: 0px 5px 0px 0px; +} + +/* Rules for navigation button text */ +.NavigationButtonText { + font-weight: bold; +} + +/* Navigation button text in normal state */ +.NavigationButtonTextNormal { + +} + +/* Navigation button text when focused */ +.NavigationButtonTextFocus { + color: rgb(0,0,0); +} + +/* Navigation button text when hovering */ +.NavigationButtonTextHover { + +} + +/* Navigation button text when disabled */ +.NavigationButtonTextDisabled { + color: rgb(125,125,125); +} + + +/******************************************************************************/ +/* TextField */ + +/* Rules for textField */ +.TextField { + width: 100%; + min-height: 50px; + border: 1px solid rgb(0,0,0); + background: rgb(255,255,255); + margin: 0px 0px 3px 0px; +} + +/* TextField in normal state */ +.TextFieldNormal { + +} + +/* TextField in focus state */ +.TextFieldFocus { + +} + +/* TextField in hover state */ +.TextFieldHover { + +} + +/* TextField in disabled state */ +.TextFieldDisabled { + color: rgb(50,50,50); + background: rgb(200,200,200); +} + + +/******************************************************************************/ +/* TextArea */ + +/* Rules for TextArea */ +.TextArea { + width: 100%; + border: 1px solid rgb(0,0,0); + background: rgb(255,255,255); + margin: 0px 0px 3px 0px; +} + +/* TextArea in normal state */ +.TextAreaNormal { + +} + +/* TextArea in focus state */ +.TextAreaFocus { + +} + +/* TextArea in hover state */ +.TextAreaHover { + +} + +/* TextArea in disabled state */ +.TextAreaDisabled { + color: rgb(50,50,50); + background: rgb(200,200,200); +} + + +/******************************************************************************/ +/* Separator */ + +/* Rules for Separator (table) */ +.Separator { + width: 100%; + padding: 0px; + border-spacing: 0px; + table-layout: fixed; + margin: 3px 0px; +} + +/* Separator row (tr) */ +.SeparatorRow { + padding: 0px; +} + +/* Separator left cell (td) */ +.SeparatorLeftCell { + width: 5px; + height: 2px; + background: url("SeparatorLeft.png") no-repeat; + padding: 0px; +} + +/* Separator center cell (td) */ +.SeparatorCenterCell { + height: 2px; + background: url("SeparatorCenter.png") repeat-x; + padding: 0px; +} + +/* Separator right cell (td) */ +.SeparatorRightCell { + width: 6px; + height: 2px; + background: url("SeparatorRight.png") no-repeat; + padding: 0px; +} + + +/******************************************************************************/ +/* SelectionMenu */ + +/* Rules for SelectionMenu select element */ +.SelectionMenu { + width: 100%; + border: 1px solid rgb(0,0,0); + background: rgb(255,255,255); + margin: 0px 0px 3px 0px; +} + +/* SelectionMenu in normal state */ +.SelectionMenuNormal { + +} + +/* SelectionMenu in focus state */ +.SelectionMenuFocus { + +} + +/* SelectionMenu in hover state */ +.SelectionMenuHover { + +} + +/* SelectionMenu in disabled state */ +.SelectionMenuDisabled { + color: rgb(50,50,50); + background: rgb(200,200,200); +} + +/* Rules for SelectionMenu option elements */ +.SelectionMenuOption { + min-height: 60; + background: rgb(255,255,255); +} + +/* SelectionMenu option in normal state */ +.SelectionMenuOptionNormal { + +} + +/* SelectionMenu option in focus state */ +.SelectionMenuOptionFocus { + +} + +/* SelectionMenu option in hover state */ +.SelectionMenuOptionHover { + +} + +/* SelectionMenu option in disabled state */ +.SelectionMenuOptionDisabled { + color: rgb(50,50,50); + background: rgb(200,200,200); +} + + +/******************************************************************************/ +/* SelectionList */ + +/* SelectionList option list element */ +.SelectionList { + +} + +/* SelectionList option list element in normal state */ +.SelectionListNormal { + +} + +/* SelectionList option list element in focus state */ +.SelectionListFocus { + +} + +/* SelectionList option list element in hover state */ +.SelectionListHover { + +} + +/* SelectionList option list element in disabled state */ +.SelectionListDisabled { + +} + +/* SelectionList option element in single selection mode */ +.SelectionListOptionSingle { + padding-left: 19px; + background: url("RadioButton.png") no-repeat; + min-height: 50px; +} + +/* SelectionList option element in single selection mode, unchecked normal state */ +.SelectionListOptionSingleUncheckedNormal { + background-position: 0px 10px; +} + +/* SelectionList option element in single selection mode, unchecked focus state */ +.SelectionListOptionSingleUncheckedFocus { + background-position: 0px -40px; +} + +/* SelectionList option element in single selection mode, unchecked diabled state */ +.SelectionListOptionSingleUncheckedDisabled { + background-position: 0px -90px; +} + +/* SelectionList option element in single selection mode, checked normal state */ +.SelectionListOptionSingleCheckedNormal { + background-position: 0px -140px; +} + +/* SelectionList option element in single selection mode, checked focus state */ +.SelectionListOptionSingleCheckedFocus { + background-position: 0px -190px; +} + +/* SelectionList option element in single selection mode, checked diabled state */ +.SelectionListOptionSingleCheckedDisabled { + background-position: 0px -240px; +} + +/* SelectionList option element in multi selection mode */ +.SelectionListOptionMulti { + padding-left: 19px; + background: url("CheckBox.png") no-repeat; + min-height: 50px; +} + +/* SelectionList option element in multi selection mode, unchecked normal state */ +.SelectionListOptionMultiUncheckedNormal { + background-position: 0px 0px; +} + +/* SelectionList option element in multi selection mode, unchecked focus state */ +.SelectionListOptionMultiUncheckedFocus { + background-position: 0px -50px; +} + +/* SelectionList option element in multi selection mode, unchecked diabled state */ +.SelectionListOptionMultiUncheckedDisabled { + background-position: 0px -100px; +} + +/* SelectionList option element in multi selection mode, checked normal state */ +.SelectionListOptionMultiCheckedNormal { + background-position: 0px -150px; +} + +/* SelectionList option element in multi selection mode, checked focus state */ +.SelectionListOptionMultiCheckedFocus { + background-position: 0px -200px; +} + +/* SelectionList option element in multi selection mode, checked diabled state */ +.SelectionListOptionMultiCheckedDisabled { + background-position: 0px -250px; +} + +/* SelectionList option text */ +.SelectionListOptionText { + +} + +/* SelectionList option text in normal state */ +.SelectionListOptionTextNormal { + +} + +/* SelectionList option text in focus state */ +.SelectionListOptionTextFocus { + color: rgb(0,0,0); +} + +/* SelectionList option text in hover state */ +.SelectionListOptionTextHover { + +} + +/* SelectionList option text in disabled state */ +.SelectionListOptionTextDisabled { + color: rgb(125,125,125); +} + + +/******************************************************************************/ +/* Scrollbar */ + +/* Scrollbar root element */ +.Scrollbar { + position: absolute; + height: 100%; + width: 7px; +} + +/* Top portion of scrollbar track */ +.ScrollbarTrackTop { + position: absolute; + background: url("ScrollbarTrackTop.png") no-repeat; + width: 7px; + height: 4px; +} + +/* Middle portion of scrollbar track */ +.ScrollbarTrackMiddle { + position: absolute; + background: url("ScrollbarTrackMiddle.png") repeat-y; + width: 7px; +} + +/* Bottom portion of scrollbar track */ +.ScrollbarTrackBottom { + position: absolute; + background: url("ScrollbarTrackBottom.png") no-repeat; + width: 7px; + height: 4px; +} + +/* Top portion of scrollbar thumb */ +.ScrollbarThumbTop { + position: absolute; + background: url("ScrollbarThumbTop.png") no-repeat; + width: 7px; + height: 5px; +} + +/* Middle portion of scrollbar thumb */ +.ScrollbarThumbMiddle { + position: absolute; + background: url("ScrollbarThumbMiddle.png") repeat-y; + width: 7px; +} + +/* Bottom portion of scrollbar thumb */ +.ScrollbarThumbBottom { + position: absolute; + background: url("ScrollbarThumbBottom.png") no-repeat; + width: 7px; + height: 5px; +} + + +/******************************************************************************/ +/* NotificationPopup */ + +/* Container that defines the area for the popup dialog */ +.NotificationPopupContainer { + position: fixed; + bottom: 0px; + left: 50%; + margin-left: -115px; + width: 230px; + height: 85px; +} + +/* Notification popup dialog */ +.NotificationPopup { + position: absolute; + width: 230px; + height: 85px; + background: url("NotificationPopupBackground.png") repeat-x; + border: 1px solid rgb(0,0,0); +} + +/* Notification type indicator */ +.NotificationPopupTypeIndicator { + position: absolute; + left: 195px; + top: 10px; + width: 24px; + height: 34px; + background: url("NotificationPopupTypeIndicator.png") no-repeat; +} + +/* Notification type indicator for notifications of undefined type */ +.NotificationPopupTypeIndicatorNone { + background-position: 0px 0px; +} + +/* Notification type indicator for info notifications */ +.NotificationPopupTypeIndicatorInfo { + background-position: 0px -50px; +} + +/* Notification type indicator for warning notifications */ +.NotificationPopupTypeIndicatorWarning { + background-position: 0px -100px; +} + +/* Notification type indicator for wait notifications */ +.NotificationPopupTypeIndicatorWait { + background-position: 0px -150px; +} + +/* Notification text area */ +.NotificationPopupText { + position: absolute; + left: 10px; + top: 8px; + width: 180px; + height: 50px; +} + +/* Progress bar */ +.NotificationPopupProgressBar { + position: absolute; + left: 6px; + top: 60px; + width: 218px; + height: 16px; +} diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/Resources/UI.css --- a/Symbian.org/WRTKit/Resources/UI.css Mon Aug 10 11:26:10 2009 +0100 +++ b/Symbian.org/WRTKit/Resources/UI.css Fri Aug 21 16:39:37 2009 +0100 @@ -168,7 +168,7 @@ /* Rules for control root element (rootElement) */ .Control { - + } /* Control assembly rules (assemblyElement) */ @@ -236,6 +236,14 @@ } +/******************************************************************************/ +/* TextPane */ + +/* Rules for the text value of a TextPane control */ +.TextPane { + background: rgb(255,255,255); + font: normal 14px Arial, sans-serif; +} /******************************************************************************/ /* ContentPanel */ @@ -700,7 +708,7 @@ .SelectionListOptionSingle { padding-left: 19px; background: url("RadioButton.png") no-repeat; - height: 16px; + height: 25px; } /* SelectionList option element in single selection mode, unchecked normal state */ @@ -737,7 +745,7 @@ .SelectionListOptionMulti { padding-left: 19px; background: url("CheckBox.png") no-repeat; - height: 16px; + height: 25px; } /* SelectionList option element in multi selection mode, unchecked normal state */ diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/UI/TextPane.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian.org/WRTKit/UI/TextPane.js Fri Aug 21 16:39:37 2009 +0100 @@ -0,0 +1,73 @@ +// //////////////////////////////////////////////////////////////////////////// +// 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. +// //////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +// The TextPane class implements a control that displays HTML content. + +// Constructor. +function TextPane(id, caption, text) { + if (id != UI_NO_INIT_ID) { + this.init(id, caption, text); + } +} + +// TextPane inherits from Control. +TextPane.prototype = new Control(UI_NO_INIT_ID); + +// Content element for TextPane text. +TextPane.prototype.contentElement = null; + +// Initializer - called from constructor. +TextPane.prototype.init = function(id, caption, text) { + uiLogger.debug("TextPane.init(" + id + ", " + caption + ", " + text + ")"); + + // call superclass initializer + Control.prototype.init.call(this, id, caption); + + // create content element + this.contentElement = document.createElement("div"); + this.controlElement.appendChild(this.contentElement); + + // set the text + this.setText(text); +} + +// Returns the enabled state for the control. +TextPane.prototype.isEnabled = function() { + return true; +} + +// Returns the focusable state for the control. +TextPane.prototype.isFocusable = function() { + return false; +} + +// Returns the control text. +TextPane.prototype.getText = function() { + return this.contentElement.innerHTML; +} + +// Sets the text for the control. +TextPane.prototype.setText = function(text) { + uiLogger.debug("TextPane.setText(" + text + ")"); + this.contentElement.innerHTML = (text == null) ? "" : text; + this.updateStyleFromState(); +} + +// Updates the style of the control to reflects the state of the control. +TextPane.prototype.updateStyleFromState = function() { + uiLogger.debug("TextPane.updateStyleFromState()"); + + // set element class names + this.setClassName(this.rootElement, "TextPane"); +// this.setClassName(this.assemblyElement, "ControlAssembly ControlAssemblyNormal"); +// this.setClassName(this.captionElement, "ControlCaption ControlCaptionNormal"); +// this.setClassName(this.controlElement, "ControlElement"); +// this.setClassName(this.contentElement, "TextPane"); +} diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/UI/View.js --- a/Symbian.org/WRTKit/UI/View.js Mon Aug 10 11:26:10 2009 +0100 +++ b/Symbian.org/WRTKit/UI/View.js Fri Aug 21 16:39:37 2009 +0100 @@ -112,6 +112,9 @@ // show the view - sets up soft keys View.prototype.show = function () { this.setupSoftKeys(); + if (window.widget) { + widget.setNavigationEnabled(false); + } this.update(false); uiManager.setView(this); } diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/WRTKit/WRTKit.js --- a/Symbian.org/WRTKit/WRTKit.js Mon Aug 10 11:26:10 2009 +0100 +++ b/Symbian.org/WRTKit/WRTKit.js Fri Aug 21 16:39:37 2009 +0100 @@ -52,7 +52,7 @@ includeScript("WRTKit/Utils/Logger.js"); // Include UI visual definition. -includeStyleSheet("WRTKit/Resources/UI.css"); +//includeStyleSheet("WRTKit/Resources/UI.css"); // included in index.html // Include all UI toolkit script files. var UI_NO_INIT_ID = "UI_NO_INIT_ID"; @@ -77,6 +77,7 @@ includeScript("WRTKit/UI/ActionControl.js"); includeScript("WRTKit/UI/FormButton.js"); includeScript("WRTKit/UI/NavigationButton.js"); +includeScript("WRTKit/UI/TextPane.js"); includeScript("WRTKit/UI/TabView.js"); includeScript("WRTKit/UI/Ajax.js"); includeScript("WRTKit/UI/ImageLabel.js"); diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/Wiki.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian.org/Wiki.js Fri Aug 21 16:39:37 2009 +0100 @@ -0,0 +1,238 @@ +// //////////////////////////////////////////////////////////////////////////// +// 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 resultsPerPage = 30; + +var wikiSearchBaseUrl = symbianOrgBaseUrl + "/wiki/api.php?format=xml&action=query&list=search&srsearch="; +var wikiSearchOffsetQueryPart = "&sroffset="; +var wikiSearchLimitQueryPart = "&srlimit="; +var wikiSearchWhatQueryPart = "&srwhat="; + +var wikiViewPageUrlBase = symbianOrgBaseUrl + "/wiki/index.php?title="; +var wikiPrintableParam = "&printable=yes"; + + +//var wikiListCategoriesUrl = symbianOrgBaseUrl + "/wiki/api.php?format=xml&action=query&list=allcategories&aclimit=500&acprop=size"; +//var wikiWatchListUrl = "http://en.wikipedia.org/w/api.php?action=query&list=watchlist&wlallrev&wlprop=ids|title|timestamp|user|comment"; +//var wikiWatchListFeed = "/wiki/api.php?action=feedwatchlist&feedformat=rss"; + +var wikiSearchOptions = [ + { value: "title", text: "Search in title only" }, + { value: "text", text: "Full text search" }, +]; + +function WikiHome (parent) { + ListView.prototype.init.call(this, null, createCaption("Symbian Wiki")); + this.previousView = parent; + + this.wikiMainPageButton = new NavigationButton(1, "right.gif", "Browse: Main page"); + this.wikiSearchButton = new FormButton(null, "Search"); + this.wikiSearchSelection = new SelectionList(null, null, wikiSearchOptions, false, wikiSearchOptions[0]); + this.wikiSearchString = new TextField('wikiSearchString', null, ""); + + var self = this; + + this.wikiMainPageButton.addEventListener("ActionPerformed", function(){wikiBrowse("Main Page");}); + this.wikiSearchButton.addEventListener("ActionPerformed", function(){self.search(0);}); + + this.addControl(this.wikiMainPageButton); + this.addControl(new Label(null, "Search Wiki", null)); + this.addControl(this.wikiSearchString); + this.addControl(this.wikiSearchSelection); + this.addControl(this.wikiSearchButton); + + +// wikiBrowseButton = new NavigationButton(1, "right.gif", "Browse categories"); +// wikiBrowseButton.addEventListener("ActionPerformed", function(){browseWikiCategories.show();}); +// this.addControl(wikiBrowseButton); + +} + +WikiHome.prototype = new ListView(null, null); +WikiHome.prototype.wikiMainPageButton = null; +WikiHome.prototype.wikiSearchButton = null; +WikiHome.prototype.wikiSearchString = null; +WikiHome.prototype.wikiSearchSelection = null; + +var lastWikiSearchWasFrom = 0; +var lastWikiSearchResultCountWas = 0; + +WikiHome.prototype.search = function(from) { + lastWikiSearchWasFrom = from; + var srstring = this.wikiSearchString.getText(); + var selectedTitleOrText = this.wikiSearchSelection.getSelected(); + var titleOrText = (selectedTitleOrText != null) ? selectedTitleOrText.value : "title"; + var url = this.formSearchUrl( srstring , from, resultsPerPage, titleOrText ); + var reader = new RssReader("Wiki: " + srstring, url, new WikiFeedPresenter(null), this, wikiResponseParser); + reader.show(); +} + +WikiHome.prototype.formSearchUrl = function(query, offset, limit, what) { + var buf = wikiSearchBaseUrl + query + if (offset > 0) { + buf += wikiSearchOffsetQueryPart + offset; + } + buf += wikiSearchLimitQueryPart + limit + buf += wikiSearchWhatQueryPart + what; + return buf; +} + + +// ///////////////////////////////////////////////////////////////////////////// +// RssReader customisations + +// response parser for forum groups +function wikiResponseParser(broker, responseStatus, xmlDoc) { + if (responseStatus == 200 && xmlDoc != null) { + // for compatibility with rss + var lastModified = new Date(); + + // init result items array + var items = []; + + var elements = xmlDoc.getElementsByTagName("p"); + + for (var i = 0; i < elements.length; i++) { + var pagetitle = elements[i].getAttribute("title"); + items.push({ id: ""+i, title: pagetitle}); + } + + lastWikiSearchResultCountWas = elements.length; + // update was completed successfully + return { status: "ok", lastModified: lastModified, items: items }; + } else { + // update failed + return { status: "error" }; + } +} + +// FeedPresenter implementation for wiki +function WikiFeedPresenter(rssreader){ + if (rssreader) { + this.init(rssreader); + } +} + +// WikiFeedPresenter is a subclass of ButtonFeedPresenter +WikiFeedPresenter.prototype = new ButtonFeedPresenter(null); + +// WikiFeedPresenter "Constructor" +WikiFeedPresenter.prototype.init = function(rssreader) { + ButtonFeedPresenter.prototype.init.call(this, rssreader); +} + +// Handle the click on a specific item +WikiFeedPresenter.prototype.feedClicked = function(event){ + var buttonid = event.source.id; + + if (buttonid == "Next page") { + wiki.search(lastWikiSearchWasFrom + resultsPerPage); + } + else if (buttonid == "Previous page") { + var from = lastWikiSearchWasFrom - resultsPerPage; + if ( from < 0 ) from = 0; + wiki.search(from); + } + else { + // show article + var title = this.items[buttonid].title; + wikiBrowse(title); + } +} + +// Create and add controls to be shown before items list. +WikiFeedPresenter.prototype.addFooterItems = function(){ + var self = this; + if (lastWikiSearchResultCountWas == resultsPerPage) { + var nextPageButton = new NavigationButton("Next page", "blueright.gif", "Next page"); + nextPageButton.addEventListener("ActionPerformed", function(event){ self.feedClicked(event); }); + this.rssreader.addControl(nextPageButton); + } + if (lastWikiSearchWasFrom > 0) { + var prevPageButton = new NavigationButton("Previous page", "blueright.gif", "Previous page"); + prevPageButton.addEventListener("ActionPerformed", function(event) { self.feedClicked(event); }); + this.rssreader.addControl(prevPageButton); + } +} + + +// ///////////////////////////////////////////////////////////////////////////////// +// Browse / view wiki pages in 'printable format' +var wikiAjax; +var pageBeingShown; +function wikiBrowse(page) { + pageBeingShown = page; + uiManager.showNotification(-1, "wait", "Loading page...", -1); + if ( page ) { + wikiAjax = new Ajax(); + + wikiAjax.onreadystatechange = function() { wikiPageDownloadStateChanged(); }; + + var url = wikiViewPageUrlBase + encodeURIComponent(page) + wikiPrintableParam; + // initiate the request + wikiAjax.open("GET", url, true); + wikiAjax.send(null); + } +} + +function wikiPageDownloadStateChanged() { + if (wikiAjax.readyState == 4) { + uiManager.hideNotification(); + var html = wikiAjax.responseText; + var start = html.indexOf('
'); + var end = findDivEnd(html, start); + var pageView = new ListView(null, createCaption(pageBeingShown)); + var container = new TextPane(null, null, modWikiLinks(html.substring(start, end))); + pageView.addControl(container); + pageView.previousView = uiManager.currentView; + pageView.show(); + if (window.widget) { + widget.setNavigationEnabled(true); + } + } +} + +function modWikiLinks(text) { + var tmp = text.replace(/ src="/g, ' src="http://developer.symbian.org'); + // images sorted. now links + var strToLookFor = ' href="/wiki/index.php/'; + var from = 0; + var ind = tmp.indexOf(strToLookFor); + var buf =""; + while ( ind > 0 ) { + buf = buf + tmp.substring(from, ind); + // extract page name + var ind2 = tmp.indexOf('"', ind + strToLookFor.length); + var pageName = tmp.substring(ind + strToLookFor.length, ind2); + buf += " style=\"text-decoration: underline;\" href=\"JavaScript:void(0)\" onclick=\"wikiBrowse('" + pageName + "'); return false;\""; + from = ind2; + ind = tmp.indexOf(strToLookFor, from); + } + buf = buf + tmp.substring(from); + return buf; +} + +function findDivEnd(text, from) { + var openDivCount = 1; + var divind = text.indexOf(" 0 && divind > 0 && cdivind > 0 ) { + pos = Math.min(divind, cdivind); + if ( pos == divind ) { + openDivCount ++; + } + if ( pos == cdivind ) { + openDivCount --; + } + divind = text.indexOf(" + + diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/right.gif Binary file Symbian.org/right.gif has changed diff -r 5dc2963cd75f -r b73e6caf0031 Symbian.org/wrt_preview_main.html --- a/Symbian.org/wrt_preview_main.html Mon Aug 10 11:26:10 2009 +0100 +++ b/Symbian.org/wrt_preview_main.html Fri Aug 21 16:39:37 2009 +0100 @@ -13,6 +13,8 @@ + +