1(function(){'use strict';angular.module('smartermail').run(['$templateCache', function($templateCache) {$templateCache.put('~/Interface/app/components/disk-space-bar.component.html','<div class="grid-disk-space-bar-wrapper no-select" ng-mouseenter="$ctrl.toggleTooltip(true, $event)" ng-mouseleave="$ctrl.toggleTooltip(false, $event)"> <div class=grid-disk-space-bar-chart> <div class=overview-chart> <span class=chart-mailbox ng-class="{\'chart-warning\': $ctrl.totalPercent > 70, \'chart-danger\': $ctrl.totalPercent > 90}" ng-style="{\'width\': ($ctrl.relPrimaryPercent <= 100 ? $ctrl.relPrimaryPercent : 100) + \'%\'}"></span> <span class=chart-mailbox-secondary ng-class="{\'chart-warning\': $ctrl.totalPercent > 70, \'chart-danger\': $ctrl.totalPercent > 90}" ng-style="{\'width\': ($ctrl.relSecondaryPercent <= 100 ? $ctrl.relSecondaryPercent : 100) + \'%\'}"></span> </div> <div class=chart-overlay ng-if="$ctrl.maxSize > 0">{{ ::$ctrl.size | bytesCondensed : 3 : \'0\' }} / {{ ::($ctrl.maxSize | bytesCondensed : 3 : \'0\') }}</div> <div class=chart-overlay ng-if="$ctrl.maxSize === 0">{{ ::$ctrl.size | bytesCondensed : 3 : \'0\' }} / ∞</div> </div> <div class=disk-usage-floater ng-class="{\'disk-float-show\': $ctrl.showTooltip, \'chart-warning\': $ctrl.totalPercent > 70, \'chart-danger\': $ctrl.totalPercent > 90}"> <div class=disk-folder-title> <div class=text>{{::"TOTAL_USAGE" | translate}}</div> <div class=used ng-if="$ctrl.maxSize > 0">{{$ctrl.size | bytes : 1 : \'0\'}} / {{$ctrl.maxSize | bytes}}</div> <div class=used ng-if="$ctrl.maxSize <= 0">{{$ctrl.size | bytes : 1 : \'0\'}} / ∞</div> <div class=percent ng-if="$ctrl.maxSize > 0">({{$ctrl.totalPercent}}%)</div> </div> <div class=disk-divider></div> <div class=disk-folder-title> <div class=text>{{::"PRIMARY_STORAGE" | translate}}</div> <div class=used>{{$ctrl.primarySize | bytes}}</div> <div class=percent ng-if="$ctrl.maxSize > 0">({{$ctrl.primaryPercent}}%)</div> </div> <div class=disk-folder-title> <div class=text>{{::"SECONDARY_STORAGE" | translate}}</div> <div class=used>{{$ctrl.secondarySize | bytes}}</div> <div class=percent ng-if="$ctrl.maxSize > 0">({{$ctrl.secondaryPercent}}%)</div> </div> </div> </div>'); 2$templateCache.put('~/Interface/app/components/disk-space-summary.component.html','<div class="tree-disk-usage no-select" ng-show=$ctrl.diskSpaceLoaded> <div class=tree-disk-usage-row> <div> {{ $ctrl.diskUsage.used | bytes }} <span ng-show=$ctrl.diskUsage.percentUsed> ({{ $ctrl.diskUsage.percentUsed | number : 0 }}%) </span> {{:: \'USED\' | translate }}</div> <a ng-click=$ctrl.goToDiskReport() ng-mouseenter=$ctrl.flipDiskFloater(true) ng-mouseleave=$ctrl.flipDiskFloater(false)> <i class="toolsicon toolsicon-info"></i> </a> </div> <div class=disk-usage-floater ng-class="{\'disk-float-show\': $ctrl.showDiskMenu}"> <div class=disk-folder-title> <div class=text>{{::"TOTAL_USAGE" | translate}}</div> <div class=used ng-if=$ctrl.diskUsage.allowed>{{$ctrl.diskUsage.used | bytes : 1 : \'0\'}} / {{$ctrl.diskUsage.allowed | bytes}}</div> <div class=used ng-if=!$ctrl.diskUsage.allowed>{{$ctrl.diskUsage.used | bytes : 1 : \'0\'}} / ∞</div> <div class=percent ng-if=$ctrl.diskUsage.allowed> ({{$ctrl.diskUsage.percentUsed | number : 0 : \'0\'}}%) </div> </div> <div class=disk-divider></div> <div class="disk-folder-title mailbox"> <div class="disk-folder-title-dot mailbox"></div> <div class=text>{{::\'MAILBOX\' | translate}}</div> <div class=used>{{$ctrl.diskUsage.mailboxUsed | bytes}}</div> <div class=percent ng-if=$ctrl.diskUsage.allowed> ({{$ctrl.diskUsage.mailboxPercent|number:0}}%) </div> </div> <div class="disk-folder-title appointments"> <div class="disk-folder-title-dot appointments"></div> <div class=text>{{::\'AF_APPOINTMENTS\' | translate}}</div> <div class=used>{{$ctrl.diskUsage.appointmentsUsed | bytes}}</div> <div class=percent ng-if=$ctrl.diskUsage.allowed> ({{$ctrl.diskUsage.appointmentsPercent|number:0}}%) </div> </div> <div class="disk-folder-title contacts"> <div class="disk-folder-title-dot contacts"></div> <div class=text>{{::\'AF_CONTACTS\' | translate}}</div> <div class=used>{{$ctrl.diskUsage.contactsUsed | bytes}}</div> <div class=percent ng-if=$ctrl.diskUsage.allowed> ({{$ctrl.diskUsage.contactsPercent|number:0}}%) </div> </div> <div class="disk-folder-title tasks"> <div class="disk-folder-title-dot tasks"></div> <div class=text>{{::\'AF_TASKS\' | translate}}</div> <div class=used>{{$ctrl.diskUsage.tasksUsed | bytes}}</div> <div class=percent ng-if=$ctrl.diskUsage.allowed> ({{$ctrl.diskUsage.tasksPercent|number:0}}%) </div> </div> <div class="disk-folder-title notes"> <div class="disk-folder-title-dot notes"></div> <div class=text>{{::\'AF_NOTES\' | translate}}</div> <div class=used>{{$ctrl.diskUsage.notesUsed | bytes}}</div> <div class=percent ng-if=$ctrl.diskUsage.allowed> ({{$ctrl.diskUsage.notesPercent|number:0}}%) </div> </div> <div class="disk-folder-title file-storage"> <div class="disk-folder-title-dot file-storage"></div> <div class=text>{{::\'FILE_STORAGE\' | translate}}</div> <div class=used>{{$ctrl.diskUsage.fileStorageUsed | bytes}}</div> <div class=percent ng-if=$ctrl.diskUsage.allowed> ({{$ctrl.diskUsage.fileStoragePercent|number:0}}%) </div> </div> <div class="disk-folder-title meeting-workspace-usage"> <div class="disk-folder-title-dot meeting-workspace-usage"></div> <div class=text>{{::\'ONLINE_MEETING\' | translate}}</div> <div class=used>
2{{ $ctrl.diskUsage.meetingWorkspaceUsed | bytes}}</div> <div class=percent ng-if=$ctrl.diskUsage.allowed> ({{$ctrl.diskUsage.meetingWorkspacePercent|number:0}}%) </div> </div> <div class="disk-folder-title chat-files-usage"> <div class="disk-folder-title-dot chat-files-usage"></div> <div class=text>{{::\'CHAT_FILES\' | translate}}</div> <div class=used>{{ $ctrl.diskUsage.chatFilesUsed | bytes}}</div> <div class=percent ng-if=$ctrl.diskUsage.allowed> ({{$ctrl.diskUsage.chatFilesPercent|number:0}}%) </div> </div> </div> </div> '); 3$templateCache.put('~/Interface/app/root/top-menu-bar-chat.component.html',' <div class="root-heading chats-style-wrapper"> <div class="action-bar list-bar"> <div class=user-avatar-page> <div class=user-avatar> <md-menu md-position-mode="target-right bottom" md-menu-class=root-menu-left-most id=left-most-menu> <div class=avatar ng-click=$mdMenu.open() tabindex=0> <st-avatar-icon element-id=menu-pic-{{$ctrl.avatarGuid}} name=$ctrl.avatarName image-url=$ctrl.avatarUrl width=38 height=38></st-avatar-icon> <div ng-if="$ctrl.chatStatus !== \'failed\'"> <div ng-show=\'$ctrl.chatStatus !== "connecting"\' class="chat-status-icon overlay status-{{$ctrl.chatStatus}}"></div> <div ng-show=\'$ctrl.chatStatus === "connecting"\' class="chat-status-icon overlay status-connecting"> <i class="toolsicon toolsicon-refresh"></i> </div> </div> </div> <md-menu-content> <md-menu-item class="static-menu-item no-select"> <div>{{$ctrl.userName}}</div> </md-menu-item> <md-divider></md-divider> <md-menu-item ng-repeat="statusItem in $ctrl.chatStatusTypes | orderBy: \'idx\' track by $index"> <md-button ng-click=$ctrl.setChatStatus(statusItem.status)> <div class="chat-status-icon status-{{statusItem.status}}"></div> <span>{{::statusItem.label | translate}}</span> </md-button> </md-menu-item> <md-divider class=display-mobile-view></md-divider> </md-menu-content> </md-menu> </div> </div> <div class=participant-search ng-hide="$ctrl.chatStatus === \'connecting\' || $ctrl.chatStatus === \'failed\'"> <md-autocomplete md-selected-item=$ctrl.selectedItem md-search-text=$ctrl.participantSearch md-items="item in $ctrl.query($ctrl.participantSearch) | orderBy:[\'status\', \'name\']" md-item-text=item.name md-item-size=4 md-min-length=2 md-no-cache=true md-require-match=true placeholder="{{ ::\'CHAT_WITH\' | translate }}
3" md-selected-item-change=$ctrl.selectContact($ctrl.selectedItem) md-clear-button=false md-autocomplete-snap=false tabindex=-1> <md-item-template> <div class=chat-contact> <span class=chat-status-color-circle> <i class=toolsicon ng-show="item.status != \'room\'" ng-class="{\r\n\t\t\t\t\t \'color-available\': item.status == \'available\',\r\n\t\t\t\t\t \'color-away\': item.status == \'away\',\r\n\t\t\t\t\t \'color-dnd\': item.status == \'dnd\',\r\n\t\t\t\t\t \'color-offline\': item.status == \'offline\',\r\n\t\t\t\t\t \'toolsicon-user-status-cir\': item.status != \'room\',\r\n\t\t\t\t\t \'toolsicon-account_tree\': item.status == \'room\'}"></i> </span> <span class=name-container ng-show="item.status != \'room\'" ng-class="{ \'color-offline-text\': item.status == \'offline\' }"> <div class=name>{{item.name}}</div> <div class=mini-name>{{item.displayJid}}</div> </span> <span class=alias-container ng-show="item.status ==\'room\'" ng-class="{ \'color-offline-text\': item.status == \'offline\' }"> {{item.name}}</span> <span class=count ng-show=item.unreadCount>{{item.unreadCount}}</span> </div> </md-item-template> </md-autocomplete> </div> </div> </div>'); 4$templateCache.put('~/Interface/app/root/top-menu-bar.component.html','<div class=root-heading> <div ng-click=$ctrl.toggleTree() id=hamburger-toggle class=hamburger ng-class="{\'collapsed\': $ctrl.treeState.isCollapsed }" tabindex=0> <div class=icon-container ng-switch=$ctrl.treeState.isCollapsed> <svg ng-switch-when=true xmlns=http://www.w3.org/2000/svg height=20 viewBox="0 96 960 960" width=20><path d="M211 912q-27.637 0-47.319-19.681Q144 872.638 144 845V307q0-27.638 19.681-47.319Q183.363 240 211 240h538q27.638 0 47.319 19.681T816 307v538q0 27.638-19.681 47.319T749 912H211Zm125-72V312H216v528h120Zm72 0h336V312H408v528Zm-72 0H216h120Z"/></svg> <svg ng-switch-when=false xmlns=http://www.w3.org/2000/svg height=20 viewBox="0 96 960 960" width=20><path d="M211 912q-27.637 0-47.319-19.681Q144 872.638 144 845V307q0-27.638 19.681-47.319Q183.363 240 211 240h538q27.638 0 47.319 19.681T816 307v538q0 27.638-19.681 47.319T749 912H211Zm197-72h336V312H408v528Z"/></svg> </div> <div class=border-br></div> </div> <div ng-repeat="item in $ctrl.menu.expanded" ng-if=!item.hidden class=left-item tabindex=0 ng-class="{ \'left-most\': $first }" ng-click="$ctrl.navTo(item.sref, item.sref_params, item.reload)"> <div class=section-title ng-class="{ \'selected-section\': item.isActive }"> {{ item.translated }} </div> <div ng-if=item.counter class=counter>{{ item.counter > 99 ? "99+" : item.counter }}</div> </div> <md-menu md-position-mode="target-left bottom" md-menu-class=root-menu> <div class=app-selection-menu tabindex=0 ng-class="{\'active\': $ctrl.isDropdownMenuHilighted}" ng-show="$ctrl.isReady && $ctrl.menu.dropdown.length" ng-click=$mdMenu.open()> <div class=section-title ng-class="{ \'selected-section\': $ctrl.isDropdownMenuHilighted }"> {{ $ctrl.dropdownTitle }} </div> <div ng-if="$ctrl.isDropdownMenuHilighted && $ctrl.currentItem.counter" class=counter>{{ $ctrl.currentItem.counter > 99 ? "99+" : $ctrl.currentItem.counter }}</div> <i class="toolsicon toolsicon-arrow_drop_down caret"></i> </div> <md-menu-content> <div ng-repeat="item in $ctrl.menu.dropdown" ng-if=!item.hidden> <md-divider ng-if="item.dividerBefore && !$first"></md-divider> <md-menu-item ng-class="{ \'active\':item == $ctrl.currentItem }"> <md-button class=app-selector-button ng-click="$ctrl.navTo(item.sref, item.sref_params, item.reload)"> <span>{{item.translated}}</span> <span ng-if=item.counter class=counter>{{ item.counter > 99 ? "99+" : item.counter }}</span> </md-button> </md-menu-item> </div> </md-menu-content> </md-menu> <div class=create-new-menu ng-hide="$ctrl.addMenuItems === undefined"> <md-menu class="select-menu menu-common-style" md-position-mode="target-left bottom" md-offset="-1 1" md-menu-class=root-menu-quickadd> <div style="display:flex; align-items: center;" md-menu-origin=""> <md-button class="md-primary reply-button" ng-click=$ctrl.openActiveSectionAddMenuItem() kb-shortcut=N,false> <i class="section-icon toolsicon" tabindex=0 ng-class="{\r\n \'toolsicon-mail\'
4: $ctrl.currentItem.text != \'CALENDAR\' &&\r\n $ctrl.currentItem.text != \'CONTACTS\' &&\r\n $ctrl.currentItem.text != \'TASKS\' &&\r\n $ctrl.currentItem.text != \'NOTES\' &&\r\n $ctrl.currentItem.text != \'ONLINE_MEETINGS\',\r\n \'toolsicon-calendar\': $ctrl.currentItem.text == \'CALENDAR\',\r\n \'toolsicon-person\': $ctrl.currentItem.text == \'CONTACTS\',\r\n \'toolsicon-check\': $ctrl.currentItem.text == \'TASKS\',\r\n \'toolsicon-description\': $ctrl.currentItem.text == \'NOTES\',\r\n \'toolsicon-groups\': $ctrl.currentItem.text == \'ONLINE_MEETINGS\'\r\n }"></i> {{ ::"NEW" | translate }} </md-button> <md-button class="md-primary standard-icon reply-menu" aria-label=menu tabindex=0 ng-click=$mdMenu.open($event)> <span class=has-caret> <i class="toolsicon toolsicon-arrow_drop_down_emphasis"></i> </span> </md-button> </div> <md-menu-content class=menu-common-style> <md-divider ng-show="$ctrl.currentItem.text == \'DOCUMENT\'"></md-divider> <div ng-repeat="item in $ctrl.addMenuItems track by $index" class=select-menu ng-hide=item.hidden> <md-divider ng-show="item.dividerBefore && !item.hidden"></md-divider> <md-menu-item ng-show=!item.submenu> <md-button class=quickadd-selector-button kb-shortcut={{item.shortcut}} ng-click=$ctrl.openAddMenuItem(item.popup)> <i class=toolsicon ng-class=item.icon></i> <span>{{item.text | translate}}</span> </md-button> </md-menu-item> <md-menu ng-show=item.submenu md-position-mode="target-left bottom" md-offset="-1 0" md-menu-class=root-menu-quickadd class="select-menu menu-common-style"> <md-menu-item> <md-button class=quickadd-selector-button ng-click=$mdMenu.open($event)> <i class=toolsicon ng-class=item.icon></i> <span>{{item.text | translate}}</span> </md-button> </md-menu-item> <md-menu-content class=menu-common-style> <md-menu-item ng-repeat="subItem in item.submenu"> <md-button class=quickadd-selector-button ng-click=$ctrl.createNewDocument(subItem.popup)> <i class=toolsicon ng-class=subItem.icon></i> <span>{{subItem.text | translate}}</span> </md-button> </md-menu-item> </md-menu-content> </md-menu> </div> </md-menu-content> </md-menu> </div> <div style="flex: 1 1 auto;"></div> <div class="right-item ha-node" ng-controller="ImpersonatingController as vm" ng-cloak ng-show="($ctrl.isSysAdmin || vm.impersonating) && $ctrl.stHAID">{{ $ctrl.stHAID}} </div> <div class="right-item impersonating" ng-controller="ImpersonatingController as vm" role=button tabindex=0 ng-cloak ng-show=vm.impersonating ng-click=onClick($event)> {{::"IMPERSONATING" | translate}} </div> <md-menu ng-show="!$ctrl.isMobile && !$ctrl.isSysAdmin " class=select-menu md-position-mode="target bottom" md-offset="0 0" md-menu-class=root-menu-quickadd> <div class=right-item md-menu-origin tabindex=0 ng-click="$ctrl.openKeybindsMenu($mdMenu, $event)"> <i class="toolsicon toolsicon-keyboard"></i> </div> <md-menu-content class=root-menu-keybinds style="min-width: 420px;"> <md-menu-item class="static-menu-item no-select"> <div>{{::\'KEYBOARD_ACTIONS\' | translate}}</div> </md-menu-item> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'N\')}}</span> <span class=kb-action>{{::\'NEW\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'J\')}}</span> <span class=kb-action>{{::\'MOVE_TO_JUNK\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'R\')}}</span> <span class=kb-action>{{::\'REPLY\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'A\')}}</span> <span class=kb-action>{{::\'REPLYALL\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'F\')}}</span> <span class=kb-action>{{::\'FORWARD\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+m\')}}</span> <span class=kb-action>{{::\'MOVE_EMAIL\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+shift+t\')}}</span> <span class=kb-action>{{::\'CREATE_TASK_FROM_EMAIL\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+shift+i\')}}</span> <span class=kb-action>{{::\'INVITE_ALL_TO_APPOINTMENT\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'mod+p\')}}</span> <span class=kb-action>{{::\'PRINT\' | translate}}</span> </md-button> </md-menu-item> </div> <md-divider></md-divider> <md-menu-item class="static-menu-item no-select"> <div>{{::\'SHORTCUTS\' | translate}}</div> </md-menu-item> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+shift+1\')}}</span> <span class=kb-action>{{::\'NEW_EMAIL\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+shift+2\')}}</span> <span class=kb-action>{{::\'NEW_APPOINTMENT\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+shift+3\')}}</span> <span class=kb-action>{{::\'NEW_CONTACT\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+shift+4\')}}</span> <span class=kb-action>{{::\'NEW_TASK\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+shift+5\')}}</span> <span class=kb-action>{{::\'NEW_NOTE\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+shift+6\')}}</span> <span class=kb-action>{{::\'NEW_ONLINE_MEETING\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+a\')}}</span> <span class=kb-action>{{::\'SELECT_ALL\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'control+s\')}}</span> <span class=kb-action>{{::\'SAVE\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'DEL\')}}</span> <span class=kb-action>
4{{::\'DELETE\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'arrow-up\')}}</span> <span class=kb-action>{{::\'FOLDER_UP\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'arrow-down\')}}</span> <span class=kb-action>{{::\'FOLDER_DOWN\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'arrow-right\')}}</span> <span class=kb-action>{{::\'EXPAND_EMAIL_FOLDER\' | translate}}</span> </md-button> </md-menu-item> </div> <div class=create-new-menu-item> <md-menu-item> <md-button> <span class=kb-key>{{$ctrl.formatKey(\'arrow-left\')}}</span> <span class=kb-action>{{::\'COLLAPSE_EMAIL_FOLDER\' | translate}}</span> </md-button> </md-menu-item> </div> </md-menu-content> </md-menu> <md-menu class=select-menu md-position-mode="target bottom" md-menu-class=root-menu-quickadd ng-if="$ctrl.hasChat && !$ctrl.chatItem.hidden"> <div class=right-item tabindex=0 ng-click="$ctrl.chatItem.click($mdMenu, $event)"> <i class="toolsicon toolsicon-chat"></i> <div ng-if=$ctrl.chatItem.counter class=counter>{{ $ctrl.chatItem.counter > 99 ? "99+" : $ctrl.chatItem.counter }}</div> <md-tooltip md-direction=bottom md-delay=100 ng-if=item.text>{{ $ctrl.chatItem.text | translate}}</md-tooltip> </div> <md-menu-content> <div ng-repeat="item in $ctrl.chatMenuItems | orderBy: \'-ts\' track by $index" class=create-new-menu-item ng-hide=item.hidden> <md-menu-item> <md-button class="quickadd-selector-button unread-chat-buttons" ng-click=$ctrl.openChatMenuItemLink(item.link)> <div class=chat-menu-item-icon> <div class="chat-status-icon status-{{item.status}}" ng-if=item.status></div> <i class=toolsicon ng-class=item.icon ng-if=!item.status></i> </div> <div class=room-name>{{item.label | translate}}</div> <div ng-if=item.unread class=counter>{{ item.unread > 99 ? "99+" : item.unread }}</div> </md-button> </md-menu-item> </div> </md-menu-content> </md-menu> <div ng-repeat="item in $ctrl.rightItems track by $index" ng-if=!item.hidden ng-click=item.click($event) class=right-item tabindex=0> <i class=toolsicon ng-class=\'"toolsicon-"+item.icon\'></i> <div ng-if=item.counter class=counter>{{ item.counter > 99 ? "99+" : item.counter }}</div> <md-tooltip md-direction=bottom md-delay=100 ng-if=item.text>{{ item.text | translate}}</md-tooltip> </div> <md-menu md-position-mode="target-right bottom" md-menu-class=root-menu-right-most id=right-most-menu> <div class=avatar ng-click=$mdMenu.open() tabindex=0> <st-avatar-icon element-id=menu-pic-{{$ctrl.avatarGuid}} name=$ctrl.avatarName image-url=$ctrl.avatarUrl width=38 height=38></st-avatar-icon> <div ng-if="$ctrl.hasChat && $ctrl.chatStatus !== \'failed\'"> <div ng-show=\'$ctrl.chatStatus && $ctrl.chatStatus !== "connecting"\' class="chat-status-icon overlay status-{{$ctrl.chatStatus}}"></div> <div ng-show=\'(!$ctrl.chatStatus || $ctrl.chatStatus === "connecting")\' class="chat-status-icon overlay status-connecting"> <i class="toolsicon toolsicon-refresh"></i> </div> </div> </div> <md-menu-content> <md-menu-item class=static-menu-item> <div>{{$ctrl.user.displayName || $ctrl.username}}</div> </md-menu-item> <md-menu-item class=static-menu-item ng-if=$ctrl.showEmail> <div>{{$ctrl.user.emailAddress}}</div> </md-menu-item> <md-divider></md-divider> <md-menu-item ng-if=$ctrl.hasChat ng-repeat="statusItem in $ctrl.params.chatStatusTypes | orderBy: \'idx\' track by $index"> <md-button ng-click=$ctrl.setChatStatus(statusItem.status)> <div class="chat-status-icon status-{{statusItem.status}}"></div> <span>{{::statusItem.label | translate}}</span> </md-button> </md-menu-item> <md-divider ng-if=$ctrl.hasChat></md-divider> <md-menu-item ng-repeat="item in $ctrl.rightItems track by $index" ng-show=!item.hidden class=display-mobile-view> <md-button ng-click=item.click()> <div ng-if=item.counter class=counter>{{ item.counter > 99 ? "99+" : item.counter }}</div> <span>{{ item.text | translate}}</span> </md-button> </md-menu-item> <md-divider class=display-mobile-view></md-divider> <md-menu-item>
4 <md-button ng-click=$ctrl.toggleTheme() aria-label=menu> <i class=toolsicon ng-class="{\'toolsicon-dark_mode\':!$ctrl.isDarkTheme, \'toolsicon-light_mode_filled\': $ctrl.isDarkTheme }" style="margin-right: 8px;"></i> <div ng-if=$ctrl.isDarkTheme> {{ ::\'SWITCH_TO_LIGHT_THEME\' | translate }}</div> <div ng-if=!$ctrl.isDarkTheme> {{ ::\'SWITCH_TO_DARK_THEME\' | translate }}</div> </md-button> </md-menu-item> <md-divider></md-divider> <md-menu-item> <md-button ng-click=$ctrl.openAbout($event)>{{ ::\'ABOUT_SMARTERMAIL\' | translate }}</md-button> </md-menu-item> <md-menu-item> <md-button ng-click=$ctrl.logout($event)>{{ ::\'LOGOUT\' | translate }}</md-button> </md-menu-item> </md-menu-content> </md-menu> </div>'); 5$templateCache.put('~/Interface/app/email/compose/compose.component.html','<div id=mailComposeArea ng-show=$ctrl.loaded> <action-bar class="inset-top inset-sides mailTopBar" confirm-on-unsaved-changes=$ctrl.hasMessageChanged()> <md-menu md-offset="-2 0" md-position-mode="target-left bottom"> <div class=split-menu> <md-button class=md-primary id=btnSendMessage style="margin-right: 0 !important; border-right-width: 0 !important" ng-disabled="$ctrl.hasSentMessage || $ctrl.overSizeLimit || (!$ctrl.recipientListTo.length && !$ctrl.recipientListCc.length && !$ctrl.recipientListBcc.length)" ng-click=$ctrl.onSend()> {{ ::"SEND" | translate }} </md-button> <md-button ng-click=$mdMenu.open($event) class="md-primary standard-icon reply-menu" style="margin-left: -4px !important" aria-label=menu ng-disabled="$ctrl.hasSentMessage || $ctrl.overSizeLimit || (!$ctrl.recipientListTo.length && !$ctrl.recipientListCc.length && !$ctrl.recipientListBcc.length)"> <span class=has-caret> <i class="toolsicon toolsicon-arrow_drop_down_emphasis"></i> </span> </md-button> </div> <md-menu-content class="standard icons"> <md-menu-item> <md-button ng-click=$ctrl.onSendImmediately()> {{:: \'SEND_NOW\' | translate }} </md-button> </md-menu-item> <md-menu-item> <md-button ng-click=$ctrl.showScheduleDialog()> {{:: \'SCHEDULE_SEND\' | translate }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <md-button class=md-secondary ng-click=$ctrl.onCancel($event)> {{ ::"CANCEL" | translate }} </md-button> <div class=divider></div> <md-button class="md-secondary mail-hide-mobile" id=btnSaveDraft ng-click=$ctrl.onSaveDraft() ng-disabled=$ctrl.overSizeLimit> {{ ::"SAVE_DRAFT" | translate }} </md-button> <md-button id=file-upload-btn class="md-secondary standard-icon" aria-label=upload> <i class="toolsicon toolsicon-sm toolsicon-attach_file"></i> </md-button> <md-menu md-position-mode="target-right target" md-offset="0 34"> <md-button ng-click=$mdMenu.open($event) class="md-secondary standard-icon" aria-label=menu> <md-tooltip md-autohide>{{::"ACTIONS" | translate }}</md-tooltip> <i class="toolsicon toolsicon-sm toolsicon-more_vert"></i> </md-button> <md-menu-content class=standard> <md-menu-item class=mail-show-mobile-flex> <md-button ng-click=$ctrl.onSaveDraft() ng-disabled=$ctrl.overSizeLimit> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': \'hidden\'}"></i> <span>{{::"SAVE_DRAFT" | translate}}</span> </md-button> </md-menu-item> <md-divider class=mail-show-mobile-flex></md-divider> <md-menu-item> <md-button ng-click=$ctrl.onSetPriority(0)> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.reply.priority === 0 ? \'\' : \'hidden\'}"></i> <span>{{::"HIGH_PRIORITY" | translate}}</span> </md-button> </md-menu-item> <md-menu-item> <md-button ng-click=$ctrl.onSetPriority(1)> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.reply.priority === 1 ? \'\' : \'hidden\'}"></i> <span>{{::"NORMAL_PRIORITY" | translate}}</span> </md-button> </md-menu-item> <md-menu-item> <md-button ng-click=$ctrl.onSetPriority(2)> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.reply.priority === 2 ? \'\' : \'hidden\'}"></i> <span>{{::"LOW_PRIORITY" | translate}}</span> </md-button> </md-menu-item> <md-divider></md-divider> <md-menu-item> <md-button ng-click=$ctrl.onToggleRequestReadReceipt()> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.reply.requestReadReceipt ? \'\' : \'hidden\'}"></i> <span>{{::"REQUEST_READ_RECEIPT" | translate}}</span> </md-button> </md-menu-item> <md-menu-item>
5 <md-button ng-click=$ctrl.onToggleRequestDeliveryReceipt()> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.reply.requestDeliveryReceipt ? \'\' : \'hidden\'}"></i> <span>{{::"REQUEST_DELIVERY_RECEIPT" | translate}}</span> </md-button> </md-menu-item> <md-menu-item> <md-button ng-click=$ctrl.onToggleMarkFollowup()> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.reply.markForFollowup ? \'\' : \'hidden\'}"></i> <span>{{::"MARK_FOLLOWUP" | translate}}</span> </md-button> </md-menu-item> <md-divider ng-hide=$ctrl.hideLinkFile></md-divider> <md-menu-item ng-hide=$ctrl.hideLinkFile> <md-button ng-click=$ctrl.onLinkFile()> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': \'hidden\'}"></i> <span>{{::"LINK_FILE" | translate}}</span> </md-button> </md-menu-item> </md-menu-content> </md-menu> </action-bar> <div id=mailComposeView> <form name=messageForm> <div ng-init="$ctrl.messageForm = messageForm"></div> <div id=replyHeader> <div class=area-options-label ng-show="$ctrl.fromAddresses.length > 1 || $ctrl.signatures.length > 1"> <span>{{ $ctrl.fromAddresses.length > 1 ? "FROM" : "SIGNATURE" | translate}}:</span> </div> <div class=area-options ng-show="$ctrl.fromAddresses.length > 1 || $ctrl.signatures.length > 1"> <md-select ng-model=$ctrl.selectedFromAddress ng-if="$ctrl.fromAddresses.length > 1"> <md-option ng-repeat="address in $ctrl.fromAddresses" ng-value=address>{{:: address.email }}</md-option> </md-select> <span class=label ng-if="$ctrl.fromAddresses.length > 1 && $ctrl.signatures.length > 1">{{::"SIGNATURE" | translate}}:</span> <md-select ng-show="$ctrl.signatures.length > 1" ng-model=$ctrl.selectedSignature ng-disabled=$ctrl.selectedFromAddress.userCannotOverride> <md-option ng-repeat="signature in $ctrl.signatures" ng-value=signature>{{:: signature.name }}</md-option> </md-select> </div> <div class=area-to-label> <md-button class="md-secondary no-border-icon" ng-click="$ctrl.openRecipientsModal(\'To\', $event)" tabindex=-1> {{::\'TO\' | translate}}: </md-button> </div> <div class=area-to> <message-recipient-autocomplete recipient-list=$ctrl.recipientListTo on-recipient-list-changed=$ctrl.onRecipientListChanged() autocomplete-data=$ctrl.autocompleteData.to autocomplete-id="\'autoCompleteToField\'" autocomplete-input-id="\'sendToField\'" contacts=$ctrl.contacts></message-recipient-autocomplete> </div> <div class=area-cc-bcc-switch ng-if=!$ctrl.showCCs> <md-button class="md-secondary no-border-icon" ng-click=$ctrl.showCCFields()> {{::\'CC_BCC\' | translate}} </md-button> </div> <div class=area-cc-label ng-show=$ctrl.showCCs> <md-button class="md-secondary no-border-icon" ng-click="$ctrl.openRecipientsModal(\'Cc\', $event)" tabindex=-1> {{::\'CC\' | translate}}: </md-button> </div> <div class=area-cc ng-show=$ctrl.showCCs> <message-recipient-autocomplete recipient-list=$ctrl.recipientListCc on-recipient-list-changed=$ctrl.onRecipientListChanged() autocomplete-data=$ctrl.autocompleteData.cc autocomplete-id="\'autoCompleteCcField\'" autocomplete-input-id="\'sendCcField\'" contacts=$ctrl.contacts></message-recipient-autocomplete> </div> <div class=area-bcc-label ng-show=$ctrl.showCCs> <md-button class="md-secondary no-border-icon" ng-click="$ctrl.openRecipientsModal(\'Bcc\', $event)" tabindex=-1> {{::\'BCC\' | translate}}: </md-button> </div> <div class=area-bcc ng-show=$ctrl.showCCs> <message-recipient-autocomplete recipient-list=$ctrl.recipientListBcc on-recipient-list-changed=$ctrl.onRecipientListChanged() autocomplete-data=$ctrl.autocompleteData.bcc autocomplete-id="\'autoCompleteBccField\'" autocomplete-input-id="\'sendBccField\'" contacts=$ctrl.contacts></message-recipient-autocomplete> </div> <div class=area-subject-label ng-click=$ctrl.focusSubject() tabindex=-1>{{::\'SUBJECT\' | translate}}:</div> <div class=area-subject> <md-input-container class=subject-line> <input id=subjectInputCtrl name=subject type=text ng-maxlength=255 ng-model=$ctrl.reply.subject ng-blur=$ctrl.tryResize()> <div ng-messages=$ctrl.messageForm.subject.$error role=alert> <div ng-message=maxlength>
5{{::"VALIDATION_INVALID_MAX_LENGTH" | translate : {max: 255} }}</div> <div ng-messages-include=error-messages></div> </div> </md-input-container> </div> </div> <st-html-editor id=composeEditor style="visibility: hidden;" ai=true attach-guid={{$ctrl.attachmentGuid}} editor-scope=$ctrl.editorScope enable-image-upload=true full-reply group-buttons=true height={{$ctrl.minHeight}} min-height={{$ctrl.minHeight}} on-image-inserted=$ctrl.froalaOnImageInserted on-save-draft=$ctrl.saveDraft() on-initialized=$ctrl.froalaOnInit enable-blur=true showsignaturebutton></st-html-editor> <div class="emailAttachments forwardAttachments" ng-show="$ctrl.message.attachments.length > 0"> <mail-attachment-new ng-repeat="item in $ctrl.message.attachments" item=item remove-attachment=$ctrl.attachmentRemoveForwardedFile is-compose=true></mail-attachment-new> </div> <div id=dropzoneWrapper> <res-uploader browse-control-selector=#file-upload-btn can-remove-file=true context=attachment context-data=$ctrl.uploaderData display-mode=page-overlay drop-control-selector=#mailComposeView file-added=$ctrl.uploaderOnPreUpload file-canceled=$ctrl.uploaderOnCanceled file-failed=$ctrl.uploaderOnUploadFailure file-removed=$ctrl.uploaderOnFileRemoved file-uploaded=$ctrl.uploaderOnUploaded image-preview=imagePreview remove-file-after-upload=true toast-on-error=false uploader-init=$ctrl.uploaderOnInit wait-to-upload=false></res-uploader> </div> </form> </div> </div>'); 6$templateCache.put('~/Interface/app/email/compose/recipient-autocomplete.component.html','<md-chips ng-model=$ctrl.recipientList ng-model-options="{updateOn: \'default\'}" md-separator-keys=$ctrl.addressSeparatorKeys md-transform-chip=$ctrl.autocompleteTransformChip($chip) md-enable-chip-edit=true md-on-remove=$ctrl.autocompleteOnChipRemoved() md-add-on-blur> <md-autocomplete md-selected-item=$ctrl.autocompleteData.selectedItem md-search-text=$ctrl.autocompleteData.searchString md-items="item in $ctrl.doAutocompleteQuery()" md-item-text=item.formatted md-item-size=4 md-min-length=2 md-no-cache=true md-match-case-insensitive=true md-input-id={{$ctrl.autocompleteInputId}} id={{$ctrl.autocompleteId}} md-menu-container-class=mailComposeAutocomplete md-autoselect> <md-item-template> <div class=st-autocomplete-entry> <div class=st-autocomplete-text> <div class=st-autocomplete-name ng-if=item.displayAs md-highlight-text=$ctrl.autocompleteData.searchString md-highlight-flags=i>{{item.displayAs}}</div> <div class=st-autocomplete-name ng-if=!item.displayAs md-highlight-text=$ctrl.autocompleteData.searchString md-highlight-flags=i>{{item.emailAddress}}</div> <div class="st-autocomplete-email secondary" ng-if="item.displayAs && item.displayAs != item.emailAddress && item.source != \'CONTACT_GROUP\'" md-highlight-text=$ctrl.autocompleteData.searchString md-highlight-flags=i>{{item.emailAddress}}</div> </div> <div class=st-autocomplete> <a href="" class=st-autocomplete-icon ng-click="$ctrl.autocompleteRemoveChip(item, $event, this)" ng-show="item.source === \'SENT_ITEM\'"> <i class="toolsicon toolsicon-close"></i> </a> </div> </div> </md-item-template> <md-not-found> {{::"MAIL_NO_MATCHES" | translate}} </md-not-found> </md-autocomplete> <md-chip-template> <span> {{$chip.displayAs || $chip.emailAddress || $chip.formatted}} <md-tooltip md-autohide md-direction=bottom>{{$chip.formatted}}</md-tooltip> </span> </md-chip-template> </md-chips>'); 7$templateCache.put('~/Interface/app/email/archive/view-archive.component.html','<action-bar class="inset-top inset-sides mailTopBar" ng-show="!$ctrl.messageDoesNotExist && !$ctrl.loading"> <md-button class="standard-icon md-primary reduced-size display-mobile-view" aria-label=back ng-click=$ctrl.closeWindow()> <i class="toolsicon toolsicon-keyboard_arrow_left"></i> </md-button> <md-button class=md-secondary ng-click=$ctrl.copyArchiveMessageToMailbox()> <span translate-once=COPY_TO_MAILBOX></span> </md-button> <md-button class=md-secondary ng-click=$ctrl.onDownloadRaw()> <span translate-once=DOWNLOAD_EML></span> </md-button> <md-menu md-position-mode="target-right bottom">
7 <md-button ng-click=$mdMenu.open($event) class="md-secondary standard-icon" aria-label=menu> <md-tooltip md-autohide>{{::"ACTIONS" | translate }}</md-tooltip> <i class="toolsicon toolsicon-sm toolsicon-more_vert"></i> </md-button> <md-menu-content class="standard dropdown-no-scroll"> <md-menu-item ng-show=!$ctrl.isQuarantineMessage> <md-button ng-click="$ctrl.viewAsClicked(\'html\')"> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.mode === \'html\' ? \'\' : \'hidden\'}"></i> <span translate-once=VIEW_HTML></span> </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.viewAsClicked(\'text\')"> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.mode === \'text\' ? \'\' : \'hidden\'}"></i> <span translate-once=VIEW_TEXT></span> </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.viewAsClicked(\'header\')"> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.mode === \'header\' ? \'\' : \'hidden\'}"></i> <span translate-once=VIEW_HEADER></span> </md-button> </md-menu-item> </md-menu-content> </md-menu> <div style="flex: 1 1 auto"></div> <div class=location-tag-archive>{{\'ARCHIVED_MESSAGE\' | translate}}</div> </action-bar> <div id=mailMessageView class=mail-message-view> <div class=message-spinner-area ng-click=$event.stopPropagation() ng-if=$ctrl.spinner.isShown()> <md-progress-circular class=message-spinner md-mode=indeterminate md-diameter=60></md-progress-circular> </div> <div class=message-does-not-exist ng-show=$ctrl.messageDoesNotExist> <div layout=row layout-align="center center" class=no-items-to-show> <div class=new-item-page-button> <div class=new-item-icon-wrapper> <i class="new-item-icon toolsicon toolsicon-mail"></i> </div> <p class=new-item-section-title>{{::"MAIL_NO_LONGER_EXISTS" | translate}}</p> </div> </div> </div> <div class=emailMessage ng-class="{\'display-none\': $ctrl.messageDoesNotExist || $ctrl.loading}" ng-cloak> <div class=header-grid> <div class=header-subject>{{$ctrl.message.subject}}</div> <div class=header-indicators> <div class="indicator priority-icon" ng-if="$ctrl.message.importance == 1"> <i class="toolsicon toolsicon-priority_high"></i> <md-tooltip md-autoclose translate-once=HIGH_PRIORITY></md-tooltip> </div> </div> <div class=header-addresses> <div id=from class=mail-addresses-list> <span>{{ ::"FROM" | translate }}: {{$ctrl.message.from}}</span> </div> <div id=to class="header-to mail-addresses-list" ng-show="$ctrl.message.toAddresses && $ctrl.message.to"> <span class=header-label>{{ ::"TO" | translate }}: </span> <div class=emailUserContainer ng-if=!$ctrl.showAllToAddresses> <span ng-repeat="to in $ctrl.message.toAddresses | limitTo: $ctrl.addressShowLimit"> {{(to.name ? \'"\' + to.name + \'" \' : \'\')}} <{{to.email}}>{{($ctrl.needsComma($index, $ctrl.message.toAddresses.length) ? ", " : "")}} </span> <a class=show-more-link ng-if="$ctrl.message.toAddresses.length > $ctrl.addressShowLimit" ng-click=$ctrl.toggleShowMoreTo()>{{"MAIL_MORE_COUNT" | translate : { count: $ctrl.message.toAddresses.length - $ctrl.addressShowLimit } }}</a> </div> <div class=emailUserContainer ng-if=$ctrl.showAllToAddresses> <span ng-repeat="to in $ctrl.message.toAddresses"> {{(to.name ? \'"\' + to.name + \'" \' : \'\')}} <{{to.email}}>{{($ctrl.needsComma($index, $ctrl.message.toAddresses.length) ? ", " : "")}} </span> <a class=show-less-link ng-show="$ctrl.message.toAddresses.length > $ctrl.addressShowLimit" translate-once=MAIL_MORE_COUNT_HIDE ng-click=$ctrl.toggleShowMoreTo()></a> </div> </div> <div id=cc class="header-cc mail-addresses-list" ng-show="$ctrl.message.ccAddresses && $ctrl.message.cc"> <span class=header-label>{{ ::"CC" | translate }}: </span> <div class=emailUserContainer ng-if=!$ctrl.showAllCcAddresses> <span ng-repeat="cc in $ctrl.message.ccAddresses | limitTo: $ctrl.addressShowLimit"> {{(cc.name ? \'"\' + cc.name + \'" \' : \'\')}} <{{cc.email}}>{{($ctrl.needsComma($index, $ctrl.message.ccAddresses.length) ? ", " : "")}} </span> <a class=show-more-link ng-if="$ctrl.message.ccAddresses.length > $ctrl.addressShowLimit" ng-click=$ctrl.toggleShowMoreCc()>{{"MAIL_MORE_COUNT" | translate : { count: $ctrl.message.ccAddresses.length - $ctrl.addressShowLimit } }}</a> </div> <div class=emailUserContainer ng-if=$ctrl.showAllCcAddresses> <span ng-repeat="cc in $ctrl.message.ccAddresses"> {{(cc.name ? \'"\' + cc.name + \'" \' : \'\')}} <{{cc.email}}>{{($ctrl.needsComma($index, $ctrl.message.ccAddresses.length) ? ", " : "")}} </span> <a class=show-less-link ng-show="$ctrl.message.ccAddresses.length > $ctrl.addressShowLimit" translate-once=MAIL_MORE_COUNT_HIDE ng-click=$ctrl.toggleShowMoreCc()></a> </div> </div> <div id=bcc class="header-bcc mail-addresses-list" ng-show="$ctrl.message.bccAddresses && $ctrl.message.bcc"> <span class=header-label>{{ ::"BCC" | translate }}: </span> <div class=emailUserContainer ng-if=!$ctrl.showAllBccAddresses> <span ng-repeat="bcc in $ctrl.message.bccAddresses | limitTo: $ctrl.addressShowLimit"> {{(bcc.name ? \'"\' + bcc.name + \'" \' : \'\')}} <{{bcc.email}}>{{($ctrl.needsComma($index, $ctrl.message.bccAddresses.length) ? ", " : "")}} </span> <a class=show-more-link ng-if="$ctrl.message.bccAddresses.length > $ctrl.addressShowLimit" ng-click=$ctrl.toggleShowMoreBcc()>{{"MAIL_MORE_COUNT" | translate : { count: $ctrl.message.bccAddresses.length - $ctrl.addressShowLimit } }}</a> </div> <div class=emailUserContainer ng-if=$ctrl.showAllBccAddresses> <span ng-repeat="bcc in $ctrl.message.bccAddresses"> {{(bcc.name ? \'"\' + bcc.name + \'" \' : \'\')}} <{{bcc.email}}>{{($ctrl.needsComma($index, $ctrl.message.bccAddresses.length) ? ", " : "")}} </span> <a class=show-less-link ng-show="$ctrl.message.bccAddresses.length > $ctrl.addressShowLimit" translate-once=MAIL_MORE_COUNT_HIDE ng-click=$ctrl.toggleShowMoreBcc()></a> </div> </div> </div> <div class=header-date>{{ $ctrl.message.userDate | date:\'short\'}}</div> </div> <div class=message-notices> <div class=notice ng-if="$ctrl.message.phishingReasons && $ctrl.message.phishingReasons.length > 0" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span>{{ $ctrl.message.phishingReasons[0] | translate }}</span> </div> </div> <div class=notice ng-if=$ctrl.message.forwardedMessageInfo ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=MESSAGE_NOTICE_FORWARDED_MESSSAGE_BY_X_TO_Y ng-if=$ctrl.message.forwardedMessageInfo.isForward translate-values="{x:$ctrl.message.forwardedMessageInfo.forwardingAddress, y:$ctrl.message.forwardedMessageInfo.forwardingTo}"></span> <span translate-once=MESSAGE_NOTICE_ORIGINAL_SENDER ng-if=!$ctrl.message.forwardedMessageInfo.isForward translate-values={sender:$ctrl.message.forwardedMessageInfo.originalSender}></span> </div> </div> <div class=notice ng-if=$ctrl.message.hadUnsafeCode ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=UNSAFE_CODE_REMOVED></span> </div> </div> <div class=notice ng-if=$ctrl.message.htmlIsStillUnsafe ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=UNSAFE_CODE_COULDNT_BE_REMOVED></span> </div> </div> <div class=notice ng-if=$ctrl.imagesBlocked ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=IMAGES_NOT_DISPLAYED></span> </div> </div> <div class=notice ng-if=$ctrl.cleansedFromAddress ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=BAD_FROM_ADDRESS_DETECTED></span> </div> </div>
7 <div class=notice ng-if="!$ctrl.message.bypassRemoteContent && $ctrl.message.blockedContentOrigins.length > 0 && $ctrl.mode === \'html\'" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-image"></i> <div class=message> <span translate-once=MESSAGE_NOTICE_DOWNLOADIMAGES_HIDDEN></span> </div> </div> <div class=notice ng-if="$ctrl.activeTrackersCount > 0" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-impersonate"></i> <div class=message> <span>{{ \'MESSAGE_NOTICE_TRACKER_COUNT\' | reactPluralize : { count: $ctrl.activeTrackersCount } }}</span> <span>{{ \'MESSAGE_NOTICE_TRACKER_POST_TEXT\' | reactPluralize : { count: $ctrl.activeTrackersCount } }}</span> </div> </div> <div class=notice ng-if=$ctrl.message.attachments.length ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-attach_email"></i> <div class=message> <span translate-once=MESSAGE_NOTICE_ATTACHMENT_PRE_TEXT></span> <a tabindex=0 ng-click=$ctrl.showAttachmentsModal()> {{ \'MESSAGE_NOTICE_ATTACHMENT_COUNT\' | reactPluralize : { count: ($ctrl.message.attachments.length === 1 ? $ctrl.message.attachments.length : $ctrl.message.attachments.length - 1) } }} </a> <span>{{ \'MESSAGE_NOTICE_ATTACHMENT_POST_TEXT\' | reactPluralize : {count:$ctrl.message.attachments.length} }}</span> </div> </div> <div class=notice ng-if="$ctrl.mode !== \'html\'" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-2x toolsicon-content_copy"></i> <div class=message> <a tabindex=0 translate=MESSAGE_NOTICE_RAW_COPY ng-click=$ctrl.copyContentToClipboard()></a> </div> </div> </div> <message-calendar-invite ng-if="$ctrl.message.meetingInfo && $ctrl.mode != \'text\' && $ctrl.mode != \'header\'" message=$ctrl.message meeting-info=$ctrl.message.meetingInfo on-iframe-loaded="messageCtrl.iFrameLoaded = true"></message-calendar-invite> <div class=mail-message-info ng-class="{\'display-none\': !$ctrl.iFrameLoaded}" ng-if="!$ctrl.message.meetingInfo || $ctrl.mode === \'text\' || $ctrl.mode === \'header\'"> <div class=mail-message-tab ng-cloak> <div id=messageViewFrameContainer> <iframe scrolling=yes id=archiveViewFrame class=view-frame src=message-iframe frameborder=0 style="width: 100%;"></iframe> </div> </div> </div> </div> </div> '); 8$templateCache.put('~/Interface/app/email/message-view-components/message-calendar-invite.component.html',' <div class=mail-message-info> <div class=mail-message-tab> <div class="mail-meeting-invite emailMessageExtras"> <div class=calendarInvite> <div class=calendar-invite-greeting> <i class="toolsicon toolsicon-calendar"></i> <span ng-if="$ctrl.meetingInfo.recipientInfo && $ctrl.meetingInfo.recipientInfo.meetingInviteAction == 0">{{::"YOU_HAVE_BEEN_INVITED" | translate}}</span> <span ng-if=$ctrl.isSentInvite>{{::"YOU_HAVE_SEND_MEETING_INVITE" | translate}}</span> <span ng-if="$ctrl.meetingInfo.isCounter && $ctrl.meetingInfo.isOrganizer">{{::"TIME_PROPOSAL_RECEIVED" | translate }}</span> <span ng-if="$ctrl.meetingInfo.isCounter && !$ctrl.meetingInfo.isOrganizer">{{::"TIME_PROPOSAL_SENT" | translate }}</span> <span ng-if=$ctrl.meetingInfo.isReply>{{::"REPLY_TO_EVENT_RECEIVED" | translate}}</span> <span ng-if=$ctrl.meetingInfo.isCancel>{{::"REPLY_TO_EVENT_CANCELED" | translate}}</span> <span ng-if="$ctrl.meetingInfo.recipientInfo.meetingInviteAction == 1">{{::"YOU_HAVE_ACCEPTED" | translate}}</span> <span ng-if="$ctrl.meetingInfo.recipientInfo.meetingInviteAction == 2">{{::"YOU_HAVE_DECLINED" | translate}}</span> <span ng-if="$ctrl.meetingInfo.recipientInfo.meetingInviteAction == 3">{{::"YOU_HAVE_TENTATIVELY" | translate}}</span> </div> <div class=calendar-invite-buttons> <md-button class=md-primary id=btnInviteAccept ng-click=$ctrl.acceptInvite($event) ng-if="!$ctrl.message.isDraft && $ctrl.meetingInfo.showAccept">{{::\'ACCEPT\' | translate}}</md-button> <md-button class=md-primary id=btnInviteTentativeAccept ng-click=$ctrl.tentativeAcceptInvite($event) ng-if="!$ctrl.message.isDraft && $ctrl.meetingInfo.showDecline">{{::\'TENTATIVE\' | translate}}</md-button> <md-button class=md-primary id=btnInviteDecline ng-click=$ctrl.declineInvite($event) ng-if="!$ctrl.message.isDraft && $ctrl.meetingInfo.showDecline">{{::\'DECLINE\' | translate}}</md-button> <md-button class=md-primary id=btnProposeView ng-click=$ctrl.showInviteDetails($event) ng-if="!$
8ctrl.message.isDraft && $ctrl.meetingInfo.showProposalControls">{{::"VIEW_PROPOSALS" | translate}}</md-button> <md-button class=md-primary id=btnInviteCheck ng-click=$ctrl.checkAvailability($event) ng-if="!$ctrl.message.isDraft && $ctrl.meetingInfo.showCheckAvailability && !$ctrl.meetingInfo.isCancel">{{::\'CHECK_AVAILABILITY\' | translate}}</md-button> <md-button class=md-primary id=btnInviteDetails ng-click=$ctrl.showInviteDetails($event) ng-if="!$ctrl.message.isDraft && $ctrl.meetingInfo.showDetails">{{::\'DETAILS\' | translate}}</md-button> <md-button class=md-primary id=btnInviteDelete ng-click=$ctrl.deleteInvite($event) ng-if="!$ctrl.message.isDraft && $ctrl.meetingInfo.showDelete">{{::\'DELETE\' | translate}}</md-button> </div> <div class=calendar-invite-info> <div class=calendar-invite-row ng-show=$ctrl.meetingInfo.subject> <div>{{::"SUBJECT" | translate}}:</div> <div>{{$ctrl.meetingInfo.subject}}</div> </div> <div class=calendar-invite-row ng-show="$ctrl.meetingInfo.attendeeCount > 0"> <div>{{::"ATTENDEES" | translate}}:</div> <div> <span class=calendar-invite-attendee ng-repeat="attendee in $ctrl.meetingInfo.attendees" ng-if=!attendee.isResource> {{attendee.name && attendee.name !== "" ? attendee.name : attendee.email}} <span ng-show=attendee.isOrganizer>({{ ::"ORGANIZER" | translate }})</span> <span ng-switch on=attendee.status ng-show=!attendee.isOrganizer> <span ng-switch-when=1>{{::"MEETING_ACCEPTED" | translate}}</span> <span ng-switch-when=2>{{::"MEETING_DECLINED" | translate}}</span> <span ng-switch-when=3>{{::"MEETING_TENTATIVE" | translate}}</span> </span> </span> </div> </div> <div class=calendar-invite-row ng-show="$ctrl.meetingInfo.resourceCount > 0"> <div>{{::"RESOURCES" | translate}}:</div> <div> <span class=calendar-invite-attendee ng-repeat="attendee in $ctrl.meetingInfo.attendees" ng-if=attendee.isResource> {{attendee.name && attendee.name !== "" ? attendee.name : attendee.email}} <span ng-switch on=attendee.status ng-show=!attendee.isOrganizer> <span ng-switch-when=1>{{::"MEETING_ACCEPTED" | translate}}</span> <span ng-switch-when=2>{{::"MEETING_DECLINED" | translate}}</span> <span ng-switch-when=3>{{::"MEETING_TENTATIVE" | translate}}</span> </span> </span> </div> </div> <div class=calendar-invite-row> <div>{{::"WHEN" | translate}}:</div> <div> <div class=calendar-invite-when> {{$ctrl.meetingInfo.prop.whenToText}} <span ng-if=$ctrl.meetingInfo.isCounter> ({{::"PROPOSED" | translate}})</span> <a id=btnInviteProposeChanges ng-click=$ctrl.openProposeChangesModal($event) ng-if="!$ctrl.message.isDraft && $ctrl.meetingInfo.showPropose">{{::\'PROPOSE_NEW_TIME\' | translate}}</a></div> </div> </div> <div class=calendar-invite-row ng-if="$ctrl.meetingInfo.location || $ctrl.meetingInfo.resourceName"> <div>{{::"LOCATION" | translate}}:</div> <div>{{$ctrl.meetingInfo.location}} {{$ctrl.meetingInfo.resourceName}}</div> </div> <div class=calendar-invite-row ng-if=$ctrl.meetingInfo.reminder> <div>{{::"REMINDER" | translate}}:</div> <div>{{$ctrl.meetingInfo.reminderText}}</div> </div> <div class=calendar-invite-row ng-show="$ctrl.meetingInfo.description && $ctrl.meetingInfo.description !== \'<br>\'"> <div ng-hide="$ctrl.meetingInfo.isReply || $ctrl.meetingInfo.isCounter">{{ ::"DESCRIPTION" | translate }}:</div> <div ng-show="$ctrl.meetingInfo.isReply || $ctrl.meetingInfo.isCounter">{{ ::"COMMENT" | translate }}:</div> <div id=meetingDescriptionFrameContainer ng-hide="$ctrl.viewMode === \'text\'"> <iframe scrolling=no id=meetingDescriptionFrame src=message-iframe frameborder=0 style="width: 100%;"></iframe> </div> <div ng-show="$ctrl.viewMode === \'text\'"> {{ $ctrl.message.messagePlainText }} </div> </div> <div class=calendar-invite-row ng-if="$ctrl.meetingInfo.recipientInfo.meetingInviteAction == 1"> <div></div> <div>{{"ACCEPTED_ON" | translate:{date: ($ctrl.meetingInfo.recipientInfo.meetingInviteActionTime | date:"short")}}}</div> </div> <div class=calendar-invite-row ng-if="$ctrl.meetingInfo.recipientInfo.meetingInviteAction == 2"> <div></div> <div>{{"DECLINED_ON" | translate:{date: ($ctrl.meetingInfo.recipientInfo.meetingInviteActionTime | date:"short")}}}</div> </div> <div class=calendar-invite-row ng-if="$ctrl.meetingInfo.recipientInfo.meetingInviteAction == 3"> <div></div> <div>{{"TENTATIVE_ON" | translate:{date: ($ctrl.meetingInfo.recipientInfo.meetingInviteActionTime | date:"short")}}}</div> </div> <div class=calendar-invite-comment ng-show="$ctrl.meetingInfo.showAccept || $ctrl.meetingInfo.showDecline"> <md-input-container> <label>{{::"REPLY" | translate}}</label> <textarea name=comment ng-model=$ctrl.meetingInfo.replyingComment rows=5 md-no-autogrow></textarea> </md-input-container> </div> </div> </div> </div> </div> </div> '); 9$templateCache.put('~/Interface/app/email/message-view-components/message-header.component.html','<div class=header-grid id=headergrid> <div class=header-subject>{{$ctrl.message.subject}}</div> <div class=header-indicators> <div class="indicator priority-icon" ng-if="$ctrl.message.importance == 1"> <i class="toolsicon toolsicon-priority_high"></i> <md-tooltip md-autoclose translate-once=HIGH_PRIORITY></md-tooltip> </div> <div class="indicator forward-icon" ng-if="$ctrl.message.isForwarded && !$ctrl.message.isReplied"> <i class="toolsicon toolsicon-forward"></i> <md-tooltip md-autoclose translate-once=FORWARDED></md-tooltip> </div> <div class="indicator reply-icon" ng-if=$ctrl.message.isReplied> <i class="toolsicon toolsicon-reply"></i> <md-tooltip md-autoclose translate-once=REPLIED_TO></md-tooltip> </div> <div ng-if=!$ctrl.isReadOnly> <div class="indicator flag-icon" ng-class="{\'active\': $ctrl.message.isFlagged}" tabindex=0 ng-click=$ctrl.toggleFlag();> <i class="toolsicon toolsicon-flag"></i> <md-tooltip md-autoclose> {{ $ctrl.message.isFlagged ? \'TOGGLE_FLAG_OFF\' : \'TOGGLE_FLAG_ON\' | translate }} </md-tooltip> </div> </div> <div ng-if=$ctrl.isReadOnly style="pointer-events: none;"> <div class="indicator flag-icon" ng-class="{\'active\': $ctrl.message.isFlagged}"> <i class="toolsicon toolsicon-flag"></i> <md-tooltip ng-if=$ctrl.message.isFlagged md-autoclose>{{ \'FLAGGED\' | translate }}</md-tooltip> </div> </div> </div> <div class=header-avatar ng-show="!$ctrl.message.hideAvatar && $ctrl.message.fromAddress && ($ctrl.message.fromAddress.name || $ctrl.message.fromAddress.email)"> <st-avatar-icon element-id=messageavatar name="$ctrl.message.fromAddress.name ? $ctrl.message.fromAddress.name : $ctrl.message.fromAddress.email" image-url=$ctrl.avatarUrl pre-loading=!$ctrl.avatarLoaded width=64 height=64></st-avatar-icon> </div> <div ng-class="$ctrl.hideHeader ? \'header-mobile-addresses\' : \'header-addresses\'"> <div class=header-from ng-if=!$ctrl.message.senderAddress.email> <span class=header-label translate-once=FROM></span> <user-with-context ng-repeat="from in [$ctrl.message.fromAddress]" type="\'from\'" email=from.email name=from.name display-as=from.displayAs message-from=$ctrl.message.from message-uid=$ctrl.message.uid message-folder=$ctrl.message.folder create-filter=$ctrl.createFilter() add-to-filter=$ctrl.addToFilter() is-blocked-sender=$ctrl.messageData.senderIsBlocked show-trust=!$ctrl.messageData.senderIsBlocked message-data=$ctrl.messageData activation-resolver=$ctrl.activationResolver></user-with-context> </div> <div class=header-from ng-if=$ctrl.message.senderAddress.email> <span class=header-label translate-once=FROM></span> <user-with-context ng-repeat="from in [$ctrl.message.senderAddress]" type="\'from\'" email=from.email name=from.name display-as=from.displayAs message-from=$ctrl.message.from message-uid=$ctrl.message.uid message-folder=$ctrl.message.folder create-filter=$ctrl.createFilter() add-to-filter=$ctrl.addToFilter() message-data=$ctrl.messageData activation-resolver=$ctrl.activationResolver></user-with-context> </div> <div class=header-inbehalfof ng-if=$ctrl.message.senderAddress.email> <span class=header-label translate-once=ON_BEHALF_OF></span> <user-with-context ng-repeat="from in [$ctrl.message.fromAddress]" type="\'from\'" email=from.email name=from.name display-as=from.displayAs message-from=$ctrl.message.from message-uid=$ctrl.message.uid message-folder=$ctrl.message.folder create-filter=$ctrl.createFilter() add-to-filter=$ctrl.addToFilter() is-blocked-sender=$ctrl.messageData.senderIsBlocked show-trust=!$ctrl.messageData.senderIsBlocked message-data=$ctrl.messageData></user-with-context> </div> <div class=header-to ng-if="$ctrl.message.toAddresses && !$ctrl.hideHeader"> <span class=header-label translate-once=TO></span> <div class=emailUserContainer ng-if=!$ctrl.showMoreToAddresses> <user-with-context ng-repeat="to in $ctrl.message.toAddresses | limitTo:$ctrl.addressShowLimitCount" type="\'to\'" email=to.email name=to.name message-data=$ctrl.messageData message-from=$ctrl.message.from message-uid=$ctrl.message.uid message-folder=$ctrl.message.folder></user-with-context> <a class=show-more-link ng-show="$ctrl.message.toAddresses.length > $ctrl.addressShowLimitCount" ng-click=$ctrl.showMoreToggleTo()>{{"MAIL_MORE_COUNT" | translate:{count: $ctrl.message.toAddresses.length - $ctrl.addressShowLimitCount} }}</a> </div> <div class=emailUserContainer ng-if="$ctrl.showMoreToAddresses && !$ctrl.hideHeader"> <user-with-context ng-repeat="to in $ctrl.message.toAddresses" type="\'to\'" email=to.email name=to.name message-data=$ctrl.messageData message-from=$ctrl.message.from message-uid=$ctrl.message.uid message-folder=$ctrl.message.folder></user-with-context> <a class=show-more-link ng-show="$ctrl.message.toAddresses.length > $ctrl.addressShowLimitCount" translate-once=MAIL_MORE_COUNT_HIDE ng-click=$ctrl.showMoreToggleTo()></a> </div> </div> <div class=header-cc ng-if="$ctrl.message.ccAddresses && !$ctrl.hideHeader"> <span class=header-label translate-once=CC></span> <div class=emailUserContainer ng-if=!$ctrl.showMoreCCAddresses> <user-with-context ng-repeat="cc in $ctrl.message.ccAddresses | limitTo:$ctrl.addressShowLimitCount" type="\'cc\'" email=cc.email name=cc.name message-data=$ctrl.messageData message-from=$ctrl.message.from message-uid=$ctrl.message.uid message-folder=$ctrl.message.folder></user-with-context> <a class=show-more-link ng-show="$ctrl.message.ccAddresses.length > $ctrl.addressShowLimitCount" ng-click=$ctrl.showMoreToggleCc()>{{"MAIL_MORE_COUNT" | translate:{count: $ctrl.message.ccAddresses.length - $ctrl.addressShowLimitCount} }}</a> </div> <div class=emailUserContainer ng-if="$ctrl.showMoreCCAddresses && !$ctrl.hideHeader"> <user-with-context ng-repeat="cc in $ctrl.message.ccAddresses" type="\'cc\'" email=cc.email name=cc.name message-data=$ctrl.messageData message-from=$ctrl.message.from message-uid=$ctrl.message.uid message-folder=$ctrl.message.folder></user-with-context> <a class=show-more-link ng-show="$ctrl.message.ccAddresses.length > $ctrl.addressShowLimitCount" translate-once=MAIL_MORE_COUNT_HIDE ng-click=$ctrl.showMoreToggleCc()></a> </div> </div> <div class=header-bcc ng-if="$ctrl.message.bccAddresses && !$ctrl.hideHeader"> <span class=header-label translate-once=BCC></span> <div class=emailUserContainer ng-if=!$ctrl.showMoreBCCAddresses> <user-with-context ng-repeat="bcc in $ctrl.message.bccAddresses | limitTo:$ctrl.addressShowLimitCount" type="\'bcc\'" email=bcc.email name=bcc.name message-data=$ctrl.messageData message-from=$ctrl.message.from message-uid=$ctrl.message.uid message-folder=$ctrl.message.folder></user-with-context> <a class=show-more-link ng-show="$ctrl.message.bccAddresses.length > $ctrl.addressShowLimitCount" ng-click=$ctrl.showMoreToggleBcc()>{{"MAIL_MORE_COUNT" | translate:{count: $ctrl.message.bccAddresses.length - $ctrl.addressShowLimitCount} }}</a> </div> <div class=emailUserContainer ng-if=$ctrl.showMoreBCCAddresses> <user-with-context ng-repeat="bcc in $ctrl.message.bccAddresses" type="\'bcc\'" email=bcc.email name=bcc.name message-data=$ctrl.messageData message-from=$ctrl.message.from message-uid=$ctrl.message.uid message-folder=$ctrl.message.folder></user-with-context> <a class=show-more-link ng-show="$ctrl.message.bccAddresses.length > $ctrl.addressShowLimitCount" translate-once=MAIL_MORE_COUNT_HIDE ng-click=$ctrl.showMoreToggleBcc()></a> </div> </div> </div> <div class=header-date ng-hide=$ctrl.hideHeader>{{ $ctrl.message.userDate | date:\'short\'}}</div> </div> <div class=message-categories ng-show="$ctrl.selectedMessageCategories().length && !$ctrl.hideHeader"> <st-color-pill ng-repeat="cat in $ctrl.selectedMessageCategories()" pill-text="{{ cat.translatedName }}" pill-color="{{ $ctrl.categoryColorByName(cat.name)}}"></st-color-pill> </div> <div class=message-notices ng-hide=$ctrl.hideHeader> <div class="notice notice-phishing" ng-if="$ctrl.message.phishingReasons && $ctrl.message.phishingReasons.length > 0 && !$ctrl.message.isDraft" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span>{{ $ctrl.message.phishingReasons[0] | translate }}</span> </div> </div> <div class=notice ng-if=$ctrl.message.scheduledSendDate ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-outgoing_mail"></i> <div class=message> <span>{{::"SCHEDULED_TO_BE_SENT" | translate}}</span> <span>{{($ctrl.message.scheduledSendDateUserTime || $ctrl.message.scheduledSendDate) | date:\'short\'}}</span> </div> </div> <div class=notice ng-if="$ctrl.message.isForwarded && $ctrl.message.forwardedTimeUTC" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-info"></i> <div class=message> <span>{{::"FORWARDED_ON" | translate}}</span><span>{{$ctrl.message.forwardedTimeUTC | date:\'short\'}}</span> </div> </div> <div class=notice ng-if="$ctrl.message.isReplied && $ctrl.message.repliedTimeUTC" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-info"></i> <div class=message> <span>{{::"REPLIED_ON" | translate }}</span><span>{{$ctrl.message.repliedTimeUTC | date:\'short\'}}</span> </div> </div> <div class=notice ng-if="$ctrl.flagStatusString || $ctrl.flagRecipientString" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-info"></i> <div class=message> <span translate-once=FLAG_STATUS_DRAFT ng-if=$ctrl.message.isDraft></span> <div ng-if=$ctrl.flagStatusString>{{$ctrl.flagStatusString}}</div> <div ng-if=$ctrl.flagRecipientString>{{$ctrl.flagRecipientString}}</div> </div> </div> <div class=notice ng-if="($ctrl.hadUnsafeCode || $ctrl.message.hadUnsafeCode) && !$ctrl.message.isDraft && !($ctrl.htmlIsStillUnsafe || $ctrl.message.htmlIsStillUnsafe)" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=UNSAFE_CODE_REMOVED></span> </div> </div> <div class=notice ng-if="($ctrl.htmlIsStillUnsafe || $ctrl.message.htmlIsStillUnsafe) && !$ctrl.message.isDraft" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=UNSAFE_CODE_COULDNT_BE_REMOVED></span> </div> </div> <div class=notice ng-if="$ctrl.imagesBlocked && !$ctrl.message.isDraft" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=IMAGES_NOT_DISPLAYED></span> </div> </div> <div class=notice ng-if="$ctrl.cleansedFromAddress && !$ctrl.message.isDraft" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=BAD_FROM_ADDRESS_DETECTED></span> </div> </div> <div class=notice ng-if="$ctrl.message.unsubLink && !$ctrl.message.alreadyUnsubscribed" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-info"></i> <div class=message> <a tabindex=0 translate-once=MESSAGE_NOTICE_UNSUBSCRIBE_ACTION ng-click=$ctrl.unsubMessage($ctrl.message.unsubLink)></a> <span translate-once=MESSAGE_NOTICE_UNSUBSCRIBE_POST_TEXT></span> </div> </div>
9 <div class=notice ng-if="!$ctrl.message.bypassRemoteContent && $ctrl.message.blockedContentOrigins.length > 0 && !$ctrl.isInJunk" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-image"></i> <div class=message> <a tabindex=0 translate-once=MESSAGE_NOTICE_DOWNLOADIMAGES_DOWNLOAD ng-click=$ctrl.allowRemoteForMessage()></a> <span ng-if=$ctrl.allowShowImagesAlways> <span translate-once=MESSAGE_NOTICE_DOWNLOADIMAGES_SEPARATOR></span> <a tabindex=0 translate-once=MESSAGE_NOTICE_DOWNLOADIMAGES_ALWAYS ng-click=$ctrl.allowRemoteForMessageAll()></a> </span> </div> </div> <div class=notice ng-if=$ctrl.message.trustedSenderBypassed ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message translate=SENDER_COULD_NOT_BE_VERIFIED> </div> </div> <div class=notice ng-if="$ctrl.message.requestingReadReceipt && !$ctrl.isSentItems && !$ctrl.isDraftsFolder" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-outgoing_mail"></i> <div class=message> <a tabindex=0 translate-once=MESSAGE_NOTICE_READRECEIPT_SEND ng-click=$ctrl.sendReadReceipt()></a> <span translate-once=MESSAGE_NOTICE_READRECEIPT_POST_TEXT></span> </div> </div> <div class=notice ng-if="$ctrl.activeTrackersCount > 0" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-impersonate"></i> <div class=message> <a tabindex=0 ng-click=$ctrl.showTrackersModal()> {{ \'MESSAGE_NOTICE_TRACKER_COUNT\' | reactPluralize : { count: $ctrl.activeTrackersCount } }} </a> <span>{{ \'MESSAGE_NOTICE_TRACKER_POST_TEXT\' | reactPluralize : { count: $ctrl.activeTrackersCount } }}</span> </div> </div> <div class=notice ng-if=$ctrl.message.attachments.length ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-attach_email"></i> <div class=message> <span translate-once=MESSAGE_NOTICE_ATTACHMENT_PRE_TEXT></span> <a tabindex=0 ng-click=$ctrl.showAttachmentsModal()> {{ \'MESSAGE_NOTICE_ATTACHMENT_COUNT\' | reactPluralize : { count: ($ctrl.message.attachments.length === 1 ? $ctrl.message.attachments.length : $ctrl.message.attachments.length - 1) } }} </a> <span>{{ \'MESSAGE_NOTICE_ATTACHMENT_POST_TEXT\' | reactPluralize : {count:$ctrl.message.attachments.length} }}</span> </div> </div> <div class=notice ng-if=$ctrl.message.tasks.length ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-check"></i> <div class=message> <span translate-once=MESSAGE_NOTICE_TASK_PRE_TEXT></span> <a tabindex=0 ng-click=$ctrl.showTasksModal()> {{ \'MESSAGE_NOTICE_TASK_COUNT\' | reactPluralize : { count: $ctrl.message.tasks.length } }} </a> <span>{{ \'MESSAGE_NOTICE_TASK_POST_TEXT\' | reactPluralize : { count: $ctrl.message.tasks.length } }}</span> </div> </div> <div class=notice ng-if="$ctrl.messageData.mode === \'raw\' || $ctrl.messageData.mode === \'hdr\' || $ctrl.messageData.mode === \'header\' ||\r\n $ctrl.messageData.mode === \'raw\' || $ctrl.messageData.mode === \'hdr\' || $ctrl.messageData.mode === \'header\'" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-content_copy"></i> <div class=message> <a tabindex=0 translate=MESSAGE_NOTICE_RAW_COPY ng-click=$ctrl.copyContentToClipboard()></a> </div> </div> <div ng-if="$ctrl.message.meetingInfo && $ctrl.messageData.mode != \'raw\' && $ctrl.messageData.mode != \'header\'"> <div class=notice ng-if=$ctrl.message.meetingInfo.meetingCancelled ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-event_busy"></i> <div class=message> <span translate-once=REPLY_TO_EVENT_CANCELED></span> </div> </div> <div class=notice ng-if=$ctrl.message.meetingInfo.newerVersionFound ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-info"></i> <div class=message> <span ng-if=!$ctrl.message.meetingInfo.isCounter>{{::"MESSAGE_INVITE_NOTICE_OLD" | translate}}</span> <span ng-if=$ctrl.message.meetingInfo.isCounter>{{::"MESSAGE_PROPOSAL_NOTICE_OLD" | translate}}</span> </div> </div> </div> </div> <div class=header-collapse ng-if=$ctrl.isMobile> <a ng-click=$ctrl.hideEmailHeader()> <i ng-if=$ctrl.hideHeader title="{{::\'EXPAND_HEADER\' | translate}}" class="toolsicon toolsicon-keyboard_arrow_down ng-scope"></i> <i ng-if=!$ctrl.hideHeader title="{{::\'COLLAPSE_HEADER\' | translate}}" class="toolsicon toolsicon-keyboard_arrow_up ng-scope"></i> </a> </div>'); 10$templateCache.put('~/Interface/app/email/message-view-components/sender-trust-info.component.html','<div class=no-select style=position:relative> <div ng-hide=$ctrl.isDraft() ng-mouseenter="$ctrl.flipTrustFloater($event, true)" ng-mouseleave="$ctrl.flipTrustFloater($event, false)" ng-click=$ctrl.forceTrustFloater($event)> <span class="sender-trusted trust-none" ng-show="$ctrl.messageData.message.trustInfo.totalLevel == 0">
10 <i class="toolsicon toolsicon-gpp_maybe"></i> </span> <span class="sender-trusted trust-bad" ng-show="$ctrl.messageData.message.trustInfo.totalLevel == 1"> <i class="toolsicon toolsicon-gpp_bad"></i> </span> <span class="sender-trusted trust-good" ng-show="$ctrl.messageData.message.trustInfo.totalLevel == 2 && ($ctrl.messageData.message.trustInfo.trustedSenderLevel || $ctrl.messageData.message.trustInfo.authenticated)"> <i class="toolsicon toolsicon-verified_user" alt="{{::\'TRUSTED_SENDER\'|translate}} ({{ $ctrl.messageData.trustedFromSource | translate }})"></i> </span> <span class="sender-trusted trust-none" ng-show="$ctrl.messageData.message.trustInfo.totalLevel == 2 && !$ctrl.messageData.message.trustInfo.trustedSenderLevel && !$ctrl.messageData.message.trustInfo.authenticated"> <i class="toolsicon toolsicon-verified_user"></i> </span> </div> <div class=trust-floater ng-class="{\'show-overlay\': $ctrl.showTrustMenu}"> <div class=overlay-title> {{:: "SENDER_VERIFICATION" | translate}} </div> <div class=divider-bar></div> <div class=overlay-title> <span ng-show="$ctrl.messageData.message.trustInfo.totalLevel == 0"> {{::"TRUST_SHIELD_TITLE_UNSURE" | translate}}</span> <span ng-show="$ctrl.messageData.message.trustInfo.totalLevel == 1"> {{::"TRUST_SHIELD_TITLE_BAD" | translate}}</span> <span ng-show="$ctrl.messageData.message.trustInfo.totalLevel == 2 && $ctrl.messageData.message.trustInfo.trustedSenderLevel"> {{::"TRUST_SHIELD_TITLE_TRUSTED" | translate}}</span> <span ng-show="$ctrl.messageData.message.trustInfo.totalLevel == 2 && !$ctrl.messageData.message.trustInfo.trustedSenderLevel"> {{::"TRUST_SHIELD_TITLE_VERIFIED" | translate}}</span> </div> <div class=item ng-show=$ctrl.messageData.message.trustInfo.mismatchFromAddress> <i class="toolsicon toolsicon-close_emphasis trust-bad"></i> <div>{{::\'TRUST_SHIELD_MSG_BAD_FROM_ADDRESS_SHORT\' | translate}}</div> </div> <div class=item ng-show="$ctrl.messageData.message.trustInfo.trustedSenderLevel != 0"> <i class="toolsicon toolsicon-check trust-good"></i> <div> <span>{{::\'TRUSTED_SENDER\' | translate }} </span> <span ng-show="$ctrl.messageData.message.trustInfo.trustedSenderLevel == 5"> ({{::\'SYSTEM\' | translate }})</span> <span ng-show="$ctrl.messageData.message.trustInfo.trustedSenderLevel == 4"> ({{::\'GAL\' | translate }})</span> <span ng-show="$ctrl.messageData.message.trustInfo.trustedSenderLevel == 3"> ({{::\'DOMAIN\' | translate }})</span> <span ng-show="$ctrl.messageData.message.trustInfo.trustedSenderLevel == 2"> ({{::\'CONTACTS\' | translate }})</span> <span ng-show="$ctrl.messageData.message.trustInfo.trustedSenderLevel == 1"> ({{::\'USER\' | translate }})</span> </div> </div> <div class=item ng-show=$ctrl.messageData.message.trustInfo.authenticated> <i class="toolsicon toolsicon-check trust-good"></i> <div>{{::\'AUTHENTICATED_SENDER\' | translate }}</div> </div> <div class=item ng-show=$ctrl.messageData.message.trustInfo.ipWhitelisted> <i class="toolsicon toolsicon-check trust-good"></i> <div>IP {{::\'WHITELISTED\' | translate }}</div> </div> <div class="item faded" ng-show="$ctrl.messageData.message.trustInfo.dmarcStatus == 0"> <i class="toolsicon toolsicon-question_mark trust-none"></i> <div>{{::"DMARC" | translate}} {{::"NOT_AVAILABLE" | translate}}</div> </div> <div class=item ng-show="$ctrl.messageData.message.trustInfo.dmarcStatus == 1"> <i class="toolsicon toolsicon-close_emphasis trust-bad"></i> <div>{{::"DMARC" | translate}} {{::"FAILED" | translate}}</div> </div> <div class=item ng-show="$ctrl.messageData.message.trustInfo.dmarcStatus == 2"> <i class="toolsicon toolsicon-check trust-good"></i> <div>{{::"DMARC" | translate}} {{::"PASSED" | translate}}</div> </div> <div class="item faded" ng-show="$ctrl.messageData.message.trustInfo.spfStatus == 0"> <i class="toolsicon toolsicon-question_mark trust-none"></i> <div>{{::"SPF" | translate}} {{::"NOT_AVAILABLE" | translate}}</div> </div> <div class=item ng-show="$ctrl.messageData.message.trustInfo.spfStatus == 1"> <i class="toolsicon toolsicon-close_emphasis trust-bad"></i> <div>{{::"SPF" | translate}} {{::"FAILED" | translate}}</div> </div> <div class=item ng-show="$ctrl.messageData.message.trustInfo.spfStatus == 2"> <i class="toolsicon toolsicon-check trust-good"></i> <div>{{::"SPF" | translate}} {{::"PASSED" | translate}}</div> </div> <div class="item faded" ng-show="$ctrl.messageData.message.trustInfo.dkimStatus == 0"> <i class="toolsicon toolsicon-question_mark trust-none"></i> <div>{{::"DKIM" | translate}} {{::"NOT_AVAILABLE" | translate}}</div> </div> <div class=item ng-show="$ctrl.messageData.message.trustInfo.dkimStatus == 1"> <i class="toolsicon toolsicon-close_emphasis trust-bad"></i> <div>{{::"DKIM" | translate}} {{::"FAILED" | translate}}</div> </div> <div class=item ng-show="$ctrl.messageData.message.trustInfo.dkimStatus == 2"> <i class="toolsicon toolsicon-check trust-good"></i> <div>{{::"DKIM" | translate}} {{::"PASSED" | translate}}</div> </div> </div> </div> '); 11$templateCache.put('~/Interface/app/email/message-view-components/user-with-context-menu.component.html','<div class=email-user-context-menu> <div class=context-menu-name>{{$ctrl.email}}</div> <div class=st-menu-divider></div> <div class=context-menu-actions> <div ng-repeat="option in $ctrl.options" ng-class="{ \'st-menu-item\': !option.divider, \'st-menu-divider\': option.divider }">
11 <md-button ng-if=!option.divider ng-click="$ctrl.onOptionClicked($event, option)" ng-disabled=option.disabled>{{option.text}}</md-button> </div> </div> </div> '); 12$templateCache.put('~/Interface/app/email/message-view-components/user-with-context.component.html','<div class=emailUserContext ng-show=$ctrl.isActivated> <span ng-if="!$ctrl.email && !$ctrl.name" class=user-context-info-textonly>{{::"UNKNOWN_USER" | translate}}</span> <div ng-if="!$ctrl.email && $ctrl.name" class=user-context-info-textonly> {{$ctrl.fullDisplayAddressText}}<span class=user-context-semi ng-if=!$ctrl.isChat>; </span> <sender-trust-info style="display: inline-flex;" message-data=$ctrl.messageData ng-if="$ctrl.features.enableSenderVerification && $ctrl.showTrust && $ctrl.messageData"></sender-trust-info> </div> <div ng-if=$ctrl.email class=user-context-info> <div class=chat-status-icon ng-if="$ctrl.status && $ctrl.status !== \'room\'" ng-class="{\r\n \'status-available\': $ctrl.status == \'available\' || $ctrl.status == \'online\',\r\n \'status-away\': $ctrl.status == \'away\',\r\n \'status-dnd\': $ctrl.status == \'busy\' || $ctrl.status == \'dnd\',\r\n \'status-offline\': $ctrl.status == \'offline\',\r\n }"></div> <a ng-click=$ctrl.openContextMenu($event) class=context-display-address> {{$ctrl.fullDisplayAddressText}} </a> <sender-trust-info message-data=$ctrl.messageData ng-if="$ctrl.features.enableSenderVerification && $ctrl.showTrust && $ctrl.messageData"></sender-trust-info> <span class=sender-blocked ng-if=$ctrl.isBlockedSender> <i class="toolsicon toolsicon-gpp_bad"></i> <md-tooltip md-autohide>{{::\'BLOCKED_SENDER\'|translate}}</md-tooltip> </span> <span class=user-context-semi ng-if=!$ctrl.isChat>; </span> </div> </div> '); 13$templateCache.put('~/Interface/app/email/spool/view-spool.component.html','<action-bar class="inset-top inset-sides mailTopBar" ng-show="!$ctrl.messageDoesNotExist && !$ctrl.loading"> <md-button class="standard-icon md-primary reduced-size display-mobile-view" aria-label=back ng-click=$ctrl.closeWindow()> <i class="toolsicon toolsicon-keyboard_arrow_left"></i> </md-button> <md-button id=btnDelete translate-once=DELETE class=md-delete ng-click=$ctrl.deleteClicked()></md-button> <md-button class=md-secondary ng-click=$ctrl.viewSpoolRecipients($event)> <span>{{::\'SPOOL_VIEW_RECIPIENTS\' | translate}}</span> </md-button> <md-button class=md-secondary ng-click=$ctrl.onDownloadRaw()> <span translate-once=DOWNLOAD_EML></span> </md-button> <md-menu md-position-mode="target-right bottom"> <md-button ng-click=$mdMenu.open($event) class="md-secondary standard-icon" aria-label=menu> <md-tooltip md-autohide>{{::"ACTIONS" | translate }}</md-tooltip> <i class="toolsicon toolsicon-sm toolsicon-more_vert"></i> </md-button> <md-menu-content class="standard dropdown-no-scroll"> <md-menu-item ng-show=!$ctrl.isQuarantineMessage> <md-button ng-click="$ctrl.viewAsClicked(\'html\')"> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.mode === \'html\' ? \'\' : \'hidden\'}"></i> <span translate-once=VIEW_HTML></span> </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.viewAsClicked(\'text\')"> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.mode === \'text\' ? \'\' : \'hidden\'}"></i> <span translate-once=VIEW_TEXT></span> </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.viewAsClicked(\'header\')"> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.mode === \'header\' ? \'\' : \'hidden\'}"></i> <span translate-once=VIEW_HEADER></span> </md-button> </md-menu-item> <md-menu-item ng-show=!$ctrl.isQuarantineMessage> <md-button ng-click="$ctrl.viewAsClicked(\'hdr\')"> <i class="toolsicon toolsicon-check" ng-style="{\'visibility\': $ctrl.mode === \'hdr\' ? \'\' : \'hidden\'}"></i> <span translate-once=VIEW_HDR></span> </md-button> </md-menu-item> </md-menu-content> </md-menu> <div style="flex: 1 1 auto"></div> <div class=location-tag-quarantine ng-if=$ctrl.isQuarantineMessage>{{\'SPOOL_QUARANTINED_MESSAGE\' | translate}}</div> <div class=location-tag-spool ng-if=!$ctrl.isQuarantineMessage>{{\'SPOOL_MESSAGE\' | translate}}</div> </action-bar> <div id=mailMessageView class=mail-message-view> <div class=message-spinner-area ng-click=$event.stopPropagation() ng-if=$ctrl.spinner.isShown()> <md-progress-circular class=message-spinner md-mode=indeterminate md-diameter=60></md-progress-circular> </div> <div class=message-does-not-exist ng-show=$ctrl.messageDoesNotExist> <div layout=row layout-align="center center" class=no-items-to-show> <div class=new-item-page-button> <div class=new-item-icon-wrapper> <i class="new-item-icon toolsicon toolsicon-mail"></i> </div> <p class=new-item-section-title>{{::"MAIL_NO_LONGER_EXISTS" | translate}}</p> </div> </div> </div> <div class=emailMessage ng-class="{\'display-none\': $ctrl.messageDoesNotExist || $ctrl.loading}" ng-cloak> <div class=header-grid> <div class=header-subject>{{$ctrl.message.subject}}</div> <div class=header-indicators> <div class="indicator priority-icon" ng-if="$ctrl.message.importance == 1"> <i class="toolsicon toolsicon-priority_high"></i> <md-tooltip md-autoclose translate-once=HIGH_PRIORITY></md-tooltip> </div> </div> <div class=header-addresses> <div id=from class=mail-addresses-list> <span>{{ ::"FROM" | translate }}: {{$ctrl.message.from}}</span> </div> <div id=to class=mail-addresses-list ng-show="$ctrl.message.toAddresses && $ctrl.message.to"> <span>{{ ::"TO" | translate }}: {{$ctrl.message.to}}</span> </div> <div id=cc class=mail-addresses-list ng-show="$ctrl.message.ccAddresses && $ctrl.message.cc"> <span>{{ ::"CC" | translate }}: {{$ctrl.message.cc}}</span> </div> <div id=bcc class=mail-addresses-list ng-show="$ctrl.message.bccAddresses && $ctrl.message.bcc"> <span>{{ ::\'BCC\' | translate }}: {{$ctrl.message.bcc}}</span> </div> </div> <div class=header-date>{{ $ctrl.message.userDate | date:\'short\'}}</div> </div> <div class=message-notices> <div class=notice ng-if="$ctrl.message.phishingReasons && $ctrl.message.phishingReasons.length > 0" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span>{{ $ctrl.message.phishingReasons[0] | translate }}</span> </div> </div> <div class=notice ng-if=$ctrl.message.hadUnsafeCode ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=UNSAFE_CODE_REMOVED></span> </div> </div> <div class=notice ng-if=$ctrl.message.htmlIsStillUnsafe ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=UNSAFE_CODE_COULDNT_BE_REMOVED></span> </div> </div> <div class=notice ng-if=$ctrl.imagesBlocked ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=IMAGES_NOT_DISPLAYED></span> </div> </div> <div class=notice ng-if=$ctrl.cleansedFromAddress ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-warning"></i> <div class=message> <span translate-once=BAD_FROM_ADDRESS_DETECTED></span> </div> </div>
13 <div class=notice ng-if="!$ctrl.message.bypassRemoteContent && $ctrl.message.blockedContentOrigins.length > 0 && $ctrl.mode === \'html\'" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-image"></i> <div class=message> <span translate-once=MESSAGE_NOTICE_DOWNLOADIMAGES_HIDDEN></span> </div> </div> <div class=notice ng-if="$ctrl.activeTrackersCount > 0" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-impersonate"></i> <div class=message> <span>{{ \'MESSAGE_NOTICE_TRACKER_COUNT\' | reactPluralize : { count: $ctrl.activeTrackersCount } }}</span> <span>{{ \'MESSAGE_NOTICE_TRACKER_POST_TEXT\' | reactPluralize : { count: $ctrl.activeTrackersCount } }}</span> </div> </div> <div class=notice ng-if=$ctrl.message.attachments.length ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-attach_email"></i> <div class=message> <span translate-once=MESSAGE_NOTICE_ATTACHMENT_PRE_TEXT></span> <a tabindex=0 ng-click=$ctrl.showAttachmentsModal()> {{ \'MESSAGE_NOTICE_ATTACHMENT_COUNT\' | reactPluralize : { count: ($ctrl.message.attachments.length === 1 ? $ctrl.message.attachments.length : $ctrl.message.attachments.length - 1) } }} </a> <span>{{ \'MESSAGE_NOTICE_ATTACHMENT_POST_TEXT\' | reactPluralize : {count:$ctrl.message.attachments.length} }}</span> </div> </div> <div class=notice ng-if="$ctrl.mode !== \'html\'" ng-cloak> <i class="toolsicon toolsicon-fw toolsicon-content_copy"></i> <div class=message> <a tabindex=0 translate=MESSAGE_NOTICE_RAW_COPY ng-click=$ctrl.copyContentToClipboard()></a> </div> </div> </div> <div class=mail-message-info ng-class="{\'display-none\': !$ctrl.iFrameLoaded && !$ctrl.message.isCalendarMessage}"> <div class=mail-message-tab ng-cloak> <div id=messageCalData class="mail-meeting-invite emailMessageExtras" ng-if="$ctrl.message.isCalendarMessage && $ctrl.mode !== \'raw\' && $ctrl.mode !== \'header\' && $ctrl.mode !== \'hdr\'"> <pre><span>{{$ctrl.message.messagePlainText}}</span></pre> </div> <div id=messageViewFrameContainer ng-if="!$ctrl.message.isCalendarMessage || $ctrl.mode === \'raw\' || $ctrl.mode === \'header\' || $ctrl.mode === \'hdr\'"> <iframe scrolling=yes id=spoolViewFrame class=view-frame src=message-iframe frameborder=0 style="width: 100%;"></iframe> </div> </div> </div> </div> </div> '); 14$templateCache.put('~/Interface/app/shared/components/attached-file-resource-upload.component.html','<div id=attachedFileDropzoneWrapper> <res-uploader wait-to-upload=false display-mode=page-overlay max-files=$ctrl.maxFiles file-types={{$ctrl.fileTypes}} drop-control-selector={{$ctrl.dropControlSelector}} browse-control-selector={{$ctrl.browseControlSelector}} context=attached-file uploader-init=$ctrl.uploaderOnInit context-data=$ctrl.uploaderData() remove-file-after-upload=true file-added=$ctrl.uploaderOnPreUpload file-uploaded=$ctrl.uploaderOnUploaded file-canceled=$ctrl.uploaderOnCanceled file-failed=$ctrl.uploaderOnUploadFailure file-removed=$ctrl.uploaderOnFileRemoved></res-uploader> </div> ');}]);})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.