| OLD | NEW |
| 1 | 1 |
| 2 // Helpers | 2 // Helpers |
| 3 | 3 |
| 4 function $(id) { | 4 function $(id) { |
| 5 return document.getElementById(id); | 5 return document.getElementById(id); |
| 6 } | 6 } |
| 7 | 7 |
| 8 // TODO(arv): Remove these when classList is available in HTML5. | 8 // TODO(arv): Remove these when classList is available in HTML5. |
| 9 // https://bugs.webkit.org/show_bug.cgi?id=20709 | 9 // https://bugs.webkit.org/show_bug.cgi?id=20709 |
| 10 function hasClass(el, name) { | 10 function hasClass(el, name) { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 | 58 |
| 59 function bind(fn, selfObj, var_args) { | 59 function bind(fn, selfObj, var_args) { |
| 60 var boundArgs = Array.prototype.slice.call(arguments, 2); | 60 var boundArgs = Array.prototype.slice.call(arguments, 2); |
| 61 return function() { | 61 return function() { |
| 62 var args = Array.prototype.slice.call(arguments); | 62 var args = Array.prototype.slice.call(arguments); |
| 63 args.unshift.apply(args, boundArgs); | 63 args.unshift.apply(args, boundArgs); |
| 64 return fn.apply(selfObj, args); | 64 return fn.apply(selfObj, args); |
| 65 } | 65 } |
| 66 } | 66 } |
| 67 | 67 |
| 68 var loading = true; |
| 68 var mostVisitedData = []; | 69 var mostVisitedData = []; |
| 69 var gotMostVisited = false; | 70 var gotMostVisited = false; |
| 70 var gotShownSections = false; | 71 var gotShownSections = false; |
| 71 | 72 |
| 72 function mostVisitedPages(data) { | 73 function mostVisitedPages(data) { |
| 73 logEvent('received most visited pages'); | 74 logEvent('received most visited pages'); |
| 74 | 75 |
| 75 // We append the class name with the "filler" so that we can style fillers | 76 // We append the class name with the "filler" so that we can style fillers |
| 76 // differently. | 77 // differently. |
| 77 var maxItems = 8; | 78 var maxItems = 8; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 94 data.length = Math.min(data.length, 5); | 95 data.length = Math.min(data.length, 5); |
| 95 processData('#download-items', data); | 96 processData('#download-items', data); |
| 96 } | 97 } |
| 97 | 98 |
| 98 function recentlyClosedTabs(data) { | 99 function recentlyClosedTabs(data) { |
| 99 logEvent('received recently closed tabs'); | 100 logEvent('received recently closed tabs'); |
| 100 data.length = Math.min(data.length, 5); | 101 data.length = Math.min(data.length, 5); |
| 101 processData('#tab-items', data); | 102 processData('#tab-items', data); |
| 102 } | 103 } |
| 103 | 104 |
| 104 function onShownSections(m) { | 105 function onShownSections(mask) { |
| 105 logEvent('received shown sections'); | 106 logEvent('received shown sections'); |
| 106 setShownSections(m); | 107 if (mask != shownSections) { |
| 108 shownSections = mask; |
| 109 // No need to relayout these unless changed. |
| 110 mostVisited.updateDisplayMode(); |
| 111 layoutMostVisited(); |
| 112 layoutLowerSections(); |
| 113 updateOptionMenu(); |
| 114 } |
| 115 |
| 107 gotShownSections = true; | 116 gotShownSections = true; |
| 108 onDataLoaded(); | 117 onDataLoaded(); |
| 109 } | 118 } |
| 110 | 119 |
| 111 function saveShownSections() { | 120 function saveShownSections() { |
| 112 chrome.send('setShownSections', [String(shownSections)]); | 121 chrome.send('setShownSections', [String(shownSections)]); |
| 113 } | 122 } |
| 114 | 123 |
| 115 function tips(data) { | 124 function tips(data) { |
| 116 logEvent('received tips data'); | 125 logEvent('received tips data'); |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 * This matches the Section enum in ../dom_ui/shown_sections_handler.h | 329 * This matches the Section enum in ../dom_ui/shown_sections_handler.h |
| 321 * @enum {number} | 330 * @enum {number} |
| 322 */ | 331 */ |
| 323 var Section = { | 332 var Section = { |
| 324 THUMB: 1, | 333 THUMB: 1, |
| 325 LIST: 2, | 334 LIST: 2, |
| 326 RECENT: 4, | 335 RECENT: 4, |
| 327 TIPS: 8 | 336 TIPS: 8 |
| 328 }; | 337 }; |
| 329 | 338 |
| 330 var shownSections = Section.RECENT | Section.TIPS; | 339 var shownSections = Section.THUMB | Section.RECENT | Section.TIPS; |
| 331 | 340 |
| 332 function showSection(section) { | 341 function showSection(section) { |
| 333 if (!(section & shownSections)) { | 342 if (!(section & shownSections)) { |
| 334 // THUMBS and LIST are mutually exclusive. | 343 // THUMBS and LIST are mutually exclusive. |
| 335 if (section == Section.THUMB) { | 344 if (section == Section.THUMB) { |
| 336 hideSection(Section.LIST); | 345 hideSection(Section.LIST); |
| 337 } else if (section == Section.LIST) { | 346 } else if (section == Section.LIST) { |
| 338 hideSection(Section.THUMB); | 347 hideSection(Section.THUMB); |
| 339 } | 348 } |
| 340 | 349 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 366 // we are hiding one of them so if the other one is visible it is now | 375 // we are hiding one of them so if the other one is visible it is now |
| 367 // {@code large}. | 376 // {@code large}. |
| 368 if (shownSections & Section.RECENT) { | 377 if (shownSections & Section.RECENT) { |
| 369 recentChangedSize(large); | 378 recentChangedSize(large); |
| 370 } else if (shownSections & Section.TIPS) { | 379 } else if (shownSections & Section.TIPS) { |
| 371 tipsChangedSize(large); | 380 tipsChangedSize(large); |
| 372 } | 381 } |
| 373 } | 382 } |
| 374 } | 383 } |
| 375 | 384 |
| 376 /** | |
| 377 * This is called when we get the shown sections pref from the backend. | |
| 378 */ | |
| 379 function setShownSections(mask) { | |
| 380 if (mask != shownSections) { | |
| 381 shownSections = mask; | |
| 382 mostVisited.updateDisplayMode(); | |
| 383 layoutMostVisited(); | |
| 384 layoutLowerSections(); | |
| 385 updateOptionMenu(); | |
| 386 } | |
| 387 } | |
| 388 | |
| 389 var mostVisited = { | 385 var mostVisited = { |
| 390 getItem: function(el) { | 386 getItem: function(el) { |
| 391 return findAncestorByClass(el, 'thumbnail-container'); | 387 return findAncestorByClass(el, 'thumbnail-container'); |
| 392 }, | 388 }, |
| 393 | 389 |
| 394 getHref: function(el) { | 390 getHref: function(el) { |
| 395 return el.href; | 391 return el.href; |
| 396 }, | 392 }, |
| 397 | 393 |
| 398 togglePinned: function(el) { | 394 togglePinned: function(el) { |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 589 return localStrings.getString('closedwindowsingle'); | 585 return localStrings.getString('closedwindowsingle'); |
| 590 return localStrings.formatString('closedwindowmultiple', numTabs); | 586 return localStrings.formatString('closedwindowmultiple', numTabs); |
| 591 } | 587 } |
| 592 | 588 |
| 593 /** | 589 /** |
| 594 * We need both most visited and the shown sections to be considered loaded. | 590 * We need both most visited and the shown sections to be considered loaded. |
| 595 * @return {boolean} | 591 * @return {boolean} |
| 596 */ | 592 */ |
| 597 function onDataLoaded() { | 593 function onDataLoaded() { |
| 598 if (gotMostVisited && gotShownSections) { | 594 if (gotMostVisited && gotShownSections) { |
| 595 loading = false; |
| 599 // Remove class name in a timeout so that changes done in this JS thread are | 596 // Remove class name in a timeout so that changes done in this JS thread are |
| 600 // not animated. | 597 // not animated. |
| 601 window.setTimeout(function() { | 598 window.setTimeout(function() { |
| 602 removeClass(document.body, 'loading'); | 599 removeClass(document.body, 'loading'); |
| 603 }, 10); | 600 }, 10); |
| 604 } | 601 } |
| 605 } | 602 } |
| 606 | 603 |
| 607 // Theme related | 604 // Theme related |
| 608 | 605 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 // We apply the size class here so that we don't trigger layout animations | 649 // We apply the size class here so that we don't trigger layout animations |
| 653 // onload. | 650 // onload. |
| 654 | 651 |
| 655 handleWindowResize(null, true); | 652 handleWindowResize(null, true); |
| 656 | 653 |
| 657 var localStrings = new LocalStrings(); | 654 var localStrings = new LocalStrings(); |
| 658 | 655 |
| 659 /////////////////////////////////////////////////////////////////////////////// | 656 /////////////////////////////////////////////////////////////////////////////// |
| 660 // Things we know are not needed at startup go below here | 657 // Things we know are not needed at startup go below here |
| 661 | 658 |
| 659 function afterTransition(f) { |
| 660 if (loading) { |
| 661 // Make sure we do not use a timer during load since it slows down the UI. |
| 662 f(); |
| 663 } else { |
| 664 // The duration of all transitions are 500ms |
| 665 window.setTimeout(f, 500); |
| 666 } |
| 667 } |
| 668 |
| 662 // Notification | 669 // Notification |
| 663 | 670 |
| 664 function afterTransition(f) { | |
| 665 // The duration of all transitions are 500ms | |
| 666 window.setTimeout(f, 500); | |
| 667 } | |
| 668 | |
| 669 function showNotification(text, actionText, f) { | 671 function showNotification(text, actionText, f) { |
| 670 var notificationElement = $('notification'); | 672 var notificationElement = $('notification'); |
| 671 var actionLink = notificationElement.querySelector('.link'); | 673 var actionLink = notificationElement.querySelector('.link'); |
| 672 notificationElement.firstElementChild.textContent = text; | 674 notificationElement.firstElementChild.textContent = text; |
| 673 | 675 |
| 674 actionLink.textContent = actionText; | 676 actionLink.textContent = actionText; |
| 675 actionLink.onclick = function() { | 677 actionLink.onclick = function() { |
| 676 f(); | 678 f(); |
| 677 removeClass(notificationElement, 'show'); | 679 removeClass(notificationElement, 'show'); |
| 678 // Since we have a :hover rule to not hide the notification banner when the | 680 // Since we have a :hover rule to not hide the notification banner when the |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 if (this.isMenuShown()) { | 750 if (this.isMenuShown()) { |
| 749 this.hideMenu(); | 751 this.hideMenu(); |
| 750 } else { | 752 } else { |
| 751 this.showMenu(); | 753 this.showMenu(); |
| 752 } | 754 } |
| 753 }, | 755 }, |
| 754 | 756 |
| 755 handleMouseOver: function(e) { | 757 handleMouseOver: function(e) { |
| 756 var el = e.target; | 758 var el = e.target; |
| 757 var index = Array.prototype.indexOf.call(this.menu.children, el); | 759 var index = Array.prototype.indexOf.call(this.menu.children, el); |
| 758 console.log(el, index); | |
| 759 this.setSelectedIndex(index); | 760 this.setSelectedIndex(index); |
| 760 }, | 761 }, |
| 761 | 762 |
| 762 handleMouseOut: function(e) { | 763 handleMouseOut: function(e) { |
| 763 this.setSelectedIndex(-1); | 764 this.setSelectedIndex(-1); |
| 764 }, | 765 }, |
| 765 | 766 |
| 766 handleMouseUp: function(e) { | 767 handleMouseUp: function(e) { |
| 767 var item = this.getSelectedItem(); | 768 var item = this.getSelectedItem(); |
| 768 if (item) { | 769 if (item) { |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1093 el.addEventListener('dragover', bind(this.handleDragOver, this)); | 1094 el.addEventListener('dragover', bind(this.handleDragOver, this)); |
| 1094 el.addEventListener('dragleave', bind(this.handleDragLeave, this)); | 1095 el.addEventListener('dragleave', bind(this.handleDragLeave, this)); |
| 1095 el.addEventListener('drop', bind(this.handleDrop, this)); | 1096 el.addEventListener('drop', bind(this.handleDrop, this)); |
| 1096 el.addEventListener('dragend', bind(this.handleDragEnd, this)); | 1097 el.addEventListener('dragend', bind(this.handleDragEnd, this)); |
| 1097 el.addEventListener('drag', bind(this.handleDrag, this)); | 1098 el.addEventListener('drag', bind(this.handleDrag, this)); |
| 1098 el.addEventListener('mousedown', bind(this.handleMouseDown, this)); | 1099 el.addEventListener('mousedown', bind(this.handleMouseDown, this)); |
| 1099 } | 1100 } |
| 1100 }; | 1101 }; |
| 1101 | 1102 |
| 1102 dnd.init(); | 1103 dnd.init(); |
| OLD | NEW |