diff --git a/background.html b/background.html index 865269d81..c39cdce82 100644 --- a/background.html +++ b/background.html @@ -87,6 +87,12 @@ + + diff --git a/js/views/inbox_view.js b/js/views/inbox_view.js index cd3c13c56..a99011d8e 100644 --- a/js/views/inbox_view.js +++ b/js/views/inbox_view.js @@ -104,16 +104,9 @@ // eslint-disable-next-line no-new new Whisper.FontSizeView({ el: this.$el }); - const ourNumber = textsecure.storage.user.getNumber(); - const me = ConversationController.getOrCreate(ourNumber, 'private'); - this.mainHeaderView = new Whisper.ReactWrapperView({ - className: 'main-header-wrapper', - Component: Signal.Components.MainHeader, - props: me.format(), + this.mainHeaderView = new Whisper.MainHeaderView({ + el: this.$('.main-header-placeholder'), }); - const update = () => this.mainHeaderView.update(me.format()); - this.listenTo(me, 'change', update); - this.$('.main-header-placeholder').append(this.mainHeaderView.el); this.conversation_stack = new Whisper.ConversationStack({ el: this.$('.conversation-stack'), diff --git a/js/views/main_header_view.js b/js/views/main_header_view.js new file mode 100644 index 000000000..7c41053b9 --- /dev/null +++ b/js/views/main_header_view.js @@ -0,0 +1,38 @@ +/* global Whisper, textsecure, ConversationController, Signal */ + +// eslint-disable-next-line func-names +(function() { + 'use strict'; + + window.Whisper = window.Whisper || {}; + + Whisper.MainHeaderView = Whisper.View.extend({ + templateName: 'main-header-placeholder', + events: { + 'click .main-header-title-wrapper': 'onClick', + }, + initialize() { + const ourNumber = textsecure.storage.user.getNumber(); + const me = ConversationController.getOrCreate(ourNumber, 'private'); + + this.mainHeaderView = new Whisper.ReactWrapperView({ + className: 'main-header-wrapper', + Component: Signal.Components.MainHeader, + props: me.format(), + }); + const update = () => this.mainHeaderView.update(me.format()); + this.listenTo(me, 'change', update); + + this.render(); + + this.$('.main-header-title-wrapper').prepend(this.mainHeaderView.el); + this.$content = this.$('.main-header-content-wrapper'); + this.$toggle = this.$('.main-header-content-toggle'); + }, + onClick() { + // Toggle section visibility + this.$content.slideToggle('fast'); + this.$toggle.toggleClass('main-header-content-toggle-visible'); + }, + }); + })(); diff --git a/stylesheets/_modules.scss b/stylesheets/_modules.scss index ac9184013..9804c617d 100644 --- a/stylesheets/_modules.scss +++ b/stylesheets/_modules.scss @@ -2180,6 +2180,23 @@ // Module: Main Header +.main-header-title-wrapper { + flex: 1; + flex-direction: row; + display: flex; + align-items: center; + cursor: pointer; +} + +.main-header-title-wrapper:hover { + background-color: $color-dark-75; +} + +.main-header-wrapper { + overflow-x: hidden; + flex: 1; +} + .module-main-header { height: $header-height; padding-left: 16px; @@ -2187,14 +2204,9 @@ display: flex; flex-direction: row; align-items: center; - cursor: pointer; -} - -.module-main-header:hover { - background-color: $color-dark-75; } -.module-main-header__expand-icon { +.main-header-content-toggle{ width: 3em; line-height: 3em; font-weight: bold; @@ -2204,7 +2216,7 @@ text-align: center; } -.module-main-header__expand-icon::after { +.main-header-content-toggle::after { -webkit-transition: all .35s; -o-transition: all .35s; transition: all .35s; @@ -2215,7 +2227,7 @@ display: inline-block; } -.module-main-header__expanded::after { +.main-header-content-toggle-visible::after { transform: rotate(180deg); } diff --git a/test/index.html b/test/index.html index 9dbcf2fa2..fdf60a6cc 100644 --- a/test/index.html +++ b/test/index.html @@ -374,6 +374,7 @@ + diff --git a/ts/components/MainHeader.tsx b/ts/components/MainHeader.tsx index da0a358d8..0f81533bb 100644 --- a/ts/components/MainHeader.tsx +++ b/ts/components/MainHeader.tsx @@ -48,9 +48,6 @@ export class MainHeader extends React.Component { i18n={i18n} /> -
); }