| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 var vrShellUi = (function() { | 5 var vrShellUi = (function() { |
| 6 'use strict'; | 6 'use strict'; |
| 7 | 7 |
| 8 let ui = new scene.Scene(); | 8 let ui = new scene.Scene(); |
| 9 let uiManager; | 9 let uiManager; |
| 10 | 10 |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 // TODO(crbug/641487): currently, tabs cannot be scrolled because the | 683 // TODO(crbug/641487): currently, tabs cannot be scrolled because the |
| 684 // scrolling event is not send to UI elements. | 684 // scrolling event is not send to UI elements. |
| 685 class TabContainer { | 685 class TabContainer { |
| 686 constructor(contentQuadId) { | 686 constructor(contentQuadId) { |
| 687 /** @const */ var DOM_TAB_TEMPLATE_SELECTOR = '#tab-template'; | 687 /** @const */ var DOM_TAB_TEMPLATE_SELECTOR = '#tab-template'; |
| 688 /** @const */ var DOM_TAB_CONTAINER_SELECTOR = '#tab-container'; | 688 /** @const */ var DOM_TAB_CONTAINER_SELECTOR = '#tab-container'; |
| 689 /** @const */ var DOM_TAB_CLIP_SELECTOR = '#tab-clip'; | 689 /** @const */ var DOM_TAB_CLIP_SELECTOR = '#tab-clip'; |
| 690 /** @const */ var TAB_CONTAINER_Y_OFFSET = 0.4; | 690 /** @const */ var TAB_CONTAINER_Y_OFFSET = 0.4; |
| 691 /** @const */ var TAB_CONTAINER_Z_OFFSET = -1; | 691 /** @const */ var TAB_CONTAINER_Z_OFFSET = -1; |
| 692 | 692 |
| 693 this.tabs = {}; | |
| 694 this.domTabs = {}; | 693 this.domTabs = {}; |
| 695 this.contentQuadId = contentQuadId; | 694 this.contentQuadId = contentQuadId; |
| 696 this.domTabTemplate = document.querySelector(DOM_TAB_TEMPLATE_SELECTOR); | 695 this.domTabTemplate = document.querySelector(DOM_TAB_TEMPLATE_SELECTOR); |
| 697 this.domTabContainer = document.querySelector(DOM_TAB_CONTAINER_SELECTOR); | 696 this.domTabContainer = document.querySelector(DOM_TAB_CONTAINER_SELECTOR); |
| 698 this.domTabClip = document.querySelector(DOM_TAB_CLIP_SELECTOR); | 697 this.domTabClip = document.querySelector(DOM_TAB_CLIP_SELECTOR); |
| 699 | 698 |
| 700 // Add tab container to native scene. | 699 // Add tab container to native scene. |
| 701 this.tabContainerElement = new DomUiElement(DOM_TAB_CONTAINER_SELECTOR); | 700 this.tabContainerElement = new DomUiElement(DOM_TAB_CONTAINER_SELECTOR); |
| 702 let positionUpdate = new api.UiElementUpdate(); | 701 let positionUpdate = new api.UiElementUpdate(); |
| 703 positionUpdate.setTranslation( | 702 positionUpdate.setTranslation( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 715 | 714 |
| 716 getQualifiedTabId(tab) { | 715 getQualifiedTabId(tab) { |
| 717 return (tab.incognito ? 'i' : 'n') + tab.id; | 716 return (tab.incognito ? 'i' : 'n') + tab.id; |
| 718 } | 717 } |
| 719 | 718 |
| 720 makeDomTab(tab) { | 719 makeDomTab(tab) { |
| 721 // Make a copy of the template tab and add this copy to the tab container | 720 // Make a copy of the template tab and add this copy to the tab container |
| 722 // view. | 721 // view. |
| 723 let domTab = this.domTabTemplate.cloneNode(true); | 722 let domTab = this.domTabTemplate.cloneNode(true); |
| 724 domTab.removeAttribute('id'); | 723 domTab.removeAttribute('id'); |
| 724 domTab.addEventListener('click', function() { |
| 725 api.doAction(api.Action.SHOW_TAB, {'id': domTab.tab.id}); |
| 726 }); |
| 725 this.domTabClip.appendChild(domTab); | 727 this.domTabClip.appendChild(domTab); |
| 726 this.domTabs[this.getQualifiedTabId(tab)] = domTab; | 728 this.domTabs[this.getQualifiedTabId(tab)] = domTab; |
| 729 domTab.tab = tab; |
| 727 return domTab; | 730 return domTab; |
| 728 } | 731 } |
| 729 | 732 |
| 730 resizeClipElement() { | 733 resizeClipElement() { |
| 731 // Resize clip element so that scrolling works. | 734 // Resize clip element so that scrolling works. |
| 732 this.domTabClip.style.width = | 735 this.domTabClip.style.width = |
| 733 (Object.keys(this.tabs).length * this.domTabWidth) + 'px'; | 736 (Object.keys(this.domTabs).length * this.domTabWidth) + 'px'; |
| 734 } | 737 } |
| 735 | 738 |
| 736 setTabs(tabs) { | 739 setTabs(tabs) { |
| 737 // Remove all current tabs. | 740 // Remove all current tabs. |
| 738 while (this.domTabClip.firstChild) { | 741 while (this.domTabClip.firstChild) { |
| 739 this.domTabClip.removeChild(this.domTabClip.firstChild); | 742 this.domTabClip.removeChild(this.domTabClip.firstChild); |
| 740 } | 743 } |
| 741 this.tabs = {}; | |
| 742 | 744 |
| 743 // Add new tabs. | 745 // Add new tabs. |
| 744 for (let i = 0; i < tabs.length; i++) { | 746 for (let i = 0; i < tabs.length; i++) { |
| 745 this.addTab(tabs[i]); | 747 this.addTab(tabs[i]); |
| 746 } | 748 } |
| 747 } | 749 } |
| 748 | 750 |
| 749 hasTab(tab) { | 751 hasTab(tab) { |
| 750 return this.getQualifiedTabId(tab) in this.tabs; | 752 return this.getQualifiedTabId(tab) in this.domTabs; |
| 751 } | 753 } |
| 752 | 754 |
| 753 addTab(tab) { | 755 addTab(tab) { |
| 754 this.tabs[this.getQualifiedTabId(tab)] = tab; | |
| 755 this.makeDomTab(tab); | 756 this.makeDomTab(tab); |
| 756 this.updateTab(tab); | 757 this.updateTab(tab); |
| 757 this.resizeClipElement(); | 758 this.resizeClipElement(); |
| 758 } | 759 } |
| 759 | 760 |
| 760 updateTab(tab) { | 761 updateTab(tab) { |
| 761 let domTab = this.domTabs[this.getQualifiedTabId(tab)]; | 762 let domTab = this.domTabs[this.getQualifiedTabId(tab)]; |
| 762 domTab.textContent = tab.title; | 763 domTab.textContent = tab.title; |
| 763 domTab.classList.remove('tab-incognito'); | 764 domTab.classList.remove('tab-incognito'); |
| 764 if (tab.incognito) { | 765 if (tab.incognito) { |
| 765 domTab.classList.add('tab-incognito'); | 766 domTab.classList.add('tab-incognito'); |
| 766 } | 767 } |
| 767 } | 768 } |
| 768 | 769 |
| 769 removeTab(tab) { | 770 removeTab(tab) { |
| 770 let qualifiedTabId = this.getQualifiedTabId(tab); | 771 let qualifiedTabId = this.getQualifiedTabId(tab); |
| 771 let domTab = this.domTabs[qualifiedTabId]; | 772 let domTab = this.domTabs[qualifiedTabId]; |
| 772 delete this.domTabs[qualifiedTabId]; | 773 delete this.domTabs[qualifiedTabId]; |
| 773 this.domTabClip.removeChild(domTab); | 774 this.domTabClip.removeChild(domTab); |
| 774 delete this.tabs[qualifiedTabId]; | |
| 775 this.resizeClipElement(); | 775 this.resizeClipElement(); |
| 776 } | 776 } |
| 777 | 777 |
| 778 setEnabled(enabled) { | 778 setEnabled(enabled) { |
| 779 let visibilityUpdate = new api.UiElementUpdate(); | 779 let visibilityUpdate = new api.UiElementUpdate(); |
| 780 visibilityUpdate.setVisible(enabled); | 780 visibilityUpdate.setVisible(enabled); |
| 781 ui.updateElement(this.tabContainerElement.uiElementId, visibilityUpdate); | 781 ui.updateElement(this.tabContainerElement.uiElementId, visibilityUpdate); |
| 782 } | 782 } |
| 783 }; | 783 }; |
| 784 | 784 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 902 ui.flush(); | 902 ui.flush(); |
| 903 } | 903 } |
| 904 | 904 |
| 905 return { | 905 return { |
| 906 initialize: initialize, | 906 initialize: initialize, |
| 907 command: command, | 907 command: command, |
| 908 }; | 908 }; |
| 909 })(); | 909 })(); |
| 910 | 910 |
| 911 window.addEventListener('load', vrShellUi.initialize); | 911 window.addEventListener('load', vrShellUi.initialize); |
| OLD | NEW |