├── .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 |
2 |
16 |
--------------------------------------------------------------------------------
/submodules/groups/views/name.html:
--------------------------------------------------------------------------------
1 |
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 |
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 |
43 |
44 |
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 |
86 |
--------------------------------------------------------------------------------
/submodules/myOffice/views/musicOnHoldPopup.html:
--------------------------------------------------------------------------------
1 |
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 |
185 |
--------------------------------------------------------------------------------
/submodules/strategy/views/addOfficeHours.html:
--------------------------------------------------------------------------------
1 |
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 |
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 |
30 |
31 |
--------------------------------------------------------------------------------
/submodules/strategy/views/customConferenceGreeting.html:
--------------------------------------------------------------------------------
1 |
25 |
--------------------------------------------------------------------------------
/submodules/strategy/views/layout.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{ i18n.strategy.noNumberHelp }}
5 |
6 |
34 |
53 |
72 |
91 | {{#isFeatureAvailable "smartpbx.mainNumber.mainConferenceNumber.manage"}}
92 |
121 | {{/isFeatureAvailable}}
122 |
150 |
151 |
--------------------------------------------------------------------------------
/submodules/strategy/views/menuLine.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/submodules/strategy/views/menuPopup.html:
--------------------------------------------------------------------------------
1 |
126 |
--------------------------------------------------------------------------------
/submodules/strategy/views/popupEditFaxbox.html:
--------------------------------------------------------------------------------
1 |
31 |
--------------------------------------------------------------------------------
/submodules/strategy/views/popupRemoveFeatures.html:
--------------------------------------------------------------------------------
1 |
2 |
{{i18n.strategy.popupRemoveFeatures.questionPartOne}} {{formatPhoneNumber phoneNumber}} {{i18n.strategy.popupRemoveFeatures.questionPartTwo}}
3 |
25 |
29 |
--------------------------------------------------------------------------------
/submodules/strategy/views/strategy-calls.html:
--------------------------------------------------------------------------------
1 |
2 | {{#each tabs}}
3 | -
4 | {{label}}
5 |
6 | {{/each}}
7 |
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 |
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 |
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 |
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 |
19 |
20 |
--------------------------------------------------------------------------------
/submodules/strategyHolidays/views/importNationalHolidaysList.html:
--------------------------------------------------------------------------------
1 |
2 |
27 |
28 |
--------------------------------------------------------------------------------
/submodules/strategyHolidays/views/includeNationalHolidays.html:
--------------------------------------------------------------------------------
1 |
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 |
74 |
83 |
84 |
85 |
86 |
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 |
67 |
--------------------------------------------------------------------------------
/submodules/strategyHours/views/listing.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 | {{i18n.strategy.hours.allDays}}
5 |
6 | {{#each days}}
7 | -
8 | {{abbreviation}}
9 |
10 | {{/each}}
11 |
12 |
13 |
14 |
15 |
16 | {{telicon "clock"}}
17 |
18 | {{i18n.strategy.hours.emptyState.title}}
19 |
20 |
21 |
22 |
23 | {{i18n.strategy.hours.emptyState.text}}
24 |
25 |
35 |
36 |
37 | {{#each days}}
38 | {{#if intervals}}
39 |
40 |
41 | {{label}}
42 |
43 |
71 |
72 | {{/if}}
73 | {{/each}}
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/submodules/users/views/changePassword.html:
--------------------------------------------------------------------------------
1 |
42 |
--------------------------------------------------------------------------------
/submodules/users/views/changePin.html:
--------------------------------------------------------------------------------
1 |
24 |
--------------------------------------------------------------------------------
/submodules/users/views/changePresenceIDPopup.html:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 | {{#each numbers}}
8 |
{{ formatPhoneNumber this }}
9 | {{/each}}
10 |
11 | {{ i18n.users.presenceIDPopup.none}}
12 |
13 |
14 |
15 |
21 |
22 |
--------------------------------------------------------------------------------
/submodules/users/views/creation.html:
--------------------------------------------------------------------------------
1 |
2 |
130 |
131 |
132 |
133 |
134 |
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 |
25 |
26 |
--------------------------------------------------------------------------------
/submodules/users/views/feature-call_forward.html:
--------------------------------------------------------------------------------
1 |
76 |
--------------------------------------------------------------------------------
/submodules/users/views/feature-call_recording.html:
--------------------------------------------------------------------------------
1 |
90 |
--------------------------------------------------------------------------------
/submodules/users/views/feature-caller_id.html:
--------------------------------------------------------------------------------
1 |
41 |
--------------------------------------------------------------------------------
/submodules/users/views/feature-conferencing.html:
--------------------------------------------------------------------------------
1 |
54 |
--------------------------------------------------------------------------------
/submodules/users/views/feature-do_not_disturb.html:
--------------------------------------------------------------------------------
1 |
25 |
--------------------------------------------------------------------------------
/submodules/users/views/feature-faxing.html:
--------------------------------------------------------------------------------
1 |