Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 cr.define('ntp4', function() { | 5 cr.define('ntp4', function() { |
| 6 'use strict'; | 6 'use strict'; |
| 7 | 7 |
| 8 var localStrings = new LocalStrings; | 8 var localStrings = new LocalStrings; |
| 9 | 9 |
| 10 var APP_LAUNCH = { | 10 var APP_LAUNCH = { |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 320 * Returns a pointer to the context menu for this app. All apps share the | 320 * Returns a pointer to the context menu for this app. All apps share the |
| 321 * singleton AppContextMenu. This function is called by the | 321 * singleton AppContextMenu. This function is called by the |
| 322 * ContextMenuHandler in response to the 'contextmenu' event. | 322 * ContextMenuHandler in response to the 'contextmenu' event. |
| 323 * @type {cr.ui.Menu} | 323 * @type {cr.ui.Menu} |
| 324 */ | 324 */ |
| 325 get contextMenu() { | 325 get contextMenu() { |
| 326 var menu = AppContextMenu.getInstance(); | 326 var menu = AppContextMenu.getInstance(); |
| 327 menu.setupForApp(this); | 327 menu.setupForApp(this); |
| 328 return menu.menu; | 328 return menu.menu; |
| 329 }, | 329 }, |
| 330 | |
| 331 /** | |
| 332 * Returns whether this element can be 'removed' from chrome (i.e. whether | |
| 333 * the user can drag it onto the trash and expect something to happen). | |
| 334 * @return {boolean} True if the app can be uninstalled. | |
| 335 */ | |
| 336 canBeRemoved: function() { | |
| 337 return this.appData_.can_uninstall; | |
| 338 }, | |
| 339 | |
| 340 /** | |
| 341 * Uninstalls the app after it's been dropped on the trash. | |
| 342 * @return {boolean} True if the app can be uninstalled. | |
|
Rick Byers
2011/08/08 15:24:15
Remove - doesn't return anything
Evan Stade
2011/08/08 18:26:58
Done.
| |
| 343 */ | |
| 344 removeFromChrome: function() { | |
| 345 chrome.send('uninstallApp', [this.appData_.id, true]); | |
| 346 | |
| 347 var tile = this.parentNode; | |
| 348 tile.tilePage.cleanupDrag(); | |
| 349 tile.parentNode.removeChild(tile); | |
| 350 }, | |
| 330 }; | 351 }; |
| 331 | 352 |
| 332 var TilePage = ntp4.TilePage; | 353 var TilePage = ntp4.TilePage; |
| 333 | 354 |
| 334 // The fraction of the app tile size that the icon uses. | 355 // The fraction of the app tile size that the icon uses. |
| 335 var APP_IMG_SIZE_FRACTION = 4 / 5; | 356 var APP_IMG_SIZE_FRACTION = 4 / 5; |
| 336 | 357 |
| 337 var appsPageGridValues = { | 358 var appsPageGridValues = { |
| 338 // The fewest tiles we will show in a row. | 359 // The fewest tiles we will show in a row. |
| 339 minColCount: 3, | 360 minColCount: 3, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 377 this.appendTile(new App(appData), animate); | 398 this.appendTile(new App(appData), animate); |
| 378 }, | 399 }, |
| 379 | 400 |
| 380 /** @inheritDoc */ | 401 /** @inheritDoc */ |
| 381 shouldAcceptDrag: function(e) { | 402 shouldAcceptDrag: function(e) { |
| 382 return ntp4.getCurrentlyDraggingTile() || | 403 return ntp4.getCurrentlyDraggingTile() || |
| 383 (e.dataTransfer && e.dataTransfer.types.indexOf('url') != -1); | 404 (e.dataTransfer && e.dataTransfer.types.indexOf('url') != -1); |
| 384 }, | 405 }, |
| 385 | 406 |
| 386 /** @inheritDoc */ | 407 /** @inheritDoc */ |
| 387 addOutsideData: function(dataTransfer, index) { | 408 addDragData: function(dataTransfer, index) { |
| 409 var currentlyDraggingTile = ntp4.getCurrentlyDraggingTile(); | |
| 410 if (currentlyDraggingTile) { | |
| 411 var tileContents = currentlyDraggingTile.firstChild; | |
| 412 if (tileContents.classList.contains('app')) { | |
| 413 this.tileGrid_.insertBefore( | |
| 414 currentlyDraggingTile, | |
| 415 this.tileElements_[index]); | |
| 416 this.tileMoved(currentlyDraggingTile); | |
| 417 } else if (tileContents.classList.contains('most-visited')) { | |
| 418 this.generateAppForLink(tileContents.data); | |
| 419 } | |
| 420 } else { | |
| 421 this.addOutsideData_(e.dataTransfer, index); | |
| 422 } | |
| 423 }, | |
| 424 | |
| 425 /** | |
| 426 * Adds drag data that has been dropped from a source that is not a tile. | |
| 427 * @param {Object} dataTransfer The data transfer object that holds drop | |
| 428 * data. | |
| 429 * @param {number} index The index for the new data. | |
| 430 * @private | |
| 431 */ | |
| 432 addOutsideData_: function(dataTransfer, index) { | |
| 388 var url = dataTransfer.getData('url'); | 433 var url = dataTransfer.getData('url'); |
| 389 assert(url); | 434 assert(url); |
| 390 if (!url) | 435 if (!url) |
| 391 return; | 436 return; |
| 392 | 437 |
| 393 // If the dataTransfer has html data, use that html's text contents as the | 438 // If the dataTransfer has html data, use that html's text contents as the |
| 394 // title of the new link. | 439 // title of the new link. |
| 395 var html = dataTransfer.getData('text/html'); | 440 var html = dataTransfer.getData('text/html'); |
| 396 var title; | 441 var title; |
| 397 if (html) { | 442 if (html) { |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 410 if (data.title.length > 45) | 455 if (data.title.length > 45) |
| 411 data.title = data.title.substring(0,45); | 456 data.title = data.title.substring(0,45); |
| 412 if (data.title.length == 0) | 457 if (data.title.length == 0) |
| 413 data.title = data.url; | 458 data.title = data.url; |
| 414 this.generateAppForLink(data); | 459 this.generateAppForLink(data); |
| 415 }, | 460 }, |
| 416 | 461 |
| 417 /** | 462 /** |
| 418 * Creates a new crx-less app manifest and installs it. | 463 * Creates a new crx-less app manifest and installs it. |
| 419 * @param {Object} data The data object describing the link. Must have |url| | 464 * @param {Object} data The data object describing the link. Must have |url| |
| 420 * and |title| members. | 465 * and |title| members. |
| 466 * TODO(estade): pass along an index. | |
| 421 */ | 467 */ |
| 422 generateAppForLink: function(data) { | 468 generateAppForLink: function(data) { |
| 469 assert(data.url != undefined); | |
| 470 assert(data.title != undefined); | |
| 423 chrome.send('generateAppForLink', [data.url, data.title]); | 471 chrome.send('generateAppForLink', [data.url, data.title]); |
| 424 }, | 472 }, |
| 425 | 473 |
| 426 /** @inheritDoc */ | 474 /** @inheritDoc */ |
| 427 tileMoved: function(draggedTile) { | 475 tileMoved: function(draggedTile) { |
| 428 if (!(draggedTile.firstChild instanceof App)) | 476 if (!(draggedTile.firstChild instanceof App)) |
| 429 return; | 477 return; |
| 430 | 478 |
| 431 var pageIndex = ntp4.getAppsPageIndex(this); | 479 var pageIndex = ntp4.getAppsPageIndex(this); |
| 432 chrome.send('setPageIndex', [draggedTile.firstChild.appId, pageIndex]); | 480 chrome.send('setPageIndex', [draggedTile.firstChild.appId, pageIndex]); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 446 var store = document.querySelector('.webstore'); | 494 var store = document.querySelector('.webstore'); |
| 447 if (store) | 495 if (store) |
| 448 store.setAppsPromoData(data); | 496 store.setAppsPromoData(data); |
| 449 }; | 497 }; |
| 450 | 498 |
| 451 return { | 499 return { |
| 452 APP_LAUNCH: APP_LAUNCH, | 500 APP_LAUNCH: APP_LAUNCH, |
| 453 AppsPage: AppsPage, | 501 AppsPage: AppsPage, |
| 454 }; | 502 }; |
| 455 }); | 503 }); |
| OLD | NEW |