Merge branch 'hotfix/21.56.9' into master
[gitter.git] / public / js / views / chat / chatContainerView.js
blob4be79988df04d422686c200dd0dd1fbdb66a6ae1
1 'use strict';
3 var Marionette = require('backbone.marionette');
4 var hasScrollBars = require('../../utils/scrollbar-detect');
5 var appEvents = require('../../utils/appevents');
6 var ChatCollectionView = require('../chat/chatCollectionView');
7 var ChatConnectionIndicatorView = require('../chat/chatConnectivityIndicatorView');
8 var context = require('gitter-web-client-context');
9 var unreadItemsClient = require('../../components/unread-items-client');
10 const isTouch = require('../../utils/is-touch');
12 require('../behaviors/isomorphic');
14 module.exports = Marionette.LayoutView.extend({
15   behaviors: {
16     Isomorphic: {
17       chat: {
18         el: '#chat-container',
19         init: function(optionsForRegion) {
20           var chatCollectionView = (this.chatCollectionView = new ChatCollectionView(
21             optionsForRegion({
22               collection: this.collection,
23               decorators: this.options.decorators
24             })
25           ));
27           if (this.options.monitorScrollPane) {
28             unreadItemsClient.monitorViewForUnreadItems(
29               this.options.monitorScrollPane,
30               chatCollectionView
31             );
32           }
34           return chatCollectionView;
35         }
36       },
37       connectivityIndicator: {
38         el: '.chat-connectivity-indicator-wrapper',
39         init: 'initConnectivityIndicatorView'
40       }
41     }
42   },
44   initConnectivityIndicatorView: function(optionsForRegion) {
45     if (context.hasFeature('connectivity-indicator')) {
46       return new ChatConnectionIndicatorView(optionsForRegion({}));
47     }
48   },
50   ui: {
51     primaryScroll: '.primary-scroll'
52   },
54   events: {
55     click: 'onClick'
56   },
58   onRender: function() {
59     if (hasScrollBars()) {
60       this.ui.primaryScroll.addClass('scroller');
61     }
62   },
64   onClick: function(e) {
65     var hasTextSelected = window.getSelection().toString().length > 0;
66     if (
67       !hasTextSelected &&
68       !isTouch() && // on touch devices we use double tapping message to edit, the focus would intervene
69       e.target.tagName.toLowerCase() !== 'textarea' &&
70       // we want to focus a TMF input if user opens the TMF by clicking on
71       // parent message indicator
72       !e.target.className.match(/js-parent-message-indicator/)
73     ) {
74       appEvents.trigger('focus.request.chat');
75     }
76   }
77 });