├── .base_branch ├── .circleci └── config.yml ├── .gitattributes ├── .gitignore ├── .shipyard.yml ├── LICENSE ├── README.md ├── app.js ├── design └── Test Plan │ ├── SmartPBX.pdf │ ├── SmartPBX.xlsx │ └── TestPlan.xlsx ├── i18n ├── de-DE.json ├── en-US.json ├── es-ES.json ├── fr-CA.json ├── fr-FR.json └── ru-RU.json ├── metadata ├── app.json ├── icon │ └── SmartPBX_app.png └── screenshots │ ├── smartpbx1.png │ ├── smartpbx2.png │ ├── smartpbx3.png │ ├── smartpbx4.png │ └── smartpbx5.png ├── style ├── app.scss └── static │ └── images │ └── xavier.jpg ├── submodules ├── callLogs │ ├── callLogs.css │ ├── callLogs.js │ └── views │ │ ├── cdrsList.html │ │ ├── detailsPopup.html │ │ ├── interactionLegs.html │ │ └── layout.html ├── devices │ ├── devices.js │ ├── devices.scss │ └── views │ │ ├── assign-to.html │ │ ├── devices-ata.html │ │ ├── devices-cellphone.html │ │ ├── devices-fax.html │ │ ├── devices-landline.html │ │ ├── devices-mobile.html │ │ ├── devices-sip_device.html │ │ ├── devices-sip_uri.html │ │ ├── devices-smartphone.html │ │ ├── devices-softphone.html │ │ ├── devices-teammate.html │ │ ├── layout.html │ │ └── row.html ├── featureCodes │ ├── featureCodes.css │ ├── featureCodes.js │ └── views │ │ └── layout.html ├── groups │ ├── groups.css │ ├── groups.js │ └── views │ │ ├── creation.html │ │ ├── extensions.html │ │ ├── feature-call_recording.html │ │ ├── feature-forward.html │ │ ├── feature-next_action.html │ │ ├── feature-prepend.html │ │ ├── feature-ringback.html │ │ ├── features.html │ │ ├── layout.html │ │ ├── members.html │ │ ├── name.html │ │ ├── newExtension.html │ │ ├── numbers.html │ │ ├── numbersItemRow.html │ │ └── row.html ├── myOffice │ ├── myOffice.js │ ├── myOffice.scss │ ├── partials │ │ └── _callerIdPopup.scss │ └── views │ │ ├── callerIdPopup.html │ │ ├── layout.html │ │ └── musicOnHoldPopup.html ├── numbers │ ├── numbers.css │ └── numbers.js ├── strategy │ ├── _strategy.scss │ ├── partials │ │ ├── _addOfficeHours.scss │ │ ├── _changeCallerIdPopup.scss │ │ ├── _customConferenceGreeting.scss │ │ ├── _menuPopup.scss │ │ ├── _number-actions.scss │ │ ├── _number-element.scss │ │ ├── _officeHolidaysManagement.scss │ │ ├── _strategy-calls.scss │ │ └── _strategy-confnum.scss │ ├── strategy.js │ └── views │ │ ├── addEditOfficeHolidays.html │ │ ├── addOfficeHours.html │ │ ├── callsTab.html │ │ ├── changeCallerIdPopup.html │ │ ├── customConferenceGreeting.html │ │ ├── layout.html │ │ ├── menuLine.html │ │ ├── menuPopup.html │ │ ├── popupEditFaxbox.html │ │ ├── popupRemoveFeatures.html │ │ ├── strategy-calls.html │ │ ├── strategy-confnum.html │ │ ├── strategy-faxingnum.html │ │ └── strategy-numbers.html ├── strategyHolidays │ ├── _strategyHolidays.scss │ ├── strategyHolidays.js │ └── views │ │ ├── deleteHolidayDialog.html │ │ ├── importNationalHolidaysList.html │ │ ├── includeNationalHolidays.html │ │ ├── layout.html │ │ └── listing.html ├── strategyHours │ ├── _strategyHours.scss │ ├── strategyHours.js │ └── views │ │ ├── layout.html │ │ └── listing.html ├── users │ ├── users.js │ ├── users.scss │ └── views │ │ ├── changePassword.html │ │ ├── changePin.html │ │ ├── changePresenceIDPopup.html │ │ ├── creation.html │ │ ├── devices.html │ │ ├── extensions.html │ │ ├── feature-call_forward.html │ │ ├── feature-call_recording.html │ │ ├── feature-caller_id.html │ │ ├── feature-conferencing.html │ │ ├── feature-do_not_disturb.html │ │ ├── feature-faxing.html │ │ ├── feature-find_me_follow_me.html │ │ ├── feature-hotdesk.html │ │ ├── feature-music_on_hold.html │ │ ├── feature-vmbox.html │ │ ├── features.html │ │ ├── layout.html │ │ ├── licensed-roles.html │ │ ├── name.html │ │ ├── newExtension.html │ │ ├── numbers.html │ │ ├── numbersItemRow.html │ │ ├── row.html │ │ └── rowSpareDevice.html └── vmboxes │ ├── views │ ├── edit.html │ ├── emailRow.html │ ├── layout.html │ └── row.html │ ├── vmboxes.css │ └── vmboxes.js └── views └── app.html /.base_branch: -------------------------------------------------------------------------------- 1 | origin/master 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.todo 2 | *.sublime-project 3 | *.sublime-workspace 4 | .DS_Store 5 | *.directory 6 | -------------------------------------------------------------------------------- /.shipyard.yml: -------------------------------------------------------------------------------- 1 | name: monster-ui-application-voip 2 | custom_files: null 3 | exposure: private 4 | base_branch: origin/master 5 | base_core: monster-ui 6 | template: monster-ui-application.spec.tmpl 7 | package: 8 | centos7: 9 | name: monster-ui-application-voip 10 | app_name: voip 11 | license: 'MPL 2.0' 12 | group: Productivity/Telephony 13 | url: 'http://www.2600hz.org/' 14 | vendor: 2600Hz 15 | rockylinux8: 16 | name: monster-ui-application-voip 17 | app_name: voip 18 | license: 'MPL 2.0' 19 | group: Productivity/Telephony 20 | url: 'http://www.2600hz.org/' 21 | vendor: 2600Hz 22 | dist: .el8 23 | rockylinux9: 24 | name: monster-ui-application-voip 25 | app_name: voip 26 | license: 'MPL 2.0' 27 | group: Productivity/Telephony 28 | url: 'http://www.2600hz.org/' 29 | vendor: 2600Hz 30 | dist: .el9 31 | metapackage: 32 | - 33 | name: meta-monster-ui 34 | branch: master 35 | package: monster-ui-application-voip 36 | type: required 37 | dependencies: null 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # monster-ui-voip 2 | 3 | This is a sub application of [2600hz/monster-ui](https://github.com/2600hz/monster-ui). 4 | 5 | Users should clone into `/monster-ui/src/apps/` such as: 6 | ``` 7 | $ cd monster-ui/src/apps/ 8 | $ git clone https://github.com/2600hz/monster-ui-voip.git voip 9 | ``` 10 | Then the gulp workflow for 2600hz/monster-ui applies. 11 | -------------------------------------------------------------------------------- /design/Test Plan/SmartPBX.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/design/Test Plan/SmartPBX.pdf -------------------------------------------------------------------------------- /design/Test Plan/SmartPBX.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/design/Test Plan/SmartPBX.xlsx -------------------------------------------------------------------------------- /design/Test Plan/TestPlan.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/design/Test Plan/TestPlan.xlsx -------------------------------------------------------------------------------- /metadata/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "voip", 3 | "i18n": { 4 | "de-DE": { 5 | "label": "Einstellungen", 6 | "description": "Eine gehostete Telefonanlage (PBX) gibt Ihnen die volle Kontrolle beim Einrichten und Verwalten einer TK-Anlage für Ihr Büro.", 7 | "extended_description": "Die SmartPBX-App kombiniert die gängigsten PBX-Funktionen mit einer übersichtlichen und intuitiven Benutzeroberfläche. Die App enthält eine erweiterte Auswahl an Funktionen (wie individuelle Fax-zu-E-Mail-Boxen, Anrufweiterleitung und Hotdesking), die leicht zu verstehen und zu bedienen sind. Ein einfaches Dashboard bietet einen übersichtlichen und umfassenden Überblick über Systemkonfiguration und -status. In diesem Dashboard können Sie alle Benutzer und Geräte überprüfen sowie Konferenzbrücken und Telefonnummern zuweisen. Mit maßgeschneiderten Ansagen und Anrufumleitungen verleihen Sie Ihrem Unternehmen ein professionelles Image. Legen Sie Funktionen mithilfe einer übersichtlichen und intuitiven Benutzeroberfläche fest. Richten Sie eine geschäftliche Hauptnummer ein und nutzen Sie den vorgefertigten Virtual Receptionist, um eingehende Anrufe zu managen.", 8 | "features": [ 9 | "Callflows", 10 | "Uneingeschränkt viele Nebenstellen", 11 | "Auto-Provisioner für Telefone", 12 | "Konferenzschaltung", 13 | "Funktionscodes", 14 | "Geräte für alle Benutzer verwalten", 15 | "Weiterleitung je nach der Uhrzeit", 16 | "Anrufliste", 17 | "Alle Standardfunktionen für den Umgang mit Anrufen", 18 | "Verzeichnis", 19 | "Voicemailboxen" 20 | ] 21 | }, 22 | "en-US": { 23 | "label": "SmartPBX", 24 | "description": "Hosted PBX gives you full control to set up and manage office phone system.", 25 | "extended_description": "The SmartPBX app combines the most common PBX functionality with a beautiful user interface and an intuitive experience. An advanced set of features such as individual fax-to-email boxes, call forwarding and hot desking are easy to understand and utilize. A simple dashboard provides a quick but comprehensive overview of system configuration and status. Within this dashboard, review total users and devices, assign conference bridges and phone numbers. Create customized greetings and call routes to give businesses that professional touch. Set functionality with a beautiful user interface and an intuitive experience. Set up a main business phone number and utilize the pre-built Virtual Receptionist to handle inbound calls.", 26 | "features": [ 27 | "Call flows", 28 | "Unlimited extensions", 29 | "Phone auto-provisioner", 30 | "Conferencing", 31 | "Feature codes", 32 | "Manage devices for all users", 33 | "Time of Day Routing", 34 | "Call History", 35 | "All standard call handling features", 36 | "Directory", 37 | "Voicemail boxes" 38 | ] 39 | }, 40 | "ru-RU": { 41 | "label": "Интелектуальная АТС", 42 | "description": "Облачная АТС предоставляет Вам полный контроль в вопросах установки и управления офисной телефонной станцией.", 43 | "extended_description": "Это полноценый веб-пртал позволящий Вам отображать и управлять вашей многофункционнальной АТС без какого-либо оборудования. Управлять вашими пользователми, номерами, устройствами, голосовыми почтовыми ящиками, конференц-комнатами всего лишь несколькими движениями мыши.", 44 | "features": [ 45 | "Схемы обработки вызова", 46 | "Неограниценное количество внутрених номеров", 47 | "Автоконфигурирование телефонов", 48 | "Конференц-комнаты", 49 | "Коды дополнительных видов обслуживания", 50 | "Управление устройствами для всех пользователей", 51 | "Маршрутизация звонков в зависимости от времени суток", 52 | "Детализация звонков", 53 | "Все стандартные функции обработки вызова", 54 | "Телефонный справочник", 55 | "Голосовые почтовые ящики" 56 | ] 57 | } 58 | }, 59 | "tags": [ 60 | "admin" 61 | ], 62 | "icon": "SmartPBX_app.png", 63 | "api_url": "http://10.26.0.41:8000/v2", 64 | "author": "2600Hz", 65 | "version": "1.0", 66 | "license": "-", 67 | "price": 0, 68 | "screenshots": [ 69 | "smartpbx1.png", 70 | "smartpbx2.png", 71 | "smartpbx3.png", 72 | "smartpbx4.png", 73 | "smartpbx5.png" 74 | ], 75 | "urls": { 76 | "documentation": "{documentation_url}", 77 | "howto": "{howto_video_url}" 78 | }, 79 | "phase": "gold", 80 | "pvt_type": "app" 81 | } 82 | -------------------------------------------------------------------------------- /metadata/icon/SmartPBX_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/metadata/icon/SmartPBX_app.png -------------------------------------------------------------------------------- /metadata/screenshots/smartpbx1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/metadata/screenshots/smartpbx1.png -------------------------------------------------------------------------------- /metadata/screenshots/smartpbx2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/metadata/screenshots/smartpbx2.png -------------------------------------------------------------------------------- /metadata/screenshots/smartpbx3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/metadata/screenshots/smartpbx3.png -------------------------------------------------------------------------------- /metadata/screenshots/smartpbx4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/metadata/screenshots/smartpbx4.png -------------------------------------------------------------------------------- /metadata/screenshots/smartpbx5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/metadata/screenshots/smartpbx5.png -------------------------------------------------------------------------------- /style/app.scss: -------------------------------------------------------------------------------- 1 | @import '../../../css/partials/base'; 2 | 3 | @import url('../submodules/devices/devices.css'); 4 | @import url('../submodules/groups/groups.css'); 5 | @import url('../submodules/myOffice/myOffice.css'); 6 | @import url('../submodules/numbers/numbers.css'); 7 | @import url('../submodules/callLogs/callLogs.css'); 8 | @import url('../submodules/users/users.css'); 9 | @import url('../submodules/featureCodes/featureCodes.css'); 10 | @import url('../submodules/vmboxes/vmboxes.css'); 11 | 12 | @import '../submodules/strategy/partials/addOfficeHours.scss'; 13 | @import '../submodules/strategy/partials/_officeHolidaysManagement.scss'; 14 | @import '../submodules/strategy/partials/menuPopup.scss'; 15 | @import '../submodules/strategy/partials/changeCallerIdPopup.scss'; 16 | @import '../submodules/strategy/partials/customConferenceGreeting.scss'; 17 | 18 | #voip_container { 19 | .left-menu { 20 | #myOffice { 21 | margin-bottom: 20px; 22 | } 23 | 24 | & > div { 25 | margin-top: 10px; 26 | } 27 | } 28 | 29 | .right-content { 30 | @import "../submodules/strategy/_strategy.scss"; 31 | } 32 | } 33 | 34 | #voip_container_overlay { 35 | position: fixed; 36 | top: 0; 37 | right: 0; 38 | width: 100%; 39 | height: 100%; 40 | background-color: #000; 41 | opacity: .3; 42 | } 43 | -------------------------------------------------------------------------------- /style/static/images/xavier.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/style/static/images/xavier.jpg -------------------------------------------------------------------------------- /submodules/callLogs/callLogs.css: -------------------------------------------------------------------------------- 1 | #call_logs_container { 2 | min-width: 660px; 3 | } 4 | 5 | #call_logs_container .call-logs-header .title-div { 6 | font-size: 24px; 7 | height: 30px; 8 | line-height: 30px; 9 | margin-bottom: 10px; 10 | } 11 | #call_logs_container .call-logs-header .search-div input.search-query { 12 | width: 140px; 13 | } 14 | 15 | #call_logs_container .sub-ranges { 16 | margin-top: 5px; 17 | } 18 | 19 | #call_logs_container .sub-ranges > * { 20 | display: inline-block; 21 | } 22 | 23 | #call_logs_container .fixed-ranges { 24 | width: 100%; 25 | height: 35px; 26 | margin-top: 20px; 27 | } 28 | 29 | #call_logs_container .fixed-ranges .btn-toolbar { 30 | margin-top: 0; 31 | } 32 | 33 | #call_logs_container .fixed-ranges-date { 34 | margin-top: 10px; 35 | margin-right: 30px; 36 | } 37 | 38 | #call_logs_container .fixed-ranges-date .highlight-date { 39 | color: #22a5ff; 40 | font-weight: bold; 41 | margin: 0 5px; 42 | } 43 | 44 | #call_logs_container .custom-range { 45 | display: none; 46 | margin-right: 30px; 47 | } 48 | 49 | #call_logs_container .custom-range.active { 50 | display: inline-block; 51 | } 52 | 53 | #call_logs_container .custom-range > * { 54 | margin: 0 10px 0 0; 55 | vertical-align: middle; 56 | } 57 | 58 | #call_logs_container .custom-range > span { 59 | margin-right: 5px; 60 | } 61 | 62 | #call_logs_container .custom-range input.date-filter { 63 | width: 80px; 64 | } 65 | 66 | #call_logs_container .call-logs-content { 67 | margin-top: 12px; 68 | } 69 | 70 | #call_logs_container .call-logs-grid { 71 | background-color: #f6f6f6; 72 | border-bottom: solid 2px #ddd; 73 | border-radius: 2px; 74 | max-height: 500px; 75 | overflow: auto; 76 | } 77 | 78 | #call_logs_container .grid-row-group:not(:last-of-type) { 79 | border-bottom: solid 1px #e3e3e3; 80 | } 81 | #call_logs_container .grid-row-group:first-of-type { 82 | border-bottom: solid 1px #ddd; 83 | } 84 | #call_logs_container .grid-row-group .grid-row:not(:first-of-type) { 85 | border-top: solid 1px #e3e3e3; 86 | } 87 | #call_logs_container .grid-row-group:last-of-type:not(.open) .main-leg { 88 | border-bottom-left-radius: 4px; 89 | border-bottom-right-radius: 4px; 90 | } 91 | #call_logs_container .grid-row-group.open:last-of-type .extra-leg:last-of-type { 92 | border-bottom-left-radius: 4px; 93 | border-bottom-right-radius: 4px; 94 | } 95 | #call_logs_container .grid-row.header-row { 96 | background-color: #22a5ff; 97 | color: #fff; 98 | text-shadow: 1px 1px 1px #666666; 99 | font-weight: 600; 100 | border-top-left-radius: 4px; 101 | border-top-right-radius: 4px; 102 | } 103 | #call_logs_container .grid-row:not(.header-row) { 104 | font-size: 13px; 105 | } 106 | #call_logs_container .grid-row:not(.header-row) > .grid-cell:first-child { 107 | border-left: solid 2px #ddd; 108 | } 109 | #call_logs_container .grid-row:not(.header-row) > .grid-cell:last-child { 110 | border-right: solid 2px #ddd; 111 | } 112 | #call_logs_container .grid-row.no-match { 113 | display: none; 114 | } 115 | #call_logs_container .grid-row-group:not(.open) .grid-row.main-leg > .grid-cell:first-child { 116 | border-left: solid 2px #22a5ff; 117 | } 118 | #call_logs_container .grid-row-group.open .grid-row > .grid-cell:first-child { 119 | border-left: solid 2px #44cc44; 120 | } 121 | #call_logs_container .grid-row.main-leg:hover { 122 | background-color: #eee; 123 | cursor: pointer; 124 | } 125 | #call_logs_container .grid-row-group .extra-legs { 126 | display: none; 127 | } 128 | 129 | #call_logs_container .grid-row-group .extra-legs .loading-container { 130 | background: #fff; 131 | border-left: 1px solid #ddd; 132 | border-top: 1px solid #ddd; 133 | padding: 15px; 134 | text-align: center; 135 | } 136 | 137 | #call_logs_container .grid-row-group .extra-legs .loading-container i { 138 | margin-left: 10px; 139 | } 140 | 141 | #call_logs_container .grid-row.extra-leg { 142 | background-color: #fcfcfc; 143 | border-top: solid 1px #e3e3e3; 144 | } 145 | 146 | #call_logs_container .grid-cell { 147 | display: inline-block; 148 | padding: 10px 5px; 149 | box-sizing: border-box; 150 | -moz-box-sizing: border-box; 151 | -webkit-box-sizing: border-box; 152 | text-align: center; 153 | vertical-align: bottom; 154 | } 155 | #call_logs_container .grid-cell.high-cell { 156 | padding-top: 0; 157 | padding-bottom: 0; 158 | } 159 | #call_logs_container .grid-cell:not(:first-of-type) { 160 | border-left: solid 1px #e3e3e3; 161 | } 162 | #call_logs_container .grid-cell.direction { 163 | width: 4%; 164 | } 165 | #call_logs_container .grid-cell.datetime { 166 | width: 12%; 167 | } 168 | #call_logs_container .grid-cell.from { 169 | width: 25%; 170 | } 171 | #call_logs_container .grid-cell.to { 172 | width: 25%; 173 | } 174 | #call_logs_container .grid-cell.duration { 175 | width: 9%; 176 | } 177 | #call_logs_container .grid-cell.hangup { 178 | width: 15%; 179 | } 180 | #call_logs_container .grid-cell.full-width { 181 | width: 100%; 182 | } 183 | #call_logs_container .grid-row:not(.header-row) .grid-cell.hangup .cause-title { 184 | text-transform: capitalize; 185 | font-size: 12px; 186 | font-style: italic; 187 | } 188 | #call_logs_container .grid-cell.actions { 189 | width: 10%; 190 | } 191 | #call_logs_container .grid-cell.actions i:hover { 192 | color: #22a5ff; 193 | cursor: pointer; 194 | } 195 | 196 | #call_logs_container .sub-cell { 197 | height: 20px; 198 | overflow: hidden; 199 | text-overflow: ellipsis; 200 | } 201 | #call_logs_container .sub-cell.single-cell { 202 | height: 40px; 203 | line-height: 40px; 204 | } 205 | 206 | #call_logs_container .hangup .sub-cell.single-cell { 207 | display: flex; 208 | justify-content: center; 209 | align-items: center; 210 | line-height: normal; 211 | } 212 | 213 | #call_logs_container .call-logs-loader { 214 | margin-top: 10px; 215 | padding: 10px; 216 | border: solid 1px #999; 217 | border-radius: 2px; 218 | text-align: center; 219 | background-color: #eaeaea; 220 | } 221 | 222 | #call_logs_container .call-logs-loader .loader-message { 223 | cursor: pointer; 224 | } 225 | 226 | #call_logs_container .call-logs-loader.loading .loader-message { 227 | display: none; 228 | } 229 | 230 | #call_logs_container .call-logs-loader:not(.loading) .loading-message { 231 | display: none; 232 | } 233 | 234 | #call_logs_container .call-logs-loader .loading-message i { 235 | margin-right: 10px; 236 | } 237 | 238 | /******************** Popup *********************/ 239 | 240 | #call_logs_details_popup { 241 | padding: 20px; 242 | max-width: 700px; 243 | max-height: 500px; 244 | overflow: auto; 245 | } 246 | 247 | /********************** COLORBLIND SETTINGS **********************/ 248 | body.colorblind #call_logs_container .grid-row:not(.header-row) .grid-cell.direction { 249 | background-color: #999; 250 | } 251 | body.colorblind #call_logs_container .grid-cell.direction .monster-green { 252 | color: #EEE !important; 253 | } 254 | body.colorblind #call_logs_container .grid-cell.direction .monster-orange { 255 | color: #222 !important; 256 | } 257 | -------------------------------------------------------------------------------- /submodules/callLogs/views/cdrsList.html: -------------------------------------------------------------------------------- 1 | {{#each cdrs}} 2 |
3 |
4 |
5 |
6 | {{#if this.isOutboundCall}} 7 | 8 | {{else}} 9 | 10 | {{/if}} 11 |
12 |
13 |
14 |
{{this.date}}
15 |
{{this.time}}
16 |
17 |
18 | {{#if this.fromName}} 19 |
{{formatPhoneNumber this.fromNumber}}
20 |
{{this.fromName}}
21 | {{else}} 22 |
{{formatPhoneNumber this.fromNumber}}
23 | {{/if}} 24 |
25 |
26 | {{#if this.toName}} 27 |
{{formatPhoneNumber this.toNumber}}
28 |
{{this.toName}}
29 | {{else}} 30 |
{{formatPhoneNumber this.toNumber}}
31 | {{/if}} 32 |
33 |
34 |
35 | {{this.duration}} 36 |
37 |
38 |
39 |
40 | {{this.hangupCause}} 41 |
42 |
43 |
44 |
45 | {{#if ../showReport}}{{/if}} 46 |
47 |
48 |
49 |
50 |
51 | {{@root.i18n.callLogs.loading}} 52 |
53 |
54 |
55 | {{/each}} -------------------------------------------------------------------------------- /submodules/callLogs/views/detailsPopup.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
-------------------------------------------------------------------------------- /submodules/callLogs/views/interactionLegs.html: -------------------------------------------------------------------------------- 1 | {{#each cdrs}} 2 |
3 |
4 |
5 |
6 |
7 |
{{this.date}}
8 |
{{this.time}}
9 |
10 |
11 | {{#if this.fromName}} 12 |
{{formatPhoneNumber this.fromNumber}}
13 |
{{this.fromName}}
14 | {{else}} 15 |
{{formatPhoneNumber this.fromNumber}}
16 | {{/if}} 17 | {{#if formatted.fromDeviceName}} 18 |
{{formatted.fromDeviceName}}
19 | {{/if}} 20 |
21 |
22 | {{#if this.toName}} 23 |
{{formatPhoneNumber this.toNumber}}
24 |
{{this.toName}}
25 | {{else}} 26 |
{{formatPhoneNumber this.toNumber}}
27 | {{/if}} 28 | {{#if formatted.toDeviceName}} 29 |
{{formatted.toDeviceName}}
30 | {{/if}} 31 |
32 |
33 |
34 | {{this.duration}} 35 |
36 |
37 |
38 |
39 | {{this.hangupCause}} 40 |
41 |
42 |
43 |
44 | 45 |
46 |
47 |
48 | {{/each}} -------------------------------------------------------------------------------- /submodules/callLogs/views/layout.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{i18n.callLogs.title}} 5 |
6 | 7 |
8 |
9 |
10 | 11 | 12 | 13 | 14 |
15 |
16 | 17 |
18 | 19 | 20 | 21 | 22 |
23 |
24 | 25 |
26 |
27 | {{i18n.startDate}} 28 | 29 | {{i18n.endDate}} 30 | 31 | 32 |
33 | 34 | {{#if showFilteredDates}} 35 |
36 | {{ i18n.callLogs.callsFrom }} {{ toFriendlyDate fromDate "date"}} {{ i18n.callLogs.callsTo }} {{ toFriendlyDate toDate "date" }} 37 |
38 | {{/if}} 39 | 40 | {{i18n.download}} 41 | 42 |
43 |
44 | 45 |
46 |
47 |
48 |
49 |
50 |
51 | 52 |
53 |
54 | 55 |
56 |
57 |
58 |
{{i18n.callLogs.gridHeaders.dateTime1}}
59 |
{{timezone}}
60 |
61 |
62 |
{{i18n.callLogs.gridHeaders.from}}
63 |
64 |
65 |
{{i18n.callLogs.gridHeaders.to}}
66 |
67 |
68 |
{{i18n.callLogs.gridHeaders.duration1}}
69 |
{{i18n.callLogs.gridHeaders.duration2}}
70 |
71 |
72 |
{{i18n.callLogs.gridHeaders.hangup1}}
73 |
{{i18n.callLogs.gridHeaders.hangup2}}
74 |
75 |
76 |
{{i18n.callLogs.gridHeaders.actions}}
77 |
78 |
79 |
80 |
81 |
{{i18n.callLogs.noSearchMatch}}
82 |
83 |
84 |
85 | {{#unless cdrs}} 86 |
87 |
{{i18n.table.empty}}
88 |
89 | {{/unless}} 90 |
91 |
92 |
93 |
{{i18n.callLogs.loaderMessage}}
94 |
{{i18n.callLogs.loadingMessage}}
95 |
96 | 97 | 98 |
99 |
100 | -------------------------------------------------------------------------------- /submodules/devices/views/assign-to.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 16 |
17 |
18 | -------------------------------------------------------------------------------- /submodules/devices/views/devices-ata.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 | 8 | {{#if id}} 9 |
{{name}}
10 | {{else}} 11 |
{{i18n.devices.ata.new}}
12 | {{/if}} 13 |
14 | 15 | 52 |
53 | 54 |
55 |
56 |
57 |
58 | 59 |
60 | 61 |
62 |
63 | 64 | {{#isFeatureAvailable "smartpbx.devices.settings.sip.manage"}} 65 |
66 | 67 |
68 | 69 |
70 |
71 | 72 |
73 | 74 |
75 | 76 |
77 |
78 | 79 |
80 | 81 |
82 | {{ extra.sip.realm }} 83 |
84 |
85 | {{/isFeatureAvailable}} 86 |
87 | 88 |
89 |
90 | {{ i18n.devices.popupSettings.audio.sectionTitle }} 91 |
92 | 93 |
94 | 95 | {{ i18n.devices.popupSettings.dragAndDrop }} 96 |
97 | 98 |
99 |
100 | 101 |
102 |
103 |
104 | 105 | 106 | 107 |
108 |
109 | {{ i18n.devices.popupSettings.restrictions.sectionTitle }} 110 |
111 |
112 | {{#each extra.restrictions}} 113 |
114 | 119 |
120 |
121 | {{#monsterSwitch}} 122 | 123 | {{/monsterSwitch}} 124 |
125 | 126 |
127 |
128 | {{/each}} 129 |
130 |
131 |
132 | {{#if extra.hasDisabledRestrictions}} 133 | {{#monsterText 'info' 'disabled-restrictions-info'}} 134 |

{{ i18n.devices.popupSettings.restrictions.disabledRestrictionsInfo }}

135 | {{/monsterText}} 136 | {{/if}} 137 |
138 |
139 | 140 | {{#if showEmergencyCallerId}} 141 |
142 |
143 | {{ i18n.devices.popupSettings.callerId.sectionTitle }} 144 |
145 | 146 | {{#if extra.hasE911Numbers}} 147 |
148 | 149 |
150 |
151 | {{else}} 152 | {{#monsterText 'error'}} 153 | {{ i18n.devices.popupSettings.callerId.noE911Numbers }} 154 | {{/monsterText}} 155 | {{/if}} 156 |
157 | {{/if}} 158 |
159 |
160 | 161 |
162 | {{#if id}} 163 | {{ i18n.devices.deleteDevice }} 164 | {{/if}} 165 | 166 |
167 | {{ i18n.cancel }} 168 | 175 |
176 |
177 |
178 | -------------------------------------------------------------------------------- /submodules/devices/views/devices-cellphone.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 | 8 | {{#if id}} 9 |
{{name}}
10 | {{else}} 11 |
{{i18n.devices.cellphone.new}}
12 | {{/if}} 13 |
14 | 15 | 36 |
37 | 38 |
39 |
40 |
41 |
42 | 43 |
44 | 46 |
47 |
48 |
49 | 50 |
51 | 52 |
53 |
54 |
55 | 56 |
57 |
58 | 59 |
60 | {{#monsterCheckbox i18n.devices.cellphone.requireKeypress }} 61 | 62 | {{/monsterCheckbox}} 63 |
64 |
65 |
66 | 67 |
68 | {{#monsterCheckbox i18n.devices.cellphone.keepCallerId }} 69 | 70 | {{/monsterCheckbox}} 71 |
72 |
73 |
74 | 75 |
76 | {{#monsterCheckbox i18n.devices.cellphone.hideContactList }} 77 | 78 | {{/monsterCheckbox}} 79 |
80 |
81 |
82 |
83 |
84 | 85 |
86 | {{#if id}} 87 | {{ i18n.devices.deleteDevice }} 88 | {{/if}} 89 | 90 |
91 | {{ i18n.cancel }} 92 | 99 |
100 |
101 |
102 | -------------------------------------------------------------------------------- /submodules/devices/views/devices-landline.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 | 8 | {{#if id}} 9 |
{{name}}
10 | {{else}} 11 |
{{i18n.devices.landline.new}}
12 | {{/if}} 13 |
14 | 15 | 36 |
37 | 38 |
39 |
40 |
41 |
42 | 43 |
44 | 46 |
47 |
48 |
49 | 50 |
51 | 52 |
53 |
54 |
55 | 56 |
57 |
58 | 59 |
60 | 65 |
66 |
67 |
68 | 69 |
70 | 75 |
76 |
77 |
78 | 79 |
80 | 85 |
86 |
87 |
88 |
89 |
90 | 91 |
92 | {{#if id}} 93 | {{ i18n.devices.deleteDevice }} 94 | {{/if}} 95 | 96 |
97 | {{ i18n.cancel }} 98 | 105 |
106 |
107 |
108 | -------------------------------------------------------------------------------- /submodules/devices/views/devices-sip_uri.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 | 8 | {{#if id}} 9 |
{{name}}
10 | {{else}} 11 |
{{i18n.devices.sip_uri.new}}
12 | {{/if}} 13 |
14 | 15 | 50 |
51 | 52 |
53 |
54 |
55 |
56 | 57 |
58 | 60 |
61 |
62 |
63 | 64 |
65 | 66 |
67 |
68 |
69 | 70 |
71 |
72 | {{ i18n.devices.popupSettings.audio.sectionTitle }} 73 |
74 | 75 |
76 | 77 | {{ i18n.devices.popupSettings.dragAndDrop }} 78 |
79 | 80 |
81 |
82 |
83 | 84 |
85 |
86 | {{ i18n.devices.popupSettings.video.sectionTitle }} 87 |
88 |
89 | 90 | {{ i18n.devices.popupSettings.dragAndDrop }} 91 |
92 | 93 |
94 |
95 |
96 | 97 |
98 |
99 | 100 |
101 | 106 |
107 |
108 |
109 |
110 |
111 | 112 |
113 | {{#if id}} 114 | {{ i18n.devices.deleteDevice }} 115 | {{/if}} 116 | 117 |
118 | {{ i18n.cancel }} 119 | 126 |
127 |
128 |
129 | -------------------------------------------------------------------------------- /submodules/devices/views/layout.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ i18n.devices.title }} 5 | {{countDevices}} 6 |
7 | 8 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 |
34 |
35 |
{{ i18n.devices.titleGrid.type }}
36 |
{{ i18n.devices.titleGrid.modelMacAddress }}
37 |
{{ i18n.devices.titleGrid.user }}
38 |
{{ i18n.devices.titleGrid.enable }}
39 |
{{ i18n.devices.titleGrid.edit }}
40 |
41 |
42 |
43 | {{ i18n.devices.noMatchingDevices }} 44 |
45 |
46 | {{ i18n.devices.noDevicesConfigured }} 47 |
48 |
49 |
50 |
51 | -------------------------------------------------------------------------------- /submodules/devices/views/row.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{telicon friendlyIconClass}} 6 |
7 |
8 | {{friendlyType}} 9 |
10 |
11 |
12 |
{{name}}
13 |
{{macAddress}}
14 |
15 |
16 | {{userName}} 17 |
18 |
19 |
20 | {{#monsterSwitch}} 21 | 22 | {{/monsterSwitch}} 23 |
24 |
25 |
26 | {{#if isEditable}} 27 | 28 | {{else}} 29 | 30 | {{/if}} 31 |
32 |
33 |
34 | -------------------------------------------------------------------------------- /submodules/featureCodes/featureCodes.css: -------------------------------------------------------------------------------- 1 | #feature_codes_container .feature-codes-header { 2 | font-size: 24px; 3 | line-height: 60px; 4 | margin-bottom: 22px; 5 | } 6 | 7 | #feature_codes_container .feature-codes-content { 8 | padding: 20px; 9 | border: 1px solid #dcdcdc; 10 | border-radius: 2px; 11 | background-color: #f6f6f6; 12 | background-image: -webkit-linear-gradient(top, hsl(0, 0%, 98%) 0%, hsl(0, 0%, 95%) 100%); 13 | background-image: -moz-linear-gradient(top, hsl(0, 0%, 98%) 0%, hsl(0, 0%, 95%) 100%); 14 | background-image: -ms-linear-gradient(top, hsl(0, 0%, 98%) 0%, hsl(0, 0%, 95%) 100%); 15 | background-image: -o-linear-gradient(top, hsl(0, 0%, 98%) 0%, hsl(0, 0%, 95%) 100%); 16 | background-image: linear-gradient(top, hsl(0, 0%, 98%) 0%, hsl(0, 0%, 95%) 100%); 17 | color: #555; 18 | } 19 | 20 | #feature_codes_container .feature-codes-content .feature-codes-category:not(:first-child) { 21 | margin-top: 20px; 22 | } 23 | 24 | #feature_codes_container .feature-codes-content .category-header { 25 | font-size: 18px; 26 | margin: 10px; 27 | font-weight: 600; 28 | } 29 | 30 | #feature_codes_container .feature-codes-content .feature-code-line:not(:first-child) { 31 | margin-top: 10px; 32 | } 33 | #feature_codes_container .feature-codes-content .feature-code-line { 34 | border-top: solid 1px transparent; 35 | border-bottom: solid 1px transparent; 36 | } 37 | #feature_codes_container .feature-codes-content .feature-code-line:hover { 38 | border-bottom-color: #dcdcdc; 39 | border-top-color: #dcdcdc; 40 | } 41 | 42 | #feature_codes_container .feature-codes-content .feature-code-line div { 43 | display: inline-block; 44 | vertical-align: middle; 45 | } 46 | 47 | #feature_codes_container .feature-codes-content .feature-code-label { 48 | width: 200px; 49 | text-align: right; 50 | margin-right: 20px; 51 | padding-right: 25px; 52 | position: relative; 53 | } 54 | 55 | #feature_codes_container .feature-codes-content .feature-code-label i { 56 | position: absolute; 57 | right: 0; 58 | } 59 | 60 | #feature_codes_container .feature-code { 61 | font-weight: bold; 62 | font-size: 18px; 63 | letter-spacing: 2px; 64 | } 65 | 66 | #feature_codes_container .no-feature-codes .message { 67 | margin-bottom: 10px; 68 | } 69 | #feature_codes_container .no-feature-codes .main-number-link { 70 | cursor: pointer; 71 | } 72 | -------------------------------------------------------------------------------- /submodules/featureCodes/featureCodes.js: -------------------------------------------------------------------------------- 1 | define(function(require) { 2 | var $ = require('jquery'), 3 | _ = require('lodash'), 4 | monster = require('monster'), 5 | chart = require('chart'); 6 | 7 | var app = { 8 | requests: { 9 | }, 10 | 11 | subscribe: { 12 | 'voip.featureCodes.render': 'featureCodesRender' 13 | }, 14 | 15 | categories: { 16 | qubicle: [ 17 | 'qubicle login', 18 | 'qubicle set ready', 19 | 'qubicle set away', 20 | 'qubicle logout' 21 | ], 22 | call_forward: [ 23 | 'call_forward[action=activate]', 24 | 'call_forward[action=deactivate]', 25 | 'call_forward[action=toggle]', 26 | 'call_forward[action=update]', 27 | 'call_forward[action=on_busy_enable]', 28 | 'call_forward[action=on_busy_disable]', 29 | 'call_forward[action=no_answer_enable]', 30 | 'call_forward[action=no_answer_disable]' 31 | ], 32 | hotdesk: [ 33 | 'hotdesk[action=login]', 34 | 'hotdesk[action=logout]', 35 | 'hotdesk[action=toggle]' 36 | ], 37 | parking: [ 38 | 'park_and_retrieve', 39 | 'valet', 40 | 'retrieve' 41 | ], 42 | do_not_disturb: [ 43 | 'donotdisturb[action="enable"]', 44 | 'donotdisturb[action="disable"]', 45 | 'donotdisturb[action="toggle"]' 46 | ], 47 | misc: [ 48 | 'voicemail[action=check]', 49 | 'voicemail[action="direct"]', 50 | 'intercom', 51 | 'privacy[mode=full]', 52 | 'directory', 53 | 'time', 54 | 'call_waiting[action=enable]', 55 | 'call_waiting[action=disable]', 56 | 'sound_test_service', 57 | 'call_recording', 58 | 'move' 59 | ] 60 | }, 61 | 62 | featureCodesRender: function(args) { 63 | var self = this, 64 | parent = args.parent || $('.right-content'), 65 | callback = args.callback; 66 | 67 | self.featureCodesLoadData(function(featureCodesData) { 68 | var template = $(self.getTemplate({ 69 | name: 'layout', 70 | data: { 71 | featureCodes: self.featureCodesFormatData(featureCodesData) 72 | }, 73 | submodule: 'featureCodes' 74 | })); 75 | 76 | monster.ui.tooltips(template); 77 | 78 | self.featureCodesBindEvents({ 79 | parent: parent, 80 | template: template, 81 | featureCodes: featureCodesData 82 | }); 83 | 84 | parent 85 | .empty() 86 | .append(template); 87 | 88 | callback && callback(); 89 | }); 90 | }, 91 | 92 | featureCodesLoadData: function(callback) { 93 | var self = this; 94 | 95 | self.callApi({ 96 | resource: 'callflow.list', 97 | data: { 98 | accountId: self.accountId, 99 | filters: { 100 | 'has_key': 'featurecode' 101 | } 102 | }, 103 | success: function(data, status) { 104 | callback && callback(data.data); 105 | } 106 | }); 107 | }, 108 | 109 | featureCodesFormatData: function(featureCodeData) { 110 | var self = this, 111 | defaultCategories = _.map(self.categories, function(codecs, category) { 112 | return { 113 | key: category, 114 | items: codecs 115 | }; 116 | }); 117 | 118 | return _ 119 | .chain(featureCodeData) 120 | .filter(function(callflow) { 121 | // Some old callflows have been created with the feature code key, so we check 122 | // to make sure they also have a name associated 123 | return _.has(callflow, 'featurecode.name'); 124 | }) 125 | .groupBy(function(callflow) { 126 | var string = callflow.featurecode.name.match(/^(\w+){1}/)[0], 127 | category = _.has(self.categories, string) 128 | ? string 129 | : 'misc', 130 | defaultCategory = _.find(defaultCategories, function(category) { 131 | return _.includes(category.items, string); 132 | }); 133 | 134 | return _.get(defaultCategory, 'key', category); 135 | }) 136 | .map(function(codes, category) { 137 | return { 138 | label: self.i18n.active().featureCodes.categories[category], 139 | items: _ 140 | .chain(codes) 141 | .map(function(code) { 142 | var i18n = _.get(self.i18n.active().featureCodes.labels, code.featurecode.name); 143 | 144 | return { 145 | hasStar: ( 146 | !_.isEmpty(code.numbers) 147 | && _.startsWith(code.numbers[0], '*') 148 | ) || ( 149 | !_.isEmpty(code.patterns) 150 | && code.patterns[0].match(/^(\^?\\\*)/) 151 | ), 152 | label: _.get(i18n, 'label', _.capitalize(code.featurecode.name)), 153 | number: _.has(code.featurecode, 'number') 154 | ? _.replace(code.featurecode.number, /\\/g, '') 155 | : '', 156 | tooltip: _.get(i18n, 'tooltip') 157 | }; 158 | }) 159 | .sortBy(function(code) { 160 | var number = _.toNumber(code.number); 161 | 162 | return _.isNaN(number) ? -1 : number; 163 | }) 164 | .value() 165 | }; 166 | }) 167 | .sortBy('label') 168 | .value(); 169 | }, 170 | 171 | featureCodesBindEvents: function(args) { 172 | var self = this, 173 | parent = args.parent, 174 | template = args.template; 175 | 176 | template.find('.main-number-link').on('click', function(e) { 177 | e.preventDefault(); 178 | var leftMenu = parent.parents('#voip_container').find('.left-menu'); 179 | 180 | leftMenu.find('.category') 181 | .removeClass('active'); 182 | leftMenu.find('.category#strategy') 183 | .addClass('active'); 184 | 185 | parent.empty(); 186 | monster.pub('voip.strategy.render', { 187 | parent: parent 188 | }); 189 | }); 190 | } 191 | }; 192 | 193 | return app; 194 | }); 195 | -------------------------------------------------------------------------------- /submodules/featureCodes/views/layout.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{i18n.featureCodes.title}} 4 |
5 |
6 | {{#each featureCodes}} 7 |
8 |
{{label}}
9 |
10 | {{#each items}} 11 |
12 |
13 | {{label}} 14 | {{#if tooltip}} 15 | 16 | {{/if}} 17 |
18 |
19 |
{{#if hasStar}}*{{/if}}
20 |
{{number}}
21 |
22 |
23 | {{/each}} 24 |
25 |
26 | {{else}} 27 |
28 |
{{i18n.featureCodes.noFeatureCodeMessage}}
29 | {{i18n.featureCodes.mainNumberLink}} 30 |
31 | {{/each}} 32 |
33 |
34 | -------------------------------------------------------------------------------- /submodules/groups/views/creation.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | 7 | 8 |
9 | 10 | {{ i18n.groups.dialogCreationGroup.findExtension }} 11 |
12 |
13 |
14 | 15 |
16 |
17 |
{{ i18n.groups.dialogCreationGroup.availableUsers }}
18 |
    19 | {{#each extra.listUsers}} 20 |
  • {{ this.first_name }} {{ this.last_name }}
  • 21 | {{/each}} 22 |
23 |
24 | 25 |
26 |
{{ i18n.groups.dialogCreationGroup.selectedUsers }}
27 |
    28 |
29 |
30 |
31 | 32 |
33 | 34 |
35 |
36 | -------------------------------------------------------------------------------- /submodules/groups/views/extensions.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{ i18n.groups.noAssignedExtensions }} 6 |
7 | {{#each extensions}} 8 |
9 |
10 | 11 | {{ this }} 12 |
13 |
14 | {{/each}} 15 |
16 |
17 | 18 |
19 | {{ i18n.groups.addExtension }} 20 |
21 | {{ i18n.cancel }} 22 | 23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /submodules/groups/views/feature-call_recording.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 |
21 | {{ i18n.groups.callRecording.urlLabel }} 22 | 23 |
24 |
25 | {{ i18n.groups.callRecording.formatLabel }} 26 | 35 |
36 |
37 | {{ i18n.groups.callRecording.timeLimitLabel }} 38 | 39 |
40 |
41 |
42 | 43 |
44 |
45 | {{ i18n.cancel }} 46 | 47 |
48 |
49 |
50 | -------------------------------------------------------------------------------- /submodules/groups/views/feature-forward.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 | {{#monsterText}} 19 | {{ i18n.groups.forward.description }} 20 | {{/monsterText}} 21 | 22 | 23 | 24 |
25 |
26 | {{ i18n.cancel }} 27 | 28 |
29 |
30 |
31 | -------------------------------------------------------------------------------- /submodules/groups/views/feature-next_action.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 | 20 |
21 | {{ i18n.groups.nextAction.label }} 22 | 42 |
43 |
44 | 45 |
46 |
47 | {{ i18n.cancel }} 48 | 49 |
50 |
51 |
52 | -------------------------------------------------------------------------------- /submodules/groups/views/feature-prepend.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 |
21 | {{ i18n.groups.prepend.cidNameLabel }} 22 | 23 |
24 |
25 | {{ i18n.groups.prepend.cidNumberLabel }} 26 | 27 |
28 |
29 |
30 | 31 |
32 |
33 | {{ i18n.cancel }} 34 | 35 |
36 |
37 |
38 | -------------------------------------------------------------------------------- /submodules/groups/views/feature-ringback.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 | {{ i18n.groups.ringback.dropdownLabel }} 21 | 28 | 31 |
32 |
33 | 34 | 35 | 36 | {{#if showMediaUploadDisclosure}} 37 |
38 |
39 | {{#monsterPanelText i18n.mediaUploadDisclosure.title "info" "fill-width"}} 40 | {{i18n.mediaUploadDisclosure.text}} 41 | {{/monsterPanelText}} 42 |
43 | {{/if}} 44 |
45 |
46 | 47 |
48 |
49 | {{ i18n.cancel }} 50 | 51 |
52 |
53 |
54 | -------------------------------------------------------------------------------- /submodules/groups/views/features.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{#each extra.mapFeatures}} 4 |
5 |
6 | 7 |
8 |
9 | {{title}} 10 |
11 |
12 | {{/each}} 13 |
14 |
15 | -------------------------------------------------------------------------------- /submodules/groups/views/layout.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ i18n.groups.title }} 5 | {{countGroups}} 6 |
7 | 8 | 9 | 10 | {{ i18n.groups.add }} 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 |
20 |
21 |
{{ i18n.groups.titleGrid.groups }}
22 |
{{ i18n.groups.titleGrid.members }}
23 |
{{ i18n.groups.titleGrid.extensions }}
24 |
{{ i18n.groups.titleGrid.phoneNumbers }}
25 |
{{ i18n.groups.titleGrid.features }}
26 |
27 |
28 |
29 | {{ i18n.groups.noMatchingGroup }} 30 |
31 |
32 | {{ i18n.groups.noGroupsConfigured }} 33 |
34 |
35 |
36 |
37 | -------------------------------------------------------------------------------- /submodules/groups/views/members.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | 7 | 8 | {{ i18n.users.add }} 9 | 10 |
11 | {{ i18n.cancel }} 12 | 13 |
14 |
15 |
16 | -------------------------------------------------------------------------------- /submodules/groups/views/name.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | 7 |
8 |
9 |
10 | 11 |
12 | 13 |
14 |
15 |
16 |
17 | {{ i18n.groups.delete }} 18 | 19 |
20 | {{ i18n.cancel }} 21 | 22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /submodules/groups/views/newExtension.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{ i18n.groups.addNewExtension }} 4 | 5 | 6 |
7 |
8 | -------------------------------------------------------------------------------- /submodules/groups/views/numbers.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{ i18n.groups.noAssignedNumbers }} 6 |
7 | {{#each assignedNumbers}} 8 |
9 |
10 |
11 |
12 | {{#numberFeatures this.features}}{{/numberFeatures}} 13 | {{#compare state '===' 'port_in'}} 14 | 15 | {{/compare}} 16 |
17 |
18 |
19 | 20 | {{ formatPhoneNumber @key }} 21 |
22 |
23 | {{else}} 24 | 25 | {{/each}} 26 |
27 |
28 | 29 |
30 | 31 | {{ i18n.groups.addFromSpare }} 32 | 33 | {{#unless hideBuyNumbers}} 34 | 44 | {{/unless}} 45 | 46 |
47 | {{ i18n.cancel }} 48 | 49 |
50 |
51 |
52 | -------------------------------------------------------------------------------- /submodules/groups/views/numbersItemRow.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | {{#numberFeatures number.features}}{{/numberFeatures}} 7 | {{#compare number.state '===' 'port_in'}} 8 | 9 | {{/compare}} 10 |
11 |
12 |
13 | 14 | {{ formatPhoneNumber number.phoneNumber }} 15 |
16 |
17 | -------------------------------------------------------------------------------- /submodules/groups/views/row.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
{{ name }}
5 |
{{ endpoints }}
6 |
7 | {{#if extra.extension}} 8 | {{ extra.extension }} 9 | 10 | {{#if extra.additionalExtensions}} 11 | 12 | {{/if}} 13 | {{else}} 14 | {{ i18n.groups.noExtension }} 15 | {{/if}} 16 |
17 |
18 |
19 | {{#if extra.mainNumber}} 20 | {{formatPhoneNumber extra.mainNumber}} 21 | 22 | {{#if extra.additionalNumbers}} 23 | 24 | {{/if}} 25 | {{else}} 26 | {{ i18n.groups.noNumber }} 27 | {{/if}} 28 |
29 |
30 | {{#if extra.hasFeatures}} 31 | {{#each extra.mapFeatures}} 32 | {{#if this.active}} 33 | 34 | {{/if}} 35 | {{/each}} 36 | {{else}} 37 | {{ i18n.users.noUserFeatures }} 38 | {{/if}} 39 |
40 |
41 | 42 | 45 |
46 | -------------------------------------------------------------------------------- /submodules/myOffice/partials/_callerIdPopup.scss: -------------------------------------------------------------------------------- 1 | #my_office_caller_id_popup { 2 | display: flex; 3 | flex-direction: column; 4 | max-height: inherit; 5 | 6 | .content-wrapper { 7 | flex: 1; 8 | overflow-y: auto; 9 | 10 | .number-feature { 11 | display: none; 12 | 13 | .caller-id-name { 14 | margin-top: 5px; 15 | } 16 | } 17 | 18 | #emergency_form { 19 | margin: 15px 0 0; 20 | 21 | form { 22 | margin: 0px; 23 | } 24 | label { 25 | display: flex; 26 | align-items: center; 27 | margin: 0; 28 | 29 | .emergency-form-label { 30 | display: inline-block; 31 | width: 120px; 32 | } 33 | 34 | .horizontal-error-container { 35 | position: relative; 36 | } 37 | } 38 | textarea { 39 | margin-left: 10px; 40 | } 41 | label.monster-invalid { 42 | position: relative; 43 | margin-left: 5px; 44 | font-size: 30px; 45 | 46 | &#notification_contact_emails-error { 47 | position: absolute; 48 | margin: -10px 0 0 10px; 49 | font-size: 12px; 50 | } 51 | } 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /submodules/myOffice/views/callerIdPopup.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{ i18n.myOffice.callerId.numberLabel }} 6 | 12 |
13 | 14 | {{#monsterText}} 15 | {{ i18n.myOffice.callerId.numberHelp }} 16 | {{/monsterText}} 17 |
18 | 19 |
20 |
21 | {{ i18n.myOffice.callerId.nameLabel }} 22 | 23 |
24 | 25 | {{#monsterText}} 26 | {{ i18n.myOffice.callerId.nameHelp }} 27 | {{/monsterText}} 28 |
29 | 30 | {{#if isE911Enabled}} 31 |
32 |
{{ i18n.myOffice.callerId.emergencyLabel }}
33 | 34 |
35 | 39 | 43 | 47 | 51 | 55 | 61 | 69 |
70 | 71 | {{#monsterText}} 72 |

{{ i18n.myOffice.callerId.emergencyHelp1 }}

73 |

{{ i18n.myOffice.callerId.emergencyHelp2 }}

74 | {{/monsterText}} 75 |
76 | {{/if}} 77 |
78 | 79 |
80 |
81 | {{ i18n.cancel }} 82 | 83 |
84 |
85 |
86 | -------------------------------------------------------------------------------- /submodules/myOffice/views/musicOnHoldPopup.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | {{ i18n.myOffice.musicOnHold.headline }} 7 |
8 | 9 |
10 |
11 | {{ i18n.myOffice.musicOnHold.dropdownLabel }} 12 | 23 | 26 |
27 |
28 | 29 | 30 | 31 | {{#if showMediaUploadDisclosure}} 32 |
33 |
34 | {{#monsterPanelText i18n.mediaUploadDisclosure.title "info" "fill-width"}} 35 | {{i18n.mediaUploadDisclosure.text}} 36 | {{/monsterPanelText}} 37 |
38 | {{/if}} 39 |
40 |
41 | 42 |
43 |
44 | {{ i18n.cancel }} 45 | 46 |
47 |
48 |
49 | -------------------------------------------------------------------------------- /submodules/numbers/numbers.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2600hz/monster-ui-voip/601a71be78ab741fd84de3106b8b37e098b5efed/submodules/numbers/numbers.css -------------------------------------------------------------------------------- /submodules/numbers/numbers.js: -------------------------------------------------------------------------------- 1 | define(function(require) { 2 | var $ = require('jquery'), 3 | monster = require('monster'); 4 | 5 | var app = { 6 | 7 | requests: { 8 | }, 9 | 10 | subscribe: { 11 | 'voip.numbers.render': 'numbersRender' 12 | }, 13 | 14 | numbersRender: function(args) { 15 | var self = this, 16 | parent = args.parent || $('#ws_content'), 17 | callback = args.callback; 18 | 19 | monster.pub('common.numbers.render', { 20 | container: parent, 21 | viewType: 'pbx', 22 | callbackAfterRender: callback 23 | }); 24 | } 25 | }; 26 | 27 | return app; 28 | }); 29 | -------------------------------------------------------------------------------- /submodules/strategy/_strategy.scss: -------------------------------------------------------------------------------- 1 | #strategy_container { 2 | @mixin text-ellipsis { 3 | overflow: hidden; 4 | text-overflow: ellipsis; 5 | white-space: nowrap; 6 | } 7 | 8 | .clearfix:after { 9 | clear: right; 10 | } 11 | 12 | .element-container { 13 | .element-header-outer { 14 | background: #dedede; 15 | border-radius: 2px; 16 | 17 | .element-header-inner { 18 | display: flex; 19 | height: 60px; 20 | background: #f3f3f3; 21 | margin: 5px; 22 | cursor: pointer; 23 | 24 | & > div { 25 | width: 50%; 26 | white-space: nowrap; 27 | overflow: hidden; 28 | text-overflow: ellipsis; 29 | box-sizing: border-box; 30 | } 31 | 32 | .title { 33 | display: flex; 34 | align-items: center; 35 | 36 | & > .svg-icon { 37 | width: 1.5rem; 38 | height: 1.5rem; 39 | margin: 0 20px; 40 | color: #22a5ff; 41 | } 42 | 43 | .text { 44 | @include text-ellipsis; 45 | font-size: 18px; 46 | } 47 | } 48 | 49 | .summary { 50 | display: flex; 51 | justify-content: space-between; 52 | align-items: center; 53 | padding-left: 20px; 54 | 55 | .content { 56 | @include text-ellipsis; 57 | display: flex; 58 | align-items: center; 59 | 60 | i { 61 | margin-left: 15px; 62 | } 63 | } 64 | 65 | .icons { 66 | & > * { 67 | margin-right: 20px; 68 | 69 | &:first-child { 70 | margin-left: 20px; 71 | } 72 | } 73 | } 74 | } 75 | } 76 | } 77 | 78 | .element-content { 79 | display: none; 80 | border: solid 1px #dedede; 81 | 82 | .basic-actions { 83 | padding: 20px; 84 | border-top: solid 1px #ccc; 85 | background-color: #f3f3f3; 86 | text-align: right; 87 | 88 | .cancel-link { 89 | margin-right: 10px; 90 | vertical-align: middle; 91 | } 92 | } 93 | } 94 | 95 | &:not(:first-of-type) { 96 | margin-bottom: 5px; 97 | margin-top: 5px; 98 | } 99 | 100 | &.main-number, 101 | &.strategy-confnum, 102 | &.strategy-faxingnum { 103 | @import "./partials/number-element.scss"; 104 | @import "./partials/number-actions.scss"; 105 | } 106 | 107 | &.strategy-confnum, 108 | &.strategy-faxingnum { 109 | .element-header-outer { 110 | .element-header-inner { 111 | .title { 112 | & > .svg-icon { 113 | color: $emerald; 114 | } 115 | } 116 | } 117 | } 118 | } 119 | 120 | &.strategy-hours { 121 | .element-content { 122 | @import "../strategyHours/strategyHours.scss"; 123 | } 124 | } 125 | 126 | &.strategy-holidays { 127 | .element-content { 128 | @import "../strategyHolidays/strategyHolidays.scss"; 129 | } 130 | } 131 | 132 | &.strategy-calls { 133 | .element-content { 134 | @import "./partials/strategy-calls.scss"; 135 | } 136 | } 137 | 138 | &.strategy-confnum { 139 | .element-content { 140 | @import "./partials/strategy-confnum.scss"; 141 | } 142 | } 143 | 144 | &.helper { 145 | .fa-info-circle { 146 | float: left; 147 | margin-right: 10px; 148 | } 149 | 150 | p { 151 | text-align: justify; 152 | } 153 | } 154 | } 155 | 156 | .element-container.open { 157 | .element-header-outer { 158 | border-bottom-left-radius: 0px; 159 | border-bottom-right-radius: 0px; 160 | 161 | .element-header-inner { 162 | margin-bottom: 0px; 163 | 164 | .summary { 165 | .icons { 166 | & > *:last-child { 167 | -webkit-transform: rotate(90deg); 168 | -moz-transform: rotate(90deg); 169 | -ms-transform: rotate(90deg); 170 | -o-transform: rotate(90deg); 171 | color: #22a5ff; 172 | } 173 | } 174 | } 175 | } 176 | } 177 | } 178 | } 179 | -------------------------------------------------------------------------------- /submodules/strategy/partials/_addOfficeHours.scss: -------------------------------------------------------------------------------- 1 | #form_add_office_hours { 2 | display: flex; 3 | flex-direction: column; 4 | margin: 0; 5 | max-height: inherit; 6 | width: 448px; 7 | 8 | select { 9 | width: 100%; 10 | height: 2rem; 11 | margin: 0; 12 | border-radius: 2px; 13 | box-sizing: border-box; 14 | } 15 | 16 | .form-content { 17 | overflow-y: auto; 18 | padding: 1.5rem 1rem; 19 | 20 | .no-days-error, 21 | .overlapping-hours-error { 22 | display: none; 23 | } 24 | 25 | & > * { 26 | margin: 0; 27 | 28 | &:not(:first-child) { 29 | margin-top: 1rem; 30 | } 31 | 32 | &:first-child > label { 33 | margin-bottom: 1rem; 34 | } 35 | } 36 | 37 | ul.controls { 38 | margin: 0; 39 | list-style: none; 40 | 41 | li { 42 | margin: 5px 0; 43 | 44 | &:first-child { 45 | margin-top: 0; 46 | } 47 | &:last-child { 48 | margin-bottom: 0; 49 | } 50 | } 51 | 52 | .monster-checkbox { 53 | input[type="checkbox"]:checked ~ span { 54 | font-weight: bold; 55 | } 56 | } 57 | } 58 | 59 | .ui-timepicker-input { 60 | height: 2rem; 61 | border-radius: 2px; 62 | border: 1px solid #c0c0ca; 63 | width: auto; 64 | padding: 0 6px; 65 | } 66 | } 67 | 68 | .form-actions { 69 | display: flex; 70 | justify-content: flex-end; 71 | margin: 0; 72 | padding: 1rem; 73 | background-color: $athens-gray; 74 | border-top-color: #dbdbde; 75 | 76 | & > *:not(:last-child) { 77 | margin-right: .75rem; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /submodules/strategy/partials/_changeCallerIdPopup.scss: -------------------------------------------------------------------------------- 1 | .e911-change-wrapper { 2 | padding: 15px; 3 | width: 400px; 4 | 5 | .cancel-link { 6 | margin-right: 5px; 7 | } 8 | 9 | .list-choices { 10 | margin-bottom: 20px; 11 | margin-top: 20px; 12 | 13 | .choice { 14 | background: #EEE; 15 | padding: 20px; 16 | border: 1px solid #CCC; 17 | margin-bottom: 5px; 18 | 19 | &:hover { 20 | background: #FFF; 21 | cursor: pointer; 22 | } 23 | 24 | &.active { 25 | background: #FFF; 26 | border: 1px solid #22a5ff; 27 | } 28 | } 29 | } 30 | 31 | .actions { 32 | margin-top: 10px; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /submodules/strategy/partials/_customConferenceGreeting.scss: -------------------------------------------------------------------------------- 1 | #strategy_custom_conference_greeting .actions button:not(:first-child) { 2 | margin-left: 10px; 3 | } 4 | -------------------------------------------------------------------------------- /submodules/strategy/partials/_menuPopup.scss: -------------------------------------------------------------------------------- 1 | #strategy_menu_popup { 2 | width: 760px; 3 | padding: 20px; 4 | 5 | & > div:not(:last-of-type) { 6 | margin-bottom: 25px; 7 | } 8 | .menu-block { 9 | & > div { 10 | float: left; 11 | } 12 | 13 | .left { 14 | width: 400px; 15 | } 16 | 17 | .right { 18 | margin-left: 20px; 19 | width: 340px; 20 | } 21 | 22 | .title { 23 | color: $primary-color; 24 | font-size: 22px; 25 | font-weight: 600; 26 | padding: 15px 0; 27 | } 28 | 29 | .menu-line { 30 | padding: 5px 0px; 31 | 32 | & > div, 33 | & > input, 34 | & > select { 35 | margin: 0 12px 0 0; 36 | display: inline-block; 37 | vertical-align: middle; 38 | } 39 | 40 | .target-input .add-on { 41 | width: 20px; 42 | } 43 | .target-select { 44 | width: 150px; 45 | } 46 | i.remove-btn { 47 | cursor: pointer; 48 | opacity: 0.8; 49 | vertical-align: middle; 50 | } 51 | i.remove-btn:hover { 52 | color: #ff1212 !important; 53 | } 54 | i.remove-btn:active { 55 | color: #ff1212 !important; 56 | text-shadow: 1px 1px 1px #999; 57 | } 58 | } 59 | 60 | .add-menu-line { 61 | margin-top: 10px; 62 | } 63 | } 64 | 65 | .action-block .cancel-link { 66 | line-height: 30px; 67 | margin-right: 10px; 68 | color: $primary-color; 69 | } 70 | 71 | #strategy_menu_popup_accordion .greeting-option { 72 | border-color: #c0c0c9; 73 | 74 | &.active { 75 | border-color: $primary-color; 76 | } 77 | 78 | &:not(:last-of-type) { 79 | margin-bottom: 15px; 80 | } 81 | 82 | &.active .greeting-option-header i { 83 | color: $primary-color !important; 84 | } 85 | 86 | .greeting-option-header { 87 | padding: 10px; 88 | font-weight: bold; 89 | border-radius: 2px; 90 | cursor: pointer; 91 | background-color: #e0e0e9; 92 | 93 | &:not(.collapsed) { 94 | border-bottom-left-radius: 0px; 95 | border-bottom-right-radius: 0px; 96 | } 97 | 98 | i { 99 | vertical-align: middle; 100 | } 101 | } 102 | 103 | .greeting-option-content { 104 | padding: 10px; 105 | font-size: 14px; 106 | 107 | textarea { 108 | width: 100%; 109 | box-sizing: border-box; 110 | -moz-box-sizing: border-box; 111 | -webkit-box-sizing: border-box; 112 | margin: 0px; 113 | min-height: 90px; 114 | } 115 | } 116 | 117 | .greeting-option-actions { 118 | margin-top: 10px; 119 | 120 | button:not(:first-of-type) { 121 | margin-right: 10px; 122 | } 123 | } 124 | 125 | .upload-container { 126 | display: flex; 127 | 128 | input[type="text"] { 129 | margin: 0; 130 | width: auto; 131 | box-shadow: none; 132 | border-radius: 2px 0px 0px 2px; 133 | margin-right: -1px; 134 | flex-grow: 1; 135 | } 136 | 137 | button { 138 | border-top-left-radius: 0px; 139 | border-bottom-left-radius: 0px; 140 | width: 170px; 141 | padding-top: 4px; 142 | padding-bottom: 4px; 143 | } 144 | } 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /submodules/strategy/partials/_number-actions.scss: -------------------------------------------------------------------------------- 1 | .number-actions { 2 | padding: 25px 20px; 3 | background-color: #f3f3f3; 4 | 5 | .action-links { 6 | a { 7 | margin-right: 10px; 8 | 9 | i { 10 | margin-right: 5px; 11 | } 12 | } 13 | 14 | ul.dropdown-menu { 15 | min-width: 0; 16 | } 17 | 18 | .buy-dropdown:hover { 19 | background-color: transparent; 20 | text-decoration: underline; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /submodules/strategy/partials/_number-element.scss: -------------------------------------------------------------------------------- 1 | .number-element { 2 | position: relative; 3 | border-bottom: solid 1px #dedede; 4 | height: 70px; 5 | 6 | & > div { 7 | display: inline-block; 8 | padding: 10px; 9 | line-height: 50px; 10 | height: 50px; 11 | } 12 | 13 | .features-block { 14 | .dropdown-toggle { 15 | background-color: #ffffff; 16 | margin-top: 5px; 17 | } 18 | .edit-features { 19 | position: absolute; 20 | right: 10px; 21 | } 22 | .features { 23 | margin-right: 45px; 24 | 25 | & > i.active { 26 | display: inline-block; 27 | } 28 | } 29 | } 30 | 31 | .number > button { 32 | margin: 0px 15px; 33 | } 34 | 35 | .no-number-error { 36 | font-style: italic; 37 | color: #ee1212; 38 | font-weight: 600; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /submodules/strategy/partials/_officeHolidaysManagement.scss: -------------------------------------------------------------------------------- 1 | .monster-alert { 2 | &.holiday-delete-dialog { 3 | font-size: 14px; 4 | 5 | .ui-dialog-titlebar { 6 | padding: 24px; 7 | 8 | .ui-dialog-title { 9 | font-size: 18px; 10 | line-height: 18px; 11 | text-align: left; 12 | color: $woodsmoke; 13 | 14 | .fa { 15 | font-size: 2rem; 16 | margin-right: 16px; 17 | } 18 | 19 | .fa, .title { 20 | display: inline-block; 21 | vertical-align: middle; 22 | } 23 | } 24 | } 25 | 26 | .dialog-content-wrapper { 27 | padding: 0 24px 32px; 28 | width: 400px; 29 | color: $woodsmoke; 30 | } 31 | 32 | .action-buttons { 33 | padding: 0 24px 24px; 34 | text-align: right; 35 | 36 | .cancel { 37 | margin-right: 12px; 38 | } 39 | 40 | .delete { 41 | color: $woodsmoke; 42 | background: #2ed022; 43 | border: 1px solid #209218; 44 | } 45 | } 46 | } 47 | } 48 | 49 | #form_add_edit_office_holidays, #form_national_holidays { 50 | display: flex; 51 | flex-direction: column; 52 | margin: 0; 53 | max-height: inherit; 54 | width: 398px; 55 | 56 | select, .form-control { 57 | width: 100%; 58 | height: 36px; 59 | border-radius: 2px; 60 | box-sizing: border-box; 61 | margin: 0; 62 | } 63 | 64 | .form-content { 65 | overflow-y: auto; 66 | padding: 1.5rem 1rem; 67 | color: $woodsmoke; 68 | 69 | .control-label { 70 | margin-bottom: 4px; 71 | } 72 | 73 | .control-group { 74 | margin-bottom: 1.5rem; 75 | 76 | &:last-child { 77 | margin-bottom: 0; 78 | } 79 | 80 | #recurring:disabled + i { 81 | cursor: not-allowed; 82 | } 83 | 84 | .row-fluid { 85 | align-items: center; 86 | display: none; 87 | 88 | select:not(:last-child) { 89 | margin-right: 12px; 90 | } 91 | 92 | .separator { 93 | margin-right: 1rem; 94 | flex-shrink: 0; 95 | } 96 | 97 | &.date-range .date { 98 | width: 60px; 99 | } 100 | 101 | &.selected { 102 | display: flex; 103 | } 104 | 105 | .select-year { 106 | width: 50%; 107 | } 108 | 109 | .day.from { 110 | margin-right: 2rem; 111 | } 112 | 113 | .controls { 114 | width: 30%; 115 | margin: 0 12px 0 0; 116 | height: 36px; 117 | 118 | input { 119 | width: 90%; 120 | margin: unset; 121 | height: 25px; 122 | } 123 | } 124 | } 125 | 126 | } 127 | 128 | .optional-time, .optional-year { 129 | display: none; 130 | 131 | &.show { 132 | display: block; 133 | } 134 | 135 | .row-fluid { 136 | display: flex; 137 | } 138 | } 139 | 140 | .monster-checkbox { 141 | span { 142 | font-weight: 600; 143 | } 144 | } 145 | 146 | .no-name-error, .minimum-name-error, .maximum-name-error, .duplicate-name-error { 147 | display: none; 148 | } 149 | 150 | } 151 | 152 | .form-actions { 153 | display: flex; 154 | justify-content: flex-end; 155 | margin: 0; 156 | padding: 1rem; 157 | background-color: $athens-gray; 158 | border-top-color: #dbdbde; 159 | 160 | button { 161 | color: $woodsmoke; 162 | } 163 | 164 | & > *:not(:last-child) { 165 | margin-right: .75rem; 166 | } 167 | } 168 | 169 | .include-holidays-list { 170 | max-height: 350px; 171 | overflow-y: scroll; 172 | } 173 | 174 | #include_holidays_table { 175 | display: block; 176 | 177 | thead { 178 | display: block; 179 | 180 | tr { 181 | background-color: #dbdbde; 182 | 183 | th { 184 | height: 40px; 185 | font-size: 12px; 186 | color: $shark2; 187 | font-weight: 600; 188 | border-color: $french-gray2; 189 | } 190 | } 191 | } 192 | 193 | tbody { 194 | tr { 195 | height: 44px; 196 | border: 1px $french-gray2; 197 | 198 | td span { 199 | margin-left: 1rem; 200 | } 201 | } 202 | 203 | tr:nth-child(even) { 204 | background: rgba($athens-gray, 0.48); 205 | } 206 | } 207 | 208 | td, th { 209 | border-left: 1px solid $french-gray2; 210 | border-right: 1px solid $french-gray2; 211 | padding-left: 16px; 212 | text-align: left; 213 | width: 300px; 214 | max-width: 300px; 215 | } 216 | } 217 | } 218 | -------------------------------------------------------------------------------- /submodules/strategy/partials/_strategy-calls.scss: -------------------------------------------------------------------------------- 1 | .calls-tabs { 2 | height: 34px; 3 | margin: 0; 4 | padding: 20px; 5 | 6 | .open-hours-tab:hover { 7 | a, i { 8 | color: #74b814; 9 | } 10 | } 11 | 12 | .open-hours-tab.active a { 13 | background-color: #74b814; 14 | } 15 | 16 | .lunch-hours-tab:hover { 17 | a, i { 18 | color: #f89406; 19 | } 20 | } 21 | 22 | .lunch-hours-tab.active a { 23 | background-color: #f89406; 24 | } 25 | 26 | .after-hours-tab:hover { 27 | a, i { 28 | color: #363636; 29 | } 30 | } 31 | 32 | .after-hours-tab.active a { 33 | background-color: #363636; 34 | } 35 | 36 | .holidays-tab:hover { 37 | a, i { 38 | color: #49afcd; 39 | } 40 | } 41 | 42 | .holidays-tab.active a { 43 | background-color: #49afcd; 44 | } 45 | 46 | .open-hours-tab.active a:hover, 47 | .open-hours-tab.active a:focus, 48 | .open-hours-tab.active a:hover i, 49 | .open-hours-tab.active a:focus i, 50 | .lunch-hours-tab.active a:hover, 51 | .lunch-hours-tab.active a:focus, 52 | .lunch-hours-tab.active a:hover i, 53 | .lunch-hours-tab.active a:focus i, 54 | .after-hours-tab.active a:hover, 55 | .after-hours-tab.active a:focus, 56 | .after-hours-tab.active a:hover i, 57 | .after-hours-tab.active a:focus i, 58 | .holidays-tab.active a:hover, 59 | .holidays-tab.active a:focus, 60 | .holidays-tab.active a:hover i, 61 | .holidays-tab.active a:focus i { 62 | color: #fff; 63 | } 64 | } 65 | 66 | .callflow-tabs { 67 | overflow: visible; 68 | padding: 20px; 69 | border: none; 70 | background: transparent; 71 | 72 | .call-option { 73 | display: inline-block; 74 | vertical-align: top; 75 | padding: 10px; 76 | border: solid 2px #ccc; 77 | border-radius: 10px; 78 | text-align: center; 79 | background-color: #f9f9f9; 80 | 81 | i { 82 | color: #aaa; 83 | } 84 | 85 | .radio-div .iradio_flat { 86 | margin: 0; 87 | } 88 | 89 | select { 90 | width: 160px; 91 | } 92 | 93 | &.active { 94 | .menu-div { 95 | .menu-icon { 96 | i { 97 | color: rgba(238, 18, 18, 0.8); 98 | } 99 | } 100 | } 101 | 102 | .menu-div.has-menu { 103 | .menu-icon { 104 | i { 105 | color: #22a5ff; 106 | } 107 | } 108 | } 109 | } 110 | } 111 | 112 | #strategy_calls_open_hours_tab .call-option.active { 113 | border-color: #74B814; 114 | } 115 | 116 | #strategy_calls_lunch_hours_tab .call-option.active { 117 | border-color: #f89406; 118 | } 119 | 120 | #strategy_calls_after_hours_tab .call-option.active { 121 | border-color: #363636; 122 | } 123 | 124 | #strategy_calls_holidays_tab .call-option.active { 125 | border-color: #49afcd; 126 | } 127 | } 128 | 129 | .call-options-container { 130 | .call-option { 131 | margin: 14px 14px 0 0; 132 | 133 | &:last-child { 134 | margin-right: 0; 135 | } 136 | } 137 | } 138 | 139 | .callflow-tabs { 140 | .call-option { 141 | & > div:not(:first-of-type) { 142 | margin-top: 10px; 143 | } 144 | 145 | .chosen-container { 146 | text-align: left; 147 | } 148 | 149 | .menu-div .link-icon i { 150 | margin-right: 5px; 151 | } 152 | 153 | .menu-div .link a { 154 | color: #333; 155 | text-decoration: underline; 156 | } 157 | 158 | &.active { 159 | background-color: #f0f0f0; 160 | } 161 | } 162 | } 163 | -------------------------------------------------------------------------------- /submodules/strategy/partials/_strategy-confnum.scss: -------------------------------------------------------------------------------- 1 | .greeting-link { 2 | margin-right: 30px !important; 3 | position: relative; 4 | } 5 | .greeting-link:after { 6 | content: ""; 7 | position: absolute; 8 | width: 0px; 9 | height: 50px; 10 | border-right: solid 1px #c0c0c9; 11 | top: -15px; 12 | right: -15px; 13 | } 14 | 15 | .custom-greeting-icon { 16 | position: absolute; 17 | right: 45px; 18 | top: 23px; 19 | } 20 | -------------------------------------------------------------------------------- /submodules/strategy/views/addEditOfficeHolidays.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 7 | 8 |
9 | {{#monsterPanelText i18n.strategy.addEditOfficeHolidays.errors.noName "danger" "fill-width no-name-error"}} 10 | {{/monsterPanelText}} 11 | {{#monsterPanelText i18n.strategy.addEditOfficeHolidays.errors.minimum "danger" "fill-width minimum-name-error"}} 12 | {{/monsterPanelText}} 13 | {{#monsterPanelText i18n.strategy.addEditOfficeHolidays.errors.maximum "danger" "fill-width maximum-name-error"}} 14 | {{/monsterPanelText}} 15 | {{#monsterPanelText i18n.strategy.addEditOfficeHolidays.errors.nameExists "danger" "fill-width duplicate-name-error"}} 16 | {{/monsterPanelText}} 17 |
18 | {{#monsterCheckbox i18n.strategy.addEditOfficeHolidays.labels.recurringAnnually}} 19 | 20 | {{/monsterCheckbox}} 21 |
22 |
23 | 26 |
27 | 38 |
39 |
40 |
41 | 44 |
45 | 54 | 63 | 64 | {{i18n.strategy.addEditOfficeHolidays.labels.allDay}} 65 | 66 |
67 | {{#monsterSwitch}} 68 | 69 | {{/monsterSwitch}} 70 |
71 |
72 |
73 | 82 | 91 | 100 |
101 |
102 | 111 | 120 | {{i18n.strategy.holidays.to}} 121 | 130 | 139 |
140 |
141 |
142 | 145 |
146 |
147 | 148 |
149 | {{i18n.strategy.holidays.to}} 150 |
151 | 152 |
153 |
154 |
155 |
156 | 159 |
160 | 169 |
170 |
171 |
172 |
173 | 176 | 183 |
184 |
185 | -------------------------------------------------------------------------------- /submodules/strategy/views/addOfficeHours.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 7 |
    8 | {{#each days as |label|}} 9 |
  • 10 | {{#monsterCheckbox label}} 11 | 12 | {{/monsterCheckbox}} 13 |
  • 14 | {{/each}} 15 |
16 |
17 | {{#monsterPanelText i18n.strategy.addOfficeHours.errors.noDaysSelected "danger" "fill-width no-days-error"}} 18 | {{/monsterPanelText}} 19 |
20 | 23 |
24 | 32 |
33 |
34 |
35 |
36 | 39 |
40 | 41 |
42 |
43 |
44 | 47 |
48 | 49 |
50 |
51 |
52 |
53 |
54 | 57 | 60 |
61 |
62 | -------------------------------------------------------------------------------- /submodules/strategy/views/callsTab.html: -------------------------------------------------------------------------------- 1 |
{{tabMessage}}
2 |
3 | {{#each strategies}} 4 |
5 |
6 | {{#monsterRadio "radio-large"}} 7 | 8 | {{/monsterRadio}} 9 |
10 |
11 | {{@root.i18n.strategy.calls.incomingCall}} 12 |
13 | {{#each options as |option|}} 14 |
15 | {{#compare option "===" "menu"}} 16 | 29 | {{/compare}} 30 | {{#compare option "===" "entity"}} 31 |
32 |
N/A
33 | 53 |
54 | {{/compare}} 55 | {{#compare option "===" "voicemail"}} 56 |
57 |
58 | {{@root.i18n.strategy.calls.voicemail}} 59 |
60 | 69 |
70 | {{/compare}} 71 | {{#compare option "===" "callflow"}} 72 |
73 |
74 | {{@root.i18n.strategy.callEntities.advancedCallflows}} 75 |
76 | 89 |
90 | {{/compare}} 91 | {{/each}} 92 |
93 | {{/each}} 94 |
95 | -------------------------------------------------------------------------------- /submodules/strategy/views/changeCallerIdPopup.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{#compare action "===" "choose"}} 4 | {{ tryI18n i18n.strategy.updateCallerIdDialog.headerChooseNumber callerIdType }} 5 | {{else}} 6 | {{#compare action "===" "add"}} 7 | {{ tryI18n i18n.strategy.updateCallerIdDialog.headerAddNumber callerIdType }} 8 | {{else}} 9 | {{ tryI18n i18n.strategy.updateCallerIdDialog.headerRemoveNumber callerIdType }} 10 | {{/compare}} 11 | {{/compare}} 12 |
13 | 14 |
15 | {{#if oldNumber}} 16 |
{{ formatPhoneNumber oldNumber }} ({{ tryI18n i18n.strategy.updateCallerIdDialog.current callerIdType }})
17 | {{/if}} 18 | 19 | {{#each newNumbers}} 20 |
{{ formatPhoneNumber this }}
21 | {{/each}} 22 |
23 | 24 |
25 |
26 | {{ i18n.cancel }} 27 | 28 |
29 |
30 |
31 | -------------------------------------------------------------------------------- /submodules/strategy/views/customConferenceGreeting.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | {{ i18n.strategy.customConferenceGreeting.title }} 7 |
8 | {{#monsterSwitch}} 9 | 10 | {{/monsterSwitch}} 11 |
12 |
13 | 14 |
15 |
16 |
17 | 18 |
19 |
20 | 21 | 22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /submodules/strategy/views/layout.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |

{{ i18n.strategy.noNumberHelp }}

5 |
6 |
7 |
8 |
9 |
10 | {{telicon "number"}} 11 |
12 | {{ i18n.strategy.sectionTitles.numbers }} 13 |
14 |
15 |
16 |
17 | {{formatPhoneNumber mainNumbers.[0]}} 18 | {{#if mainNumbers.[1]}} 19 | {{#if mainNumbers.[2]}} 20 | 21 | {{else}} 22 | , {{formatPhoneNumber mainNumbers.[1]}} 23 | {{/if}} 24 | {{/if}} 25 |
26 |
27 | 28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {{telicon "clock"}} 39 |
40 | {{ i18n.strategy.sectionTitles.hours }} 41 |
42 |
43 |
44 |
45 |
46 | 47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | {{telicon "calendar"}} 58 |
59 | {{ i18n.strategy.sectionTitles.holidays }} 60 |
61 |
62 |
63 |
64 |
65 | 66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | {{telicon "phone-inbound"}} 77 |
78 | {{ i18n.strategy.sectionTitles.calls }} 79 |
80 |
81 |
82 |
83 |
84 | 85 |
86 |
87 |
88 |
89 |
90 |
91 | {{#isFeatureAvailable "smartpbx.mainNumber.mainConferenceNumber.manage"}} 92 |
93 |
94 |
95 |
96 | {{telicon "comments"}} 97 |
98 | {{ i18n.strategy.sectionTitles.confnum }} 99 |
100 |
101 |
102 |
103 | {{formatPhoneNumber confNumbers.[0]}} 104 | {{#if confNumbers.[1]}} 105 | {{#if confNumbers.[2]}} 106 | 107 | {{else}} 108 | , {{formatPhoneNumber confNumbers.[1]}} 109 | {{/if}} 110 | {{/if}} 111 |
112 |
113 | 114 | 115 |
116 |
117 |
118 |
119 |
120 |
121 | {{/isFeatureAvailable}} 122 |
123 |
124 |
125 |
126 | {{telicon "device-fax"}} 127 |
128 | {{ i18n.strategy.sectionTitles.faxingnum }} 129 |
130 |
131 |
132 |
133 | {{formatPhoneNumber faxingNumbers.[0]}} 134 | {{#if faxingNumbers.[1]}} 135 | {{#if faxingNumbers.[2]}} 136 | 137 | {{else}} 138 | , {{formatPhoneNumber faxingNumbers.[1]}} 139 | {{/if}} 140 | {{/if}} 141 |
142 |
143 | 144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 | -------------------------------------------------------------------------------- /submodules/strategy/views/menuLine.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /submodules/strategy/views/menuPopup.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{i18n.strategy.popup.infoBlock}} 4 |
5 | 121 |
122 | 123 | {{i18n.cancel}} 124 |
125 |
126 | -------------------------------------------------------------------------------- /submodules/strategy/views/popupEditFaxbox.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | {{i18n.strategy.popupEditFaxbox.text}} 7 |
8 | 9 |
10 |
11 |
12 | 15 |
16 | 17 |
18 |
19 |
20 |
21 | 22 |
23 |
24 | {{#if email}} 25 | {{ i18n.cancel }} 26 | {{/if}} 27 | 28 |
29 |
30 |
31 | -------------------------------------------------------------------------------- /submodules/strategy/views/popupRemoveFeatures.html: -------------------------------------------------------------------------------- 1 |
2 |

{{i18n.strategy.popupRemoveFeatures.questionPartOne}} {{formatPhoneNumber phoneNumber}} {{i18n.strategy.popupRemoveFeatures.questionPartTwo}}

3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {{#each featureList}} 12 | 13 | 20 | 21 | {{/each}} 22 | 23 |
{{i18n.strategy.popupRemoveFeatures.featuresToRemove}}
14 | 19 |
24 |
25 |
26 | {{i18n.cancel}} 27 | 28 |
29 |
-------------------------------------------------------------------------------- /submodules/strategy/views/strategy-calls.html: -------------------------------------------------------------------------------- 1 | 8 |
9 | {{#each tabs}} 10 |
11 | {{/each}} 12 |
13 | 14 |
15 | 16 | {{i18n.cancel}} 17 | 18 |
19 | -------------------------------------------------------------------------------- /submodules/strategy/views/strategy-confnum.html: -------------------------------------------------------------------------------- 1 | {{#each numbers}} 2 |
3 |
4 | 7 | {{formatPhoneNumber this.number}} 8 |
9 |
10 | {{else}} 11 |
12 |
{{ i18n.strategy.noConfNumMessage }}
13 |
14 | {{/each}} 15 |
16 | {{ i18n.close }} 17 | 33 |
34 | -------------------------------------------------------------------------------- /submodules/strategy/views/strategy-faxingnum.html: -------------------------------------------------------------------------------- 1 | {{#each numbers}} 2 |
3 |
4 | 7 | {{formatPhoneNumber this.number}} 8 |
9 |
10 | {{else}} 11 |
12 |
{{ i18n.strategy.noFaxingNumMessage }}
13 |
14 | {{/each}} 15 |
16 | {{ i18n.close }} 17 | 40 |
41 | -------------------------------------------------------------------------------- /submodules/strategy/views/strategy-numbers.html: -------------------------------------------------------------------------------- 1 |
2 | {{#each numbers}} 3 |
4 |
5 | 8 | {{formatPhoneNumber number.id}} 9 |
10 |
11 |
12 |
13 | {{#numberFeatures number.features}}{{/numberFeatures}} 14 |
15 |
16 |
17 | {{else}} 18 |
19 |
{{ i18n.strategy.noNumberMessage }}
20 |
21 | {{/each}} 22 | 23 |
24 | {{ i18n.close }} 25 | 40 |
41 |
42 | -------------------------------------------------------------------------------- /submodules/strategyHolidays/_strategyHolidays.scss: -------------------------------------------------------------------------------- 1 | .holidays-toggler { 2 | padding: 32px 0 20px 20px; 3 | 4 | span { 5 | color: $woodsmoke; 6 | font-weight: 600; 7 | } 8 | } 9 | 10 | .monster-button { 11 | color: $woodsmoke; 12 | border-radius: 2px; 13 | } 14 | 15 | .save-button { 16 | background: #2ed022; 17 | border-color: #209218; 18 | margin-left: 3px; 19 | } 20 | 21 | .holidays-div { 22 | color: $woodsmoke; 23 | padding: 20px; 24 | display: none; 25 | 26 | .title { 27 | font-size: 18px; 28 | margin-bottom: 1rem; 29 | } 30 | 31 | .help-div { 32 | background-color: $french-pass; 33 | display: flex; 34 | padding: 16px; 35 | 36 | .help-icon { 37 | margin-right: 12px; 38 | position: relative; 39 | bottom: 2px; 40 | } 41 | } 42 | 43 | .year-config { 44 | margin: 16px 0; 45 | 46 | select { 47 | height: 36px; 48 | width: 140px; 49 | } 50 | } 51 | 52 | .actions-wrapper { 53 | position: absolute; 54 | z-index: 1; 55 | 56 | button { 57 | font-size: 14px; 58 | padding: 8px 7px; 59 | border: 1px solid $french-gray2; 60 | background: linear-gradient(-180deg, $white 0%, $athens-gray 100%); 61 | margin-right: 8px; 62 | min-width: 96px; 63 | 64 | span { 65 | margin-left: .5rem 66 | } 67 | 68 | .svg-icon { 69 | color: $midgray2; 70 | } 71 | } 72 | 73 | .add-holiday { 74 | background: $dodger-blue; 75 | border: 1px solid #006bca; 76 | 77 | .svg-icon { 78 | color: $woodsmoke; 79 | } 80 | } 81 | } 82 | 83 | #holidays_list_table { 84 | color: $shark2; 85 | 86 | .footable-filtering { 87 | .input-group { 88 | width: 256px; 89 | 90 | .form-control { 91 | width: 192px; 92 | } 93 | 94 | input[type="text"] { 95 | height: 22px; 96 | } 97 | 98 | .input-group-btn { 99 | .btn-primary { 100 | background-color: $white !important; 101 | color: $manatee; 102 | border-left: unset; 103 | height: 36px; 104 | 105 | .fooicon { 106 | font-size: 16px; 107 | } 108 | } 109 | } 110 | } 111 | } 112 | 113 | .footable-header { 114 | background-color: #dbdbde; 115 | 116 | th { 117 | font-size: 12px; 118 | font-weight: 600; 119 | color: $shark2; 120 | border-color: $french-gray2; 121 | } 122 | } 123 | 124 | tbody { 125 | tr { 126 | height: 44px; 127 | border: 1px $french-gray2; 128 | 129 | svg { 130 | color: $midgray2; 131 | padding: 0 10px; 132 | cursor: pointer; 133 | } 134 | 135 | &.footable-empty { 136 | display: none; 137 | } 138 | } 139 | 140 | tr:nth-child(even) { 141 | background: rgba($athens-gray, 0.48); 142 | } 143 | } 144 | 145 | td:first-child, .footable-header th:first-child { 146 | border-left: 1px solid $french-gray2; 147 | } 148 | 149 | td:last-child, .footable-header th:last-child { 150 | border-right: 1px solid $french-gray2; 151 | } 152 | } 153 | 154 | .custom-footable-empty { 155 | color: $woodsmoke; 156 | display: none; 157 | border-radius: 2px; 158 | border: 1px solid $mischka; 159 | border-top: none; 160 | text-align: center; 161 | 162 | &.show { 163 | display: block; 164 | } 165 | 166 | svg { 167 | color: $manatee; 168 | height: 1.5rem; 169 | width: 1.5rem; 170 | cursor: default; 171 | margin-right: 12px; 172 | } 173 | 174 | .title-row { 175 | padding: 44px 0; 176 | display: inline-flex; 177 | align-items: center; 178 | 179 | span { 180 | font-size: 16px; 181 | font-weight: 600; 182 | } 183 | } 184 | 185 | .description-row { 186 | margin-bottom: 40px; 187 | 188 | .description { 189 | font-size: 14px; 190 | } 191 | } 192 | } 193 | } 194 | -------------------------------------------------------------------------------- /submodules/strategyHolidays/views/deleteHolidayDialog.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{replaceVar i18n.strategy.holidays.dialogs.delete.message holidayName}}

4 | {{#monsterCheckbox i18n.strategy.holidays.dialogs.delete.deleteAll}} 5 | 6 | {{/monsterCheckbox}} 7 |
8 | 9 |
10 |
11 | 17 |
18 |
19 |
20 | -------------------------------------------------------------------------------- /submodules/strategyHolidays/views/importNationalHolidaysList.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | {{#each holidays}} 14 | 18 | 23 | 24 | {{/each}} 25 | 26 |
6 | {{#monsterCheckbox i18n.strategy.holidays.importNationalOfficeHolidays.labels.holiday}} 7 | 8 | {{/monsterCheckbox}} 9 |
19 | {{#monsterCheckbox name}} 20 | 21 | {{/monsterCheckbox}} 22 |
27 |
28 | -------------------------------------------------------------------------------- /submodules/strategyHolidays/views/includeNationalHolidays.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 7 |
8 | 17 |
18 |
19 |
20 | 23 |
24 |
25 |
26 |
27 |
28 |
29 | 32 | 35 |
36 |
37 | -------------------------------------------------------------------------------- /submodules/strategyHolidays/views/layout.html: -------------------------------------------------------------------------------- 1 |
2 | 7 |
8 | 9 |
10 |
{{ i18n.strategy.holidays.title }}
11 | 12 |
13 |
14 | {{telicon "info--circle"}} 15 |
16 |
17 | {{i18n.strategy.holidays.helpHolidays}} 18 |
19 |
20 | 21 |
22 | 25 | 26 |
27 | 34 |
35 |
36 | 37 |
38 |
39 | 45 | 51 | 57 |
58 | 59 | 60 | 61 | 64 | 67 | 70 | 71 | 72 | 73 |
62 | {{i18n.strategy.holidays.listing.headers.name}} 63 | 65 | {{i18n.strategy.holidays.listing.headers.date}} 66 | 68 | {{i18n.strategy.holidays.listing.headers.actions}} 69 |
74 |
75 |
76 | {{telicon "calendar"}} 77 | {{i18n.strategy.holidays.empty.title}} 78 |
79 |
80 | {{i18n.strategy.holidays.empty.description}} 81 |
82 |
83 |
84 |
85 | 86 |
87 | {{i18n.cancel}} 88 | 89 |
90 | -------------------------------------------------------------------------------- /submodules/strategyHolidays/views/listing.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{holidayData.name}} 4 | 5 | 6 | {{dateToDisplay}} 7 | 8 | 9 | {{#if isEditable}} 10 | {{telicon "edit"}} 11 | {{/if}} 12 | {{telicon "trash"}} 13 | 14 | 15 | -------------------------------------------------------------------------------- /submodules/strategyHours/_strategyHours.scss: -------------------------------------------------------------------------------- 1 | $border-color: $french-gray2; 2 | 3 | form { 4 | margin: 0px; 5 | } 6 | 7 | .custom-hours-toggler { 8 | padding: 20px; 9 | 10 | .title { 11 | line-height: 30px; 12 | 13 | span { 14 | font-size: 14px; 15 | } 16 | 17 | input:checked ~ span { 18 | font-weight: 600; 19 | } 20 | 21 | & > input { 22 | margin: 0 16px 4px 0; 23 | } 24 | } 25 | 26 | & > label:first-of-type { 27 | margin-bottom: 20px; 28 | } 29 | 30 | .description { 31 | margin: 5px 0 0 20px; 32 | } 33 | } 34 | 35 | .custom-hours-div { 36 | padding: 20px; 37 | display: none; 38 | 39 | .custom-hours-header { 40 | font-size: 18px; 41 | padding: 0 0 15px; 42 | 43 | .timezone { 44 | margin-left: 5px; 45 | } 46 | } 47 | } 48 | 49 | .custom-hours-wrapper { 50 | margin-top: 1.5rem; 51 | 52 | .actions-wrapper { 53 | display: flex; 54 | justify-content: space-between; 55 | 56 | button:not(:first-child) { 57 | margin-left: 1rem; 58 | } 59 | } 60 | 61 | .monster-button-svg { 62 | display: flex; 63 | align-items: center; 64 | 65 | span { 66 | margin-left: .5rem 67 | } 68 | } 69 | 70 | .office-hours-wrapper { 71 | margin-top: 1rem; 72 | 73 | .office-hours-nav { 74 | list-style: none; 75 | margin: 0; 76 | display: flex; 77 | border: 1px solid $border-color; 78 | border-bottom: 0; 79 | border-radius: 2px 2px 0 0; 80 | background-color: $athens-gray; 81 | 82 | .nav-item { 83 | padding: 1rem; 84 | border-right: 1px solid $border-color; 85 | border-bottom: 1px solid $border-color; 86 | position: relative; 87 | 88 | &.active { 89 | background-color: $white; 90 | color: $primary-color; 91 | border-bottom: 0; 92 | 93 | &::before { 94 | content: ''; 95 | display: block; 96 | width: 100%; 97 | position: absolute; 98 | top: 0; 99 | left: 0; 100 | height: 3px; 101 | background-color: $primary-color; 102 | } 103 | } 104 | 105 | &.disabled { 106 | background-color: $border-color; 107 | } 108 | 109 | &:hover:not(.active):not(.disabled) { 110 | cursor: pointer; 111 | background-color: $mischka; 112 | } 113 | } 114 | 115 | .nav-item-filler { 116 | max-width: 100%; 117 | height: 52px; 118 | flex: 1 1 auto; 119 | border-bottom: 1px solid $border-color; 120 | } 121 | } 122 | 123 | .office-hours-content { 124 | border: 1px solid $border-color; 125 | border-top: 0; 126 | border-bottom: 0; 127 | border-radius: 0 0 2px 2px; 128 | 129 | .empty-state { 130 | display: flex; 131 | flex-direction: column; 132 | align-items: center; 133 | padding: 2.5rem 0; 134 | border-bottom: 1px solid $border-color; 135 | 136 | .title { 137 | display: flex; 138 | align-items: center; 139 | 140 | .svg-icon { 141 | color: $manatee; 142 | margin-right: 12px; 143 | width: 1.5rem; 144 | height: 1.5rem; 145 | } 146 | 147 | .text { 148 | font-size: 1rem; 149 | font-weight: 600; 150 | } 151 | } 152 | 153 | .content { 154 | display: flex; 155 | flex-direction: column; 156 | 157 | .info-text { 158 | padding: 2.5rem 0 1rem; 159 | } 160 | 161 | select { 162 | width: 100%; 163 | margin: 0; 164 | height: 2rem; 165 | border-radius: 2px; 166 | } 167 | } 168 | } 169 | 170 | .office-hours { 171 | display: flex; 172 | padding: 1.5rem 1rem; 173 | border-bottom: 1px solid $border-color; 174 | 175 | select { 176 | margin: 0; 177 | } 178 | 179 | .day { 180 | font-size: 12px; 181 | font-weight: 600; 182 | width: 100px; 183 | line-height: 38px; 184 | } 185 | 186 | .intervals { 187 | list-style: none; 188 | margin: 0; 189 | flex-grow: 1; 190 | 191 | .interval { 192 | display: flex; 193 | align-items: center; 194 | justify-content: space-between; 195 | 196 | &:not(:first-child) { 197 | margin-top: 1rem; 198 | } 199 | 200 | select { 201 | height: 2rem; 202 | border-radius: 2px; 203 | } 204 | 205 | .hours { 206 | display: flex; 207 | align-items: center; 208 | 209 | input { 210 | height: 2rem; 211 | border-radius: 2px; 212 | border: 1px solid #c0c0ca; 213 | max-width: 88px; 214 | padding-left: 6px; 215 | padding-right: 6px; 216 | } 217 | 218 | .separator { 219 | margin: 0 1rem; 220 | } 221 | } 222 | 223 | .ui-timepicker-select { 224 | max-width: 88px; 225 | } 226 | } 227 | } 228 | } 229 | } 230 | } 231 | } 232 | -------------------------------------------------------------------------------- /submodules/strategyHours/views/layout.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 12 | 20 |
21 | 22 |
23 |
24 |
25 | {{i18n.strategy.hours.timezone}} 26 | {{companyTimezone}} 27 |
28 |
{{i18n.strategy.hours.listTitle}}
29 |
30 | {{#monsterPanelText i18n.strategy.hours.info "info" "fill-width"}} 31 |

{{i18n.strategy.hours.infoOne}}

32 |

{{i18n.strategy.hours.infoTwo}}

33 | {{/monsterPanelText}} 34 |
35 |
36 | 42 |
43 | 49 | 55 |
56 |
57 |
58 |
59 |
60 | 61 |
62 | {{i18n.cancel}} 63 | 64 |
65 |
66 |
67 | -------------------------------------------------------------------------------- /submodules/strategyHours/views/listing.html: -------------------------------------------------------------------------------- 1 |
2 | 13 |
14 | 37 | {{#each days}} 38 | {{#if intervals}} 39 |
40 |
41 | {{label}} 42 |
43 |
    44 | {{#each intervals}} 45 |
  • 46 |
    47 | 48 | 49 | {{@root.i18n.strategy.hours.to}} 50 | 51 | 52 |
    53 |
    54 | 64 |
    65 | 68 |
  • 69 | {{/each}} 70 |
71 |
72 | {{/if}} 73 | {{/each}} 74 |
75 | 76 |
77 | -------------------------------------------------------------------------------- /submodules/users/views/changePassword.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 | 8 |
9 |
10 | {{#unless _whitelabel.hide_user_passwords}} 11 |
12 | 13 |
14 | 15 |
16 |
17 |
18 | 19 |
20 | 21 |
22 |
23 | {{/unless}} 24 |
25 | {{#unless _whitelabel.hide_user_passwords}} 26 | {{#monsterText}} 27 | {{i18n.users.dialogChangePassword.help}} 28 |

29 | {{i18n.users.dialogChangePassword.resetPassword.text}} 30 | {{i18n.users.dialogChangePassword.resetPassword.linkTitle}}. 31 | {{/monsterText}} 32 | {{/unless}} 33 |
34 | 35 |
36 |
37 | {{ i18n.cancel }} 38 | 39 |
40 |
41 |
42 | -------------------------------------------------------------------------------- /submodules/users/views/changePin.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 | 8 |
9 |
10 |
11 | 12 | {{#monsterText}} 13 | {{i18n.users.dialogChangePin.help}} 14 | {{/monsterText}} 15 |
16 | 17 |
18 |
19 | {{ i18n.cancel }} 20 | 21 |
22 |
23 |
24 | -------------------------------------------------------------------------------- /submodules/users/views/changePresenceIDPopup.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{ i18n.users.presenceIDPopup.header }} 4 |
5 | 6 |
7 | {{#each numbers}} 8 |
{{ formatPhoneNumber this }}
9 | {{/each}} 10 |
11 | {{ i18n.users.presenceIDPopup.none}} 12 |
13 |
14 | 15 |
16 |
17 | {{ i18n.cancel }} 18 | 19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /submodules/users/views/creation.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

{{i18n.users.dialogCreationUser.createUser}}

5 |
6 |
7 |
8 | 9 | 10 |
11 |
12 | 13 | 14 |
15 |
16 |
17 |
18 | 19 | 20 |
21 | {{#unless _whitelabel.hide_user_passwords}} 22 |
23 | 24 | 25 |
26 | {{/unless}} 27 |
28 |
29 |
30 | 31 | 32 |
33 | {{#if licensedUserRoles}} 34 |
35 | 36 | 44 |
45 | {{/if}} 46 |
47 | 48 |
49 | 50 |
51 |
52 | 53 |
54 | {{#monsterCheckbox i18n.users.dialogCreationUser.createVmbox }} 55 | 56 | {{/monsterCheckbox}} 57 |
58 |
59 |
60 | 61 |
62 | {{#monsterCheckbox i18n.users.includeInDirectory }} 63 | 64 | {{/monsterCheckbox}} 65 |
66 |
67 |
68 | 69 |
70 | {{#monsterCheckbox i18n.users.dialogCreationUser.sendToDifferentEmail }} 71 | 72 | {{/monsterCheckbox}} 73 |
74 |
75 | 79 |
80 | 81 |
82 | {{#monsterCheckbox i18n.users.dialogCreationUser.sendWelcomeEmail }} 83 | 84 | {{/monsterCheckbox}} 85 |
86 |
87 |
88 | 89 | {{#if hasProvisioner}} 90 |
91 | 92 |
93 |

{{ i18n.users.dialogCreationUser.addDevice.title }}

94 |
95 | 96 |
97 |
98 | 99 | 107 |
108 |
109 | 110 | 111 |
112 |
113 | 114 |
115 |
116 | 117 | 122 |
123 |
124 | 125 | 126 |
127 |
128 | {{/if}} 129 |
130 |
131 | 135 |
136 |
137 | 138 | -------------------------------------------------------------------------------- /submodules/users/views/devices.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{ i18n.users.noAssignedDevices }} 6 |
7 | {{#each assignedDevices}} 8 |
9 |
10 | {{#isFeatureAvailable "smartpbx.users.devices.edit"}} 11 | 12 | {{/isFeatureAvailable}} 13 | {{ this.name }} 14 |
15 |
16 | {{else}} 17 | 18 | {{/each}} 19 |
20 |
21 | 22 | {{#isFeatureAvailable "smartpbx.users.devices.edit"}} 23 | 47 | {{/isFeatureAvailable}} 48 |
49 | -------------------------------------------------------------------------------- /submodules/users/views/extensions.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{ i18n.users.noAssignedExtensions }} 6 |
7 | {{#each extensions}} 8 |
9 |
10 | 11 | {{ this }} 12 |
13 |
14 | {{/each}} 15 |
16 |
17 | 18 |
19 | {{ i18n.users.addExtension }} 20 |
21 | {{ i18n.cancel }} 22 | 23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /submodules/users/views/feature-call_forward.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 12 | 13 | 24 |
25 | 26 |
27 |
28 | {{#monsterText 'info'}} 29 | {{ i18n.users.call_forward.failoverWarning }} 30 | {{/monsterText}} 31 |
32 |
33 |
34 | 35 |
36 | 37 |
38 |
39 | 40 | 44 | 45 | 50 | 55 | 60 |
61 | 62 | {{#if extra.timeoutTooShort}} 63 | {{#monsterText 'error'}} 64 | {{ i18n.users.call_forward.timeoutWarning }} 65 | {{/monsterText}} 66 | {{/if}} 67 |
68 | 69 |
70 |
71 | {{ i18n.cancel }} 72 | 73 |
74 |
75 |
76 | -------------------------------------------------------------------------------- /submodules/users/views/feature-call_recording.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 |
21 | {{ i18n.users.callRecording.toggleValues.inboundOnnet.title }} 22 |
23 | 24 | 25 | 26 |
27 |
28 | 29 |
30 | {{ i18n.users.callRecording.toggleValues.inboundOffnet.title }} 31 |
32 | 33 | 34 | 35 |
36 |
37 | 38 |
39 | {{ i18n.users.callRecording.toggleValues.outboundOnnet.title }} 40 |
41 | 42 | 43 | 44 |
45 |
46 | 47 |
48 | {{ i18n.users.callRecording.toggleValues.outboundOffnet.title }} 49 |
50 | 51 | 52 | 53 |
54 |
55 | 56 | {{#unless hasStorageConfigured}} 57 |
58 |
59 | {{ i18n.users.callRecording.urlLabel }} 60 | 61 |
62 |
63 | {{ i18n.users.callRecording.formatLabel }} 64 | 73 |
74 |
75 | {{ i18n.users.callRecording.timeLimitLabel }} 76 | 77 |
78 |
79 | {{/unless}} 80 |
81 |
82 | 83 |
84 |
85 | {{ i18n.cancel }} 86 | 87 |
88 |
89 |
90 | -------------------------------------------------------------------------------- /submodules/users/views/feature-caller_id.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 |
18 | {{#if allowAnyOwnedNumberAsCallerID }} 19 | {{ i18n.users.caller_id.currentCallerIdLabel }} 20 | {{#if caller_id.external.number }}{{ caller_id.external.number }}{{else}}{{i18n.users.caller_id.none}}{{/if}}
21 | {{/if}} 22 |
23 |
24 | {{ i18n.users.caller_id.dropdownLabel }} 25 |
26 |
27 |
28 | 29 | {{#monsterText}} 30 | {{i18n.users.caller_id.help}} 31 | {{/monsterText}} 32 |
33 | 34 |
35 |
36 | {{ i18n.cancel }} 37 | 38 |
39 |
40 |
41 | -------------------------------------------------------------------------------- /submodules/users/views/feature-conferencing.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 |
21 | 22 |
23 | {{#each listConferences}} 24 |
{{formatPhoneNumber this}}
25 | {{/each}} 26 |
27 |
28 | 29 |
30 | 31 | 32 |
33 | 34 |
35 | 36 | {{#monsterSwitch}} 37 | 38 | {{/monsterSwitch}} 39 |
40 |
41 | 42 | {{#monsterText}} 43 | {{i18n.users.conferencing.help}} 44 | {{/monsterText}} 45 |
46 | 47 |
48 |
49 | {{ i18n.cancel }} 50 | 51 |
52 |
53 |
54 | -------------------------------------------------------------------------------- /submodules/users/views/feature-do_not_disturb.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 | {{ i18n.cancel }} 21 | 22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /submodules/users/views/feature-faxing.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 |
21 | {{i18n.users.faxing.faxToEmail.title}} 22 |

23 | {{i18n.users.faxing.faxToEmail.text1}} 24 | 25 | {{i18n.users.faxing.faxToEmail.text2}} {{user.email}}. 26 |

27 |
28 |
29 | {{i18n.users.faxing.emailToFax.title}} 30 |

31 | {{i18n.users.faxing.emailToFax.text1}} 32 | {{i18n.users.faxing.emailToFax.default}} 33 | @{{account.realm}} 34 | {{i18n.users.faxing.emailToFax.text2}} 35 | {{i18n.users.faxing.emailToFax.default}}. 36 |
37 | {{i18n.users.faxing.emailToFax.text3}} 38 | {{user.email}}. 39 |

40 |
41 | 42 | {{i18n.users.faxing.emailToFax.help.showHelp}} 43 | 44 |
45 |
46 | 47 |
48 | 49 |
50 |
51 |
52 |
53 |
54 | {{#compare faxbox.cloud_state '===' 'registered'}} 55 | {{i18n.users.faxing.googlePrinter.title}} 56 |

57 | {{i18n.users.faxing.googlePrinter.text1}} 58 | {{i18n.users.faxing.googlePrinter.link}} 59 | {{i18n.users.faxing.googlePrinter.text2}} 60 | {{i18n.users.faxing.googlePrinter.link}}. 61 |

62 | {{/compare}} 63 |
64 |
65 |
66 | 67 |
68 |
69 | {{ i18n.cancel }} 70 | 71 |
72 |
73 |
74 | -------------------------------------------------------------------------------- /submodules/users/views/feature-find_me_follow_me.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 | {{ i18n.cancel }} 26 | 27 |
28 |
29 |
30 | -------------------------------------------------------------------------------- /submodules/users/views/feature-hotdesk.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 |
21 | {{ i18n.users.hotdesk.id }} 22 | 23 |
24 | 25 |
26 | 27 | {{#monsterCheckbox i18n.users.hotdesk.label}} 28 | 29 | {{/monsterCheckbox}} 30 | 31 | 32 |
33 | 34 | 39 |
40 |
41 | 42 |
43 |
44 | {{ i18n.cancel }} 45 | 46 |
47 |
48 |
49 | -------------------------------------------------------------------------------- /submodules/users/views/feature-music_on_hold.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 | {{ i18n.users.music_on_hold.dropdownLabel }} 21 | 27 | 30 |
31 |
32 | 33 | 34 | 35 | {{#if showMediaUploadDisclosure}} 36 |
37 |
38 | {{#monsterPanelText i18n.mediaUploadDisclosure.title "info" "fill-width"}} 39 | {{i18n.mediaUploadDisclosure.text}} 40 | {{/monsterPanelText}} 41 |
42 | {{/if}} 43 |
44 |
45 | 46 |
47 |
48 | {{ i18n.cancel }} 49 | 50 |
51 |
52 |
53 | -------------------------------------------------------------------------------- /submodules/users/views/feature-vmbox.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 11 | 16 |
17 | 18 |
19 |
20 | 21 |
22 | {{i18n.users.vmbox.text}} 23 |
24 | 25 | {{#if vmbox.transcription.isEnabled}} 26 |
27 | 30 | {{#monsterSwitch}} 31 | 32 | {{/monsterSwitch}} 33 |
34 | {{/if}} 35 | 36 |
37 | 40 | {{#monsterSwitch}} 41 | 42 | {{/monsterSwitch}} 43 |
44 | 45 |
46 |
47 | 52 |
53 | 54 |
55 | 60 |
61 | 62 | {{#monsterText}} 63 | {{replaceVar i18n.users.vmbox.vmToEmailHelp email}} 64 | {{/monsterText}} 65 |
66 | 67 |
68 |
69 | 70 |
71 |
72 | {{ i18n.cancel }} 73 | 74 |
75 |
76 |
77 | -------------------------------------------------------------------------------- /submodules/users/views/features.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{#each extra.mapFeatures}} 4 | {{#unless hidden}} 5 |
6 |
7 | 8 |
9 |
10 | {{title}} 11 |
12 |
13 | {{/unless}} 14 | {{/each}} 15 |
16 |
17 | -------------------------------------------------------------------------------- /submodules/users/views/layout.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{ i18n.users.title }} 6 | {{countUsers}} 7 |
8 | 9 | {{#isFeatureAvailable "smartpbx.users.add"}} 10 | 11 | 12 | {{ i18n.users.add }} 13 | 14 | {{/isFeatureAvailable}} 15 |
16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 |
24 |
25 |
{{ i18n.users.titleGrid.users }}
26 | {{#if showLicensedUserRoles}} 27 |
{{ i18n.users.titleGrid.userLicensedRoles }}
28 | {{/if}} 29 |
{{ i18n.users.titleGrid.extensions }}
30 |
{{ i18n.users.titleGrid.phoneNumbers }}
31 |
{{ i18n.users.titleGrid.devices }}
32 |
{{ i18n.users.titleGrid.features }}
33 |
34 |
35 |
36 | {{ i18n.users.noMatchingUser }} 37 |
38 |
39 | {{ i18n.users.noUsersConfigured }} 40 |
41 |
42 |
43 |
44 | -------------------------------------------------------------------------------- /submodules/users/views/licensed-roles.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | 14 |
15 |
16 |
17 | 18 |
19 |
20 | {{ i18n.cancel }} 21 | 22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /submodules/users/views/newExtension.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{ i18n.users.addNewExtension }} 4 | 5 | 6 |
7 |

{{ i18n.users.extensionAlreadyExist }}

8 |
9 | -------------------------------------------------------------------------------- /submodules/users/views/numbers.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{ i18n.users.noAssignedNumbers }} 6 |
7 | {{#each assignedNumbers}} 8 |
9 |
10 |
11 | 12 |
13 | {{#numberFeatures features}}{{/numberFeatures}} 14 | {{#compare state '===' 'port_in'}} 15 | 16 | {{/compare}} 17 |
18 |
19 | 20 |
21 | {{#isFeatureAvailable "smartpbx.users.phoneNumbers.edit"}} 22 | 23 | {{/isFeatureAvailable}} 24 | 25 | {{ formatPhoneNumber this.phoneNumber }} 26 | 27 |
28 |
29 | {{else}} 30 | 31 | {{/each}} 32 |
33 |
34 | 35 | {{#isFeatureAvailable "smartpbx.users.phoneNumbers.edit"}} 36 |
37 | 38 | {{ i18n.users.addFromSpare }} 39 | 40 | {{#unless hideBuyNumbers}} 41 | 51 | {{/unless}} 52 | 53 |
54 | {{ i18n.cancel }} 55 | 56 |
57 |
58 | {{/isFeatureAvailable}} 59 |
60 | -------------------------------------------------------------------------------- /submodules/users/views/numbersItemRow.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | {{#numberFeatures number.features}}{{/numberFeatures}} 7 | {{#compare number.state '===' 'port_in'}} 8 | 9 | {{/compare}} 10 |
11 |
12 |
13 | 14 | {{ formatPhoneNumber number.phoneNumber }} 15 |
16 |
17 | -------------------------------------------------------------------------------- /submodules/users/views/row.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
{{ extra.fullName }}
4 | 5 | {{#if extra.showLicensedUserRoles}} 6 |
7 | {{ extra.licensedUserRole }} 8 |
9 | {{/if}} 10 |
11 | {{#if extra.extension}} 12 | {{ extra.extension }} 13 | 14 | {{#if extra.additionalExtensions}} 15 | 16 | {{/if}} 17 | {{else}} 18 | {{ i18n.users.noExtension }} 19 | {{/if}} 20 |
21 |
22 | {{#if extra.phoneNumber}} 23 | {{ formatPhoneNumber extra.phoneNumber }} 24 | 25 | {{#if extra.additionalNumbers}} 26 | 27 | {{/if}} 28 | {{else}} 29 | {{ i18n.users.noNumber }} 30 | {{/if}} 31 |
32 |
33 | {{#each extra.devices}} 34 | {{#compare @index "<" 2}} 35 | 36 | {{telicon this.icon}} 37 | 38 | {{/compare}} 39 | {{else}} 40 | {{ i18n.users.noUserDevices }} 41 | {{/each}} 42 | 43 | {{#if extra.additionalDevices}} 44 | (+{{extra.additionalDevices.count}}) 45 | {{/if}} 46 |
47 |
" 5}} smaller{{/compare}}" data-type="features"> 48 | {{#if extra.hasFeatures}} 49 | {{#each extra.mapFeatures}} 50 | {{#if this.active}} 51 | 52 | {{/if}} 53 | {{/each}} 54 | {{else}} 55 | {{ i18n.users.noUserFeatures }} 56 | {{/if}} 57 |
58 |
59 | 60 | 63 |
64 | -------------------------------------------------------------------------------- /submodules/users/views/rowSpareDevice.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | {{ this.name }} 5 |
6 |
7 | -------------------------------------------------------------------------------- /submodules/vmboxes/views/emailRow.html: -------------------------------------------------------------------------------- 1 |
2 | {{ name }} 3 |
4 |
-------------------------------------------------------------------------------- /submodules/vmboxes/views/layout.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {{ i18n.vmboxes.title }} 6 | {{countVMBoxes}} 7 |
8 | 9 | {{#isFeatureAvailable "smartpbx.vmboxes.add"}} 10 | 11 | 12 | {{i18n.vmboxes.add }} 13 | 14 | {{/isFeatureAvailable}} 15 |
16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 |
24 |
25 |
{{ i18n.vmboxes.titleGrid.number }}
26 |
{{ i18n.vmboxes.titleGrid.name }}
27 |
{{ i18n.vmboxes.titleGrid.owner }}
28 |
{{ i18n.vmboxes.titleGrid.edit }}
29 |
30 |
31 |
32 | {{ i18n.devices.noMatchingVMBoxes }} 33 |
34 |
35 | {{ i18n.devices.noVMBoxesConfigured }} 36 |
37 |
38 |
39 |
40 | -------------------------------------------------------------------------------- /submodules/vmboxes/views/row.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{mailbox}} 5 |
6 | 7 |
8 | {{name}} 9 |
10 | 11 |
12 | {{friendlyOwnerName}} 13 |
14 | 15 |
16 | 17 |
18 |
19 |
-------------------------------------------------------------------------------- /views/app.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | {{ i18n.menuTitles.myOffice }} 7 |
8 |
9 | 10 |
11 | {{#isFeatureAvailable "smartpbx.numbers.manage"}} 12 |
13 |
14 | 15 | {{ i18n.menuTitles.numbers }} 16 |
17 |
18 | {{/isFeatureAvailable}} 19 | 20 |
21 |
22 | 23 | {{ i18n.menuTitles.users }} 24 |
25 |
26 | 27 | {{#isFeatureAvailable "smartpbx.groups.manage"}} 28 |
29 |
30 | 31 | {{ i18n.menuTitles.groups }} 32 |
33 |
34 | {{/isFeatureAvailable}} 35 | 36 |
37 |
38 | 39 | {{ i18n.menuTitles.mainNumber }} 40 |
41 |
42 |
43 | 44 |
45 |
46 | 47 | {{ i18n.menuTitles.callLogs }} 48 |
49 |
50 | 51 |
52 | {{#isFeatureAvailable "smartpbx.devices.manage"}} 53 |
54 |
55 | 56 | {{ i18n.menuTitles.devices }} 57 |
58 |
59 | {{/isFeatureAvailable}} 60 | 61 |
62 |
63 | 64 | {{ i18n.menuTitles.vmboxes }} 65 |
66 |
67 | 68 |
69 |
70 | 71 | {{ i18n.menuTitles.featureCodes }} 72 |
73 |
74 |
75 |
76 | 77 |
78 | 79 |
80 |
81 | --------------------------------------------------------------------------------