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 |