blob: e0a174fa13122dba42fb9c331779c2942e8a4e6d [file] [log] [blame]
// 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);
})();