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

Unified Diff: chrome/browser/resources/ntp4/bookmarks_page.js

Issue 8760003: [ntp4] Remove bookmarks page implementation and resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: update page_list_view.js Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/ntp4/bookmarks_page.css ('k') | chrome/browser/resources/ntp4/new_tab.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/ntp4/bookmarks_page.js
===================================================================
--- chrome/browser/resources/ntp4/bookmarks_page.js (revision 112258)
+++ chrome/browser/resources/ntp4/bookmarks_page.js (working copy)
@@ -1,652 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-cr.define('ntp4', function() {
- 'use strict';
-
- var localStrings = new LocalStrings;
-
- /**
- * A running count of bookmark tiles that we create so that each will have
- * a unique ID.
- */
- var tileId = 0;
-
- /**
- * The maximum number of tiles that we will display on this page. If there
- * are not enough spaces to show all bookmarks, we'll include a link to the
- * Bookmarks manager.
- * TODO(csilv): Eliminate the need for this restraint.
- * @type {number}
- * @const
- */
- var MAX_BOOKMARK_TILES = 18;
-
- /**
- * The root node's ID. We need this to determine removable items (direct
- * children aren't removable).
- * @type {number}
- * @const
- */
- var ROOT_NODE_ID = '0';
-
- /**
- * The bookmark bar's ID. We need this to allow combining the root and
- * bookmarks bars at the top level of the folder hierarchy/bookmarks page.
- * aren't removable).
- * @type {number}
- * @const
- */
- var BOOKMARKS_BAR_ID = '1';
-
- /**
- * Creates a new bookmark object.
- * @param {Object} data The url and title.
- * @constructor
- * @extends {HTMLDivElement}
- */
- function Bookmark(data) {
- var el = $('bookmark-template').cloneNode(true);
- el.__proto__ = Bookmark.prototype;
- el.initialize(data);
-
- return el;
- }
-
- Bookmark.prototype = {
- __proto__: HTMLDivElement.prototype,
-
- /**
- * Initialize the bookmark object.
- * @param {Object} data The bookmark data (url, title, etc).
- */
- initialize: function(data) {
- this.data = data;
- this.hidden = false;
-
- var id = tileId++;
- this.id = 'bookmark_tile_' + id;
-
- var title = this.querySelector('.title');
- title.textContent = this.data.title;
-
- // Sets the tooltip.
- this.title = this.data.title;
-
- if (this.data.url) {
- var button = this.querySelector('.button');
- button.href = title.href = this.data.url;
- }
-
- var faviconDiv = this.querySelector('.favicon');
- var faviconUrl;
- if (this.data.url) {
- faviconUrl = 'chrome://favicon/size/16/' + this.data.url;
- chrome.send('getFaviconDominantColor', [faviconUrl, this.id]);
- } else {
- faviconUrl = 'chrome://theme/IDR_BOOKMARK_BAR_FOLDER';
- // TODO(csilv): Should we vary this color by platform?
- this.stripeColor = '#919191';
- }
- faviconDiv.style.backgroundImage = url(faviconUrl);
-
- if (this.canBeRemoved())
- this.classList.add('removable');
-
- this.addEventListener('click', this.handleClick_.bind(this));
- },
-
- /**
- * Sets the color of the favicon dominant color bar.
- * @param {string} color The css-parsable value for the color.
- */
- set stripeColor(color) {
- this.querySelector('.color-stripe').style.backgroundColor = color;
- },
-
- /**
- * Set the size and position of the bookmark tile.
- * @param {number} size The total size of |this|.
- * @param {number} x The x-position.
- * @param {number} y The y-position.
- * animate.
- */
- setBounds: function(size, x, y) {
- this.style.width = size + 'px';
- this.style.height = heightForWidth(size) + 'px';
-
- this.style.left = x + 'px';
- this.style.right = x + 'px';
- this.style.top = y + 'px';
- },
-
- /**
- * Set some data on the drag when it starts.
- * @param {DataTransfer} dataTransfer A data transfer object from the
- * current drag.
- */
- setDragData: function(dataTransfer) {
- // OS X requires extra data drag data to consider a drag useful, so we're
- // appending some semi-useful data at the end to force drags to work on
- // this OS. Don't use this data for anything -- this is just a hack to
- // ensure drag works the same as on other platforms.
- dataTransfer.setData('Text', this.data.id);
- },
-
- /**
- * Invoked when a bookmark is clicked
- * @param {Event} e The click event.
- * @private
- */
- handleClick_: function(e) {
- if (e.target.classList.contains('close-button')) {
- e.preventDefault();
- this.removeFromChrome();
- } else if (!this.data.url) {
- chrome.send('getBookmarksData', [this.data.id]);
- e.preventDefault();
- }
- },
-
- /** @inheritDoc */
- removeFromChrome: function() {
- chrome.send('removeBookmark', [this.data.id]);
- },
-
- /**
- * All bookmarks except for children of the root node.
- * @return {boolean} Whether or not the item can be removed.
- */
- canBeRemoved: function() {
- return this.data.parentId !== ROOT_NODE_ID;
- },
- };
-
- /**
- * Creates a new bookmark title object.
- * @param {Object} data The url and title.
- * @constructor
- * @extends {HTMLDivElement}
- */
- function BookmarkTitle(data) {
- var el = cr.doc.createElement('div');
- el.__proto__ = BookmarkTitle.prototype;
- el.initialize(data);
-
- return el;
- }
-
- BookmarkTitle.prototype = {
- __proto__: HTMLDivElement.prototype,
-
- /**
- * Initialize the bookmark title object.
- */
- initialize: function(data) {
- this.className = 'title-crumb';
- this.folderId = data.id;
- this.textContent = data.parentId ? data.title :
- localStrings.getString('bookmarksPage');
-
- this.addEventListener('click', this.handleClick_);
- },
-
- /**
- * Invoked when a bookmark title is clicked
- * @param {Event} e The click event.
- * @private
- */
- handleClick_: function(e) {
- chrome.send('getBookmarksData', [this.folderId]);
- },
- };
-
- var TilePage = ntp4.TilePage;
-
- var bookmarksPageGridValues = {
- // The fewest tiles we will show in a row.
- minColCount: 3,
- // The most tiles we will show in a row.
- maxColCount: 6,
-
- // The smallest a tile can be.
- minTileWidth: 64,
- // The biggest a tile can be.
- maxTileWidth: 96,
-
- // The padding between tiles, as a fraction of the tile width.
- tileSpacingFraction: 1 / 2,
- };
- TilePage.initGridValues(bookmarksPageGridValues);
-
- /**
- * Calculates the height for a bookmarks tile for a given width. The size
- * is based on a desired size of 96x72 ratio.
- * @return {number} The height.
- */
- function heightForWidth(width) {
- // The 2s are for borders, the 31 is for the title.
- return (width - 2) * 72 / 96 + 2 + 31;
- }
-
- /**
- * Creates a new BookmarksPage object.
- * @constructor
- * @extends {TilePage}
- */
- function BookmarksPage() {
- var el = new TilePage(bookmarksPageGridValues);
- el.__proto__ = BookmarksPage.prototype;
- el.initialize();
-
- return el;
- }
-
- BookmarksPage.prototype = {
- __proto__: TilePage.prototype,
-
- /**
- * Initialize the bookmarks page object.
- */
- initialize: function() {
- this.classList.add('bookmarks-page');
-
- // Insert the bookmark titles header which is unique to bookmark pages.
- var titleWrapper = $('bookmarks-title-wrapper')
- titleWrapper.hidden = false;
- this.insertBefore(titleWrapper, this.firstChild);
-
- // Insert the top & bottom links for the Bookmarks Manager page.
- var pageContent = this.querySelector('.tile-page-content');
- var topWrapper = $('bookmarks-top-link-wrapper');
- pageContent.insertBefore(topWrapper, pageContent.firstChild);
- topWrapper.hidden = false;
- pageContent.appendChild($('bookmarks-bottom-link-wrapper'));
- },
-
- /**
- * Build the bookmark titles bar (ie, navigation hiearchy).
- * @param {Array} items The parent hiearchy of the current folder.
- * @private
- */
- updateBookmarkTitles_: function(items) {
- var wrapper = $('bookmarks-title-wrapper');
- var title = wrapper.querySelector('.section-title');
- title.innerHTML = '';
-
- for (var i = items.length - 1; i > 0; i--) {
- title.appendChild(new BookmarkTitle(items[i]));
-
- var separator = document.createElement('hr');
- separator.className = 'bookmark-separator';
- title.appendChild(separator);
- }
-
- var titleCrumb = new BookmarkTitle(items[0]);
- titleCrumb.classList.add('title-crumb-active');
- title.appendChild(titleCrumb);
- },
-
- /**
- * Build the bookmark tiles.
- * @param {Array} items The contents of the current folder.
- * @private
- */
- updateBookmarkTiles_: function(items) {
- this.removeAllTiles();
- var tile_count = Math.min(items.length, MAX_BOOKMARK_TILES);
- for (var i = 0; i < tile_count; i++)
- this.appendTile(new Bookmark(items[i]), false);
-
- var folder_id = this.id == ROOT_NODE_ID ? BOOKMARKS_BAR_ID : this.id;
- var top_link = $('bookmarks-top-link-wrapper').querySelector('a');
- top_link.href = 'chrome://bookmarks/#' + folder_id;
-
- var wrapper = $('bookmarks-bottom-link-wrapper');
- if (items.length > MAX_BOOKMARK_TILES) {
- var bottom_link = wrapper.querySelector('a');
- bottom_link.href = 'chrome://bookmarks/#' + folder_id;
- wrapper.hidden = false;
- } else {
- wrapper.hidden = true;
- }
-
- if (this.id === ROOT_NODE_ID && !tile_count && !cr.isChromeOS)
- this.showImportPromo_();
- },
-
- /**
- * Determine whether a bookmark ID matches a folder in the current
- * hierarchy.
- * @param {string} id The bookmark ID to search for.
- * @private
- */
- isBookmarkInParentHierarchy_: function(id) {
- var titlesWrapper = $('bookmarks-title-wrapper');
- var titles = titlesWrapper.querySelectorAll('.title-crumb');
- for (var i = 0; i < titles.length; i++) {
- var bookmarkTitle = titles[i];
- if (bookmarkTitle.folderId == id)
- return true;
- }
- return false;
- },
-
- /**
- * Tells if we're in currently in the given folder.
- * @param {String} id The folder node's ID.
- * @returns {boolean} If it's in that folder (visually).
- */
- currentlyInFolder_: function(id) {
- return id === this.id || (this.id === ROOT_NODE_ID &&
- id === BOOKMARKS_BAR_ID);
- },
-
- /** @inheritDoc */
- shouldAcceptDrag: function(e) {
- var tile = ntp4.getCurrentlyDraggingTile();
- if (tile)
- return !!tile.querySelector('.most-visited, .bookmark');
- // If there was no dragging tile, look for a URL in the drag data.
- return e.dataTransfer && e.dataTransfer.types &&
- e.dataTransfer.types.indexOf('url') != -1;
- },
-
- /** @inheritDoc */
- heightForWidth: heightForWidth,
-
- /**
- * Invoked before a batch import begins. We will ignore added/changed
- * notifications while the operation is in progress.
- */
- bookmarkImportBegan: function() {
- this.importing = true;
- },
-
- /**
- * Invoked after a batch import finishes. We will reload the bookmarks
- * page to reflect the new state.
- */
- bookmarkImportEnded: function() {
- this.importing = false;
- chrome.send('getBookmarksData', []);
- },
-
- /**
- * Invoked when a node has been added.
- * @param {string} id The id of the newly created bookmark node.
- * @param {Object} bookmark The new bookmark node.
- * @param {boolean} fromCurrentPage True if the action was from this page.
- */
- bookmarkNodeAdded: function(id, bookmark, fromCurrentPage) {
- if (this.importing) return;
- if (this.currentlyInFolder_(bookmark.parentId)) {
- // Hide the import promo if it exists.
- this.hideImportPromo_();
- // Only add the item if it should be visible.
- if (bookmark.index < MAX_BOOKMARK_TILES) {
- // If source of the add came from this page, show an animated
- // insertion, otherwise just quietly do it.
- this.addTileAt(new Bookmark(bookmark), bookmark.index,
- fromCurrentPage);
- // Delete extra tiles if they exist.
- while (this.tiles.length > MAX_BOOKMARK_TILES) {
- var tile = this.tiles[this.tiles.length - 1];
- this.removeTile(tile, false);
- }
- this.repositionTiles_();
- }
- }
- },
-
- /**
- * Invoked when the title or url of a node changes.
- * @param {string} id The id of the changed node.
- * @param {Object} changeInfo Details of the changed node.
- */
- bookmarkNodeChanged: function(id, changeInfo) {
- if (this.importing) return;
-
- // If the current folder or parent is being re-named, reload the page.
- // TODO(csilv): Optimize this to reload just the titles.
- if (this.isBookmarkInParentHierarchy_(id)) {
- chrome.send('getBookmarksData', [this.id]);
- return;
- }
-
- // If the target item is contained in this folder, update just that item.
- for (var i = 0; i < this.tiles.length; i++) {
- var tile = this.tiles[i];
- var data = tile.firstChild.data;
-
- if (data.id == id) {
- data.title = changeInfo.title;
- var title = tile.querySelector('.title');
- title.textContent = data.title;
-
- if (changeInfo.url) {
- data.url = changeInfo.url;
- var button = tile.querySelector('.button');
- button.href = title.href = data.url;
- }
- break;
- }
- }
- },
-
- /**
- * Invoked when the children (just direct children, not descendants) of
- * a folder have been reordered in some way, such as sorted.
- * @param {string} id The id of the reordered bookmark node.
- * @param {!Object} reorderInfo Details of the reordered bookmark node.
- */
- bookmarkNodeChildrenReordered: function(id, reorderInfo) {
- if (this.currentlyInFolder_(id))
- chrome.send('getBookmarksData', [this.id]);
- },
-
- /**
- * Invoked when a node has moved.
- * @param {string} id The id of the moved bookmark node.
- * @param {!Object} moveInfo Details of the moved bookmark.
- */
- bookmarkNodeMoved: function(id, moveInfo) {
- // TODO(csilv): Optimize this by doing less than reloading the folder.
- // Reload the current page if the target item is the current folder
- // or a parent of the current folder.
- if (this.isBookmarkInParentHierarchy_(id)) {
- chrome.send('getBookmarksData', [this.id]);
- return;
- }
-
- // Reload the current page if the target item is being moved to/from the
- // current folder.
- if (this.currentlyInFolder_(moveInfo.parentId) ||
- this.currentlyInFolder_(moveInfo.oldParentId)) {
- chrome.send('getBookmarksData', [this.id]);
- }
- },
-
- /**
- * Invoked when a node has been removed from a folder.
- * @param {string} id The id of the removed bookmark node.
- * @param {!Object} removeInfo Details of the removed bookmark node.
- * @param {boolearn} fromCurrentPage If the event was from this page.
- */
- bookmarkNodeRemoved: function(id, removeInfo, fromCurrentPage) {
- // If the target item is the visibile folder or a parent folder, load
- // the parent of the removed item.
- if (this.isBookmarkInParentHierarchy_(id)) {
- chrome.send('getBookmarksData', [removeInfo.parentId]);
- return;
- }
-
- // If the target item is contained in the visible folder, find the
- // matching tile and delete it.
- if (this.currentlyInFolder_(removeInfo.parentId)) {
- for (var i = 0; i < this.tiles.length; i++) {
- var tile = this.tiles[i];
- if (tile.firstChild.data.id == id) {
- this.removeTile(tile, fromCurrentPage);
- break;
- }
- }
- }
- },
-
- /**
- * Set the bookmark data that should be displayed, replacing any existing
- * data.
- * @param {Object} data Data that shoudl be displayed. Contains arrays
- * 'items' and 'navigationItems'.
- */
- set data(data) {
- this.id = data.navigationItems[0].id;
- this.updateBookmarkTiles_(data.items);
- this.updateBookmarkTitles_(data.navigationItems);
- },
-
- /** @inheritDoc */
- get extraBottomPadding() {
- return 40;
- },
-
- /** @inheritDoc */
- setDropEffect: function(dataTransfer) {
- var tile = ntp4.getCurrentlyDraggingTile();
- if (tile && tile.querySelector('.bookmark'))
- ntp4.setCurrentDropEffect(dataTransfer, 'move');
- else
- ntp4.setCurrentDropEffect(dataTransfer, 'copy');
- },
-
- /** @inheritDoc */
- addDragData: function(dataTransfer, index) {
- var parentId = ROOT_NODE_ID == this.id ? BOOKMARKS_BAR_ID : this.id;
- var currentlyDraggingTile = ntp4.getCurrentlyDraggingTile();
- if (currentlyDraggingTile) {
- var tileContents = currentlyDraggingTile.firstChild;
- if (tileContents.classList.contains('most-visited')) {
- this.generateBookmarkForLink(parentId, index,
- tileContents.textContent,
- tileContents.href);
- }
- } else {
- this.addOutsideData_(dataTransfer, parentId, index);
- }
- },
-
- /**
- * If we got an outside drag from a page or the URL bar.
- * @param {!DataTransfer} dataTransfer The drag data transfer object.
- * @param {number} parentId The parent ID for the current bookmark level.
- * @param {number} index Position it will be inserted relative to siblings.
- */
- addOutsideData_: function(dataTransfer, parentId, index) {
- var url = dataTransfer.getData('url');
- assert(url && url !== window.location.href);
- // Look for any text/html types first (links, etc.).
- var title, html = dataTransfer.getData('text/html');
- if (html) {
- // NOTE: Don't insert this into the DOM! It could XSS the page!
- var node = this.ownerDocument.createElement('div');
- node.innerHTML = html;
- var text = node.textContent, img = node.firstChild;
- // OS X prepends a <meta> tag to the html for some reason...
- if ('META' == img.nodeName)
- img = img.nextSibling;
- // Use the combined text (if it exists), otherwise fall back to an
- // image's alternate text (if they dragged an image onto this page).
- title = text || ('IMG' == img.nodeName && img.alt);
- }
- // If we *still* don't have a title, just use the URL.
- if (!title)
- title = url;
- // Create a bookmark for the dropped data.
- this.generateBookmarkForLink(parentId, index, title, url);
- },
-
- /**
- * Show the 'Import bookmarks' promo.
- * @private
- */
- showImportPromo_: function() {
- var importTemplate = $('bookmarks-import-data-link-template');
- var importWrapper = importTemplate.cloneNode(true);
- importWrapper.id = '';
- importWrapper.hidden = false;
- this.querySelector('.tile-page-content').appendChild(importWrapper);
- },
-
- /**
- * Hide the 'Import bookmarks' promo.
- * @private
- */
- hideImportPromo_: function() {
- var wrapper = this.querySelector('.bookmarks-import-data-link-wrapper');
- if (wrapper)
- wrapper.parentNode.removeChild(wrapper);
- },
-
- /**
- * Create a bookmark from a title/url.
- * @param {!string} parentId Stringified int64 of the parent node's ID.
- * @param {number} index Sibling relative index, i.e. 3rd on this level.
- * @param {string} title More human readable title of the bookmark.
- * @param {string} url URL of the bookmark to be created.
- */
- generateBookmarkForLink: function(parentId, index, title, url) {
- // Bookmark creation actually only *requires* a parent ID, as if we just
- // pass a parent ID it's created as a folder with blank title as a child
- // of that parent.
- assert(parentId);
- chrome.send('createBookmark', [parentId, index, title, url]);
- },
-
- /** @inheritDoc */
- tileMoved: function(tile, prevIndex) {
- var parentId = ROOT_NODE_ID == this.id ? BOOKMARKS_BAR_ID : this.id;
- chrome.send('moveBookmark', [tile.firstChild.data.id, parentId,
- tile.index + (prevIndex < tile.index)]);
- },
- };
-
- /**
- * Initializes and renders the bookmark chevron canvas. This needs to be
- * performed after the page has been loaded so that we have access to the
- * style sheet values.
- */
- function initBookmarkChevron() {
- var wrapperStyle = window.getComputedStyle($('bookmarks-title-wrapper'));
- var width = 10;
- var height = parseInt(wrapperStyle.height, 10);
- var ctx = document.getCSSCanvasContext('2d', 'bookmark-chevron',
- width, height);
- ctx.strokeStyle = wrapperStyle.borderBottomColor;
- ctx.beginPath();
- ctx.moveTo(0, 0);
- ctx.lineTo(width, height / 2);
- ctx.lineTo(0, height);
- ctx.stroke();
- }
-
- /**
- * Set the dominant color for a bookmark tile. This is the callback method
- * from a request made when the tile was created.
- * @param {string} id The ID of the bookmark tile.
- * @param {string} color The color represented as a CSS string.
- */
- function setBookmarksFaviconDominantColor(id, color) {
- var tile = $(id);
- if (tile)
- tile.stripeColor = color;
- }
-
- return {
- BookmarksPage: BookmarksPage,
- initBookmarkChevron: initBookmarkChevron,
- };
-});
-
-window.addEventListener('load', ntp4.initBookmarkChevron);
« no previous file with comments | « chrome/browser/resources/ntp4/bookmarks_page.css ('k') | chrome/browser/resources/ntp4/new_tab.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698