| Index: chrome/browser/resources/sessions.js
|
| ===================================================================
|
| --- chrome/browser/resources/sessions.js (revision 0)
|
| +++ chrome/browser/resources/sessions.js (revision 0)
|
| @@ -0,0 +1,139 @@
|
| +// Copyright (c) 2011 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.
|
| +
|
| +localStrings = new LocalStrings();
|
| +
|
| +// UTF8 sequence for an arrow triangle pointing down.
|
| +kExpandedArrow = "\u25BE";
|
| +// UTF8 sequence for an arrow triangle pointing right.
|
| +kCollapsedArrow = "\u25B8";
|
| +
|
| +/**
|
| + * Requests the list of sessions from the backend.
|
| + */
|
| +function requestSessions() {
|
| + chrome.send('requestSessionList', [])
|
| +}
|
| +
|
| +/**
|
| + * Expands or collapses the specified list.
|
| + */
|
| +function toggleExpandedState(div) {
|
| + if (div.textContent.indexOf(kExpandedArrow) != -1) {
|
| + div.textContent = div.textContent.replace(kExpandedArrow, kCollapsedArrow);
|
| + div.parentNode.querySelector(".indent").hidden = true;
|
| + } else {
|
| + div.textContent = div.textContent.replace(kCollapsedArrow, kExpandedArrow);
|
| + div.parentNode.querySelector(".indent").hidden = false;
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Creates a div element to serve as an expandable/collapsable
|
| + * title for a list of windows or tabs.
|
| + */
|
| +function createTitleDiv(className, textContent) {
|
| + var div = document.createElement('div');
|
| + div.className = className + ' expandable';
|
| + div.textContent = kExpandedArrow + ' ' + textContent;
|
| + div.onclick = Function('toggleExpandedState(this)');
|
| + return div;
|
| +}
|
| +
|
| +/**
|
| + * Utility function to call |transformFn| on each element of |from|
|
| + * and add them to a div which is then added to |container|.
|
| + */
|
| +function addItems(container, from, transformFn) {
|
| + var divBlock = document.createElement('div');
|
| + divBlock.className = 'indent';
|
| + for (var i = 0; i < from.length; i++) {
|
| + divBlock.appendChild(transformFn(from[i]));
|
| + }
|
| + container.appendChild(divBlock);
|
| +}
|
| +
|
| +/**
|
| + * Transforms a tab into an HTML element.
|
| + */
|
| +function transformTab(tab) {
|
| + var tabItem = document.createElement('a');
|
| + tabItem.setAttribute('href', tab.url);
|
| + tabItem.textContent = tab.title;
|
| + tabItem.className = 'tab-link';
|
| + tabItem.style.backgroundImage = url('chrome://favicon/' + tab.url);
|
| + return tabItem;
|
| +}
|
| +
|
| +/**
|
| + * Transforms a window into an HTML element.
|
| + */
|
| +function transformWindow(window) {
|
| + var windowDiv = document.createElement('div');
|
| + windowDiv.className = "window";
|
| + windowDiv.appendChild(createTitleDiv('window-title', 'Window'));
|
| + addItems(windowDiv, window.tabs, transformTab);
|
| + return windowDiv;
|
| +}
|
| +
|
| +/**
|
| + * Transforms a session into an HTML element.
|
| + */
|
| +function transformSession(session) {
|
| + var sessionDiv = document.createElement('div');
|
| + sessionDiv.className = "session";
|
| + sessionDiv.appendChild(createTitleDiv('session-title', 'Session'));
|
| + addItems(sessionDiv, session.windows, transformWindow);
|
| + return sessionDiv;
|
| +}
|
| +
|
| +/**
|
| + * Creates the UI for the sessions tree.
|
| + */
|
| +function createSessionTreeUI(sessionList) {
|
| + $('sessions-summary-text').textContent =
|
| + localStrings.getStringF('sessionsCountFormat', sessionList.length);
|
| +
|
| + var sessionSection = $('session-list');
|
| +
|
| + // Clear any previous list.
|
| + sessionSection.textContent = '';
|
| +
|
| + var sectionDiv = document.createElement('div');
|
| + addItems(sectionDiv, sessionList, transformSession);
|
| + sessionSection.appendChild(sectionDiv);
|
| +
|
| + $('no-sessions').hidden = sessionList.length != 0;
|
| +}
|
| +
|
| +/**
|
| + * Creates the UI for the "magic" list.
|
| + */
|
| +function createMagicListUI(magicList) {
|
| + $('magic-summary-text').textContent =
|
| + localStrings.getStringF('magicCountFormat', magicList.length);
|
| +
|
| + var magicSection = $('magic-list');
|
| +
|
| + // Clear any previous list.
|
| + magicSection.textContent = '';
|
| +
|
| + var sectionDiv = document.createElement('div');
|
| + addItems(sectionDiv, magicList, transformTab);
|
| + magicSection.appendChild(sectionDiv);
|
| +
|
| + $('no-magic').hidden = magicList.length != 0;
|
| +}
|
| +
|
| +/**
|
| + * Callback from backend with the list of sessions. Builds the UI.
|
| + * @param {array} sessionList The list of sessions.
|
| + * @param {array} magicList List of "interesting" tabs.
|
| + */
|
| +function updateSessionList(sessionList, magicList) {
|
| + createSessionTreeUI(sessionList);
|
| + createMagicListUI(magicList);
|
| +}
|
| +
|
| +document.addEventListener('DOMContentLoaded', requestSessions);
|
|
|
| Property changes on: chrome/browser/resources/sessions.js
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|