1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @fileoverview The local InstantExtended NTP. 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Controls rendering the new tab page for InstantExtended. 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @return {Object} A limited interface for testing the local NTP. 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochfunction LocalNTP() { 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)<include src="../../../../ui/webui/resources/js/assert.js"> 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)<include src="local_ntp_design.js"> 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="local_ntp_util.js"> 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)<include src="window_disposition_util.js"> 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Enum for classnames. 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @enum {string} 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var CLASSES = { 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ALTERNATE_LOGO: 'alternate-logo', // Shows white logo if required by theme 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BLACKLIST: 'mv-blacklist', // triggers tile blacklist animation 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BLACKLIST_BUTTON: 'mv-x', 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BLACKLIST_BUTTON_INNER: 'mv-x-inner', 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DARK: 'dark', 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DEFAULT_THEME: 'default-theme', 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DELAYED_HIDE_NOTIFICATION: 'mv-notice-delayed-hide', 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DOT: 'dot', 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FAKEBOX_DISABLE: 'fakebox-disable', // Makes fakebox non-interactive 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FAKEBOX_FOCUS: 'fakebox-focused', // Applies focus styles to the fakebox 38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Applies drag focus style to the fakebox 39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FAKEBOX_DRAG_FOCUS: 'fakebox-drag-focused', 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FAVICON: 'mv-favicon', 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FAVICON_FALLBACK: 'mv-favicon-fallback', 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FOCUSED: 'mv-focused', 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HIDE_BLACKLIST_BUTTON: 'mv-x-hide', // hides blacklist button during animation 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) HIDE_FAKEBOX_AND_LOGO: 'hide-fakebox-logo', 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HIDE_NOTIFICATION: 'mv-notice-hide', 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Vertically centers the most visited section for a non-Google provided page. 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NON_GOOGLE_PAGE: 'non-google-page', 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PAGE: 'mv-page', // page tiles 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PAGE_READY: 'mv-page-ready', // page tile when ready 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) RTL: 'rtl', // Right-to-left language text. 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) THUMBNAIL: 'mv-thumb', 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) THUMBNAIL_FALLBACK: 'mv-thumb-fallback', 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) THUMBNAIL_MASK: 'mv-mask', 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TILE: 'mv-tile', 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) TILE_INNER: 'mv-tile-inner', 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TITLE: 'mv-title' 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Enum for HTML element ids. 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @enum {string} 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var IDS = { 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ATTRIBUTION: 'attribution', 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ATTRIBUTION_TEXT: 'attribution-text', 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CUSTOM_THEME_STYLE: 'ct-style', 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FAKEBOX: 'fakebox', 70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FAKEBOX_INPUT: 'fakebox-input', 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FAKEBOX_TEXT: 'fakebox-text', 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LOGO: 'logo', 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTIFICATION: 'mv-notice', 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTIFICATION_CLOSE_BUTTON: 'mv-notice-x', 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTIFICATION_MESSAGE: 'mv-msg', 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NTP_CONTENTS: 'ntp-contents', 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RESTORE_ALL_LINK: 'mv-restore', 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TILES: 'mv-tiles', 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UNDO_LINK: 'mv-undo' 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Enum for keycodes. 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @enum {number} 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @const 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)var KEYCODE = { 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ENTER: 13 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/** 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Enum for the state of the NTP when it is disposed. 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @enum {number} 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @const 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)var NTP_DISPOSE_STATE = { 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NONE: 0, // Preserve the NTP appearance and functionality 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISABLE_FAKEBOX: 1, 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) HIDE_FAKEBOX_AND_LOGO: 2 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * The JavaScript button event value for a middle click. 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @type {number} 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @const 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvar MIDDLE_MOUSE_BUTTON = 1; 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/** 1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Specifications for the NTP design. 1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @const {NtpDesign} 1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)var NTP_DESIGN = getNtpDesign(configData.ntpDesignName); 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/** 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The container for the tile elements. 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {Element} 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var tilesContainer; 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The notification displayed when a page is blacklisted. 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {Element} 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var notification; 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The container for the theme attribution. 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {Element} 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var attribution; 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The "fakebox" - an input field that looks like a regular searchbox. When it 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * is focused, any text the user types goes directly into the omnibox. 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {Element} 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var fakebox; 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * The container for NTP elements. 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {Element} 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var ntpContents; 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The array of rendered tiles, ordered by appearance. 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {!Array.<Tile>} 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var tiles = []; 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The last blacklisted tile if any, which by definition should not be filler. 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {?Tile} 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var lastBlacklistedTile = null; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * The iframe element which is currently keyboard focused, or null. 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @type {?Element} 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar focusedIframe = null; 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * True if a page has been blacklisted and we're waiting on the 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * onmostvisitedchange callback. See onMostVisitedChange() for how this 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * is used. 1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @type {boolean} 1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar isBlacklisting = false; 1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/** 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Current number of tiles columns shown based on the window width, including 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * those that just contain filler. 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {number} 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var numColumnsShown = 0; 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * A flag to indicate Most Visited changed caused by user action. If true, then 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * in onMostVisitedChange() tiles remain visible so no flickering occurs. 197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @type {boolean} 198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)var userInitiatedMostVisitedChange = false; 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/** 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The browser embeddedSearch.newTabPage object. 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {Object} 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var ntpApiHandle; 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * The browser embeddedSearch.searchBox object. 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @type {Object} 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)var searchboxApiHandle; 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/** 2177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * The state of the NTP when a query is entered into the Omnibox. 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @type {NTP_DISPOSE_STATE} 2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)var omniboxInputBehavior = NTP_DISPOSE_STATE.NONE; 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/** 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * The state of the NTP when a query is entered into the Fakebox. 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @type {NTP_DISPOSE_STATE} 2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)var fakeboxInputBehavior = NTP_DISPOSE_STATE.HIDE_FAKEBOX_AND_LOGO; 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** @type {number} @const */ 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var MAX_NUM_TILES_TO_SHOW = 8; 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** @type {number} @const */ 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var MIN_NUM_COLUMNS = 2; 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** @type {number} @const */ 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var MAX_NUM_COLUMNS = 4; 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** @type {number} @const */ 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var NUM_ROWS = 2; 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Minimum total padding to give to the left and right of the most visited 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * section. Used to determine how many tiles to show. 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {number} 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var MIN_TOTAL_HORIZONTAL_PADDING = 200; 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The filename for a most visited iframe src which shows a page title. 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {string} 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var MOST_VISITED_TITLE_IFRAME = 'title.html'; 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The filename for a most visited iframe src which shows a thumbnail image. 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {string} 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var MOST_VISITED_THUMBNAIL_IFRAME = 'thumbnail.html'; 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * The color of the title in RRGGBBAA format. 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @type {?string} 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar titleColor = null; 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Hide most visited tiles for at most this many milliseconds while painting. 280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @type {number} 281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @const 282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvar MOST_VISITED_PAINT_TIMEOUT_MSEC = 500; 284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/** 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A Tile is either a rendering of a Most Visited page or "filler" used to 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * pad out the section when not enough pages exist. 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Element} elem The element for rendering the tile. 2916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {Element=} opt_innerElem The element for contents of tile. 2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @param {Element=} opt_titleElem The element for rendering the title. 2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @param {Element=} opt_thumbnailElem The element for rendering the thumbnail. 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {number=} opt_rid The RID for the corresponding Most Visited page. 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Should only be left unspecified when creating a filler tile. 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @constructor 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 2986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)function Tile(elem, opt_innerElem, opt_titleElem, opt_thumbnailElem, opt_rid) { 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** @type {Element} */ 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.elem = elem; 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** @type {Element|undefined} */ 3036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) this.innerElem = opt_innerElem; 3046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) /** @type {Element|undefined} */ 3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) this.titleElem = opt_titleElem; 3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** @type {Element|undefined} */ 3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) this.thumbnailElem = opt_thumbnailElem; 3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** @type {number|undefined} */ 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.rid = opt_rid; 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Heuristic to determine whether a theme should be considered to be dark, so 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * the colors of various UI elements can be adjusted. 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {ThemeBackgroundInfo|undefined} info Theme background information. 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {boolean} Whether the theme is dark. 3216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @private 3226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction getIsThemeDark(info) { 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!info) 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Heuristic: light text implies dark theme. 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var rgba = info.textColorRgba; 3286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var luminance = 0.3 * rgba[0] + 0.59 * rgba[1] + 0.11 * rgba[2]; 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return luminance >= 128; 3306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 3316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/** 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Updates the NTP based on the current theme. 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 3376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)function renderTheme() { 3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var fakeboxText = $(IDS.FAKEBOX_TEXT); 3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (fakeboxText) { 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci fakeboxText.innerHTML = ''; 3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (NTP_DESIGN.showFakeboxHint && 3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci configData.translatedStrings.searchboxPlaceholder) { 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci fakeboxText.textContent = 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci configData.translatedStrings.searchboxPlaceholder; 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var info = ntpApiHandle.themeBackgroundInfo; 3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var isThemeDark = getIsThemeDark(info); 3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ntpContents.classList.toggle(CLASSES.DARK, isThemeDark); 3516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!info) { 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci titleColor = NTP_DESIGN.titleColor; 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 3546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 3556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!info.usingDefaultTheme && info.textColorRgba) { 3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci titleColor = convertToRRGGBBAAColor(info.textColorRgba); 3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else { 3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci titleColor = isThemeDark ? 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NTP_DESIGN.titleColorAgainstDark : NTP_DESIGN.titleColor; 3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch var background = [convertToRGBAColor(info.backgroundColorRgba), 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info.imageUrl, 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info.imageTiling, 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info.imageHorizontalAlignment, 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info.imageVerticalAlignment].join(' ').trim(); 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) document.body.style.background = background; 3707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch document.body.classList.toggle(CLASSES.ALTERNATE_LOGO, info.alternateLogo); 3717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch updateThemeAttribution(info.attributionUrl); 3727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch setCustomThemeStyle(info); 3736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/** 3776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Updates the NTP based on the current theme, then rerenders all tiles. 3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @private 3796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 3806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)function onThemeChange() { 3816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) renderTheme(); 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tilesContainer.innerHTML = ''; 3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) renderAndShowTiles(); 3847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 3857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/** 3887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * Updates the NTP style according to theme. 3897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @param {Object=} opt_themeInfo The information about the theme. If it is 3907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * omitted the style will be reverted to the default. 3917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @private 3927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */ 3937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfunction setCustomThemeStyle(opt_themeInfo) { 3947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch var customStyleElement = $(IDS.CUSTOM_THEME_STYLE); 3957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch var head = document.head; 3967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (opt_themeInfo && !opt_themeInfo.usingDefaultTheme) { 3976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ntpContents.classList.remove(CLASSES.DEFAULT_THEME); 3987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch var themeStyle = 3997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '#attribution {' + 4007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ' color: ' + convertToRGBAColor(opt_themeInfo.textColorLightRgba) + ';' + 4017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '}' + 4027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '#mv-msg {' + 4037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ' color: ' + convertToRGBAColor(opt_themeInfo.textColorRgba) + ';' + 4047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '}' + 4057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '#mv-notice-links span {' + 4067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ' color: ' + convertToRGBAColor(opt_themeInfo.textColorLightRgba) + ';' + 4077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '}' + 4087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '#mv-notice-x {' + 4097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ' -webkit-filter: drop-shadow(0 0 0 ' + 4107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch convertToRGBAColor(opt_themeInfo.textColorRgba) + ');' + 4117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '}' + 4126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) '.mv-page-ready .mv-mask {' + 4137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ' border: 1px solid ' + 4146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) convertToRGBAColor(opt_themeInfo.sectionBorderColorRgba) + ';' + 4157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '}' + 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '.mv-page-ready:hover .mv-mask, .mv-page-ready .mv-focused ~ .mv-mask {' + 4177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ' border-color: ' + 4187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch convertToRGBAColor(opt_themeInfo.headerColorRgba) + ';' + 4197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch '}'; 4207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (customStyleElement) { 4227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch customStyleElement.textContent = themeStyle; 4237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 4247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch customStyleElement = document.createElement('style'); 4257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch customStyleElement.type = 'text/css'; 4267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch customStyleElement.id = IDS.CUSTOM_THEME_STYLE; 4277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch customStyleElement.textContent = themeStyle; 4287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch head.appendChild(customStyleElement); 4297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } else { 4326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ntpContents.classList.add(CLASSES.DEFAULT_THEME); 4336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (customStyleElement) 4346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) head.removeChild(customStyleElement); 4357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 44058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch * Renders the attribution if the URL is present, otherwise hides it. 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} url The URL of the attribution image, if any. 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 4447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfunction updateThemeAttribution(url) { 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!url) { 4467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch setAttributionVisibility_(false); 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 44958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 45058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch var attributionImage = attribution.querySelector('img'); 45158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch if (!attributionImage) { 45258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch attributionImage = new Image(); 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attribution.appendChild(attributionImage); 45458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch } 45558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch attributionImage.style.content = url; 45658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch setAttributionVisibility_(true); 457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 4617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * Sets the visibility of the theme attribution. 4627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @param {boolean} show True to show the attribution. 4637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @private 4647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */ 4657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfunction setAttributionVisibility_(show) { 4667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (attribution) { 4677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch attribution.style.display = show ? '' : 'none'; 4687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 4707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch /** 4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Converts an Array of color components into RRGGBBAA format. 4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {Array.<number>} color Array of rgba color components. 4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {string} Color string in RRGGBBAA format. 4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @private 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction convertToRRGGBBAAColor(color) { 4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return color.map(function(t) { 4801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return ('0' + t.toString(16)).slice(-2); // To 2-digit, 0-padded hex. 4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }).join(''); 4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 4867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * Converts an Array of color components into RGBA format "rgba(R,G,B,A)". 4877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @param {Array.<number>} color Array of rgba color components. 4887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @return {string} CSS color in RGBA format. 4897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @private 4907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */ 4917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfunction convertToRGBAColor(color) { 4927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' + 4937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch color[3] / 255 + ')'; 4947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 4957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/** 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Handles a new set of Most Visited page data. 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function onMostVisitedChange() { 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (isBlacklisting) { 5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Trigger the blacklist animation, which then triggers reloadAllTiles(). 5036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var lastBlacklistedTileElem = lastBlacklistedTile.elem; 5046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) lastBlacklistedTileElem.addEventListener( 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'webkitTransitionEnd', blacklistAnimationDone); 5066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) lastBlacklistedTileElem.classList.add(CLASSES.BLACKLIST); 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 5085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reloadAllTiles(); 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Handles the end of the blacklist animation by showing the notification and 5155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * re-rendering the new set of tiles. 5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)function blacklistAnimationDone() { 5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) showNotification(); 5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) isBlacklisting = false; 5205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tilesContainer.classList.remove(CLASSES.HIDE_BLACKLIST_BUTTON); 5215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) lastBlacklistedTile.elem.removeEventListener( 5225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'webkitTransitionEnd', blacklistAnimationDone); 5235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Need to call explicitly to re-render the tiles, since the initial 5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // onmostvisitedchange issued by the blacklist function only triggered 5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // the animation. 5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reloadAllTiles(); 5275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/** 5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Fetches new data, creates, and renders tiles. 5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)function reloadAllTiles() { 5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var pages = ntpApiHandle.mostVisited; 5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tiles = []; 5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (var i = 0; i < MAX_NUM_TILES_TO_SHOW; ++i) 5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tiles.push(createTile(pages[i], i)); 5395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tilesContainer.innerHTML = ''; 5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) renderAndShowTiles(); 5425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/** 5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Binds onload events for a tile's internal <iframe> elements. 5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @param {Tile} tile The main tile to bind events to. 5486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {Barrier} tileVisibilityBarrier A barrier to make all tiles visible 5496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * the moment all tiles are loaded. 550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 5515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)function bindTileOnloadEvents(tile, tileVisibilityBarrier) { 5525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (tile.titleElem) { 5535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tileVisibilityBarrier.add(); 5545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tile.titleElem.onload = function() { 5555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tileVisibilityBarrier.remove(); 5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (tile.thumbnailElem) { 5595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tileVisibilityBarrier.add(); 5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tile.thumbnailElem.onload = function() { 5615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tile.elem.classList.add(CLASSES.PAGE_READY); 5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tileVisibilityBarrier.remove(); 5635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Renders the current list of visible tiles to DOM, and hides tiles that are 5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * already in the DOM but should not be seen. 571868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)function renderAndShowTiles() { 5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var numExisting = tilesContainer.querySelectorAll('.' + CLASSES.TILE).length; 5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Only add visible tiles to the DOM, to avoid creating invisible tiles that 5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // produce meaningless impression metrics. However, if a tile becomes 5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // invisible then we leave it in DOM to prevent reload if it's shown again. 5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var numDesired = Math.min(tiles.length, numColumnsShown * NUM_ROWS); 5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // If we need to render new tiles, manage the visibility to hide intermediate 5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // load states of the <iframe>s. 5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (numExisting < numDesired) { 5826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var showAll = function() { 5836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (var i = 0; i < numDesired; ++i) { 5846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (tiles[i].titleElem || tiles[i].thumbnailElem) 5856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tiles[i].elem.classList.add(CLASSES.PAGE_READY); 5866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 5876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }; 5886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var tileVisibilityBarrier = new Barrier(showAll); 5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!userInitiatedMostVisitedChange) { 5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Make titleContainer invisible, but still taking up space. 5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // titleContainer becomes visible again (1) on timeout, or (2) when all 5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // tiles finish loading (using tileVisibilityBarrier). 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) window.setTimeout(function() { 5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tileVisibilityBarrier.cancel(); 5966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) showAll(); 5975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }, MOST_VISITED_PAINT_TIMEOUT_MSEC); 598868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 599868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) userInitiatedMostVisitedChange = false; 6005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (var i = numExisting; i < numDesired; ++i) { 6025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bindTileOnloadEvents(tiles[i], tileVisibilityBarrier); 6035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tilesContainer.appendChild(tiles[i].elem); 6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 605eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 6065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Show only the desired tiles. Note that .hidden does not work for 6086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // inline-block elements like tiles[i].elem. 6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (var i = 0; i < numDesired; ++i) 6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tiles[i].elem.style.display = 'inline-block'; 6115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // If |numDesired| < |numExisting| then hide extra tiles (e.g., this occurs 6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // when window is downsized). 6135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (; i < numExisting; ++i) 6145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tiles[i].elem.style.display = 'none'; 615868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 616868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 617868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 618868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/** 6196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Builds a URL to display a most visited tile title in an iframe. 620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {number} rid The restricted ID. 62190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {number} position The position of the iframe in the UI. 6226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @return {string} An URL to display the most visited title in an iframe. 6236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 6246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)function getMostVisitedTitleIframeUrl(rid, position) { 6256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var url = 'chrome-search://most-visited/' + 6266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) encodeURIComponent(MOST_VISITED_TITLE_IFRAME); 6276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var params = [ 6286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'rid=' + encodeURIComponent(rid), 6296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'f=' + encodeURIComponent(NTP_DESIGN.fontFamily), 6306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'fs=' + encodeURIComponent(NTP_DESIGN.fontSize), 6316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'c=' + encodeURIComponent(titleColor), 6326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'pos=' + encodeURIComponent(position)]; 6336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (NTP_DESIGN.titleTextAlign) 6346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) params.push('ta=' + encodeURIComponent(NTP_DESIGN.titleTextAlign)); 6356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (NTP_DESIGN.titleTextFade) 6366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) params.push('tf=' + encodeURIComponent(NTP_DESIGN.titleTextFade)); 6376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return url + '?' + params.join('&'); 6386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 6396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 6406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 6416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/** 6426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Builds a URL to display a most visited tile thumbnail in an iframe. 6436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {number} rid The restricted ID. 6446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {number} position The position of the iframe in the UI. 6456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @return {string} An URL to display the most visited thumbnail in an iframe. 6466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 6476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)function getMostVisitedThumbnailIframeUrl(rid, position) { 6486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var url = 'chrome-search://most-visited/' + 6496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) encodeURIComponent(MOST_VISITED_THUMBNAIL_IFRAME); 6506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var params = [ 6516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'rid=' + encodeURIComponent(rid), 6526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'f=' + encodeURIComponent(NTP_DESIGN.fontFamily), 6536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'fs=' + encodeURIComponent(NTP_DESIGN.fontSize), 6546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'c=' + encodeURIComponent(NTP_DESIGN.thumbnailTextColor), 6556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 'pos=' + encodeURIComponent(position)]; 6566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (NTP_DESIGN.thumbnailFallback) 6576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) params.push('etfb=1'); 6586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return url + '?' + params.join('&'); 659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Creates a Tile with the specified page data. If no data is provided, a 664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * filler Tile is created. 665c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Object} page The page data. 66690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {number} position The position of the tile. 667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {Tile} The new Tile. 668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 66990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)function createTile(page, position) { 6706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var tileElem = document.createElement('div'); 6716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tileElem.classList.add(CLASSES.TILE); 6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Prevent tile from being selected (and highlighted) when areas outside the 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // <iframe>s are clicked. 6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tileElem.addEventListener('mousedown', function(e) { 6751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci e.preventDefault(); 6761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 6776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var innerElem = createAndAppendElement(tileElem, 'div', CLASSES.TILE_INNER); 678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (page) { 680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var rid = page.rid; 6816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tileElem.classList.add(CLASSES.PAGE); 682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 683a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) var navigateFunction = function(e) { 684a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) e.preventDefault(); 685a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ntpApiHandle.navigateContentWindow(rid, getDispositionFromEvent(e)); 68690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }; 68790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 68890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The click handler for navigating to the page identified by the RID. 6896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) tileElem.addEventListener('click', navigateFunction); 69090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 691c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The iframe which renders the page title. 6926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var titleElem = document.createElement('iframe'); 6931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Enable tab navigation on the iframe, which will move the selection to the 6941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // link element (which also has a tabindex). 6951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci titleElem.tabIndex = '0'; 696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 697868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Why iframes have IDs: 698868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // 699868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // On navigating back to the NTP we see several onmostvisitedchange() events 700868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // in series with incrementing RIDs. After the first event, a set of iframes 701868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // begins loading RIDs n, n+1, ..., n+k-1; after the second event, these get 702868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // destroyed and a new set begins loading RIDs n+k, n+k+1, ..., n+2k-1. 703868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Now due to crbug.com/68841, Chrome incorrectly loads the content for the 704868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // first set of iframes into the most recent set of iframes. 705868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // 706868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Giving iframes distinct ids seems to cause some invalidation and prevent 707868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // associating the incorrect data. 708868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // 709868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TODO(jered): Find and fix the root (probably Blink) bug. 710868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 7115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Keep this ID here. See comment above. 7126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) titleElem.id = 'title-' + rid; 7136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) titleElem.className = CLASSES.TITLE; 7146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) titleElem.src = getMostVisitedTitleIframeUrl(rid, position); 7156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) innerElem.appendChild(titleElem); 7166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // A fallback element for missing thumbnails. 7186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (NTP_DESIGN.thumbnailFallback) { 7196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var fallbackElem = createAndAppendElement( 7206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) innerElem, 'div', CLASSES.THUMBNAIL_FALLBACK); 7216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (NTP_DESIGN.thumbnailFallback === THUMBNAIL_FALLBACK.DOT) 7226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) createAndAppendElement(fallbackElem, 'div', CLASSES.DOT); 7236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 724c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The iframe which renders either a thumbnail or domain element. 7266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var thumbnailElem = document.createElement('iframe'); 7276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) thumbnailElem.tabIndex = '-1'; 7281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci thumbnailElem.setAttribute('aria-hidden', 'true'); 7295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Keep this ID here. See comment above. 7306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) thumbnailElem.id = 'thumb-' + rid; 7316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) thumbnailElem.className = CLASSES.THUMBNAIL; 7326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) thumbnailElem.src = getMostVisitedThumbnailIframeUrl(rid, position); 7336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) innerElem.appendChild(thumbnailElem); 734868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The button used to blacklist this page. 736c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var blacklistButton = createAndAppendElement( 7376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) innerElem, 'div', CLASSES.BLACKLIST_BUTTON); 7381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci createAndAppendElement( 7391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blacklistButton, 'div', CLASSES.BLACKLIST_BUTTON_INNER); 74090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) var blacklistFunction = generateBlacklistFunction(rid); 74190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) blacklistButton.addEventListener('click', blacklistFunction); 7429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch blacklistButton.title = configData.translatedStrings.removeThumbnailTooltip; 743c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // A helper mask on top of the tile that is used to create hover border 7456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // and/or to darken the thumbnail on focus. 7466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var maskElement = createAndAppendElement( 7476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) innerElem, 'div', CLASSES.THUMBNAIL_MASK); 7486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // The page favicon, or a fallback. 7506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var favicon = createAndAppendElement(innerElem, 'div', CLASSES.FAVICON); 7516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (page.faviconUrl) { 7526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) favicon.style.backgroundImage = 'url(' + page.faviconUrl + ')'; 7536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } else { 7546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) favicon.classList.add(CLASSES.FAVICON_FALLBACK); 755c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 7566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return new Tile(tileElem, innerElem, titleElem, thumbnailElem, rid); 757c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 7586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return new Tile(tileElem); 759c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 760c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 761c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 764c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Generates a function to be called when the page with the corresponding RID 765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * is blacklisted. 766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {number} rid The RID of the page being blacklisted. 7671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {function(Event=)} A function which handles the blacklisting of the 768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * page by updating state variables and notifying Chrome. 769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 770c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function generateBlacklistFunction(rid) { 771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return function(e) { 772c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Prevent navigation when the page is being blacklisted. 7731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (e) 7741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci e.stopPropagation(); 775c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 776868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) userInitiatedMostVisitedChange = true; 777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) isBlacklisting = true; 778c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tilesContainer.classList.add(CLASSES.HIDE_BLACKLIST_BUTTON); 779c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) lastBlacklistedTile = getTileByRid(rid); 780c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ntpApiHandle.deleteMostVisitedItem(rid); 781c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 782c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 783c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 784c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 785c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 786c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Shows the blacklist notification and triggers a delay to hide it. 787c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 788c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function showNotification() { 789c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notification.classList.remove(CLASSES.HIDE_NOTIFICATION); 790c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notification.classList.remove(CLASSES.DELAYED_HIDE_NOTIFICATION); 791c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notification.scrollTop; 792c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notification.classList.add(CLASSES.DELAYED_HIDE_NOTIFICATION); 793c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 794c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 795c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 796c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 797c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Hides the blacklist notification. 798c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function hideNotification() { 800c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notification.classList.add(CLASSES.HIDE_NOTIFICATION); 8011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci notification.classList.remove(CLASSES.DELAYED_HIDE_NOTIFICATION); 802c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 804c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 805c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 806c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Handles a click on the notification undo link by hiding the notification and 807c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * informing Chrome. 808c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 809c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function onUndo() { 810868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) userInitiatedMostVisitedChange = true; 811c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) hideNotification(); 812c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var lastBlacklistedRID = lastBlacklistedTile.rid; 813c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (typeof lastBlacklistedRID != 'undefined') 814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ntpApiHandle.undoMostVisitedDeletion(lastBlacklistedRID); 815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 817c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 818c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 819c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Handles a click on the restore all notification link by hiding the 820c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * notification and informing Chrome. 821c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 822c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function onRestoreAll() { 823868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) userInitiatedMostVisitedChange = true; 824c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) hideNotification(); 825c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ntpApiHandle.undoAllMostVisitedDeletions(); 826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 827c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 829c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 8301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Recomputes the number of tile columns, and width of various contents based 8311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * on the width of the window. 8321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {boolean} Whether the number of tile columns has changed. 833c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 8341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction updateContentWidth() { 8356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var tileRequiredWidth = NTP_DESIGN.tileWidth + NTP_DESIGN.tileMargin; 836868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // If innerWidth is zero, then use the maximum snap size. 8376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var maxSnapSize = MAX_NUM_COLUMNS * tileRequiredWidth - 8386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) NTP_DESIGN.tileMargin + MIN_TOTAL_HORIZONTAL_PADDING; 8396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var innerWidth = window.innerWidth || maxSnapSize; 8406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Each tile has left and right margins that sum to NTP_DESIGN.tileMargin. 8416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var availableWidth = innerWidth + NTP_DESIGN.tileMargin - 8426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MIN_TOTAL_HORIZONTAL_PADDING; 8435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var newNumColumns = Math.floor(availableWidth / tileRequiredWidth); 8445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (newNumColumns < MIN_NUM_COLUMNS) 8455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) newNumColumns = MIN_NUM_COLUMNS; 8465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else if (newNumColumns > MAX_NUM_COLUMNS) 8475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) newNumColumns = MAX_NUM_COLUMNS; 8485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (numColumnsShown === newNumColumns) 8501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 8511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci numColumnsShown = newNumColumns; 8531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var tilesContainerWidth = numColumnsShown * tileRequiredWidth; 8541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tilesContainer.style.width = tilesContainerWidth + 'px'; 8551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (fakebox) { 8561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // -2 to account for border. 8571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var fakeboxWidth = (tilesContainerWidth - NTP_DESIGN.tileMargin - 2); 8581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci fakebox.style.width = fakeboxWidth + 'px'; 8591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 8601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return true; 8611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 8621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 8651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Resizes elements because the number of tile columns may need to change in 8661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * response to resizing. Also shows or hides extra tiles tiles according to the 8671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * new width of the page. 8681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 8691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction onResize() { 8701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (updateContentWidth()) { 8715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Render without clearing tiles. 8725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) renderAndShowTiles(); 873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 874c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 875c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 876c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 877c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 878c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns the tile corresponding to the specified page RID. 879c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {number} rid The page RID being looked up. 880c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {Tile} The corresponding tile. 881c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 882c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function getTileByRid(rid) { 883c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (var i = 0, length = tiles.length; i < length; ++i) { 884c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var tile = tiles[i]; 885c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (tile.rid == rid) 886c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return tile; 887c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 888c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return null; 889c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 890c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 891c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 892c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 8937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Handles new input by disposing the NTP, according to where the input was 8947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * entered. 895c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 8967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)function onInputStart() { 8977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (fakebox && isFakeboxFocused()) { 898c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) setFakeboxFocus(false); 899ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch setFakeboxDragFocus(false); 9007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) disposeNtp(true); 9017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else if (!isFakeboxFocused()) { 9027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) disposeNtp(false); 903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 904c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 905c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 906c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 907c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 9087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Disposes the NTP, according to where the input was entered. 9097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @param {boolean} wasFakeboxInput True if the input was in the fakebox. 9107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 9117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)function disposeNtp(wasFakeboxInput) { 9127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) var behavior = wasFakeboxInput ? fakeboxInputBehavior : omniboxInputBehavior; 9137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (behavior == NTP_DISPOSE_STATE.DISABLE_FAKEBOX) 9147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) setFakeboxActive(false); 9157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) else if (behavior == NTP_DISPOSE_STATE.HIDE_FAKEBOX_AND_LOGO) 9167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) setFakeboxAndLogoVisibility(false); 9177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 9187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 9197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 9207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/** 921558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch * Restores the NTP (re-enables the fakebox and unhides the logo.) 922b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) */ 92390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)function restoreNtp() { 9247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) setFakeboxActive(true); 9257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) setFakeboxAndLogoVisibility(true); 926b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 927b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 9287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 929b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)/** 930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {boolean} focus True to focus the fakebox. 931c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function setFakeboxFocus(focus) { 9337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) document.body.classList.toggle(CLASSES.FAKEBOX_FOCUS, focus); 934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 936ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch/** 937ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch * @param {boolean} focus True to show a dragging focus to the fakebox. 938ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch */ 939ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochfunction setFakeboxDragFocus(focus) { 940ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch document.body.classList.toggle(CLASSES.FAKEBOX_DRAG_FOCUS, focus); 941ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 9427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 944c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {boolean} True if the fakebox has focus. 945c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function isFakeboxFocused() { 947ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return document.body.classList.contains(CLASSES.FAKEBOX_FOCUS) || 948ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch document.body.classList.contains(CLASSES.FAKEBOX_DRAG_FOCUS); 949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 9537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @param {boolean} enable True to enable the fakebox. 954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 9557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)function setFakeboxActive(enable) { 9567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) document.body.classList.toggle(CLASSES.FAKEBOX_DISABLE, !enable); 957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 959c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 960c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 9617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @param {!Event} event The click event. 9627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @return {boolean} True if the click occurred in an enabled fakebox. 963c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 9647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)function isFakeboxClick(event) { 9657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return fakebox.contains(event.target) && 9667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) !document.body.classList.contains(CLASSES.FAKEBOX_DISABLE); 967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 969c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 9717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @param {boolean} show True to show the fakebox and logo. 972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 9737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)function setFakeboxAndLogoVisibility(show) { 9747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) document.body.classList.toggle(CLASSES.HIDE_FAKEBOX_AND_LOGO, !show); 975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 977c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 979c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Shortcut for document.getElementById. 980c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} id of the element. 981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {HTMLElement} with the id. 982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function $(id) { 984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return document.getElementById(id); 985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Utility function which creates an element with an optional classname and 990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * appends it to the specified parent. 991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Element} parent The parent to append the new element. 992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} name The name of the new element. 993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string=} opt_class The optional classname of the new element. 994c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {Element} The new element. 995c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 996c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function createAndAppendElement(parent, name, opt_class) { 997c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var child = document.createElement(name); 998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (opt_class) 999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) child.classList.add(opt_class); 1000c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) parent.appendChild(child); 1001c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return child; 1002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1003c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 1006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Removes a node from its parent. 1007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Node} node The node to remove. 1008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 1009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function removeNode(node) { 1010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) node.parentNode.removeChild(node); 1011c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1012c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1014c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 101590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {!Element} element The element to register the handler for. 101690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {number} keycode The keycode of the key to register. 101790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {!Function} handler The key handler to register. 101890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */ 101990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)function registerKeyHandler(element, keycode, handler) { 102090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) element.addEventListener('keydown', function(event) { 102190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (event.keyCode == keycode) 102290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) handler(event); 102390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }); 102490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 102590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 102690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 102790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/** 1028c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {Object} the handle to the embeddedSearch API. 1029c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 1030c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function getEmbeddedSearchApiHandle() { 1031c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (window.cideb) 1032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return window.cideb; 1033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (window.chrome && window.chrome.embeddedSearch) 1034c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return window.chrome.embeddedSearch; 1035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return null; 1036c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1037c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1038eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1039eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/** 10401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Event handler for the focus changed and blacklist messages on link elements. 10411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Used to toggle visual treatment on the tiles (depending on the message). 10421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {Event} event Event received. 10431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 10441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction handlePostMessage(event) { 10451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (event.origin !== 'chrome-search://most-visited') 10461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 10471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (event.data === 'linkFocused') { 10491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var activeElement = document.activeElement; 10501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (activeElement.classList.contains(CLASSES.TITLE)) { 10511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci activeElement.classList.add(CLASSES.FOCUSED); 10521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci focusedIframe = activeElement; 10531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 10541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (event.data === 'linkBlurred') { 10551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (focusedIframe) 10561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci focusedIframe.classList.remove(CLASSES.FOCUSED); 10571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci focusedIframe = null; 10581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (event.data.indexOf('tileBlacklisted') === 0) { 10591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var tilePosition = event.data.split(',')[1]; 10601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (tilePosition) 10611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci generateBlacklistFunction(tiles[parseInt(tilePosition, 10)].rid)(); 10621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 10631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 10641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 1067c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Prepares the New Tab Page by adding listeners, rendering the current 1068c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * theme, the most visited pages section, and Google-specific elements for a 1069c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Google-provided page. 1070c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 1071c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function init() { 1072c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tilesContainer = $(IDS.TILES); 1073c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notification = $(IDS.NOTIFICATION); 1074c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attribution = $(IDS.ATTRIBUTION); 1075c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ntpContents = $(IDS.NTP_CONTENTS); 1076c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10779ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch if (configData.isGooglePage) { 1078c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var logo = document.createElement('div'); 1079c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) logo.id = IDS.LOGO; 1080c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1081c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) fakebox = document.createElement('div'); 1082c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) fakebox.id = IDS.FAKEBOX; 10836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var fakeboxHtml = []; 10846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) fakeboxHtml.push('<input id="' + IDS.FAKEBOX_INPUT + 10851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '" autocomplete="off" tabindex="-1" type="url" aria-hidden="true">'); 10861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci fakeboxHtml.push('<div id="' + IDS.FAKEBOX_TEXT + '"></div>'); 10876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) fakeboxHtml.push('<div id="cursor"></div>'); 10886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) fakebox.innerHTML = fakeboxHtml.join(''); 1089c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1090c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ntpContents.insertBefore(fakebox, ntpContents.firstChild); 1091c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ntpContents.insertBefore(logo, ntpContents.firstChild); 109290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } else { 109390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) document.body.classList.add(CLASSES.NON_GOOGLE_PAGE); 1094c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1095c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Hide notifications after fade out, so we can't focus on links via keyboard. 10971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci notification.addEventListener('webkitTransitionEnd', hideNotification); 10981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1099c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var notificationMessage = $(IDS.NOTIFICATION_MESSAGE); 11009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch notificationMessage.textContent = 11019ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch configData.translatedStrings.thumbnailRemovedNotification; 11026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var undoLink = $(IDS.UNDO_LINK); 1104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) undoLink.addEventListener('click', onUndo); 110590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) registerKeyHandler(undoLink, KEYCODE.ENTER, onUndo); 11069ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch undoLink.textContent = configData.translatedStrings.undoThumbnailRemove; 11076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var restoreAllLink = $(IDS.RESTORE_ALL_LINK); 1109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) restoreAllLink.addEventListener('click', onRestoreAll); 111090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) registerKeyHandler(restoreAllLink, KEYCODE.ENTER, onUndo); 11119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch restoreAllLink.textContent = 11129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch configData.translatedStrings.restoreThumbnailsShort; 11136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 11149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch $(IDS.ATTRIBUTION_TEXT).textContent = 11159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch configData.translatedStrings.attributionIntro; 1116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var notificationCloseButton = $(IDS.NOTIFICATION_CLOSE_BUTTON); 11181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci createAndAppendElement( 11191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci notificationCloseButton, 'div', CLASSES.BLACKLIST_BUTTON_INNER); 1120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notificationCloseButton.addEventListener('click', hideNotification); 1121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) window.addEventListener('resize', onResize); 11231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updateContentWidth(); 1124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var topLevelHandle = getEmbeddedSearchApiHandle(); 1126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ntpApiHandle = topLevelHandle.newTabPage; 1128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ntpApiHandle.onthemechange = onThemeChange; 1129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ntpApiHandle.onmostvisitedchange = onMostVisitedChange; 1130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ntpApiHandle.oninputstart = onInputStart; 11327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ntpApiHandle.oninputcancel = restoreNtp; 11337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (ntpApiHandle.isInputInProgress) 11357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) onInputStart(); 11367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) renderTheme(); 1138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onMostVisitedChange(); 1139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) searchboxApiHandle = topLevelHandle.searchBox; 1141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (fakebox) { 1143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Listener for updating the key capture state. 1144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch document.body.onmousedown = function(event) { 1145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (isFakeboxClick(event)) 1146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) searchboxApiHandle.startCapturingKeyStrokes(); 1147b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) else if (isFakeboxFocused()) 1148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) searchboxApiHandle.stopCapturingKeyStrokes(); 1149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 1150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) searchboxApiHandle.onkeycapturechange = function() { 1151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) setFakeboxFocus(searchboxApiHandle.isKeyCaptureEnabled); 1152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 1153ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch var inputbox = $(IDS.FAKEBOX_INPUT); 1154ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (inputbox) { 1155ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch inputbox.onpaste = function(event) { 1156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch event.preventDefault(); 1157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch searchboxApiHandle.paste(); 1158ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }; 1159ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch inputbox.ondrop = function(event) { 1160ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch event.preventDefault(); 1161ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch var text = event.dataTransfer.getData('text/plain'); 1162ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (text) { 1163ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch searchboxApiHandle.paste(text); 1164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1165ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }; 1166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch inputbox.ondragenter = function() { 1167ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch setFakeboxDragFocus(true); 1168ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }; 1169ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch inputbox.ondragleave = function() { 1170ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch setFakeboxDragFocus(false); 1171ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch }; 1172ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 11733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 11743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Update the fakebox style to match the current key capturing state. 11753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) setFakeboxFocus(searchboxApiHandle.isKeyCaptureEnabled); 117690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 1177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (searchboxApiHandle.rtl) { 117990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) $(IDS.NOTIFICATION).dir = 'rtl'; 11806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) document.body.setAttribute('dir', 'rtl'); 118190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Add class for setting alignments based on language directionality. 11827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) document.body.classList.add(CLASSES.RTL); 118390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) $(IDS.TILES).dir = 'rtl'; 1184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 11851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window.addEventListener('message', handlePostMessage); 1187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/** 11917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Binds event listeners. 11927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 11937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)function listen() { 11947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) document.addEventListener('DOMContentLoaded', init); 11957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 11967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)return { 11987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) init: init, 11997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) listen: listen 12007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 12017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 12027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)if (!window.localNTPUnitTest) { 12049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch LocalNTP().listen(); 12057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1206