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 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
289 */ | 289 */ |
290 loadIcon: function() { | 290 loadIcon: function() { |
291 if (this.appImgSrc_) { | 291 if (this.appImgSrc_) { |
292 this.appImg_.src = this.appImgSrc_; | 292 this.appImg_.src = this.appImgSrc_; |
293 this.appImg_.classList.remove('invisible'); | 293 this.appImg_.classList.remove('invisible'); |
294 this.appImgSrc_ = null; | 294 this.appImgSrc_ = null; |
295 } | 295 } |
296 this.classList.remove('icon-loading'); | 296 this.classList.remove('icon-loading'); |
297 }, | 297 }, |
298 | 298 |
299 // Shows a notification text below the app icon and stuffs the attributes | 299 /** |
300 // necessary to show the bubble when the user clicks on the notification | 300 * Creates a bubble node. |
301 // text. | 301 * @param {Object} notification The notification to show in the bubble. |
302 setupNotification_: function(notification) { | 302 * @param {boolean} full Whether we want the headline or just the content. |
303 // Remove the old notification from this node (if any). | 303 * @private |
304 if (this.appNotification_) | 304 */ |
305 this.appNotification_.parentNode.removeChild(this.appNotification_); | 305 createBubbleNode_: function(notification, full) { |
306 if (!full) { | |
307 var titleItem = this.ownerDocument.createElement('span'); | |
308 titleItem.textContent = notification['title']; | |
309 return titleItem; | |
310 } else { | |
311 var container = this.ownerDocument.createElement('div'); | |
306 | 312 |
307 if (notification) { | 313 var messageItem = this.ownerDocument.createElement('div'); |
308 // Add a new notification to this node. | 314 messageItem.textContent = notification['body']; |
309 var appNotification = this.ownerDocument.createElement('span'); | 315 container.appendChild(messageItem); |
310 appNotification.className = 'app-notification'; | 316 |
311 appNotification.textContent = notification['title']; | 317 if (notification['linkUrl'] && notification['linkText']) { |
312 appNotification.addEventListener('click', | 318 var anchor = this.ownerDocument.createElement('a'); |
313 this.onNotificationClick_.bind(this)); | 319 anchor.href = notification['linkUrl']; |
314 appNotification.notificationTitle = notification['title']; | 320 anchor.textContent = notification['linkText']; |
315 appNotification.notificationMessage = notification['body']; | 321 container.appendChild(anchor); |
316 if (typeof notification['linkUrl'] != 'undefined' && | |
317 typeof notification['linkText'] != 'undefined') { | |
318 appNotification.notificationLink = notification['linkUrl']; | |
319 appNotification.notificationLinkText = notification['linkText']; | |
320 } | 322 } |
321 this.appNotification_ = appNotification; | 323 |
322 this.appendChild(appNotification); | 324 return container; |
323 } | 325 } |
324 }, | 326 }, |
325 | 327 |
328 /** | |
329 * Sets up a notification for the app icon. | |
330 * @param {Object} notification The notification to show in the bubble. | |
331 * @private | |
332 */ | |
333 setupNotification_: function(notification) { | |
334 if (notification) { | |
335 var infoBubble; | |
336 if (!this.currentBubbleShowing_) { | |
337 // Create a new bubble. | |
338 infoBubble = new cr.ui.ExpandableBubble; | |
339 infoBubble.anchorNode = this; | |
340 } else { | |
341 // Reuse the old bubble instead of popping up a new bubble over | |
342 // the old one. | |
343 infoBubble = this.currentBubbleShowing_; | |
344 infoBubble.collapseBubble_(); | |
345 } | |
346 infoBubble.contentTitle = this.createBubbleNode_(notification, false); | |
347 infoBubble.content = this.createBubbleNode_(notification, true); | |
348 infoBubble.show(); | |
349 | |
350 this.currentBubbleShowing_ = infoBubble; | |
351 } | |
352 }, | |
353 | |
326 /** | 354 /** |
327 * Creates the apps-promo section of the app (should only be called for the | 355 * Creates the apps-promo section of the app (should only be called for the |
328 * webstore app). | 356 * webstore app). |
329 * @private | 357 * @private |
330 */ | 358 */ |
331 createAppsPromoExtras_: function() { | 359 createAppsPromoExtras_: function() { |
332 this.classList.add('webstore'); | 360 this.classList.add('webstore'); |
333 | 361 |
334 this.appsPromoExtras_ = $('apps-promo-extras-template').cloneNode(true); | 362 this.appsPromoExtras_ = $('apps-promo-extras-template').cloneNode(true); |
335 this.appsPromoExtras_.id = ''; | 363 this.appsPromoExtras_.id = ''; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
404 onClick_: function(e) { | 432 onClick_: function(e) { |
405 chrome.send('launchApp', | 433 chrome.send('launchApp', |
406 [this.appId, APP_LAUNCH.NTP_APPS_MAXIMIZED, | 434 [this.appId, APP_LAUNCH.NTP_APPS_MAXIMIZED, |
407 e.altKey, e.ctrlKey, e.metaKey, e.shiftKey, e.button]); | 435 e.altKey, e.ctrlKey, e.metaKey, e.shiftKey, e.button]); |
408 | 436 |
409 // Don't allow the click to trigger a link or anything | 437 // Don't allow the click to trigger a link or anything |
410 e.preventDefault(); | 438 e.preventDefault(); |
411 }, | 439 }, |
412 | 440 |
413 /** | 441 /** |
442 <<<<<<< .mine | |
arv (Not doing code reviews)
2011/10/18 16:50:30
Please resolve
| |
443 ======= | |
414 * Invoked when the user presses a key while the app is focused. | 444 * Invoked when the user presses a key while the app is focused. |
415 * @param {Event} e The key event. | 445 * @param {Event} e The key event. |
416 * @private | 446 * @private |
417 */ | 447 */ |
418 onKeydown_: function(e) { | 448 onKeydown_: function(e) { |
419 if (e.keyIdentifier == 'Enter') { | 449 if (e.keyIdentifier == 'Enter') { |
420 chrome.send('launchApp', | 450 chrome.send('launchApp', |
421 [this.appId, APP_LAUNCH.NTP_APPS_MAXIMIZED, | 451 [this.appId, APP_LAUNCH.NTP_APPS_MAXIMIZED, |
422 e.altKey, e.ctrlKey, e.metaKey, e.shiftKey, 0]); | 452 e.altKey, e.ctrlKey, e.metaKey, e.shiftKey, 0]); |
423 e.preventDefault(); | 453 e.preventDefault(); |
(...skipping 30 matching lines...) Expand all Loading... | |
454 container.appendChild(anchor); | 484 container.appendChild(anchor); |
455 } | 485 } |
456 | 486 |
457 var infoBubble = new cr.ui.Bubble; | 487 var infoBubble = new cr.ui.Bubble; |
458 infoBubble.anchorNode = e.target; | 488 infoBubble.anchorNode = e.target; |
459 infoBubble.content = container; | 489 infoBubble.content = container; |
460 infoBubble.show(); | 490 infoBubble.show(); |
461 }, | 491 }, |
462 | 492 |
463 /** | 493 /** |
494 >>>>>>> .r105287 | |
464 * Adds a node to the list of targets that will launch the app. This list | 495 * Adds a node to the list of targets that will launch the app. This list |
465 * is also used in onMousedown to determine whether the app contents should | 496 * is also used in onMousedown to determine whether the app contents should |
466 * be shown as active (if we don't do this, then clicking anywhere in | 497 * be shown as active (if we don't do this, then clicking anywhere in |
467 * appContents, even a part that is outside the ideally clickable region, | 498 * appContents, even a part that is outside the ideally clickable region, |
468 * will cause the app icon to look active). | 499 * will cause the app icon to look active). |
469 * @param {HTMLElement} node The node that should be clickable. | 500 * @param {HTMLElement} node The node that should be clickable. |
470 */ | 501 */ |
471 addLaunchClickTarget_: function(node) { | 502 addLaunchClickTarget_: function(node) { |
472 node.classList.add('launch-click-target'); | 503 node.classList.add('launch-click-target'); |
473 node.addEventListener('click', this.onClick_.bind(this)); | 504 node.addEventListener('click', this.onClick_.bind(this)); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
548 }, | 579 }, |
549 | 580 |
550 /** | 581 /** |
551 * Uninstalls the app after it's been dropped on the trash. | 582 * Uninstalls the app after it's been dropped on the trash. |
552 */ | 583 */ |
553 removeFromChrome: function() { | 584 removeFromChrome: function() { |
554 chrome.send('uninstallApp', [this.appData_.id, true]); | 585 chrome.send('uninstallApp', [this.appData_.id, true]); |
555 | 586 |
556 this.tile.tilePage.cleanupDrag(); | 587 this.tile.tilePage.cleanupDrag(); |
557 this.tile.parentNode.removeChild(this.tile); | 588 this.tile.parentNode.removeChild(this.tile); |
589 | |
590 if (this.currentBubbleShowing_) | |
591 currentBubbleShowing_.hide(); | |
558 }, | 592 }, |
559 | 593 |
560 /** | 594 /** |
561 * Called when a drag is starting on the tile. Updates dataTransfer with | 595 * Called when a drag is starting on the tile. Updates dataTransfer with |
562 * data for this tile. | 596 * data for this tile. |
563 */ | 597 */ |
564 setDragData: function(dataTransfer) { | 598 setDragData: function(dataTransfer) { |
565 dataTransfer.setData('Text', this.appData_.title); | 599 dataTransfer.setData('Text', this.appData_.title); |
566 dataTransfer.setData('URL', this.appData_.url); | 600 dataTransfer.setData('URL', this.appData_.url); |
567 }, | 601 }, |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
793 appNotificationChanged: appNotificationChanged, | 827 appNotificationChanged: appNotificationChanged, |
794 AppsPage: AppsPage, | 828 AppsPage: AppsPage, |
795 launchAppAfterEnable: launchAppAfterEnable, | 829 launchAppAfterEnable: launchAppAfterEnable, |
796 }; | 830 }; |
797 }); | 831 }); |
798 | 832 |
799 // TODO(estade): update the content handlers to use ntp namespace instead of | 833 // TODO(estade): update the content handlers to use ntp namespace instead of |
800 // making these global. | 834 // making these global. |
801 var appNotificationChanged = ntp4.appNotificationChanged; | 835 var appNotificationChanged = ntp4.appNotificationChanged; |
802 var launchAppAfterEnable = ntp4.launchAppAfterEnable; | 836 var launchAppAfterEnable = ntp4.launchAppAfterEnable; |
OLD | NEW |