messenger.navigation.html 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <!-- Top header (nickname + menu) -->
  2. <div id="navigation-topheader">
  3. <div class="my-identity">
  4. <span ng-click="ctrl.showProfile()" ng-cloak translate-attr="{'title': 'messenger.MY_PUBLIC_NICKNAME'}">
  5. {{ ctrl.getMe().publicNickname || ctrl.getMe().id }}
  6. </span>
  7. </div>
  8. <battery-status></battery-status>
  9. <md-menu md-position-mode="target-right target" md-offset="0 45">
  10. <md-button aria-label="Open menu" class="md-icon-button" ng-click="$mdMenu.open($event)">
  11. <i class="material-icons md-light md-24">more_vert</i>
  12. </md-button>
  13. <md-menu-content width="4">
  14. <md-menu-item>
  15. <md-button ng-click="ctrl.closeSession()">
  16. <md-icon aria-hidden="true" class="material-icons md-24">exit_to_app</md-icon>
  17. <span translate>common.SESSION_CLOSE</span>
  18. </md-button>
  19. </md-menu-item>
  20. <md-menu-item ng-if="ctrl.isPersistent()">
  21. <md-button ng-click="ctrl.deleteSession()">
  22. <md-icon aria-hidden="true" class="material-icons md-24">delete</md-icon>
  23. <span translate>common.SESSION_DELETE</span>
  24. </md-button>
  25. </md-menu-item>
  26. <md-menu-item>
  27. <md-button ng-click="ctrl.settings()">
  28. <md-icon aria-hidden="true" class="material-icons md-24">settings</md-icon>
  29. <span translate>messenger.SETTINGS</span>
  30. </md-button>
  31. </md-menu-item>
  32. <md-menu-item>
  33. <md-button ng-click="ctrl.about()">
  34. <md-icon aria-hidden="true" class="material-icons md-24">info</md-icon>
  35. <span translate>messenger.ABOUT</span>
  36. </md-button>
  37. </md-menu-item>
  38. </md-menu-content>
  39. </md-menu>
  40. </div>
  41. <!-- Header -->
  42. <div id="navigation-header">
  43. <div class="main">
  44. <md-nav-bar md-no-ink md-selected-nav-item="ctrl.activeTab" nav-bar-aria-label="navigation links">
  45. <md-nav-item md-nav-click="1" name="conversations" aria-label="conversations">
  46. <i class="material-icons md-dark md-24" translate translate-attr-title="messenger.CONVERSATIONS">speaker_notes</i>
  47. </md-nav-item>
  48. <md-nav-item md-nav-click="1" name="contacts" aria-label="contacts">
  49. <i class="material-icons md-dark md-24" translate translate-attr-title="messenger.CONTACTS">person</i>
  50. </md-nav-item>
  51. </md-nav-bar>
  52. <span flex></span>
  53. <md-button aria-label="search" class="md-icon-button" ng-click="ctrl.toggleSearch()">
  54. <i class="material-icons md-dark md-24" translate translate-attr-title="messenger.SEARCH">search</i>
  55. </md-button>
  56. </div>
  57. <div class="search" searchbox searchbox-focus="ctrl.searchVisible">
  58. <input type="text" ng-model="ctrl.searchText" translate translate-attr-placeholder="messenger.SEARCH" aria-label="Search" translate-attr-aria-label="messenger.SEARCH">
  59. </div>
  60. </div>
  61. <!-- Conversations -->
  62. <div id="navigation-conversations" class="tab-content" ng-if="ctrl.activeTab == 'conversations'" in-view-container>
  63. <p class="empty" ng-if="ctrl.conversations().length === 0 && !ctrl.startupDone()" translate>messenger.LOADING_CONVERSATIONS</p>
  64. <p class="empty" ng-if="ctrl.conversations().length === 0 && ctrl.startupDone()" translate>messenger.NO_CONVERSATIONS_FOUND</p>
  65. <ul>
  66. <li ng-repeat="conversation in ctrl.conversations() | filter:ctrl.searchConversation"
  67. ng-init="dndModeSimplified = ctrl.dndModeSimplified(conversation)"
  68. ui-sref="messenger.home.conversation({ type: conversation.type, id: conversation.id, initParams: null })"
  69. aria-label="conversation with {{ conversation.receiver.displayName }}"
  70. class="conversation-wrapper"
  71. ng-if="ctrl.isVisible(conversation)">
  72. <div class="conversation"
  73. ng-class="{'unread': conversation.unreadCount > 0,
  74. 'starred': conversation.isStarred,
  75. 'active': ctrl.isActive(conversation)}">
  76. <section class="avatar-box" role="button">
  77. <eee-avatar eee-receiver="conversation.receiver"
  78. eee-resolution="'low'"></eee-avatar>
  79. </section>
  80. <section class="conversation-box">
  81. <section class="receiver-box">
  82. <span class="title" ng-class="{'disabled': conversation.receiver.disabled === true}" ng-bind-html="conversation.receiver.displayName | escapeHtml | emojify" role="button">
  83. </span>
  84. <span class="notification-settings" ng-if="dndModeSimplified === 'on'">
  85. <img height="16" width="16" src="img/ic_dnd_total_silence.svg" translate translate-attr-title="messenger.MUTED_NONE">
  86. </span>
  87. <span class="notification-settings" ng-if="dndModeSimplified === 'mention'">
  88. <img height="16" width="16" src="img/ic_dnd_mention.svg" translate translate-attr-title="messenger.MUTED_MENTION_ONLY">
  89. </span>
  90. <span class="notification-settings" ng-if="dndModeSimplified === 'off' && conversation.notifications && conversation.notifications.sound.mode === 'muted'">
  91. <img height="16" width="16" src="img/ic_notifications_off.svg" translate translate-attr-title="messenger.MUTED_SILENT">
  92. </span>
  93. <span class="badge unread-count" ng-show="conversation.unreadCount > 0">
  94. {{ conversation.unreadCount }}
  95. </span>
  96. </section>
  97. <section class="message-box">
  98. <eee-latest-message
  99. ng-if="!conversation.receiver.isTyping() && conversation.latestMessage"
  100. ng-class="latest-message-text"
  101. conversation="conversation"></eee-latest-message>
  102. </section>
  103. </section>
  104. </div>
  105. </li>
  106. </ul>
  107. </div>
  108. <!-- Contacts -->
  109. <div id="navigation-contacts" class="tab-content" ng-if="ctrl.activeTab == 'contacts'" in-view-container>
  110. <p class="empty" ng-if="ctrl.contacts().length === 0" translate>messenger.NO_CONTACTS_FOUND</p>
  111. <ul ng-class="{'hide-inactive': ctrl.hideInactiveContacts()}">
  112. <li ng-repeat="contact in ctrl.contacts() | isNotMe | filter:ctrl.searchContact"
  113. ui-sref="messenger.home.conversation({ type: 'contact', id: contact.id, initParams: null })"
  114. class="contact"
  115. ng-class="{'inactive': contact.state == 'INACTIVE'}">
  116. <section class="avatar-box">
  117. <eee-avatar eee-receiver="contact"
  118. eee-resolution="'low'"></eee-avatar>
  119. </section>
  120. <section class="left">
  121. <div class="name" ng-bind-html="contact.displayName | escapeHtml | emojify"></div>
  122. <div class="identity">{{ contact.id }}</div>
  123. </section>
  124. <section class="right">
  125. <div class="nickname">
  126. <span ng-show="contact.publicNickname && contact.publicNickname != contact.identity">
  127. ~{{ contact.publicNickname }}
  128. </span>
  129. </div>
  130. <div class="verification-level">
  131. <eee-verification-level
  132. contact="contact"
  133. ng-if="contact.verificationLevel">
  134. </eee-verification-level>
  135. </div>
  136. </section>
  137. </li>
  138. </ul>
  139. </div>
  140. <!-- FAB -->
  141. <div id="navigation-fab">
  142. <md-fab-speed-dial md-direction="up" class="md-scale md-fab-bottom-right md-hover-full" ng-cloak>
  143. <md-fab-trigger>
  144. <md-button aria-label="menu" class="md-fab">
  145. <md-icon aria-label="Add" class="material-icons md-24">add</md-icon>
  146. </md-button>
  147. </md-fab-trigger>
  148. <md-fab-actions>
  149. <md-button
  150. ng-click="ctrl.addContact()"
  151. translate-attr="{'aria-label': 'messenger.ADD_CONTACT'}"
  152. aria-label="Add Contact"
  153. class="md-fab md-raised md-mini fab-button-add-contact">
  154. <md-tooltip md-direction="left" md-visible="tooltipVisible">
  155. <label translate>messenger.ADD_CONTACT</label>
  156. </md-tooltip>
  157. <md-icon class="material-icons md-24">person_add</md-icon>
  158. </md-button>
  159. <md-button
  160. ng-click="ctrl.createGroup()"
  161. translate-attr="{'aria-label': 'messenger.CREATE_GROUP'}"
  162. aria-label="Create Group"
  163. class="md-fab md-mini fab-button-add-group">
  164. <md-tooltip md-direction="left" md-visible="tooltipVisible">
  165. <label translate>messenger.CREATE_GROUP</label>
  166. </md-tooltip>
  167. <md-icon class="material-icons md-24">group_add</md-icon>
  168. </md-button>
  169. <md-button
  170. ng-if="ctrl.showCreateDistributionListButton()"
  171. ng-click="ctrl.createDistributionList()"
  172. translate-attr="{'aria-label': 'messenger.CREATE_DISTRIBUTION_LIST'}"
  173. aria-label="Create Distribution list"
  174. class="md-fab md-mini fab-button-add-distribution-list">
  175. <md-tooltip md-direction="left" md-visible="tooltipVisible">
  176. <label translate>messenger.CREATE_DISTRIBUTION_LIST</label>
  177. </md-tooltip>
  178. <md-icon class="material-icons md-24">question_answer</md-icon>
  179. </md-button>
  180. </md-fab-actions>
  181. </md-fab-speed-dial>
  182. </div>