Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/tutorial.js |
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/tutorial.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/tutorial.js |
index 38127b92f78b104734b4c163cc230e3c1be7a359..123f9f24b61d9661486f0800327bdfe03b2c16e5 100644 |
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/tutorial.js |
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/tutorial.js |
@@ -19,7 +19,10 @@ Tutorial = function() { |
* @type {number} |
* @private |
*/ |
- this.page_ = 0; |
+ this.page_; |
+ |
+ this.page = sessionStorage['tutorial_page_pos'] !== undefined ? |
+ sessionStorage['tutorial_page_pos'] : 0; |
}; |
/** |
@@ -28,7 +31,7 @@ Tutorial = function() { |
* a message ID for some text, and optional attributes indicating if it's |
* a heading, link, text for only one platform, etc. |
* |
- * @type Array<Object> |
+ * @type Array<Array<Object>> |
*/ |
Tutorial.PAGES = [ |
[ |
@@ -57,6 +60,8 @@ Tutorial.PAGES = [ |
[ |
{ msgid: 'tutorial_jump_heading', heading: true }, |
{ msgid: 'tutorial_jump' }, |
+ { msgid: 'tutorial_jump_second_heading', heading: true }, |
+ { msgid: 'tutorial_jump_wrap_heading', heading: true }, |
{ msgid: 'tutorial_click_next' }, |
], |
[ |
@@ -67,8 +72,7 @@ Tutorial.PAGES = [ |
[ |
{ msgid: 'tutorial_chrome_shortcuts_heading', heading: true }, |
{ msgid: 'tutorial_chrome_shortcuts' }, |
- { msgid: 'tutorial_chromebook_ctrl_forward', chromebookOnly: true }, |
- { msgid: 'tutorial_chromeos_ctrl_f2', chromebookOnly: false }, |
+ { msgid: 'tutorial_chromebook_ctrl_forward', chromebookOnly: true } |
], |
[ |
{ msgid: 'tutorial_learn_more_heading', heading: true }, |
@@ -83,53 +87,129 @@ Tutorial.PAGES = [ |
]; |
Tutorial.prototype = { |
- /** Open the first page in the tutorial. */ |
- firstPage: function() { |
- this.page_ = 0; |
- this.showPage_(); |
+ /** Open the last viewed page in the tutorial. */ |
+ lastViewedPage: function() { |
+ this.page = sessionStorage['tutorial_page_pos'] !== undefined ? |
+ sessionStorage['tutorial_page_pos'] : 0; |
+ if (this.page == -1) |
+ this.page = 0; |
+ this.showCurrentPage_(); |
+ }, |
+ |
+ /** Open the update notes page. */ |
+ updateNotes: function() { |
+ delete sessionStorage['tutorial_page_pos']; |
+ this.page = -1; |
+ this.showPage_([ |
+ { msgid: 'update_56_title', heading: true }, |
+ { msgid: 'update_56_intro' }, |
+ { |
+ list: true, |
+ items: [ |
+ {msgid: 'update_56_item_1', listItem: true}, |
+ {msgid: 'update_56_item_2', listItem: true}, |
+ {msgid: 'update_56_item_3', listItem: true}, |
+ ], |
+ }, |
+ { msgid: 'update_56_OUTTRO' }, |
+ ]); |
}, |
/** Move to the next page in the tutorial. */ |
nextPage: function() { |
- if (this.page_ < Tutorial.PAGES.length - 1) { |
- this.page_++; |
- this.showPage_(); |
+ if (this.page < Tutorial.PAGES.length - 1) { |
+ this.page++; |
+ this.showCurrentPage_(); |
} |
}, |
/** Move to the previous page in the tutorial. */ |
previousPage: function() { |
- if (this.page_ > 0) { |
- this.page_--; |
- this.showPage_(); |
+ if (this.page > 0) { |
+ this.page--; |
+ this.showCurrentPage_(); |
} |
}, |
/** |
- * Recreate the tutorial DOM for page |this.page_|. |
+ * Shows the page for page |this.page_|. |
+ */ |
+ showCurrentPage_: function() { |
+ var pageElements = Tutorial.PAGES[this.page] || []; |
+ this.showPage_(pageElements); |
+ }, |
+ |
+ /** |
+ * Recreate the tutorial DOM using |pageElements|. |
+ * @param {!Array<Object>} pageElements |
* @private |
*/ |
- showPage_: function() { |
+ showPage_: function(pageElements) { |
var tutorialContainer = $('tutorial_main'); |
tutorialContainer.innerHTML = ''; |
+ this.buildDom_(pageElements, tutorialContainer); |
+ this.finalizeDom_(); |
+ }, |
- var pageElements = Tutorial.PAGES[this.page_]; |
+ /** |
+ * Builds a dom under the container |
+ * @param {!Array<Object>} pageElements |
+ * @param {!Node} container |
+ * @private |
+ */ |
+ buildDom_: function(pageElements, container) { |
+ var focus; |
for (var i = 0; i < pageElements.length; ++i) { |
var pageElement = pageElements[i]; |
var msgid = pageElement.msgid; |
- var text = Msgs.getMsg(msgid); |
+ var text = ''; |
+ if (msgid) |
+ text = Msgs.getMsg(msgid); |
var element; |
if (pageElement.heading) { |
element = document.createElement('h2'); |
+ element.setAttribute('tabindex', -1); |
+ if (!focus) |
+ focus = element; |
+ } else if (pageElement.list) { |
+ element = document.createElement('ul'); |
+ this.buildDom_(pageElement.items, element); |
+ } else if (pageElement.listItem) { |
+ element = document.createElement('li'); |
} else if (pageElement.link) { |
element = document.createElement('a'); |
element.href = pageElement.link; |
- element.target = '_blank'; |
+ element.setAttribute('tabindex', 0); |
+ element.addEventListener('click', function(evt) { |
+ Panel.closeMenusAndRestoreFocus(); |
+ chrome.windows.create({url: evt.target.href}); |
+ return false; |
+ }, false); |
} else { |
element = document.createElement('p'); |
} |
- element.innerText = text; |
- tutorialContainer.appendChild(element); |
+ if (text) |
+ element.innerText = text; |
+ container.appendChild(element); |
} |
+ if (focus) |
+ focus.focus(); |
+ }, |
+ |
+ /** @private */ |
+ finalizeDom_: function() { |
+ var disableNext = this.page == (Tutorial.PAGES.length - 1); |
+ var disablePrevious = this.page == 0; |
+ $('tutorial_next').setAttribute('aria-disabled', disableNext); |
+ $('tutorial_previous').setAttribute('aria-disabled', disablePrevious); |
+ }, |
+ |
+ get page() { |
+ return this.page_; |
+ }, |
+ |
+ set page(val) { |
+ this.page_ = val; |
+ sessionStorage['tutorial_page_pos'] = this.page_; |
} |
}; |