Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(678)

Unified Diff: chrome/common/extensions/docs/static/js/tabs.js

Issue 13248004: Cleaning up apps codelab (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/static/js/tabs.js
diff --git a/chrome/common/extensions/docs/static/js/tabs.js b/chrome/common/extensions/docs/static/js/tabs.js
new file mode 100644
index 0000000000000000000000000000000000000000..405d369b8312d2852029d9563abf4ac4c886c875
--- /dev/null
+++ b/chrome/common/extensions/docs/static/js/tabs.js
@@ -0,0 +1,104 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * Add support for tab pannels on custom elements (tabs, header and content)
+ *
+ **/
+(function() {
+
+function registerEvent(target, eventType, handler) {
+ if (target.addEventListener) {
+ target.addEventListener(eventType, handler);
+ } else {
+ target.attachEvent(eventType, handler);
+ }
+}
+
+function getSessionKey(key) {
+ return window.sessionStorage.getItem("__tab_"+key);
+}
+
+function setSessionKey(key, value) {
+ window.sessionStorage.setItem("__tab_"+key, value);
+}
+
+function onTabHeaderKeyDown(e) {
+ if (e.keyCode == 13) {
+ e.preventDefault();
+ onTabClicked(e);
+ }
+}
+
+function onTabClicked(e) {
+ var tabs = e.target.parentNode;
+ if (!tabs || tabs.tagName !== 'TABS')
+ return;
+
+ var headers = tabs.getElementsByTagName('header'),
+ contents = tabs.getElementsByTagName('content'),
+ tabGroup = tabs.getAttribute("data-group"),
+ tabValue = e.target.getAttribute("data-value");
+
+ if (tabGroup && tabValue && window.sessionStorage)
+ setSessionKey(tabGroup, tabValue);
+
+ for (var i=0; i<headers.length; i++) {
+ if (headers[i] === e.target) {
+ headers[i].classList.remove('unselected');
+ if (contents.length > i)
+ contents[i].classList.remove('unselected');
+ } else {
+ headers[i].classList.add('unselected');
+ if (contents.length > i)
+ contents[i].classList.add('unselected');
+ }
+ }
+}
+
+function initTabPane(tab) {
+ var tabGroup = tab.getAttribute("data-group");
+ if (tabGroup && window.sessionStorage)
+ var tabGroupSelectedValue = getSessionKey(tabGroup);
+
+ var headers = tab.getElementsByTagName('header');
+ var contents = tab.getElementsByTagName('content');
+ var hasSelected = false;
+
+ if (headers.length==0 || contents.length==0)
+ return;
+
+ for (var j=0; j<headers.length; j++) {
+ var selected = tabGroup && tabGroupSelectedValue
+ && tabGroupSelectedValue===headers[j].getAttribute("data-value");
+
+ if (!hasSelected && selected) {
+ headers[j].classList.remove("unselected");
+ contents[j].classList.remove("unselected");
+ hasSelected = true;
+ } else {
+ headers[j].classList.add("unselected");
+ contents[j].classList.add("unselected");
+ }
+
+ headers[j].addEventListener('click', onTabClicked);
+ headers[j].addEventListener('keydown', onTabHeaderKeyDown);
+ }
+
+ if (!hasSelected) {
+ headers[0].classList.remove("unselected");
+ contents[0].classList.remove("unselected");
+ }
+}
+
+function onLoad() {
+ var tabs = document.getElementsByTagName('tabs');
+ for (var i=0; i<tabs.length; i++) {
+ initTabPane(tabs[i]);
+ }
+}
+
+window.addEventListener('DOMContentLoaded', onLoad);
+
+})();

Powered by Google App Engine
This is Rietveld 408576698