ソースを参照

Merge pull request #851 from jitsi/ui-redesign-in-progress

Ui redesign in progress
master
hristoterezov 8年前
コミット
c602839e06
52個のファイルの変更2463行の追加2218行の削除
  1. バイナリ
      css/.DS_Store
  2. 56
    261
      css/_base.scss
  3. 25
    37
      css/_chat.scss
  4. 7
    16
      css/_contact_list.scss
  5. 31
    0
      css/_device_settings_dialog.scss
  6. 69
    76
      css/_font.scss
  7. 1
    1
      css/_jquery-impromptu.scss
  8. 3
    2
      css/_keyboard-shortcuts.scss
  9. 20
    2
      css/_login_menu.scss
  10. 37
    0
      css/_mixins.scss
  11. 0
    96
      css/_settingsmenu.scss
  12. 114
    0
      css/_side_toolbar_container.css
  13. 41
    5
      css/_toastr.scss
  14. 224
    0
      css/_toolbars.scss
  15. 34
    3
      css/_variables.scss
  16. 0
    31
      css/_videolayout_default.scss
  17. 3
    3
      css/_welcome_page.scss
  18. 11
    2
      css/main.scss
  19. 2
    20
      css/overlay/_overlay.scss
  20. 37
    0
      css/ringing/_ringing.scss
  21. バイナリ
      fonts/jitsi.eot
  22. 36
    31
      fonts/jitsi.svg
  23. バイナリ
      fonts/jitsi.ttf
  24. バイナリ
      fonts/jitsi.woff
  25. 942
    914
      fonts/selection.json
  26. バイナリ
      images/leftDropdownPointer.png
  27. 109
    136
      index.html
  28. 6
    2
      interface_config.js
  29. 23
    12
      lang/main.json
  30. 8
    8
      modules/UI/Feedback.js
  31. 54
    29
      modules/UI/UI.js
  32. 0
    1
      modules/UI/etherpad/Etherpad.js
  33. 0
    2
      modules/UI/recording/Recording.js
  34. 50
    22
      modules/UI/ring_overlay/RingOverlay.js
  35. 127
    0
      modules/UI/side_pannels/SideContainerToggler.js
  36. 0
    186
      modules/UI/side_pannels/SidePanelToggler.js
  37. 8
    27
      modules/UI/side_pannels/chat/Chat.js
  38. 11
    25
      modules/UI/side_pannels/contactlist/ContactList.js
  39. 61
    0
      modules/UI/side_pannels/profile/Profile.js
  40. 3
    47
      modules/UI/side_pannels/settings/SettingsMenu.js
  41. 0
    130
      modules/UI/toolbars/BottomToolbar.js
  42. 234
    27
      modules/UI/toolbars/Toolbar.js
  43. 28
    12
      modules/UI/toolbars/ToolbarToggler.js
  44. 2
    1
      modules/UI/util/MessageHandler.js
  45. 5
    23
      modules/UI/util/UIUtil.js
  46. 2
    4
      modules/UI/videolayout/FilmStrip.js
  47. 12
    4
      modules/UI/videolayout/LargeVideo.js
  48. 1
    1
      modules/UI/videolayout/LocalVideo.js
  49. 1
    1
      modules/UI/videolayout/RemoteVideo.js
  50. 1
    1
      modules/UI/videolayout/SmallVideo.js
  51. 7
    16
      modules/UI/videolayout/VideoLayout.js
  52. 17
    1
      service/UI/UIEvents.js

バイナリ
css/.DS_Store ファイルの表示


+ 56
- 261
css/_base.scss ファイルの表示

@@ -6,8 +6,8 @@
6 6
 html, body{
7 7
     margin:0px;
8 8
     height:100%;
9
-    color: #424242;
10
-    font-size: 14px;
9
+    color: $defaultColor;
10
+    font-size: 12px;
11 11
     font-weight: 400;
12 12
     background: #000000;
13 13
     overflow: hidden;
@@ -17,139 +17,10 @@ html, body, input, textarea, keygen, select, button {
17 17
     font-family: $baseFontFamily !important;
18 18
 }
19 19
 
20
-.right-panel {
21
-    display:none;
22
-    position:absolute;
23
-    float: right;
24
-    top: 0px;
25
-    bottom: 0px;
26
-    right: 0px;
27
-    width: 0px;
28
-    max-width: 200px;
29
-    overflow: hidden;
30
-    /* background-color:#dfebf1;*/
31
-    background-color:#FFFFFF;
32
-    border-left:1px solid #424242;
33
-    z-index: 5;
34
-}
35
-
36 20
 #nowebrtc {
37 21
     display:none;
38 22
 }
39 23
 
40
-#header_container {
41
-    z-index: 1014;
42
-}
43
-
44
-.toolbar_span {
45
-    display: inline-block;
46
-    position: relative;
47
-}
48
-
49
-#toolbar a.button:last-child::after {
50
-    content: none;
51
-}
52
-
53
-.button {
54
-    display: inline-block;
55
-    position: relative;
56
-    color: #FFFFFF;
57
-    top:0px;
58
-    padding-top: 10px;
59
-    width: 38px;
60
-    height: 28px;
61
-    cursor: pointer;
62
-    text-align: center;
63
-    text-shadow: 0 1px 0 rgba(255,255,255,.3), 0 -1px 0 rgba(0,0,0,.6);
64
-    z-index: 1;
65
-    font-size: 1.44em !important;
66
-    vertical-align: middle;
67
-}
68
-
69
-.button[disabled] {
70
-    opacity: 0.5;
71
-}
72
-
73
-.toolbar_span>span {
74
-    display: inline-block;
75
-    position: absolute;
76
-    font-size: 7pt;
77
-    color: #ffffff;
78
-    text-align:center;
79
-    cursor: pointer;
80
-}
81
-
82
-#toolbar_button_chat, #chatBottomButton, #contactListButton, #numberOfParticipants {
83
-    -webkit-transition: all .5s ease-in-out;
84
-       -moz-transition: all .5s ease-in-out;
85
-            transition: all .5s ease-in-out;
86
-}
87
-/*#ffde00*/
88
-#toolbar_button_chat.active, #contactListButton.glowing, #chatBottomButton.glowing {
89
-    -webkit-text-shadow:    -1px 0 10px #21B9FC,
90
-                            0 1px 10px #21B9FC,
91
-                            1px 0 10px #21B9FC,
92
-                            0 -1px 10px #21B9FC;
93
-    -moz-text-shadow:   1px 0 10px #21B9FC,
94
-                        0 1px 10px #21B9FC,
95
-                        1px 0 10px #21B9FC,
96
-                        0 -1px 10px #21B9FC;
97
-    text-shadow:    -1px 0 10px #21B9FC,
98
-                    0 1px 10px #21B9FC,
99
-                    1px 0 10px #21B9FC,
100
-                    0 -1px 10px #21B9FC;
101
-}
102
-
103
-#toolbar_button_hangup {
104
-    color: #ff0000;
105
-    font-size: 1.4em;
106
-}
107
-
108
-#numberOfParticipants {
109
-    position: absolute;
110
-    top: 0px;
111
-    right: -1px;
112
-    color: white;
113
-    width: 13px;
114
-    height: 13px;
115
-    line-height: 13px;
116
-    font-weight: bold;
117
-    border-radius: 1px;
118
-    font-size: 11px;
119
-    text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
120
-}
121
-
122
-#contactListButton.active #numberOfParticipants {
123
-    color: #21B9FC;
124
-}
125
-
126
-#toolbar {
127
-    display:inline-block;
128
-    position:relative;
129
-    top:5px;
130
-    margin-left:auto;
131
-    margin-right:auto;
132
-    height:38px;
133
-    width:auto;
134
-    background-color: rgba(0,0,0,0.5);
135
-    border-radius: 1px;
136
-    pointer-events: auto;
137
-}
138
-
139
-#toolbar_button_record {
140
-    -webkit-transition: all .5s ease-in-out;
141
-    -moz-transition: all .5s ease-in-out;
142
-    transition: all .5s ease-in-out;
143
-}
144
-
145
-a.button:hover,
146
-a.bottomToolbarButton:hover {
147
-    cursor: pointer;
148
-    background: rgba(255, 255, 255, 0.1);
149
-    border-radius: 1px;
150
-    -webkit-border-radius: 1px;
151
-}
152
-
153 24
 .no-fa-video-camera, .fa-microphone-slash {
154 25
     color: #636363;
155 26
 }
@@ -158,25 +29,17 @@ input[type='text'], input[type='password'], textarea {
158 29
     -webkit-user-select: text;
159 30
     user-select: text;
160 31
     display: inline-block;
161
-    font-size: 14px;
162 32
     padding: 5px;
163
-    background: #f3f3f3;
164
-    border-radius: 3px;
165
-    font-weight: 100;
166
-    line-height: 20px;
167
-    height: 40px;
168
-    color: #333;
33
+    color: $defaultDarkColor;
34
+    border-radius: $borderRadius;
35
+    line-height: 32px;
36
+    height: 32px;
169 37
     text-align: left;
170
-    border:1px solid #ACD8F0;
38
+    border:1px solid $inputBorderColor;
171 39
     outline: none; /* removes the default outline */
172 40
     resize: none; /* prevents the user-resizing, adjust to taste */
173 41
 }
174 42
 
175
-input[type='text'], input[type='password'], textarea:focus {
176
-    box-shadow: inset 0 0 3px 2px #ACD8F0; /* provides a more style-able
177
-                                         replacement to the outline */
178
-}
179
-
180 43
 textarea {
181 44
     overflow: hidden;
182 45
     word-wrap: break-word;
@@ -187,28 +50,33 @@ button.no-icon {
187 50
     padding: 0 1em;
188 51
 }
189 52
 
190
-button {
191
-    border: none;
192
-    height: 35px;
193
-    padding: 0 1em 0 2em;
194
-    position: relative;
195
-    border-radius: 1px;
196
-    font-weight: bold;
197
-    color: #fff;
198
-    line-height: 35px;
199
-    background: #2c8ad2;
200
-}
201
-
202 53
 button, input, select, textarea {
203 54
     margin: 0;
204 55
     vertical-align: baseline;
56
+    color: $defaultDarkColor;
57
+    background: $inputLightBackground;
58
+    font-size: 12px;
59
+    border: none;
60
+    box-shadow: none;
61
+    outline: none;
205 62
 }
206 63
 
207
-button, input[type="button"], input[type="reset"], input[type="submit"] {
64
+button, select, input[type="button"],
65
+input[type="reset"], input[type="submit"] {
66
+    height: 32px;
67
+    line-height: 32px;
68
+    padding-left: 4px;
69
+    padding-right: 4px;
208 70
     cursor: pointer;
209
-    -webkit-appearance: button;
210 71
 }
211 72
 
73
+button {
74
+    color: #FFF;
75
+    background-color: $buttonBackground !important;
76
+    border-radius: $borderRadius;
77
+}
78
+
79
+button,
212 80
 form {
213 81
     display: block;
214 82
 }
@@ -222,78 +90,10 @@ form {
222 90
     color: rgba(255,255,255,.50);
223 91
 }
224 92
 
225
-#feedbackButton {
226
-    position: absolute;
227
-    bottom: 60;
228
-    left: 60;
229
-    overflow: visible;
230
-    color: rgba(255,255,255,.50);
231
-}
232
-
233
-#feedbackButtonDiv {
234
-    display: none;
235
-    position: absolute;
236
-    background-color: rgba(0,0,0,.50);
237
-    border-radius: 50%;
238
-    width: 100px;
239
-    height: 100px;
240
-    bottom: -50px;
241
-    left: -50px;
242
-    z-index: 100;
243
-    overflow: hidden;
244
-    transition: all 2s ease-in-out;
245
-}
246
-
247
-#feedbackButtonDiv.hidden {
248
-    bottom: -246px;
249
-}
250
-
251
-div.feedbackButton:hover {
252
-    transform: scale(1.3);
253
-}
254
-
255
-#bottomToolbar {
256
-    display:block;
257
-    position: absolute;
258
-    right: 0;
259
-    margin-right: 5px;
260
-    bottom: 40px;
261
-    width: 29px;
262
-    border-radius: 1px;
263
-    color: #FFF;
264
-    background: rgba(0,0,0,0.5);
265
-    z-index: 6; /*+1 from #remoteVideos*/
266
-}
267
-
268
-.bottomToolbarButton {
269
-    display: inline-block;
270
-    position: relative;
271
-    color: #FFFFFF;
272
-    top: 0;
273
-    padding-top: 6px;
274
-    margin: 2px;
275
-    width: 25px;
276
-    height: 20px;
277
-    cursor: pointer;
278
-    font-size: 10pt;
279
-    text-align: center;
280
-    text-shadow: 0px 1px 0px rgba(255,255,255,.3), 0px -1px 0px rgba(0,0,0,.7);
281
-    z-index: 1;
282
-}
283
-
284 93
 .active {
285 94
     background-color: #00ccff;
286 95
 }
287 96
 
288
-.bottomToolbar_span>span {
289
-    display: inline-block;
290
-    position: absolute;
291
-    font-size: 7pt;
292
-    color: #ffffff;
293
-    text-align: center;
294
-    cursor: pointer;
295
-}
296
-
297 97
 .glow
298 98
 {
299 99
     text-shadow: 0px 0px 30px #06a5df, 0px 0px 10px #06a5df, 0px 0px 5px #06a5df,0px 0px 3px #06a5df;
@@ -312,7 +112,8 @@ div.feedbackButton:hover {
312 112
 
313 113
 .leftwatermark {
314 114
     display: none;
315
-    left: 15;
115
+    left: $defaultToolbarSize;
116
+    margin-left: 10px;
316 117
     background-image:url(../images/watermark.png);
317 118
     background-position: center left;
318 119
 }
@@ -334,32 +135,6 @@ div.feedbackButton:hover {
334 135
     z-index: 100;
335 136
 }
336 137
 
337
-#toast-container.notification-bottom-right {
338
-    bottom: 140px;
339
-    right: 5px;
340
-}
341
-
342
-#toast-container.notification-bottom-right-center {
343
-    right: 205px;
344
-}
345
-
346
-#toast-container .toast-info {
347
-    -webkit-box-shadow: none;
348
-    box-shadow: none;
349
-}
350
-
351
-.toast-close-button {
352
-    right: -7px;
353
-    top: -19px;
354
-}
355
-
356
-#toast-container .toast-info {
357
-    background-color: black;
358
-    border: 1px solid #3a3a3a;
359
-    width: 220px;
360
-    padding: 10px 10px 10px 50px;
361
-}
362
-
363 138
 .connected {
364 139
     color: #21B9FC;
365 140
     font-size: 12px;
@@ -370,14 +145,34 @@ div.feedbackButton:hover {
370 145
     font-size: 12px;
371 146
 }
372 147
 
373
-.toast-close-button:hover,
374
-.toast-close-button:focus {
375
-    color: #ffffff;
376
-    opacity: 1;
377
-    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
378
-    filter: alpha(opacity=100);
148
+/**
149
+ * Hides an element.
150
+ */
151
+.hide {
152
+    display: none !important;
379 153
 }
380 154
 
381
-.toast-message .nickname {
382
-    font-weight: bold;
155
+/**
156
+ * Shows an element.
157
+ */
158
+.show {
159
+    display: block !important;
383 160
 }
161
+
162
+/**
163
+ * Shows an inline element.
164
+ */
165
+.show-inline {
166
+    display: inline-block !important;
167
+}
168
+
169
+/**
170
+ * Shows a flex element.
171
+ */
172
+.show-flex {
173
+    display: -webkit-box !important;
174
+    display: -moz-box !important;
175
+    display: -ms-flexbox !important;
176
+    display: -webkit-flex !important;
177
+    display: flex !important;
178
+}

+ 25
- 37
css/_chat.scss ファイルの表示

@@ -1,10 +1,4 @@
1
-#chatspace {
2
-    display: none;
3
-    background-color: black;
4
-    border-left: 1px solid #424242;
5
-}
6
-
7
-#chatspace * {
1
+#chat_container * {
8 2
     -webkit-user-select: text;
9 3
     user-select: text;
10 4
 }
@@ -22,8 +16,25 @@
22 16
     overflow-y: scroll;
23 17
     overflow-x: hidden;
24 18
     word-wrap: break-word;
19
+
20
+    a:link {
21
+        color: rgb(184, 184, 184);
22
+    }
23
+
24
+    a:visited {
25
+        color: white;
26
+    }
27
+
28
+    a:hover {
29
+        color: rgb(213, 213, 213);
30
+    }
31
+
32
+    a:active {
33
+        color: black;
34
+    }
25 35
 }
26
-#chatspace.is-conversation-mode #chatconversation {
36
+
37
+#chat_container.is-conversation-mode #chatconversation {
27 38
     visibility: visible;
28 39
 }
29 40
 
@@ -65,7 +76,7 @@
65 76
     box-shadow: none;
66 77
 }
67 78
 
68
-#chatspace.is-conversation-mode #usermsg {
79
+#chat_container.is-conversation-mode #usermsg {
69 80
     visibility: visible;
70 81
 }
71 82
 
@@ -80,7 +91,7 @@
80 91
     width: 95%;
81 92
 }
82 93
 
83
-#chatspace.is-conversation-mode #nickname {
94
+#chat_container.is-conversation-mode #nickname {
84 95
     visibility: hidden;
85 96
 }
86 97
 
@@ -98,26 +109,19 @@
98 109
     position: absolute;
99 110
 }
100 111
 
101
-#bottomUnreadMessages {
102
-    top: 5px;
103
-    left: 10px;
104
-    position: absolute;
105
-    font-size: 8px;
106
-}
107
-
108
-#chatspace .username {
112
+#chat_container .username {
109 113
     float: left;
110 114
     padding-left: 5px;
111 115
     font-weight: bold;
112 116
 }
113 117
 
114
-#chatspace .timestamp {
118
+#chat_container .timestamp {
115 119
     float: right;
116 120
     padding-right: 5px;
117 121
     font-size: 11px;
118 122
 }
119 123
 
120
-#chatspace .usermessage {
124
+#chat_container .usermessage {
121 125
     padding-top: 20px;
122 126
     padding-left: 5px;
123 127
 }
@@ -178,7 +182,7 @@
178 182
     visibility: hidden;
179 183
 }
180 184
 
181
-#chatspace.is-conversation-mode #smileysarea {
185
+#chat_container.is-conversation-mode #smileysarea {
182 186
     visibility: visible;
183 187
 }
184 188
 
@@ -234,20 +238,4 @@
234 238
 
235 239
 #usermsg::-webkit-scrollbar-track-piece {
236 240
     background: #3a3a3a;
237
-}
238
-
239
-a:link {
240
-    color: rgb(184, 184, 184);
241
-}
242
-
243
-a:visited {
244
-    color: white;
245
-}
246
-
247
-a:hover {
248
-    color: rgb(213, 213, 213);
249
-}
250
-
251
-a:active {
252
-    color: black;
253 241
 }

+ 7
- 16
css/_contact_list.scss ファイルの表示

@@ -1,21 +1,6 @@
1
-#contactlist {
2
-    display: none;
3
-    background-color: black;
1
+#contacts_container {
4 2
     cursor: default;
5 3
 
6
-    > div.title {
7
-        text-align: left;
8
-        padding: 7px 10px;
9
-        margin: 2px;
10
-        color: #21B9FC;
11
-        font-size: 11pt;
12
-        border-bottom: 1px solid #676767;
13
-
14
-        > span {
15
-            margin-left: 5px;
16
-        }
17
-    }
18
-
19 4
     > ul#contacts {
20 5
         position: absolute;
21 6
         top: 31px;
@@ -37,11 +22,17 @@
37 22
     >li {
38 23
         list-style-type: none;
39 24
         text-align: left;
25
+        white-space: nowrap;
40 26
         color: #FFF;
41 27
         font-size: 10pt;
42 28
         padding: 7px 10px;
43 29
         margin: 2px;
44 30
 
31
+        &:hover,
32
+        &:active {
33
+            background: $toolbarSelectBackground;
34
+        }
35
+
45 36
         > p {
46 37
             display: inline-block;
47 38
             vertical-align: middle;

+ 31
- 0
css/_device_settings_dialog.scss ファイルの表示

@@ -0,0 +1,31 @@
1
+.settingsContent {
2
+    display: flex;
3
+    display: -webkit-flex;
4
+
5
+    #localVideoPreview {
6
+        width: 50%;
7
+        align-self: baseline;
8
+    }
9
+
10
+    .deviceSelection {
11
+        display: flex;
12
+        display: -webkit-flex;
13
+        -webkit-flex: 1;
14
+        flex: 1;
15
+        flex-direction: column;
16
+        flex-wrap: nowrap;
17
+        justify-content: flex-start;
18
+        align-items: left;
19
+        margin-left: 10px;
20
+
21
+        .device {
22
+            display: flex;
23
+            margin-bottom: 5px;
24
+
25
+            select {
26
+                flex: 1;
27
+                margin_right: 5px;
28
+            }
29
+        }
30
+    }
31
+}

+ 69
- 76
css/_font.scss ファイルの表示

@@ -1,15 +1,3 @@
1
-@font-face {
2
-    font-family: 'open_sanslight';
3
-    src: url('../fonts/OpenSans-Light-webfont.eot');
4
-    src: url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
5
-    url('../fonts/OpenSans-Light-webfont.woff') format('woff'),
6
-    url('../fonts/OpenSans-Light-webfont.ttf') format('truetype'),
7
-    url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg');
8
-    font-weight: normal;
9
-    font-style: normal;
10
-
11
-}
12
-
13 1
 @font-face {
14 2
     font-family: 'jitsi';
15 3
     src:url('../fonts/jitsi.eot?94d075');
@@ -36,100 +24,105 @@
36 24
     -moz-osx-font-smoothing: grayscale;
37 25
 }
38 26
 
39
-.icon-contactList:before {
40
-    content: "\e615";
27
+.icon-feedback:before {
28
+  content: "\e91d";
41 29
 }
42
-.icon-avatar:before {
43
-    content: "\e616";
30
+.icon-toggle-filmstrip:before {
31
+  content: "\e91c";
44 32
 }
45
-.icon-callRetro:before {
46
-    content: "\e611";
33
+.icon-avatar:before {
34
+  content: "\e901";
47 35
 }
48
-.icon-callModern:before {
49
-    content: "\e612";
36
+.icon-autorenew:before {
37
+  content: "\e903";
50 38
 }
51
-.icon-recDisable:before {
52
-    content: "\e613";
39
+.icon-hangup:before {
40
+  content: "\e905";
53 41
 }
54
-.icon-recEnable:before {
55
-    content: "\e614";
42
+.icon-chat:before {
43
+  content: "\e906";
56 44
 }
57
-.icon-authenticate:before {
58
-    content: "\e1ae";
45
+.icon-download:before {
46
+  content: "\e902";
59 47
 }
60
-.icon-kick1:before {
61
-    content: "\e60f";
48
+.icon-edit:before {
49
+  content: "\e907";
62 50
 }
63
-.icon-kick:before {
64
-    content: "\e610";
51
+.icon-share-doc:before {
52
+  content: "\e908";
65 53
 }
66
-.icon-share-desktop:before {
67
-	content: "\e602";
54
+.icon-telephone:before {
55
+  content: "\e909";
68 56
 }
69
-.icon-chat-simple:before {
70
-	content: "\e606";
57
+.icon-kick:before {
58
+  content: "\e904";
71 59
 }
72 60
 .icon-full-screen:before {
73
-	content: "\e60d";
61
+  content: "\e90b";
74 62
 }
75 63
 .icon-exit-full-screen:before {
76
-	content: "\e60e";
64
+  content: "\e90c";
77 65
 }
78
-.icon-link:before {
79
-	content: "\e600";
66
+.icon-star-full:before {
67
+  content: "\e90a";
80 68
 }
81
-.icon-chat:before {
82
-	content: "\e601";
69
+.icon-security:before {
70
+  content: "\e90d";
83 71
 }
84
-.icon-presentation:before {
85
-	content: "\e603";
72
+.icon-security-locked:before {
73
+  content: "\e90e";
86 74
 }
87
-.icon-security:before {
88
-	content: "\e604";
75
+.icon-reload:before {
76
+  content: "\e90f";
89 77
 }
90
-.icon-share-doc:before {
91
-	content: "\e605";
78
+.icon-microphone:before {
79
+  content: "\e910";
92 80
 }
93
-.icon-telephone:before {
94
-    content: "\e611";
81
+.icon-mic-empty:before {
82
+  content: "\e911";
95 83
 }
96
-.icon-security-locked:before {
97
-	content: "\e607";
84
+.icon-mic-disabled:before {
85
+  content: "\e912";
98 86
 }
99
-.icon-camera:before {
100
-	content: "\e608";
87
+.icon-contactList:before {
88
+  content: "\e91b";
101 89
 }
102
-.icon-camera-disabled:before {
103
-	content: "\e609";
90
+.icon-link:before {
91
+  content: "\e913";
104 92
 }
105
-.icon-mic-disabled:before {
106
-	content: "\e60a";
93
+.icon-shared-video:before {
94
+  content: "\e914";
107 95
 }
108
-.icon-microphone:before {
109
-	content: "\e60b";
96
+.icon-settings:before {
97
+  content: "\e915";
110 98
 }
111
-
112
-.icon-hangup:before {
113
-    content: "\e617";
99
+.icon-star:before {
100
+  content: "\e916";
114 101
 }
115
-
116
-.icon-reload:before {
117
-    content: "\e618";
102
+.icon-share-desktop:before {
103
+  content: "\e917";
118 104
 }
119
-
120
-.icon-filmstrip:before {
121
-    content: "\e619";
105
+.icon-camera:before {
106
+  content: "\e918";
107
+}
108
+.icon-camera-disabled:before {
109
+  content: "\e919";
110
+}
111
+.icon-volume:before {
112
+  content: "\e91a";
113
+}
114
+.icon-connection-lost:before {
115
+  content: "\e900";
122 116
 }
123
-
124 117
 .icon-connection:before {
125
-    line-height: normal;
126
-    content: "\e61a";
118
+  content: "\e61a";
127 119
 }
128
-
129
-.icon-settings:before {
130
-    content: "\e61b";
120
+.icon-recDisable:before {
121
+  content: "\e613";
131 122
 }
132
-
133
-.icon-dialPad:before {
134
-    content: "\e61c";
123
+.icon-recEnable:before {
124
+  content: "\e614";
135 125
 }
126
+.icon-presentation:before {
127
+  content: "\e603";
128
+}

+ 1
- 1
css/_jquery-impromptu.scss ファイルの表示

@@ -55,7 +55,7 @@ div.jqi .jqibuttons{
55 55
 div.jqi .jqibuttons button{ 
56 56
 	margin: 0;
57 57
 	padding: 5px 20px;
58
-	background-color: transparent;
58
+	background-color: transparent !important;
59 59
 	font-weight: normal; 
60 60
 	border: none;
61 61
 	border-left: solid 1px #e4e4e4; 

+ 3
- 2
css/_keyboard-shortcuts.scss ファイルの表示

@@ -2,11 +2,12 @@
2 2
     display: none;
3 3
     position: absolute;
4 4
     bottom: 20px;
5
-    left: 20px;
5
+    left: $defaultToolbarSize;
6 6
     overflow: hidden;
7 7
     padding: 20px;
8
+    margin-left: 10px;
8 9
     z-index: 10;
9
-    border-radius: 15px;
10
+    border-radius: $borderRadius;
10 11
     background-attachment: scroll;
11 12
     background-size: auto auto;
12 13
     color: rgba(255, 255, 255, .8);

+ 20
- 2
css/_login_menu.scss ファイルの表示

@@ -1,6 +1,7 @@
1 1
 /*Initialize*/
2 2
 ul.loginmenu {
3
-    font-family: inherit;
3
+    font-family: $baseFontFamily;
4
+    line-height: normal;
4 5
     display:none;
5 6
     position: absolute;
6 7
     margin: 0;
@@ -44,6 +45,10 @@ span.authentication:hover ul.loginmenu, ul.loginmenu:hover {
44 45
     display:block !important;
45 46
 }
46 47
 
48
+span.authentication {
49
+    position: relative;
50
+}
51
+
47 52
 a.disabled {
48 53
     color: gray !important;
49 54
     pointer-events: none;
@@ -55,4 +60,17 @@ a.disabled {
55 60
     position: absolute;
56 61
     top: -30px;
57 62
     left: 0px;
58
-}
63
+}
64
+
65
+.loginmenu.extendedToolbarPopup {
66
+    left: 55px;
67
+    top: 0px;
68
+}
69
+
70
+ul.loginmenu.extendedToolbarPopup:after {
71
+    content: url('../images/leftDropdownPointer.png');
72
+    display: block;
73
+    position: absolute;
74
+    top: 18px;
75
+    left: -7px;
76
+}

+ 37
- 0
css/_mixins.scss ファイルの表示

@@ -0,0 +1,37 @@
1
+/**
2
+ * Animation mixin.
3
+ */
4
+@mixin animation($animate...) {
5
+  $max: length($animate);
6
+  $animations: '';
7
+
8
+  @for $i from 1 through $max {
9
+    $animations: #{$animations + nth($animate, $i)};
10
+
11
+    @if $i < $max {
12
+      $animations: #{$animations + ", "};
13
+    }
14
+  }
15
+  -webkit-animation: $animations;
16
+  -moz-animation:    $animations;
17
+  -o-animation:      $animations;
18
+  animation:         $animations;
19
+}
20
+
21
+/**
22
+ * Keyframes mixin.
23
+ */
24
+@mixin keyframes($animationName) {
25
+  @-webkit-keyframes #{$animationName} {
26
+    @content;
27
+  }
28
+  @-moz-keyframes #{$animationName} {
29
+    @content;
30
+  }
31
+  @-o-keyframes #{$animationName} {
32
+    @content;
33
+  }
34
+  @keyframes #{$animationName} {
35
+    @content;
36
+  }
37
+}

+ 0
- 96
css/_settingsmenu.scss ファイルの表示

@@ -1,96 +0,0 @@
1
-#settingsmenu {
2
-    display: none;
3
-    background: black;
4
-    color: #21B9FC;
5
-    overflow-y: auto;
6
-}
7
-
8
-#settingsmenu input, select {
9
-    margin-top: 10px;
10
-    margin-left: 10%;
11
-    width: 80%;
12
-    font-size: 14px;
13
-    background: #3a3a3a;
14
-    border: none;
15
-    box-shadow: none;
16
-    color: #a7a7a7;
17
-}
18
-
19
-#settingsmenu>div.title {
20
-    text-align: left;
21
-    padding: 7px 10px;
22
-    margin: 2px;
23
-    font-size: 11pt;
24
-    border-bottom: 1px solid #676767;
25
-}
26
-
27
-#settingsmenu>div.title>span {
28
-    margin-left: 5px;
29
-}
30
-
31
-#settingsmenu .arrow-up {
32
-    width: 0;
33
-    height: 0;
34
-    border-left: 5px solid transparent;
35
-    border-right: 5px solid transparent;
36
-    border-bottom: 5px solid #3a3a3a;
37
-    position: relative;
38
-    top: 10px;
39
-    margin-left: auto;
40
-    margin-right: auto;
41
-}
42
-
43
-#settingsmenu #avatar {
44
-    width: 24%;
45
-    left: 38%;
46
-    border-radius: 25px;
47
-    position: relative;
48
-}
49
-
50
-#languages_selectbox {
51
-    height: 40px;
52
-    cursor: pointer;
53
-}
54
-
55
-#startMutedOptions,
56
-#followMeOptions {
57
-    padding-left: 10%;
58
-    text-indent: -10%;
59
-    margin-top: 10px;
60
-    display: none; /* hide by default */
61
-    /* clearfix */
62
-    overflow: auto;
63
-    zoom: 1;
64
-}
65
-
66
-#startAudioMuted,
67
-#startVideoMuted,
68
-#followMeCheckBox {
69
-    width: 13px !important;
70
-}
71
-
72
-.startMutedLabel,
73
-.followMeLabel {
74
-    width: 94%;
75
-    float: left;
76
-    cursor: pointer;
77
-}
78
-
79
-#devicesOptions {
80
-    display: none;
81
-    margin-top: 10px;
82
-}
83
-
84
-#devicesOptions label {
85
-    display: block;
86
-    margin-top: 15px;
87
-}
88
-
89
-#devicesOptions span {
90
-    padding-left: 10%;
91
-}
92
-
93
-#devicesOptions select {
94
-    height: 40px;
95
-    cursor: pointer;
96
-}

+ 114
- 0
css/_side_toolbar_container.css ファイルの表示

@@ -0,0 +1,114 @@
1
+/**
2
+ * Toolbar side panel main container element.
3
+ */
4
+#sideToolbarContainer {
5
+    display: inline-block;
6
+    position:absolute;
7
+    top: 0px;
8
+    left: $defaultToolbarSize;
9
+    width: 0%;
10
+    height: 100%;
11
+    max-width: 200px;
12
+    background-color: rgba(0,0,0,0.8);
13
+    z-index: 800;
14
+    overflow: hidden;
15
+
16
+    /**
17
+     * Labels inside the side panel.
18
+     */
19
+    label {
20
+        color: $defaultSemiDarkColor;
21
+    }
22
+
23
+    /**
24
+     * Form elements and blocks.
25
+     */
26
+    input, label, select, button, a, .sideToolbarBlock {
27
+        display: inline-block;
28
+        margin-top: 15px;
29
+        margin-left: 10%;
30
+        width: 80%;
31
+    }
32
+
33
+    /**
34
+     * Specify colors for edit elements.
35
+     */
36
+    select, input[type="button"], input[type="text"],
37
+    input[type="reset"], input[type="submit"] {
38
+        color: $defaultColor;
39
+        background: $inputBackground;
40
+        border: none;
41
+    }
42
+
43
+    /**
44
+     * Specify styling of elements inside a block.
45
+     */
46
+    .sideToolbarBlock {
47
+        input, label, button, a, select {
48
+            margin-top: 5px;
49
+            margin-left: 0;
50
+            width: 100%;
51
+        }
52
+
53
+        .startMutedLabel,
54
+        .followMeLabel {
55
+            display: inline;
56
+            margin-top: 0;
57
+        }
58
+    }
59
+
60
+    /**
61
+     * Inner container, for example contact list, settings or profile.
62
+     */
63
+    .sideToolbarContainer__inner {
64
+        display: none;
65
+        width: 200px;
66
+        color: #FFF;
67
+
68
+        /**
69
+         * Titles and subtitles of inner containers.
70
+         */
71
+        > div.title,
72
+          div.subTitle {
73
+            color: $defaultColor !important;
74
+            text-align: left;
75
+            margin: 10px 0px 10px 0px;
76
+            padding: 5px 10px 5px 10px;
77
+        }
78
+
79
+        /**
80
+         * Main title size.
81
+         */
82
+        > div.title {
83
+            font-size: 16px;
84
+        }
85
+
86
+        /**
87
+         * Subtitle specific properties.
88
+         */
89
+        > div.subTitle {
90
+            font-size: 12px;
91
+            background: $inputSemiBackground !important;
92
+            margin-top: 20px !important;
93
+            margin-bottom: 8px !important;
94
+        }
95
+
96
+        /**
97
+         * First element after a title.
98
+         */
99
+        .first {
100
+            margin-top: 0px !important;
101
+        }
102
+    }
103
+}
104
+
105
+#device_settings {
106
+    width : auto !important;
107
+    text-align: center;
108
+}
109
+
110
+#startAudioMuted,
111
+#startVideoMuted,
112
+#followMeCheckBox {
113
+    width: 13px !important;
114
+}

+ 41
- 5
css/_toastr.scss ファイルの表示

@@ -19,32 +19,42 @@
19 19
 .toast-message label {
20 20
   color: #ffffff;
21 21
 }
22
+
23
+.toast-message .nickname {
24
+  font-weight: bold;
25
+}
26
+
22 27
 .toast-message a:hover {
23 28
   color: #cccccc;
24 29
   text-decoration: none;
25 30
 }
31
+
26 32
 .toast-close-button {
27 33
   position: relative;
28 34
   right: -0.3em;
29 35
   top: -0.3em;
30 36
   float: right;
31
-  font-size: 20px;
37
+  font-size: 15px;
38
+  height: 15px;
39
+  width: 15px;
32 40
   font-weight: bold;
33 41
   color: #ffffff;
42
+  background: transparent !important;
34 43
   -webkit-text-shadow: 0 1px 0 #ffffff;
35 44
   text-shadow: 0 1px 0 #ffffff;
36 45
   opacity: 0.8;
37 46
   -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
38 47
   filter: alpha(opacity=80);
39 48
 }
49
+
40 50
 .toast-close-button:hover,
41 51
 .toast-close-button:focus {
42
-  color: #000000;
52
+  color: #ffffff;
43 53
   text-decoration: none;
44 54
   cursor: pointer;
45
-  opacity: 0.4;
46
-  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
47
-  filter: alpha(opacity=40);
55
+  opacity: 1;
56
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
57
+  filter: alpha(opacity=100);
48 58
 }
49 59
 /*Additional properties for button version
50 60
  iOS requires the button element instead of an anchor tag.
@@ -173,4 +183,30 @@ button.toast-close-button {
173 183
     padding: 15px 15px 15px 15px;
174 184
     width: 25em;
175 185
   }
186
+}
187
+
188
+#toast-container.notification-bottom-right {
189
+  bottom: 140px;
190
+  right: 5px;
191
+}
192
+
193
+#toast-container.notification-bottom-right-center {
194
+  right: 205px;
195
+}
196
+
197
+#toast-container .toast-info {
198
+  -webkit-box-shadow: none;
199
+  box-shadow: none;
200
+}
201
+
202
+.toast-close-button {
203
+  right: -7px;
204
+  top: -19px;
205
+}
206
+
207
+#toast-container .toast-info {
208
+  background-color: black;
209
+  border: 1px solid #3a3a3a;
210
+  width: 220px;
211
+  padding: 10px 10px 10px 50px;
176 212
 }

+ 224
- 0
css/_toolbars.scss ファイルの表示

@@ -0,0 +1,224 @@
1
+.toolbar {
2
+    background-color: rgba(0,0,0,0.5);
3
+    position: relative;
4
+    z-index: $toolbarZ;
5
+    height: 100%;
6
+    pointer-events: auto;
7
+}
8
+
9
+#mainToolbarContainer{
10
+    display: block;
11
+    position: absolute;
12
+    text-align: center;
13
+    top:0;
14
+    left:0;
15
+    right:0;
16
+    z-index: $toolbarZ;
17
+    pointer-events: none;
18
+    min-height: 100px;
19
+    transform: translateY(-100%);
20
+    -webkit-transform: translateY(-100%);
21
+}
22
+
23
+#subject {
24
+    position: relative;
25
+    z-index: 3;
26
+    width: auto;
27
+    padding: 5px;
28
+    margin-left: 40%;
29
+    margin-right: 40%;
30
+    text-align: center;
31
+    background: linear-gradient(to bottom, rgba(255,255,255,.85) , rgba(255,255,255,.35));
32
+    box-shadow: 0 0 2px #000000, 0 0 10px #000000;
33
+    border-bottom-left-radius: 12px;
34
+    border-bottom-right-radius: 12px;
35
+}
36
+
37
+#mainToolbar {
38
+    height: $defaultToolbarSize;
39
+    display: inline-block;
40
+    position: relative;
41
+    top: 30px;
42
+    margin-left: auto;
43
+    margin-right: auto;
44
+    width: auto;
45
+    border-radius: 4px;
46
+
47
+    .first {
48
+        border-bottom-left-radius: 4px;
49
+        border-top-left-radius: 4px;
50
+    }
51
+
52
+    .last {
53
+        border-bottom-right-radius: 4px;
54
+        border-top-right-radius: 4px;
55
+    }
56
+}
57
+
58
+#extendedToolbar {
59
+    display: flex;
60
+    display: -webkit-box;
61
+    display: -moz-box;
62
+    display: -ms-flexbox;
63
+    display: -webkit-flex;
64
+    width: $defaultToolbarSize;
65
+    height: 100%;
66
+    top: 0px;
67
+    left: 0px;
68
+    padding-top: 10px;
69
+    flex-direction: column;
70
+    flex-wrap: nowrap;
71
+    justify-content: flex-start;
72
+    align-items: center;
73
+    transform: translateX(-100%);
74
+    -webkit-transform: translateX(-100%);
75
+}
76
+
77
+#toolbar_button_hangup {
78
+    color: #BF2117;
79
+    font-size: $hangupFontSize !important;
80
+}
81
+
82
+#toolbar_button_etherpad {
83
+    display: none;
84
+}
85
+
86
+#numberOfParticipants {
87
+  position: absolute;
88
+  top: 5px;
89
+  line-height: 13px;
90
+  font-weight: bold;
91
+  font-size: 11px;
92
+}
93
+
94
+#mainToolbar a.button:last-child::after {
95
+    content: none;
96
+}
97
+
98
+.button {
99
+    display: inline-block;
100
+    position: relative;
101
+    color: #FFFFFF;
102
+    top:0px;
103
+    width: 50px;
104
+    height: 50px;
105
+    cursor: pointer;
106
+    text-align: center;
107
+    z-index: 1;
108
+    font-size: $toolbarFontSize !important;
109
+    line-height: 50px !important;
110
+    vertical-align: middle;
111
+}
112
+
113
+.button[disabled] {
114
+    opacity: 0.5;
115
+}
116
+
117
+a.button:hover,
118
+a.button:active,
119
+a.button.selected {
120
+    cursor: pointer;
121
+    // sum opacity with background layer should give us 0.8
122
+    background: $toolbarSelectBackground;
123
+}
124
+
125
+a.button>#avatar {
126
+    width: 30px;
127
+    border-radius: 50%;
128
+    padding-top: 10px;
129
+    padding-bottom: 10px;
130
+}
131
+
132
+#feedbackButton {
133
+    margin-top: auto;
134
+}
135
+
136
+/**
137
+ * START of slide in animation for extended toolbar.
138
+ */
139
+@include keyframes(slideInX) {
140
+  0% { transform: translateX(-100%); }
141
+  100% { transform: translateX(0%); }
142
+}
143
+
144
+.slideInX {
145
+  @include animation('slideInX .5s forwards');
146
+}
147
+
148
+@include keyframes(slideOutX) {
149
+  0% { transform: translateX(0%); }
150
+  100% { transform: translateX(-100%); }
151
+}
152
+
153
+.slideOutX {
154
+  @include animation('slideOutX .5s forwards');
155
+}
156
+
157
+@include keyframes(slideInExtX) {
158
+    0% { transform: translateX(-500%); }
159
+    100% { transform: translateX(0%); }
160
+}
161
+
162
+.slideInExtX {
163
+  @include animation('slideInExtX .5s forwards');
164
+}
165
+
166
+@include keyframes(slideOutExtX) {
167
+    0% { transform: translateX(0%); }
168
+    100% { transform: translateX(-500%); }
169
+}
170
+
171
+.slideOutExtX {
172
+  @include animation('slideOutExtX .5s forwards');
173
+}
174
+
175
+/**
176
+ * END of slide out animation for extended toolbar.
177
+ */
178
+
179
+/**
180
+ * START of slide in / out animation for main toolbar.
181
+ */
182
+@include keyframes(slideInY) {
183
+    100% { transform: translateY(0%); }
184
+}
185
+
186
+.slideInY {
187
+  @include animation('slideInY .5s forwards');
188
+}
189
+
190
+@include keyframes(slideOutY) {
191
+    0% { transform: translateY(0%); }
192
+    100% { transform: translateY(-100%); }
193
+}
194
+
195
+.slideOutY {
196
+    @include animation('slideOutY .5s forwards');
197
+}
198
+/**
199
+ * END of slide in / out animation for main toolbar.
200
+ */
201
+
202
+/**
203
+ * START of slide in animation for extended toolbar panel.
204
+ */
205
+@include keyframes(slideInExt) {
206
+    from { width: 0px; }
207
+    to   { width: 200px; } // TO FIX: Make this value a percentage.
208
+}
209
+
210
+.slideInExt {
211
+    @include animation("slideInExt .5s forwards");
212
+}
213
+
214
+@include keyframes(slideOutExt) {
215
+  from { width: 200px; } // TO FIX: Make this value a percentage.
216
+  to   { width: 0px; }
217
+}
218
+
219
+.slideOutExt {
220
+  @include animation("slideOutExt .5s forwards");
221
+}
222
+/**
223
+ * END of slide in animation for extended toolbar panel.
224
+ */

+ 34
- 3
css/_variables.scss ファイルの表示

@@ -1,5 +1,36 @@
1 1
 /**
2
-*   Style variables
3
-*/
4
-
2
+ * Style variables
3
+ */
5 4
 $baseFontFamily: 'open_sanslight', 'Helvetica Neue', Helvetica, Arial, sans-serif;
5
+$toolbarFontSize: 1.9em;
6
+$hangupFontSize: 2em;
7
+
8
+/**
9
+ * Size variables.
10
+ */
11
+$defaultToolbarSize: 50px;
12
+
13
+/**
14
+ * Color variables.
15
+ */
16
+$defaultColor: #F1F1F1;
17
+$defaultSemiDarkColor: #ACACAC;
18
+$defaultDarkColor: #4F4F4F;
19
+$defaultBackground: #474747;
20
+$toolbarSelectBackground: rgba(0, 0, 0, .6);
21
+$inputBackground: rgba(132, 132, 132, .5);
22
+$inputSemiBackground: rgba(132, 132, 132, .8);
23
+$inputLightBackground: #EBEBEB;
24
+$inputBorderColor: #EBEBEB;
25
+$buttonBackground: #44A5FF;
26
+
27
+/**
28
+ * Misc.
29
+ */
30
+$borderRadius: 4px;
31
+
32
+/**
33
+ * Z-indexes. TODO: Replace this by a function.
34
+ */
35
+$toolbarZ: 900;
36
+$overlayZ: 800;

+ 0
- 31
css/_videolayout_default.scss ファイルの表示

@@ -141,10 +141,6 @@
141 141
     z-index: 0;
142 142
 }
143 143
 
144
-#toolbar_button_etherpad {
145
-    display: none;
146
-}
147
-
148 144
 #remoteVideos .videocontainer>span.focusindicator,
149 145
 #remoteVideos .videocontainer>div.remotevideomenu {
150 146
     position: absolute;
@@ -357,33 +353,6 @@
357 353
     z-index: 20; /*The reload button should appear on top of the header!*/
358 354
 }
359 355
 
360
-#header{
361
-    display:none;
362
-    position:absolute;
363
-    text-align:center;
364
-    top:0;
365
-    left:0;
366
-    right:0;
367
-    z-index:10;
368
-    pointer-events: none;
369
-    min-height: 100px;
370
-}
371
-
372
-#subject {
373
-    position: relative;
374
-    z-index: 3;
375
-    width: auto;
376
-    padding: 5px;
377
-    margin-left: 40%;
378
-    margin-right: 40%;
379
-    text-align: center;
380
-    background: linear-gradient(to bottom, rgba(255,255,255,.85) , rgba(255,255,255,.35));
381
-    box-shadow: 0 0 2px #000000, 0 0 10px #000000;
382
-    border-bottom-left-radius: 12px;
383
-    border-bottom-right-radius: 12px;
384
-    display: none;
385
-}
386
-
387 356
 .audiolevel {
388 357
     display: inline-block;
389 358
     position: absolute;

+ 3
- 3
css/_welcome_page.scss ファイルの表示

@@ -1,4 +1,3 @@
1
-
2 1
 #disable_welcome {
3 2
     display:none;
4 3
 }
@@ -59,6 +58,7 @@
59 58
     font-size: 18px;
60 59
     font-weight: 500;
61 60
     padding-left: 20px;
61
+    color: $defaultDarkColor;
62 62
 }
63 63
 
64 64
 #enter_room_field {
@@ -188,9 +188,9 @@
188 188
 #reload_roomname
189 189
 {
190 190
     width: 30px;
191
-    height: 19px;
192 191
     color: #acacac;
193
-    margin-top: 22px;
192
+    font-size: 1.9em;
193
+    line-height: 55px;
194 194
     z-index: 3;
195 195
     float:  left;
196 196
     cursor: pointer;

+ 11
- 2
css/main.scss ファイルの表示

@@ -4,6 +4,12 @@
4 4
 
5 5
 /* Variables END */
6 6
 
7
+/* Mixins BEGIN */
8
+
9
+@import "mixins";
10
+
11
+/* Mixins END */
12
+
7 13
 /* Fonts BEGIN */
8 14
 
9 15
 @import 'font';
@@ -15,7 +21,7 @@
15 21
 
16 22
 @import 'toastr';
17 23
 @import 'base';
18
-@import 'overlay';
24
+@import 'overlay/overlay';
19 25
 @import 'videolayout_default';
20 26
 @import 'jquery-impromptu';
21 27
 @import 'modaldialog';
@@ -27,8 +33,11 @@
27 33
 @import 'jitsi_popover';
28 34
 @import 'contact_list';
29 35
 @import 'chat';
36
+@import 'ringing/ringing';
30 37
 @import 'welcome_page';
31
-@import 'settingsmenu';
38
+@import 'toolbars';
39
+@import 'side_toolbar_container';
40
+@import 'device_settings_dialog';
32 41
 @import 'feedback';
33 42
 @import 'jquery.contextMenu';
34 43
 @import 'keyboard-shortcuts';

css/_overlay.scss → css/overlay/_overlay.scss ファイルの表示

@@ -1,11 +1,10 @@
1
-
2 1
 .overlay {
3 2
     position: fixed;
4 3
     left: 0;
5 4
     top: 0;
6 5
     width: 100%;
7 6
     height: 100%;
8
-    z-index: 1013;
7
+    z-index: $overlayZ;
9 8
     background: #21B9FC; /* Old browsers */
10 9
     opacity: 0.75;
11 10
     display: block;
@@ -19,7 +18,7 @@
19 18
     width: 100%;
20 19
     height: 100%;
21 20
     position: fixed;
22
-    z-index: 1013;
21
+    z-index: $overlayZ;
23 22
 }
24 23
 
25 24
 .overlay_content {
@@ -36,23 +35,6 @@
36 35
     margin-left: -200px;
37 36
 }
38 37
 
39
-.overlay_avatar {
40
-    width: 200px;
41
-    height: 200px;
42
-    position: relative;
43
-    border-radius: 100px;
44
-    z-index: 1013;
45
-    float: left;
46
-    margin-left: 100px;
47
-}
48
-
49
-.overlay_text {
50
-    position: relative;
51
-    width: 400px;
52
-    z-index: 1013;
53
-    margin-top: 50px;
54
-    float: left;
55
-}
56 38
 
57 39
 .overlay_text_small {
58 40
     font-size: 18px;

+ 37
- 0
css/ringing/_ringing.scss ファイルの表示

@@ -0,0 +1,37 @@
1
+.ringing {
2
+    display: block;
3
+    left: 0;
4
+    top: 0;
5
+    width: 100%;
6
+    height: 100%;
7
+    position: fixed;
8
+    z-index: $overlayZ;
9
+    //background: linear-gradient(transparent, #000);
10
+    background: $defaultBackground; /* Old browsers */
11
+    opacity: 0.8;
12
+
13
+    &__content {
14
+        position: absolute;
15
+        width: 400px;
16
+        height: 250px;
17
+        left: 50%;
18
+        top: 50%;
19
+        margin-left: -200px;
20
+        margin-top: -125px;
21
+        font-weight: 400;
22
+        font-size: 14px;
23
+        text-align: center;
24
+    }
25
+
26
+    &__avatar {
27
+        width: 100px;
28
+        height: 100px;
29
+        border-radius: 50%;
30
+    }
31
+
32
+    &__caller-info {
33
+        .mention {
34
+            color: #333;
35
+        }
36
+    }
37
+}

バイナリ
fonts/jitsi.eot ファイルの表示


+ 36
- 31
fonts/jitsi.svg ファイルの表示

@@ -4,36 +4,41 @@
4 4
 <metadata>Generated by IcoMoon</metadata>
5 5
 <defs>
6 6
 <font id="jitsi" horiz-adv-x="1024">
7
-<font-face units-per-em="1024" ascent="960" descent="-64" />
7
+<font-face units-per-em="1024" ascent="1024" descent="0" />
8 8
 <missing-glyph horiz-adv-x="1024" />
9
-<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10
-<glyph unicode="&#xe600;" d="M831.678 16.386h-144.885v258.653c-45.729 29.159-41.794 84.953-24.574 109.307 11.939 16.905 22.43 34.662 23.663 57.004 0.423 8.241 8.303 19.031 15.847 23.364 26.122 15.037 38.223 39.632 50.12 65.116 3.143 6.714 7.392 13.187 12.3 18.753 8.471 9.686 12.295 19.264 6.115 31.922-1.466 2.972 1.318 8.326 2.779 12.362 4.335 12.106 10.326 23.745 13.169 36.148 3.522 15.399 5.398 31.305 6.244 47.086 0.379 6.543-6.074 13.574-5.351 19.986 3.486 32.030-14.612 56.346-24.785 84.189-12.509 34.28-37.036 55.732-58.681 81.26-4.074 4.843-5.225 13.125-5.563 19.942-0.722 14.63-6.752 21.875-22.048 19.898-6.161-0.805-12.808-2.526-18.474-1.019-4.969 1.316-12.408 6.288-12.702 10.13-1.553 19.393-8.285 22.577-28.098 19.305-12.406-2.062-28.527 9.134-40.677 17.587-10.15 7.049-18.941 10.065-30.751 7.175-4.928-1.187-11.598-0.973-15.716 1.466-4.461 2.634-8.837 4.226-13.169 5.119v0.722c-0.975 0-1.976-0.17-2.934-0.276-0.975 0.106-1.951 0.276-2.908 0.276v-0.722c-4.355-0.893-8.726-2.485-13.169-5.119-4.167-2.441-10.811-2.652-15.718-1.466-11.851 2.89-20.598-0.126-30.751-7.175-12.212-8.453-28.287-19.648-40.671-17.587-19.816 3.272-26.591 0.085-28.119-19.305-0.299-3.844-7.73-8.816-12.7-10.13-5.692-1.509-12.32 0.212-18.497 1.019-15.27 1.976-21.302-5.269-22.024-19.898-0.338-6.819-1.486-15.102-5.565-19.942-21.622-25.528-46.154-46.98-58.684-81.26-10.171-27.843-28.271-52.161-24.765-84.189 0.699-6.412-5.736-13.443-5.395-19.986 0.87-15.78 2.74-31.687 6.267-47.086 2.843-12.403 8.835-24.042 13.187-36.148 1.466-4.033 4.229-9.387 2.784-12.362-6.203-12.658-2.379-22.236 6.115-31.922 4.887-5.565 9.134-12.039 12.277-18.753 11.874-25.484 24.001-50.079 50.125-65.116 7.516-4.332 15.417-15.122 15.863-23.364 1.21-22.342 11.701-40.099 23.64-57.004 18.33-25.954 21.194-86.95-34.216-114.687-76.673-38.336-154.083-75.357-232.624-109.632-49.189-21.498-73.891-57.6-82.238-108.192-2.549-15.331-5.862-30.539-7.88-45.961-3.014-22.956-7.839-69.874-7.839-69.874h831.678v80.386zM1188.556 80.89h-144.89v-144.89h-147.481v144.89h-144.885v147.481h144.885v144.888h147.481v-144.888h144.89v-147.481z" horiz-adv-x="1189" />
11
-<glyph unicode="&#xe601;" d="M956.063 962.932h-819.824c-73.036 0-132.489-60.717-132.489-135.316v-540.205c0-74.537 59.453-135.246 132.489-135.246h35.826v-212.941l344.987 212.941h439.011c72.964 0 132.42 60.711 132.42 135.246v540.202c0 74.602-59.456 135.318-132.42 135.318zM496.5 293.887l-195.714-123.997v123.997h-158.261v527.257h807.189l0.064-527.255h-453.278zM239.062 715.554h605.126v-110.62h-605.126v110.62zM239.062 522.476h605.126v-110.615h-605.126v110.615z" horiz-adv-x="1088" />
12
-<glyph unicode="&#xe602;" d="M955.816 960.317h-822.841c-73.303 0-132.975-60.931-132.975-135.844v-542.186c0-74.851 59.672-135.785 132.975-135.785h822.841c73.239 0 132.916 60.934 132.916 135.785v542.186c0 74.913-59.677 135.844-132.916 135.844zM949.51 288.784h-810.226v529.223h810.164l0.062-529.223zM945.219 0.34c0-35.738-28.261-64.66-63.207-64.66h-675.228c-34.949 0-63.209 28.921-63.209 64.66v29.618c0 35.7 28.261 64.657 63.209 64.657h675.228c34.946 0 63.207-28.957 63.207-64.657v-29.618zM776.792 342.434l-302.669 302.605 112.411 112.316 302.545-302.602v-112.318z" horiz-adv-x="1089" />
13
-<glyph unicode="&#xe603;" d="M952.495 955.065h-818.689c-72.81 0-132.183-60.63-132.183-135.162v-750.719c0-74.473 59.372-135.101 132.183-135.101h818.686c72.936 0 132.314 60.625 132.314 135.101v750.722c0.003 74.532-59.378 135.159-132.311 135.159zM946.346 75.651h-806.14v737.822h806.015l0.126-737.822zM685.753 674.544h216.911v-566.758h-216.911v566.758zM428.672 546.002h216.911v-438.216h-216.911v438.216zM172.339 417.46h216.161v-309.677h-216.161v309.677z" horiz-adv-x="1088" />
14
-<glyph unicode="&#xe604;" d="M878.259 965.513c-163.545 0-296.573-133.036-296.573-296.612v-43.752h-448.909c-73.14 0-132.777-60.909-132.777-135.751v-412.768c0-74.777 59.637-135.678 132.777-135.678h564.152c73.265 0 132.919 60.901 132.919 135.678v412.768c0 70.054-52.267 127.895-119.040 135.009v44.494c0 92.367 75.154 167.49 167.451 167.49 92.305 0 167.462-75.12 167.462-167.49v-77.422c0-35.681 28.883-64.564 64.556-64.564 35.69 0 64.569 28.883 64.569 64.564v77.422c-0.003 163.576-133.028 296.612-296.587 296.612z" horiz-adv-x="1179" />
15
-<glyph unicode="&#xe605;" d="M1.518 641.614h277.533v319.798c0 0-78.033-8.102-176.18-111.633-98.139-103.529-101.353-208.165-101.353-208.165zM683.281 961.412h-339.684v-384.596l-342.080 0.251-1.515 3.468v-510.502c0-73.845 61.4-133.979 136.847-133.979h546.434c75.514 0 136.911 60.137 136.911 133.979v757.403c-0.003 73.843-61.397 133.976-136.914 133.976zM691.854 145.164h-572.848v92.788h572.845v-92.788zM691.854 338.802h-572.848v92.783h572.845v-92.783z" horiz-adv-x="820" />
16
-<glyph unicode="&#xe606;" d="M953.901 962.387h-819.775c-72.965 0-132.418-60.712-132.418-135.344v-540.168c0-74.567 59.453-135.279 132.418-135.279h35.823v-212.891l344.966 212.891h438.986c72.963 0 132.415 60.709 132.415 135.279v540.168c0.003 74.632-59.45 135.344-132.415 135.344zM494.429 293.354l-195.769-124.001v124.001h-158.184v527.252h807.078l0.124-527.252h-453.249z" horiz-adv-x="1089" />
17
-<glyph unicode="&#xe607;" d="M709.515 620.094v44.455c0 163.090-132.662 295.749-295.749 295.749-163.093 0-295.752-132.659-295.752-295.749v-44.455c-66.226-7.393-118.013-64.915-118.013-134.607v-411.623c0-74.629 59.481-135.365 132.472-135.365h562.583c73.059 0 132.534 60.736 132.534 135.365v411.623c0 69.697-51.792 127.219-118.074 134.607zM413.765 831.537c92.043 0 166.987-74.944 166.987-166.987v-43.632h-333.978v43.632c0 92.043 74.883 166.987 166.99 166.987z" horiz-adv-x="828" />
18
-<glyph unicode="&#xe608;" d="M1223.129 717.217l-180.128-175.796v217.716c0 74.673-59.512 135.496-132.599 135.496h-634.716c-73.084 0-132.596-60.823-132.596-135.496v-609.237c0-74.673 59.512-135.496 132.596-135.496h634.716c73.084 0 132.599 60.82 132.599 135.496v172.679l193.45-153.712c48.784-35.558 96.695 5.178 96.695 40.424v483.533c-0.003 35.248-55.897 71.306-110.017 24.393zM601.169 199.935c-141.111 0-255.524 114.411-255.524 255.521s114.411 255.521 255.524 255.521c141.108 0 255.519-114.411 255.519-255.521 0-141.113-114.408-255.521-255.519-255.521zM599.045 600.249c-80.474 0-145.727-65.253-145.727-145.729 0-80.471 65.25-145.727 145.727-145.727s145.729 65.256 145.729 145.727c0 80.474-65.253 145.729-145.729 145.729z" horiz-adv-x="1334" />
19
-<glyph unicode="&#xe609;" d="M1223.934 717.147l-180.299-175.956v217.848c0 7.661-0.666 15.148-1.902 22.432l73.695 65.346c26.349 23.41 28.841 63.8 5.369 90.24-23.475 26.406-63.803 28.872-90.273 5.4l-1009.019-894.712c-26.408-23.41-28.841-63.806-5.398-90.209 12.607-14.237 30.183-21.539 47.85-21.539 15.076 0 30.214 5.305 42.39 16.1l95.841 84.979c20.995-14.627 46.26-23.232 73.592-23.232h635.191c73.099 0 132.66 60.807 132.66 135.537v172.868l193.659-153.955c48.815-35.46 96.765 5.248 96.765 40.584v483.829c0.003 35.305-55.933 71.386-110.123 24.44zM601.515 199.448c-58.81 0-112.566 20.216-155.526 53.797l82.93 73.533c20.863-11.665 44.849-18.386 70.47-18.386 80.533 0 145.832 65.299 145.832 145.835 0 19.421-3.896 37.857-10.857 54.713l86.847 77.001c22.848-38.259 36.012-82.969 36.012-130.782 0-141.214-114.493-255.71-255.707-255.71zM345.797 455.16c0 141.216 114.496 255.715 255.717 255.715 21.501 0 42.075-3.434 61.986-8.429l216.757 192.191h-604.474c-73.138 0-132.697-60.838-132.697-135.597v-518.074l205.894 182.543c-1.308 10.486-3.184 20.853-3.184 31.651z" horiz-adv-x="1334" />
20
-<glyph unicode="&#xe60a;" d="M1121.124 938.866c-23.48 26.413-63.883 28.849-90.296 5.372l-1009.306-894.905c-26.413-23.418-28.852-63.816-5.434-90.232 12.612-14.243 30.224-21.547 47.893-21.547 15.050 0 30.224 5.307 42.403 16.108l257.072 227.934c33.225-22.863 69.988-39.678 108.611-49.713-70.191-35.653-118.771-107.715-118.771-191.894h431.872c0 85.737-50.329 159.115-122.765 194.079 54.95 14.49 105.842 39.965 147.497 77.496 51.888 46.712 113.712 131.515 113.712 270.329v130.323c0 18.812-7.924 35.767-20.585 47.798l212.664 188.558c26.419 23.477 28.849 63.816 5.434 90.294zM791.535 481.891c0-157.985-117.649-229.923-226.99-229.923-35.214 0-68.659 7.217-98.285 20.786l55.735 49.416c14.733-4.59 30.356-7.132 46.609-7.132 89.357 0 161.984 72.687 161.984 161.979v30.1l60.947 54.042v-79.269zM730.589 793.867c0 89.298-72.625 161.984-161.984 161.984-89.298 0-161.984-72.687-161.984-161.984v-316.85c0-0.25 0-0.498 0-0.748l323.969 287.25v30.348zM350.795 426.69c-3.246 17.483-5.119 35.782-5.119 55.201v130.323c0 36.406-29.6 66.004-66.006 66.004-36.466 0-66.004-29.597-66.004-66.004v-130.323c0-57.198 11.115-107.026 29.099-150.931l108.030 95.73z" horiz-adv-x="1137" />
21
-<glyph unicode="&#xe60b;" d="M858.414 679.944c-36.595 0-66.246-29.652-66.246-66.182v-130.725c0-158.421-117.982-230.597-227.635-230.597-58.674 0-112.618 19.87-151.86 55.959-44.23 40.819-67.696 101.203-67.696 174.64v130.725c0 36.53-29.654 66.182-66.182 66.182-36.53 0-66.182-29.652-66.182-66.182v-130.725c0-195.834 119.494-314.763 259.177-351.040-70.408-35.71-119.176-108.014-119.176-192.431h433.118c0 85.993-50.409 159.621-123.029 194.572 55.079 14.64 106.121 40.127 147.886 77.79 52.050 46.877 114.008 131.925 114.008 271.106v130.725c0 36.53-29.59 66.182-66.184 66.182zM568.571 315.719c-89.589 0-162.459 72.932-162.459 162.521v317.665c0 89.589 72.87 162.459 162.459 162.459 89.592 0 162.524-72.87 162.524-162.459v-317.665c0.003-89.592-72.929-162.521-162.524-162.521z" horiz-adv-x="1137" />
22
-<glyph unicode="&#xe60c;" d="M512.356 960c-282.456 0-512.356-229.838-512.356-512.478 0-282.389 229.9-512.227 512.356-512.227 282.515 0 512.414 229.838 512.414 512.227 0 282.64-229.9 512.478-512.414 512.478zM512.356 14.856c-238.545 0-432.671 194.126-432.671 432.666 0 238.796 194.126 432.858 432.671 432.858 238.601 0 432.856-194.062 432.856-432.858 0-238.54-194.255-432.666-432.856-432.666zM512.545 854.962c-224.755 0-407.508-182.75-407.508-407.315 0-224.563 182.75-407.315 407.508-407.315 224.437 0 407.187 182.755 407.187 407.315-0.003 224.566-182.75 407.315-407.187 407.315zM512.545 127.323c-176.715 0-320.453 143.804-320.453 320.324 0 176.523 143.737 320.324 320.453 320.324 176.523 0 320.196-143.802 320.196-320.324 0-176.52-143.673-320.324-320.196-320.324zM283.851 562.789l-0.954-1.398v-234.413l0.954-1.398c15.757-23.060 36.473-44.542 61.699-63.797l8.961-6.801v378.341l-8.961-6.735c-25.1-19.191-45.814-40.544-61.699-63.799zM415.637 665.729l-3.621-1.334v-440.36l3.621-1.398c18.683-7.055 38.887-11.94 61.766-14.931l6.224-0.762v474.415l-6.163-0.762c-22.237-2.795-43.016-7.753-61.827-14.869zM547.367 680.599l-6.165 0.762v-474.415l6.165 0.762c22.301 2.793 43.077 7.811 61.763 14.864l3.685 1.4v440.488l-3.685 1.334c-18.811 7.053-39.525 12.010-61.763 14.805zM740.98 562.789c-15.692 23.002-36.473 44.48-61.699 63.797l-8.894 6.86v-378.469l8.894 6.801c25.351 19.381 46.132 40.862 61.699 63.861l0.89 1.398v234.352l-0.89 1.4z" horiz-adv-x="1025" />
23
-<glyph unicode="&#xe60d;" d="M952.366 960.134h-820.477c-73.027 0-132.531-60.761-132.531-135.455v-752.358c0-74.66 59.504-135.424 132.531-135.424h820.48c73.089 0 132.596 60.766 132.596 135.424v752.358c-0.003 74.694-59.507 135.455-132.599 135.455zM946.135 78.801h-807.894v739.462h807.834l0.059-739.462zM569.742 511.875l91.772 96.865-77.305 77.308 316.393 85.040-84.981-316.391-75.357 75.293-91.834-96.865zM514.763 384.563l-91.767-96.865 77.3-77.305-316.388-85.043 84.979 316.388 75.357-75.29 91.834 96.871z" horiz-adv-x="1089" />
24
-<glyph unicode="&#xe60e;" d="M953.225 959.18h-820.663c-73.045 0-132.562-60.776-132.562-135.488v-752.525c0-74.647 59.517-135.421 132.562-135.421h820.66c73.107 0 132.624 60.776 132.624 135.421v752.525c0.003 74.712-59.515 135.488-132.622 135.488zM946.994 77.647h-808.079v739.596h808.017l0.062-739.596zM915.539 706.7l-91.795-96.889 77.326-77.323-316.463-85.030 84.999 316.463 75.373-75.339 91.852 96.889zM170.625 188.221l91.793 96.884-77.323 77.326 316.463 85.028-84.997-316.46-75.373 75.342-91.857-96.891z" horiz-adv-x="1089" />
25
-<glyph unicode="&#xe60f;" d="M513.036 960c283.57-0.188 512.414-229.474 512.037-512.664-0.377-283.756-228.965-512.228-512.541-512.288-283.191-0.067-512.912 229.474-512.533 512.099 0.374 284.638 228.965 513.103 513.036 512.853zM512.285 810.729c-200.79-0.126-362.957-162.291-362.831-363.014 0-201.105 161.788-363.081 362.831-363.334 201.164-0.312 363.581 162.294 363.455 363.772-0.25 200.852-162.417 362.702-363.455 362.575zM597.392 447.588h-0.503l-0.126 0.126h0.63l115.615 115.866c0 0-78.247 78.505-82.153 82.153l-117.754-116.183-119.014 118.196-82.024-82.279 88.815-88.818 26.674-29.061h0.503l0.253-0.253h-0.756l-115.489-115.806c0 0 78.249-78.564 82.024-82.212l117.76 116.245 119.008-118.26 82.153 82.406-88.815 88.82-26.8 29.061z" horiz-adv-x="1025" />
26
-<glyph unicode="&#xe610;" d="M66.491-63.997h1027.94zM1198.596 487.986c-135.702 135.893-271.415 271.66-407.367 407.241-6.244 6.089-13.868 11.714-21.867 14.653-31.236 11.399-63.48-12.808-63.728-47.674-0.253-67.663-0.126-135.331-0.126-202.965 0-4.281 0-8.62 0-13.964-6.123 0-10.87 0-15.62 0-106.247 0-212.334 0.062-318.485 0-35.178-0.031-54.86-19.71-54.86-54.922-0.059-92.778-0.059-185.5 0-278.345 0-35.8 19.682-55.479 55.611-55.479 105.775-0.062 211.423 0 317.11 0 4.877 0 9.622 0 16.245 0 0-5.375 0-9.374 0-13.309 0-66.793 0.25-133.703 0-200.496 0-23.057 9.247-40.241 30.242-49.547 21.116-9.371 39.361-2.81 55.231 12.937 135.955 136.079 272.031 272.034 407.989 408.175 23.49 23.431 23.24 50.112-0.374 73.695zM532.596 44.729c-2.627 19.62-22.055 32.116-27.928 35.426-8.811 5.186-18.371 5.811-25.683 5.811l-6.37-0.126-227.926 0.188c-56.042 0.124-98.468 42.173-98.591 97.717-0.188 177.127-0.188 354.321 0.065 531.51 0.059 53.983 42.671 96.53 96.968 96.811l235.922 0.062c33.426 0.031 51.294 16.121 54.481 49.235 1.001 12.965 0.81 26.052 0.439 39.172-1.128 39.737-19.369 57.481-59.107 57.512l-217.866-0.121c-15.494 0-30.926-0.562-46.361-2.343-115.52-13.154-207.555-113.649-209.681-228.798-1.313-63.888-0.996-127.804-0.684-191.718l0.186-60.201h-0.377c0 0-0.121-227.954 0.065-289.811 0.248-135.702 101.528-240.796 235.545-244.48 33.176-0.875 66.419-1.189 99.654-1.189h0.065l148.012 0.753c29.368 0 47.483 17.37 49.73 47.545 1.755 22.058 1.628 40.173-0.557 57.045z" horiz-adv-x="1216" />
27
-<glyph unicode="&#xe611;" d="M839.334 386.487c0-79.199-64.257-143.461-143.486-143.461-79.174 0-143.431 64.262-143.431 143.461 0 79.227 64.257 143.431 143.431 143.431 79.23-0.003 143.486-64.204 143.486-143.431zM1372.769 706.485c-6.595 39.459-29.496 64.168-70.606 69.276-23.788 2.918-38.256 15.637-44.726 39.040-9.706 35.519-33.678 58.993-67.811 70.76-24.807 8.595-50.3 16.462-76.186 20.491-69.655 10.911-140.51 15.924-209.526 29.943-69.53 14.178-139.053 23.342-208.893 24.073-69.845-0.731-139.371-9.895-208.893-24.073-69.022-14.016-139.876-19.029-209.526-29.94-25.884-4.028-51.385-11.896-76.189-20.491-34.13-11.767-58.105-35.24-67.814-70.76-6.469-23.403-20.934-36.122-44.723-39.040-41.105-5.108-64.006-29.82-70.601-69.278-6.788-40.41-11.737-81.202-16.811-121.885-2.728-22.109 6.405-32.576 30.386-32.448 120.839 0.697 241.692 0.697 362.595 0.095 24.045-0.128 33.115 9.388 33.433 33.338 0.762 57.369-4.631 111.895-47.136 156.618-7.041 7.39-10.849 25.281-6.726 33.846 4.062 8.5 40.856 16.716 45.992 16.716 43.328-0.19 43.138-0.223 49.418-43.423 1.205-8.28 2.539-18.46 7.803-23.853 30.319-30.863 21.252-66.706 7.234-97.634-30.389-67.139-61.537-134.827-100.867-196.869-73.458-115.831-104.41-160.744-198.679-260.844-58.675-62.293-68.573-101.687-68.573-137.466 0-70.989 41.038-96.744 137.148-96.744 181.614 0 260.908 0.315 442.528 0.315 181.614 0 260.905-0.315 442.528-0.315 96.102 0 137.142 25.752 137.142 96.744 0 35.779-9.898 75.173-68.573 137.466-94.264 100.1-125.222 145.012-198.679 260.844-39.333 62.042-70.475 129.73-100.861 196.869-14.019 30.927-23.091 66.77 7.234 97.634 5.264 5.393 6.595 15.575 7.803 23.853 6.28 43.202 6.090 43.233 49.412 43.423 5.139 0 41.933-8.216 45.992-16.716 4.126-8.565 0.318-26.453-6.723-33.846-42.502-44.723-47.898-99.249-47.136-156.618 0.315-23.947 9.388-33.466 33.43-33.338 120.909 0.603 241.753 0.603 362.601-0.095 23.975-0.126 33.109 10.342 30.383 32.448-5.075 40.686-10.018 81.475-16.806 121.885zM959.991 383.505c0-146.315-118.624-264.936-264.97-264.936s-264.973 118.621-264.973 264.936c0 146.318 118.624 264.936 264.973 264.936 146.343 0 264.97-118.621 264.97-264.936z" horiz-adv-x="1390" />
28
-<glyph unicode="&#xe612;" d="M310.262 30.43c0-52.13-42.207-94.43-94.399-94.43h-121.405c-52.195 0-94.458 42.3-94.458 94.43v835.67c0 52.158 42.266 94.458 94.458 94.458h121.403c52.195 0 94.399-42.3 94.399-94.458v-835.67zM1077.118 960.56h-561.987c-72.919 0-132.33-60.673-132.33-135.253v-754.115c0-74.518 59.411-135.191 132.33-135.191h561.987c72.98 0 132.394 60.673 132.394 135.191v754.115c0 74.58-59.414 135.253-132.394 135.253zM529.83 826.906h532.653l0.062-143.298h-532.715v143.298zM643.255 51.628h-113.551v113.551h113.551v-113.551zM643.255 256.748h-113.551v113.554h113.551v-113.554zM643.382 463.756h-113.551v113.554h113.551v-113.554zM852.9 51.628h-113.551v113.551h113.551v-113.551zM852.9 256.748h-113.551v113.554h113.551v-113.554zM853.027 463.756h-113.556v113.554h113.556v-113.554zM1062.548 51.628h-113.556v113.551h113.556v-113.551zM1062.548 256.748h-113.556v113.554h113.556v-113.554zM1062.669 463.756h-113.554v113.554h113.554v-113.554z" horiz-adv-x="1210" />
29
-<glyph unicode="&#xe613;" d="M1123.444 939.015c-23.593 26.481-64.131 28.989-90.74 5.395l-1008.269-893.436c-26.609-23.468-28.991-64.131-5.46-90.676 12.674-14.306 30.308-21.649 48.126-21.649 15.123 0 30.372 5.401 42.544 16.195l130.045 115.22c90.743-81.844 210.569-132.165 342.473-132.101 282.816 0.061 510.913 227.969 511.287 510.972 0.126 109.934-34.682 211.367-93.499 294.72l118.088 104.625c26.483 23.526 28.997 64.129 5.404 90.735zM944.422 449.818c0.128-200.922-161.896-363.201-362.509-362.952-87.56 0.123-167.573 31.151-230.061 82.569l331.277 293.509v-73.176c1.071-60.993 32.696-92.18 94.944-93.692 61.997 1.512 93.686 32.763 95.131 93.756v41.096h-72.227v-47.499c0.251-4.642-0.564-10.607-2.511-17.949-1.25-3.261-3.448-6.020-6.525-8.093-3.197-2.572-7.845-3.828-13.868-3.828-10.543 0.31-17.132 4.268-19.827 11.921-1.068 3.512-1.947 6.905-2.508 10.163-0.254 2.887-0.377 5.532-0.377 7.786v143.511l42.477 37.634c0.215-0.432 0.452-0.851 0.63-1.303 1.947-6.467 2.762-12.799 2.511-19.076v-36.772h72.227v30.121c-0.246 31.245-9.086 54.699-26.363 70.447l40.711 36.069c35.787-56.055 56.803-122.585 56.867-194.244zM239.795 331.47c-12.613 37.023-19.827 76.557-19.827 117.913-0.19 200.236 161.584 362.009 361.945 362.135 56.853 0 110.313-13.302 158.133-36.398l117.846 104.421c-79.444 50.952-173.758 80.817-275.292 80.948-283.377 0.181-511.354-227.729-511.789-511.675-0.126-79.567 18.636-154.679 51.137-221.882l117.848 104.538zM388.576 626.020h-97.514v-249.057l72.23 64.070v0.689h0.815l117.72 104.418c0 0.564 0.123 0.94 0.123 1.509 0.753 53.898-30.369 80.069-93.374 78.37zM405.959 561.517c1.942-2.767 3.074-6.469 3.323-11.112 0.312-4.452 0.438-9.6 0.438-15.246 0.251-10.916-0.689-19.83-2.949-26.985-2.952-7.594-10.983-11.357-24.159-11.357h-19.325v74.043h15.31c7.842 0 13.865-0.683 18.072-2.19 4.397-1.573 7.468-3.953 9.29-7.153z" horiz-adv-x="1140" />
30
-<glyph unicode="&#xe614;" d="M581.278 961.708c284.857-0.19 514.807-230.517 514.427-514.997-0.378-285.047-230.073-514.553-514.869-514.615-284.541-0.062-515.311 230.517-514.933 514.422 0.439 285.936 230.009 515.439 515.375 515.19zM580.579 811.756c-201.764-0.123-364.666-163.032-364.478-364.663 0-202.018 162.524-364.735 364.478-364.984 202.018-0.316 365.174 163.030 365.048 365.423-0.252 201.767-163.156 364.35-365.048 364.224zM287.698 624.907h98.196c63.442 1.767 94.785-24.518 94.027-78.863 0.254-19.081-2.211-34.882-7.456-47.521-6.005-12.508-18.706-21.988-38.167-28.181v-0.819c28.373-6.259 43.031-23.573 43.981-51.946v-57.689c0-11.247 0.254-22.813 0.758-34.756 0.819-12.005 3.033-20.979 6.696-27.043h-71.846c-3.727 6.064-6.128 15.038-7.14 27.043-1.012 11.943-1.454 23.509-1.138 34.756v52.321c0 9.603-2.214 16.553-6.573 20.979-4.675 4.107-12.701 6.19-24.012 6.19h-14.599v-141.291h-72.73v326.82zM360.428 494.861h19.463c13.271 0 21.359 3.794 24.331 11.375 2.276 7.204 3.221 16.304 2.969 27.171 0 5.815-0.126 10.867-0.442 15.418-0.252 4.675-1.392 8.404-3.352 11.247-1.831 3.157-4.926 5.561-9.352 7.14-4.233 1.454-10.299 2.211-18.2 2.211h-15.418v-74.564zM498.372 624.907h162.082v-62.687h-89.35v-65.587h78.103v-62.685h-78.103v-73.11h92.822v-62.749h-165.557v326.818zM682.507 535.999c0.316 31.782 9.416 55.542 27.425 71.407 17.44 15.29 40.185 22.936 68.181 22.936 28.247 0 51.119-7.646 68.623-23 17.82-15.798 26.92-39.623 27.171-71.407v-30.333h-72.73v37.031c0.254 6.192-0.57 12.639-2.527 19.209-1.264 3.157-3.475 5.938-6.573 8.214-3.221 1.515-7.898 2.404-13.964 2.404-10.615-0.316-17.249-3.855-19.967-10.618-2.211-6.573-3.223-13.017-2.907-19.209v-161.956c0-2.273 0.126-4.865 0.38-7.772 0.568-3.411 1.454-6.824 2.527-10.233 2.717-7.775 9.352-11.756 19.967-12.007 6.067 0 10.744 1.261 13.964 3.791 3.098 2.15 5.309 4.867 6.573 8.216 1.96 7.33 2.782 13.33 2.527 18.007v47.837h72.73v-41.328c-1.451-61.547-33.364-93.015-95.794-94.469-62.685 1.454-94.53 32.922-95.607 94.343v148.937z" horiz-adv-x="1142" />
31
-<glyph unicode="&#xe615;" d="M1016.824 5.766c-2.051 15.373-5.331 30.537-7.859 45.847-8.334 50.458-33.006 86.503-82.063 107.922-78.373 34.198-155.103 72.121-232.111 109.395-55.686 27.025-52.409 88.519-34.097 114.413 11.89 16.88 22.344 34.572 23.575 56.852 0.444 8.226 8.303 18.99 15.817 23.294 26.070 15.035 38.161 39.565 50.020 64.982 3.109 6.696 7.379 13.187 12.266 18.722 8.471 9.668 12.264 19.235 6.079 31.842-1.435 2.97 1.331 8.334 2.8 12.367 4.304 12.026 10.285 23.676 13.12 36.043 3.556 15.339 5.398 31.225 6.252 46.975 0.374 6.523-6.045 13.528-5.362 19.95 3.483 31.912-14.557 56.202-24.739 83.977-12.465 34.198-36.928 55.619-58.519 81.106-4.066 4.784-5.227 13.051-5.571 19.886-0.72 14.588-6.732 21.797-22.004 19.813-6.11-0.787-12.772-2.495-18.41-0.991-4.957 1.334-12.406 6.288-12.676 10.112-1.538 19.336-8.264 22.517-28.016 19.235-12.364-2.049-28.457 9.155-40.584 17.561-10.145 7.041-18.89 10.045-30.681 7.176-4.915-1.195-11.544-0.991-15.716 1.435-4.441 2.663-8.775 4.237-13.118 5.124v0.748c-0.957-0.031-1.982-0.204-2.939-0.307-0.955 0.103-1.912 0.274-2.867 0.307v-0.751c-4.371-0.888-8.749-2.462-13.156-5.124-4.133-2.425-10.762-2.632-15.68-1.435-11.822 2.867-20.569-0.137-30.684-7.176-12.158-8.404-28.217-19.609-40.584-17.561-19.746 3.282-26.509 0.103-28.047-19.235-0.307-3.824-7.686-8.778-12.676-10.112-5.669-1.504-12.297 0.204-18.446 0.991-15.236 1.984-21.25-5.225-21.97-19.813-0.338-6.832-1.502-15.102-5.568-19.886-21.588-25.485-46.051-46.908-58.555-81.106-10.117-27.773-28.189-52.063-24.669-83.975 0.686-6.422-5.744-13.427-5.4-19.95 0.89-15.749 2.735-31.636 6.254-46.975 2.836-12.367 8.814-24.019 13.151-36.043 1.437-4.033 4.242-9.397 2.769-12.367-6.182-12.607-2.358-22.174 6.115-31.842 4.853-5.535 9.121-12.026 12.23-18.722 11.859-25.417 23.947-49.947 50.014-64.982 7.519-4.304 15.378-15.068 15.858-23.294 1.192-22.28 11.65-39.972 23.57-56.852 18.281-25.895 21.147-86.738-34.162-114.413-76.456-38.264-153.741-75.2-232.042-109.395-49.129-21.418-73.726-57.463-82.063-107.922-2.526-15.311-5.878-30.475-7.859-45.847-3.009-22.928-7.823-69.766-7.823-69.766h1024.611c-0.003 0-4.781 46.838-7.787 69.766z" horiz-adv-x="1025" />
32
-<glyph unicode="&#xe616;" d="M1026.175 449.067c0-283.345-229.709-513.051-513.108-513.051-283.348 0-513.069 229.703-513.069 513.051 0 283.384 229.721 513.106 513.069 513.106 283.4 0 513.108-229.721 513.108-513.106zM513.069-63.985c135.725 0 259.112 52.711 350.874 138.739-9.717 11.65-22.551 21.114-39.113 28.343-58.934 25.745-116.627 54.256-174.534 82.256-41.871 20.322-39.405 66.587-25.639 86.057 8.943 12.692 16.805 25.998 17.728 42.746 0.333 6.169 6.241 14.284 11.889 17.522 19.604 11.304 28.697 29.747 37.604 48.861 2.34 5.031 5.555 9.89 9.229 14.077 6.37 7.243 9.224 14.436 4.572 23.942-1.086 2.209 1.004 6.241 2.105 9.273 3.238 9.067 7.733 17.801 9.861 27.115 2.67 11.549 4.059 23.48 4.701 35.323 0.281 4.902-4.544 10.184-4.033 14.986 2.621 24.022-10.943 42.271-18.598 63.158-9.376 25.714-27.771 41.82-44.005 60.97-3.058 3.623-3.927 9.838-4.188 14.952-0.539 10.981-5.060 16.415-16.544 14.924-4.598-0.601-9.611-1.886-13.843-0.756-3.728 0.988-9.327 4.724-9.534 7.604-1.153 14.539-6.213 16.929-21.065 14.475-9.296-1.543-21.395 6.858-30.513 13.203-7.632 5.292-14.209 7.555-23.069 5.38-3.697-0.9-8.682-0.746-11.815 1.094-3.341 1.976-6.605 3.184-9.867 3.839v0.552c-0.72-0.013-1.489-0.129-2.209-0.217-0.722 0.088-1.44 0.206-2.157 0.217v-0.552c-3.29-0.653-6.574-1.863-9.89-3.839-3.112-1.837-8.091-1.992-11.797-1.094-8.886 2.173-15.448-0.088-23.064-5.38-9.157-6.345-21.222-14.746-30.518-13.203-14.862 2.451-19.94 0.062-21.093-14.475-0.219-2.879-5.793-6.616-9.516-7.604-4.278-1.13-9.247 0.155-13.887 0.756-11.456 1.491-15.987-3.943-16.516-14.924-0.261-5.111-1.13-11.33-4.19-14.952-16.222-19.15-34.616-35.258-44.018-60.97-7.627-20.887-21.204-39.136-18.57-63.158 0.511-4.802-4.304-10.083-4.046-14.986 0.655-11.846 2.041-23.776 4.701-35.323 2.131-9.312 6.626-18.048 9.89-27.115 1.094-3.032 3.174-7.062 2.082-9.273-4.649-9.508-1.788-16.702 4.582-23.942 3.674-4.188 6.874-9.046 9.224-14.077 8.899-19.111 17.992-37.557 37.596-48.861 5.653-3.238 11.559-11.353 11.905-17.522 0.913-16.748 8.773-30.054 17.739-42.746 13.745-19.47 15.902-65.245-25.673-86.057-57.52-28.772-115.6-56.511-174.503-82.256-16.57-7.23-29.409-16.694-39.123-28.338 91.759-86.031 215.138-138.744 350.843-138.744z" horiz-adv-x="1026" />
33
-<glyph unicode="&#xe617;" d="M65.774 516.748c10.052 9.358 25.988 21.772 43.285 32.699 51.335 32.619 108.115 50.897 166.829 64.133 48.763 10.95 98.246 16.887 148.066 20.203 55.755 3.754 111.559 3.78 167.392 0.797 39.944-2.185 79.686-6.502 119.119-13.211 43.956-7.506 87.037-17.994 128.785-33.751 24.419-9.175 48.172-20.105 70.534-33.573 29.716-17.891 56.552-39.224 77.22-67.348 20.819-28.302 31.721-60.407 33.829-95.392 1.747-27.402 0.717-54.697-5.656-81.588-2.877-12.083-8.226-23.134-16.554-32.386-11.417-12.648-26.424-17.021-42.772-17.636-20.463-0.668-40.411 4.113-60.361 8.226-38.912 7.97-77.836 16.245-116.699 24.728-14.137 3.034-28.689 5.093-41.649 12.596-22.308 12.955-34.445 31.775-34.033 57.783 0.258 16.869 2.216 33.782 2.469 50.695 0.312 25.010-9.923 45.161-30.898 59.042-14.395 9.539-30.694 14.911-47.452 18.665-40.411 9.046-81.387 10.179-122.561 10.050-28.821-0.126-57.582-1.669-86.093-6.143-19.947-3.161-39.562-7.813-57.732-17.014-24.318-12.364-39.353-31.465-40.073-59.352-0.441-16.351 0.973-32.802 1.927-49.15 0.642-11.822-0.080-23.446-5.295-34.288-9.26-19.385-24.935-31.672-45.37-36.964-22.646-5.865-45.605-10.54-68.504-15.223-38.102-7.764-76.216-15.368-114.416-22.517-14.526-2.774-29.254-1.951-43.133 3.602-18.742 7.457-28.924 22.775-34.138 41.337-7.096 25.397-7.841 51.513-6.966 77.731 0.9 27.040 5.883 53.237 18.404 77.607 9.794 19.065 22.491 35.955 42.493 55.642z" horiz-adv-x="1026" />
34
-<glyph unicode="&#xe618;" d="M797.086 112.301c-0.059 0.163-0.119 0.328-0.16 0.485-71.399-45.638-151.782-69.931-234.023-69.931-0.013 0-0.021 0-0.028 0-122.52 0-237.501 52.772-315.469 144.741-99.778 117.698-134.252 329.954-73.022 427.789 4.004-1.662 7.875-3.233 11.68-4.773 13.585-5.511 26.413-10.716 42.305-19.096 6.063-3.202 12.338-4.812 18.673-4.812 11.714 0 22.6 5.648 29.848 15.486 7.815 10.617 10.313 24.778 6.538 36.951l-3.525 11.41c-10.687 34.59-21.723 70.354-34.211 105.078-9.983 27.765-22.399 62.327-59.226 62.327-12.057 0-26.037-3.656-46.73-12.204-44.294-18.319-71.058-29.961-114.534-49.81-15.102-6.887-25.234-22.698-25.203-39.343 0.028-15.842 8.992-29.337 23.975-36.115 18.208-8.257 30.536-13.716 43.468-19.447l10.687-4.753c-101.938-259.102 24.803-526.458 211.314-639.212 83.497-50.474 178.5-77.14 274.769-77.14h0.041c102.72 0 205.561 31.099 284.501 85.198-31.729 28.803-45.566 69.167-51.671 87.171zM1098.203 210.090c-18.113 8.577-30.356 14.258-43.221 20.244l-10.496 4.892c106.448 257.268-15.569 526.801-200.067 642.788-85.36 53.663-183.123 82.032-282.716 82.032-104.848 0-206.41-30.593-285.967-86.165l-5.385-3.764c31.597-27.564 45.86-66.788 52.917-86.41 72.926 47.94 155.675 73.409 239.895 73.409 125.407 0 242.142-54.785 320.294-150.316 97.683-119.447 128.439-332.255 65.498-429.015-3.989 1.736-7.815 3.385-11.624 4.998-13.471 5.759-26.204 11.18-41.954 19.821-6.203 3.424-12.645 5.155-19.212 5.155-11.585 0-22.399-5.558-29.69-15.267-7.813-10.434-10.478-24.432-6.966-36.515l3.279-11.301c10.096-34.845 20.531-70.857 32.412-105.842 9.588-28.238 21.514-63.382 59.179-63.382 11.843 0 25.577 3.424 45.881 11.399 44.351 17.439 71.319 28.601 115.409 47.777 15.19 6.623 25.601 22.252 25.859 38.894 0.281 15.822-8.445 29.499-23.325 36.569z" horiz-adv-x="1122" />
35
-<glyph unicode="&#xe619;" d="M46.993 961.7c461.234 0 553.793 0 1015.024 0 35.919 0 53.356-25.959 53.356-57.959-0.581-303.259-0.325-606.488-0.449-909.809 0-43.984-13.203-57.058-57.703-57.058-443.072-0.126-556.453-0.126-999.553 0-44.534 0-57.799 13.009-57.799 57.058-0.098 303.257 0.485 608.072-0.093 911.329-0.034 26.21 11.301 53.761 47.217 56.439zM311.405 450.298c0-119.045-0.072-172.168 0.057-291.249 0.036-50.043 11.208-61.050 62.12-61.050 233.352 0 137.075 0 370.522 0 47.075 0 59.249 11.982 59.249 58.095 0.126 239.111 0.126 346.338 0 585.389 0 48.138-10.687 58.991-57.768 58.991-235.323 0.101-140.844 0.101-376.157 0-47.044 0-57.93-11.043-57.966-58.89-0.129-119.109-0.057-172.209-0.057-291.287zM153.944 838.566c-74.929-0.062-66.687 5.958-66.845-66.685-0.201-63.95-7.054-63.534 62.528-63.372 72.999 0.194 67.201-3.764 67.302 67.554 0 67.722 4.087 62.595-62.985 62.502zM963.644 838.566c-71.159-0.034-65.56 6.185-65.751-65.364-0.129-67.302-4.508-64.693 64.528-64.693 73.089 0 65.299-2.031 65.299 66.238-0.003 68.646 6.956 63.911-64.076 63.818zM216.828 122.408c0.359 73.094 4.639 66.914-67.358 67.17-68.104 0.191-62.569 2.763-62.407-63.31 0.129-73.476-6.954-66.52 67.074-66.649 66.042-0.065 63.142-6.056 62.691 62.789zM1027.718 124.4c0.134 68.334 6.443 65.304-63.297 65.178-70.132-0.132-66.656 5.793-66.527-65.304 0.129-70.645-4.384-64.721 63.756-64.657 71.995 0.132 66.202-6.698 66.068 64.783zM1027.718 342.077c0 70.55 7.219 66.842-67.485 66.522-0.898 0-1.873 0-2.838 0-59.375 0-59.375 0-59.375-58.023 0-77.922-6.443-69.936 69.293-70.196 66.076-0.387 60.539-3.091 60.405 61.697zM151.307 489.873c68.295-0.163 65.815-5.568 65.624 62.982-0.194 71.128 4.895 64.917-66.014 65.010-69.905 0.101-63.813 4.704-63.885-63.978-0.062-67.431-5.7-64.463 64.275-64.014zM961.263 489.873c72.511-0.258 66.589-4.603 66.455 64.494 0 68.558 6.185 63.537-64.267 63.498-70.196-0.028-65.686 6.053-65.498-65.493 0.132-62.5 0.067-62.5 63.31-62.5zM150.399 280.38c71.004 0 66.659-6.567 66.466 64.528-0.163 63.694-0.036 63.501-65.013 63.756-70.805 0.258-64.822 2.673-64.822-63.756 0.036-69.167-5.919-64.788 63.369-64.528z" horiz-adv-x="1115" />
36
-<glyph unicode="&#xe61a;" d="M3.881 146.835h220.26v-210.835h-220.26v210.835zM308.817 350.143h220.27v-414.143h-220.27v414.143zM613.764 553.412h220.268v-617.412h-220.268v617.412zM918.685 756.715h220.265v-820.715h-220.265v820.715zM1223.629 960h220.263v-1024h-220.263v1024z" horiz-adv-x="1444" />
37
-<glyph unicode="&#xe61b;" d="M526.071 234.749c-28.637-30.869-56.465-60.861-84.282-90.859-51.578-55.636-103.047-111.376-154.842-166.832-7.606-8.135-15.958-16.1-25.317-22.012-28.075-17.708-58.31-18.090-88.472-6.492-59.84 23.028-80.004 90.727-59.734 139.234 5.413 12.95 13.721 23.601 23.709 33.173 70.256 67.351 140.506 134.717 210.76 202.077 15.638 14.993 31.264 29.995 47.364 45.45-9.302 9.529-18.386 18.833-27.451 28.137-12.122 12.442-13.234 20.28-5.067 35.498 4.735 8.816 4.789 8.878-2.627 16.198-20.012 19.72-40.168 39.198-63.498 55.188-27.167 18.624-57.161 24.233-89.083 19.849-53.402-7.328-91.609-38.372-121.413-81.046-12.774-18.299-15.365-40.313-17.517-61.875-3.23-32.245-2.415-64.479 2.209-96.597 1.654-11.515-3.863-16.539-13.835-11.175-8.306 4.448-16.095 11.048-22.115 18.353-15.574 18.89-22.223 42.042-27.474 65.395-12.955 57.652-8.86 114.49 12.191 169.495 32.345 84.537 79.743 159.571 145.953 221.932 13.659 12.857 176.841 180.564 202.944 207.021 7.493 7.599 14.895 7.635 22.393 0.028 43.009-43.641 85.985-87.316 128.927-131.029 8.117-8.267 8.019-15.097-0.222-23.49-26.339-26.834-52.726-53.627-79.106-80.419-6.244-6.334-97.34-82.437-73.027-128.816 22.693-25.090 46.196-49.449 69.575-73.904 1.189-1.238 4.686-1.386 6.523-0.632 3.63 1.499 6.848 3.997 10.248 6.066 9.745 5.94 19.545 4.918 27.812-3.083 11.755-11.381 23.405-22.858 35.392-34.59 4.807 4.575 9.939 9.41 15.027 14.294 27.128 26.039 54.272 52.071 81.351 78.146 16.413 15.778 18.652 28.418 11.038 49.658-10.473 29.221-14.356 59.677-13.85 90.624 1.017 61.045 20.438 115.334 61.003 161.416 32.825 37.286 72.054 64.311 121.643 74.325 35.227 7.101 69.139 4.513 100.663-14.026 6.365-3.752 11.908-9.007 17.455-14.005 3.491-3.125 3.153-6.236-0.565-9.98-42.503-42.885-84.772-86.013-127.154-129.035-12.442-12.638-12.356-23.167 0.196-35.914 40.344-40.978 80.597-82.050 120.936-123.052 10.076-10.233 19.537-10.021 29.504 0.134 43.195 44.077 86.449 88.090 129.706 132.118 1.21 1.233 2.572 2.322 5.135 4.624 5.491-5.893 11.895-10.924 15.961-17.406 19.452-30.944 22.608-64.83 17.073-100.25-14.253-91.080-97.188-175.638-197.712-190.123-39.977-5.764-79.372-2.562-118.067 9.031-5.898 1.775-11.541 4.629-17.538 5.829-12.47 2.474-23.872-0.366-32.74-9.877-30.921-33.168-61.674-66.484-92.474-99.758-0.73-0.805-1.349-1.718-0.181-1.099 8.992-10.006 17.354-20.662 27.061-29.94 81.064-77.54 164.91-151.986 250.882-224.063 9.936-8.347 10.274-15.695 1.040-25.1-42.338-43.068-84.689-86.111-127.059-129.154-9.413-9.575-16.846-9.152-25.291 1.295-76.686 94.78-156.8 186.609-239.707 276.002-1.334 1.453-2.562 3.029-4.257 5.042z" horiz-adv-x="1105" />
38
-<glyph unicode="&#xe61c;" d="M74.418 881.299h239.304v-228.491h-239.304v228.491zM393.455 881.299h239.304v-228.491h-239.304v228.491zM712.494 881.299h239.263v-228.491h-239.263v228.491zM74.418 562.265h239.304v-228.555h-239.304v228.555zM393.455 562.265h239.304v-228.555h-239.304v228.555zM712.494 562.265h239.263v-228.555h-239.263v228.555zM74.418 243.166h239.304v-228.465h-239.304v228.465zM393.455 243.166h239.304v-228.465h-239.304v228.465zM712.494 243.166h239.263v-228.465h-239.263v228.465z" horiz-adv-x="1026" />
9
+<glyph unicode="&#x20;" d="" />
10
+<glyph unicode="&#xe603;" glyph-name="presentation" horiz-adv-x="1088" d="M952.495 1019.065h-818.689c-72.81 0-132.183-60.63-132.183-135.162v-750.719c0-74.473 59.372-135.101 132.183-135.101h818.686c72.936 0 132.314 60.625 132.314 135.101v750.722c0.003 74.532-59.378 135.159-132.311 135.159zM946.346 139.651h-806.14v737.822h806.015l0.126-737.822zM685.753 738.544h216.911v-566.758h-216.911v566.758zM428.672 610.002h216.911v-438.216h-216.911v438.216zM172.339 481.46h216.161v-309.677h-216.161v309.677z" />
11
+<glyph unicode="&#xe613;" glyph-name="recDisable" horiz-adv-x="1140" d="M1123.444 1003.015c-23.593 26.481-64.131 28.989-90.74 5.395l-1008.269-893.436c-26.609-23.468-28.991-64.131-5.46-90.676 12.674-14.306 30.308-21.649 48.126-21.649 15.123 0 30.372 5.401 42.544 16.195l130.045 115.22c90.743-81.844 210.569-132.165 342.473-132.101 282.816 0.061 510.913 227.969 511.287 510.972 0.126 109.934-34.682 211.367-93.499 294.72l118.088 104.625c26.483 23.526 28.997 64.129 5.404 90.735zM944.422 513.818c0.128-200.922-161.896-363.201-362.509-362.952-87.56 0.123-167.573 31.151-230.061 82.569l331.277 293.509v-73.176c1.071-60.993 32.696-92.18 94.944-93.692 61.997 1.512 93.686 32.763 95.131 93.756v41.096h-72.227v-47.499c0.251-4.642-0.564-10.607-2.511-17.949-1.25-3.261-3.448-6.020-6.525-8.093-3.197-2.572-7.845-3.828-13.868-3.828-10.543 0.31-17.132 4.268-19.827 11.921-1.068 3.512-1.947 6.905-2.508 10.163-0.254 2.887-0.377 5.532-0.377 7.786v143.511l42.477 37.634c0.215-0.432 0.452-0.851 0.63-1.303 1.947-6.467 2.762-12.799 2.511-19.076v-36.772h72.227v30.121c-0.246 31.245-9.086 54.699-26.363 70.447l40.711 36.069c35.787-56.055 56.803-122.585 56.867-194.244zM239.795 395.47c-12.613 37.023-19.827 76.557-19.827 117.913-0.19 200.236 161.584 362.009 361.945 362.135 56.853 0 110.313-13.302 158.133-36.398l117.846 104.421c-79.444 50.952-173.758 80.817-275.292 80.948-283.377 0.181-511.354-227.729-511.789-511.675-0.126-79.567 18.636-154.679 51.137-221.882l117.848 104.538zM388.576 690.020h-97.514v-249.057l72.23 64.070v0.689h0.815l117.72 104.418c0 0.564 0.123 0.94 0.123 1.509 0.753 53.898-30.369 80.069-93.374 78.37zM405.959 625.517c1.942-2.767 3.074-6.469 3.323-11.112 0.312-4.452 0.438-9.6 0.438-15.246 0.251-10.916-0.689-19.83-2.949-26.985-2.952-7.594-10.983-11.357-24.159-11.357h-19.325v74.043h15.31c7.842 0 13.865-0.683 18.072-2.19 4.397-1.573 7.468-3.953 9.29-7.153z" />
12
+<glyph unicode="&#xe614;" glyph-name="recEnable" horiz-adv-x="1142" d="M581.278 1025.708c284.857-0.19 514.807-230.517 514.427-514.997-0.378-285.047-230.073-514.553-514.869-514.615-284.541-0.062-515.311 230.517-514.933 514.422 0.439 285.936 230.009 515.439 515.375 515.19zM580.579 875.756c-201.764-0.123-364.666-163.032-364.478-364.663 0-202.018 162.524-364.735 364.478-364.984 202.018-0.316 365.174 163.030 365.048 365.423-0.252 201.767-163.156 364.35-365.048 364.224zM287.698 688.907h98.196c63.442 1.767 94.785-24.518 94.027-78.863 0.254-19.081-2.211-34.882-7.456-47.521-6.005-12.508-18.706-21.988-38.167-28.181v-0.819c28.373-6.259 43.031-23.573 43.981-51.946v-57.689c0-11.247 0.254-22.813 0.758-34.756 0.819-12.005 3.033-20.979 6.696-27.043h-71.846c-3.727 6.064-6.128 15.038-7.14 27.043-1.012 11.943-1.454 23.509-1.138 34.756v52.321c0 9.603-2.214 16.553-6.573 20.979-4.675 4.107-12.701 6.19-24.012 6.19h-14.599v-141.291h-72.73v326.82zM360.428 558.861h19.463c13.271 0 21.359 3.794 24.331 11.375 2.276 7.204 3.221 16.304 2.969 27.171 0 5.815-0.126 10.867-0.442 15.418-0.252 4.675-1.392 8.404-3.352 11.247-1.831 3.157-4.926 5.561-9.352 7.14-4.233 1.454-10.299 2.211-18.2 2.211h-15.418v-74.564zM498.372 688.907h162.082v-62.687h-89.35v-65.587h78.103v-62.685h-78.103v-73.11h92.822v-62.749h-165.557v326.818zM682.507 599.999c0.316 31.782 9.416 55.542 27.425 71.407 17.44 15.29 40.185 22.936 68.181 22.936 28.247 0 51.119-7.646 68.623-23 17.82-15.798 26.92-39.623 27.171-71.407v-30.333h-72.73v37.031c0.254 6.192-0.57 12.639-2.527 19.209-1.264 3.157-3.475 5.938-6.573 8.214-3.221 1.515-7.898 2.404-13.964 2.404-10.615-0.316-17.249-3.855-19.967-10.618-2.211-6.573-3.223-13.017-2.907-19.209v-161.956c0-2.273 0.126-4.865 0.38-7.772 0.568-3.411 1.454-6.824 2.527-10.233 2.717-7.775 9.352-11.756 19.967-12.007 6.067 0 10.744 1.261 13.964 3.791 3.098 2.15 5.309 4.867 6.573 8.216 1.96 7.33 2.782 13.33 2.527 18.007v47.837h72.73v-41.328c-1.451-61.547-33.364-93.015-95.794-94.469-62.685 1.454-94.53 32.922-95.607 94.343v148.937z" />
13
+<glyph unicode="&#xe61a;" glyph-name="connection" horiz-adv-x="1444" d="M3.881 210.835h220.26v-210.835h-220.26v210.835zM308.817 414.143h220.27v-414.143h-220.27v414.143zM613.764 617.412h220.268v-617.412h-220.268v617.412zM918.685 820.715h220.265v-820.715h-220.265v820.715zM1223.629 1024h220.263v-1024h-220.263v1024z" />
14
+<glyph unicode="&#xe900;" glyph-name="connection-lost" horiz-adv-x="1414" d="M0 299.153h196.337v-187.951h-196.337v187.951zM271.842 480.372h196.337v-369.169h-196.337v369.169zM543.656 661.562h196.337v-550.36h-196.337v550.36zM815.47 842.766v-731.564h119.56c-14.589 33.025-23.125 71.503-23.232 111.943 0.132 86.42 38.697 163.851 99.656 216.468l0.348 403.153h-196.332zM1087.292 1024v-533.672c28.874 10.572 62.222 16.73 97.009 16.825 35.717-0.129 69.823-6.614 101.322-18.371l-1.999 535.218h-196.332zM1192.868 439.852c-0.009 0-0.020 0-0.031 0-122.247 0-221.351-98.447-221.372-219.896 0-0.007 0-0.014 0-0.021 0-121.467 99.111-219.935 221.372-219.935 0.011 0 0.021 0 0.032 0 122.248 0.014 221.345 98.477 221.345 219.935 0 0.007 0 0.013 0 0.020-0.021 121.441-99.11 219.883-221.345 219.897zM1194.706 372.607c87.601-0.006 158.614-69.787 158.614-155.866 0-0.006 0-0.012 0-0.019-0.022-86.062-71.026-155.822-158.614-155.828-87.588 0.006-158.593 69.766-158.615 155.826 0 0.007 0 0.014 0 0.020 0 86.079 71.013 155.86 158.613 155.866zM1286.795 355.682l48.348-52.528-236.375-217.567-48.348 52.528 236.375 217.567z" />
15
+<glyph unicode="&#xe901;" glyph-name="avatar" d="M512 204c106 0 200 56 256 138-2 84-172 132-256 132-86 0-254-48-256-132 56-82 150-138 256-138zM512 810c-70 0-128-58-128-128s58-128 128-128 128 58 128 128-58 128-128 128zM512 938c236 0 426-190 426-426s-190-426-426-426-426 190-426 426 190 426 426 426z" />
16
+<glyph unicode="&#xe902;" glyph-name="download" d="M726 470h-128v170h-172v-170h-128l214-214zM826 596c110-8 198-100 198-212 0-118-96-214-214-214h-554c-142 0-256 114-256 256 0 132 100 240 228 254 54 102 160 174 284 174 156 0 284-110 314-258z" />
17
+<glyph unicode="&#xe903;" glyph-name="autorenew" d="M800 694c34-52 54-116 54-182 0-188-154-342-342-342v-128l-170 172 170 170v-128c142 0 256 114 256 256 0 44-12 84-30 120zM512 768c-142 0-256-114-256-256 0-44 10-84 30-120l-62-62c-34 52-54 116-54 182 0 188 154 342 342 342v128l170-172-170-170v128z" />
18
+<glyph unicode="&#xe904;" glyph-name="kick" d="M512 810l284-426h-568zM214 298h596v-84h-596v84z" />
19
+<glyph unicode="&#xe905;" glyph-name="hangup" d="M512 640c-68 0-134-10-196-30v-132c0-16-10-34-24-40-42-20-80-46-114-78-8-8-18-12-30-12s-22 4-30 12l-106 106c-8 8-12 18-12 30s4 22 12 30c130 124 306 200 500 200s370-76 500-200c8-8 12-18 12-30s-4-22-12-30l-106-106c-8-8-18-12-30-12s-22 4-30 12c-34 32-72 58-114 78-14 6-24 20-24 38v132c-62 20-128 32-196 32z" />
20
+<glyph unicode="&#xe906;" glyph-name="chat" d="M854 342v512h-684v-598l86 86h598zM854 938c46 0 84-38 84-84v-512c0-46-38-86-84-86h-598l-170-170v768c0 46 38 84 84 84h684z" />
21
+<glyph unicode="&#xe907;" glyph-name="edit" d="M884 724l-78-78-160 160 78 78c16 16 44 16 60 0l100-100c16-16 16-44 0-60zM128 288l472 472 160-160-472-472h-160v160z" />
22
+<glyph unicode="&#xe908;" glyph-name="share-doc" d="M554 640h236l-236 234v-234zM682 426v86h-340v-86h340zM682 256v86h-340v-86h340zM598 938l256-256v-512c0-46-40-84-86-84h-512c-46 0-86 38-86 84l2 684c0 46 38 84 84 84h342z" />
23
+<glyph unicode="&#xe909;" glyph-name="telephone" d="M854 362c24 0 42-18 42-42v-150c0-24-18-42-42-42-400 0-726 326-726 726 0 24 18 42 42 42h150c24 0 42-18 42-42 0-54 8-104 24-152 4-14 2-32-10-44l-94-94c62-122 162-220 282-282l94 94c12 12 30 14 44 10 48-16 98-24 152-24zM854 810v44h-44v-44h44zM768 896h128v-128h-86v-86h-42v214zM640 810v-128h-128v44h86v42h-86v128h128v-42h-86v-44h86zM726 896v-214h-44v214h44z" />
24
+<glyph unicode="&#xe90a;" glyph-name="star-full" d="M512 288l-264-160 70 300-232 202 306 26 120 282 120-282 306-26-232-202 70-300z" />
25
+<glyph unicode="&#xe90b;" glyph-name="full-screen" d="M598 810h212v-212h-84v128h-128v84zM726 298v128h84v-212h-212v84h128zM214 598v212h212v-84h-128v-128h-84zM298 426v-128h128v-84h-212v212h84z" />
26
+<glyph unicode="&#xe90c;" glyph-name="exit-full-screen" d="M682 682h128v-84h-212v212h84v-128zM598 214v212h212v-84h-128v-128h-84zM342 682v128h84v-212h-212v84h128zM214 342v84h212v-212h-84v128h-128z" />
27
+<glyph unicode="&#xe90d;" glyph-name="security" d="M768 170v428h-512v-428h512zM768 682c46 0 86-38 86-84v-428c0-46-40-84-86-84h-512c-46 0-86 38-86 84v428c0 46 40 84 86 84h388v86c0 72-60 132-132 132s-132-60-132-132h-82c0 118 96 214 214 214s214-96 214-214v-86h42zM512 298c-46 0-86 40-86 86s40 86 86 86 86-40 86-86-40-86-86-86z" />
28
+<glyph unicode="&#xe90e;" glyph-name="security-locked" d="M768 170v428h-512v-428h512zM380 768v-86h264v86c0 72-60 132-132 132s-132-60-132-132zM768 682c46 0 86-38 86-84v-428c0-46-40-84-86-84h-512c-46 0-86 38-86 84v428c0 46 40 84 86 84h42v86c0 118 96 214 214 214s214-96 214-214v-86h42zM512 298c-46 0-86 40-86 86s40 86 86 86 86-40 86-86-40-86-86-86z" />
29
+<glyph unicode="&#xe90f;" glyph-name="reload" d="M512 256v128l170-170-170-172v128c-188 0-342 154-342 342 0 66 20 130 54 182l62-62c-20-36-30-76-30-120 0-142 114-256 256-256zM512 854c188 0 342-154 342-342 0-66-20-130-54-182l-62 62c20 36 30 76 30 120 0 142-114 256-256 256v-128l-170 170 170 172v-128z" />
30
+<glyph unicode="&#xe910;" glyph-name="microphone" d="M738 554h72c0-146-116-266-256-286v-140h-84v140c-140 20-256 140-256 286h72c0-128 108-216 226-216s226 88 226 216zM512 426c-70 0-128 58-128 128v256c0 70 58 128 128 128s128-58 128-128v-256c0-70-58-128-128-128z" />
31
+<glyph unicode="&#xe911;" glyph-name="mic-empty" d="M738 554h72c0-146-116-266-256-286v-140h-84v140c-140 20-256 140-256 286h72c0-128 108-216 226-216s226 88 226 216zM460 814v-264c0-28 24-50 52-50s50 22 50 50l2 264c0 28-24 52-52 52s-52-24-52-52zM512 426c-70 0-128 58-128 128v256c0 70 58 128 128 128s128-58 128-128v-256c0-70-58-128-128-128z" />
32
+<glyph unicode="&#xe912;" glyph-name="mic-disabled" d="M182 896l714-714-54-54-178 178c-32-20-72-32-110-38v-140h-84v140c-140 20-256 140-256 286h72c0-128 108-216 226-216 34 0 68 8 98 22l-70 70c-8-2-18-4-28-4-70 0-128 58-128 128v32l-256 256zM640 548l-256 254v8c0 70 58 128 128 128s128-58 128-128v-262zM810 554c0-50-14-98-38-140l-52 54c12 26 18 54 18 86h72z" />
33
+<glyph unicode="&#xe913;" glyph-name="link" d="M640 426c114 0 342-56 342-170v-86h-684v86c0 114 228 170 342 170zM256 598h128v-86h-128v-128h-86v128h-128v86h128v128h86v-128zM640 512c-94 0-170 76-170 170s76 172 170 172 170-78 170-172-76-170-170-170z" />
34
+<glyph unicode="&#xe914;" glyph-name="shared-video" d="M512 170c188 0 342 154 342 342s-154 342-342 342-342-154-342-342 154-342 342-342zM512 938c236 0 426-190 426-426s-190-426-426-426-426 190-426 426 190 426 426 426zM426 320v384l256-192z" />
35
+<glyph unicode="&#xe915;" glyph-name="settings" d="M512 362c82 0 150 68 150 150s-68 150-150 150-150-68-150-150 68-150 150-150zM830 470l90-70c8-6 10-18 4-28l-86-148c-6-10-16-12-26-8l-106 42c-22-16-46-32-72-42l-16-112c-2-10-10-18-20-18h-172c-10 0-18 8-20 18l-16 112c-26 10-50 24-72 42l-106-42c-10-4-20-2-26 8l-86 148c-6 10-4 22 4 28l90 70c-2 14-2 28-2 42s0 28 2 42l-90 70c-8 6-10 18-4 28l86 148c6 10 16 12 26 8l106-42c22 16 46 32 72 42l16 112c2 10 10 18 20 18h172c10 0 18-8 20-18l16-112c26-10 50-24 72-42l106 42c10 4 20 2 26-8l86-148c6-10 4-22-4-28l-90-70c2-14 2-28 2-42s0-28-2-42z" />
36
+<glyph unicode="&#xe916;" glyph-name="star" d="M512 366l160-96-42 182 142 124-188 16-72 172-72-172-188-16 142-124-42-182zM938 630l-232-202 70-300-264 160-264-160 70 300-232 202 306 26 120 282 120-282z" />
37
+<glyph unicode="&#xe917;" glyph-name="share-desktop" d="M896 298v512h-768v-512h768zM896 896c46 0 86-40 86-86l-2-512c0-46-38-84-84-84h-214v-86h-340v86h-214c-46 0-86 38-86 84v512c0 46 40 86 86 86h768z" />
38
+<glyph unicode="&#xe918;" glyph-name="camera" d="M726 576l170 170v-468l-170 170v-150c0-24-20-42-44-42h-512c-24 0-42 18-42 42v428c0 24 18 42 42 42h512c24 0 44-18 44-42v-150z" />
39
+<glyph unicode="&#xe919;" glyph-name="camera-disabled" d="M140 938l756-756-54-54-136 136c-6-4-16-8-24-8h-512c-24 0-42 18-42 42v428c0 24 18 42 42 42h32l-116 116zM896 746v-456l-478 478h264c24 0 44-18 44-42v-150z" />
40
+<glyph unicode="&#xe91a;" glyph-name="volume" d="M598 886c172-38 298-192 298-374s-126-336-298-374v88c124 36 212 150 212 286s-88 250-212 286v88zM704 512c0-76-42-140-106-172v344c64-32 106-96 106-172zM128 640h170l214 214v-684l-214 214h-170v256z" />
41
+<glyph unicode="&#xe91b;" glyph-name="contactList" d="M704 746c-46 0-86-38-86-84s40-86 86-86 86 40 86 86-40 84-86 84zM704 512c-82 0-150 68-150 150s68 148 150 148 150-66 150-148-68-150-150-150zM320 746c-46 0-86-38-86-84s40-86 86-86 86 40 86 86-40 84-86 84zM320 512c-82 0-150 68-150 150s68 148 150 148 150-66 150-148-68-150-150-150zM918 278v52c0 24-110 76-214 76-46 0-90-12-128-24 14-16 22-32 22-52v-52h320zM534 278v52c0 24-110 76-214 76s-214-52-214-76v-52h428zM704 470c92 0 278-48 278-140v-116h-940v116c0 92 186 140 278 140 52 0 130-16 192-44 62 28 140 44 192 44z" />
42
+<glyph unicode="&#xe91c;" glyph-name="toggle-filmstrip" d="M896 896h-768c-46.933 0-85.333-38.4-85.333-85.333v-597.333c0-46.933 38.4-85.333 85.333-85.333h768c46.933 0 85.333 38.4 85.333 85.333v597.333c0 46.933-38.4 85.333-85.333 85.333zM896 213.333h-768v128h768v-128z" />
43
+<glyph unicode="&#xe91d;" glyph-name="feedback" d="M42.667 128h170.667v512h-170.667v-512zM981.333 597.333c0 46.933-38.4 85.333-85.333 85.333h-269.227l40.533 194.987 1.28 13.653c0 17.493-7.253 33.707-18.773 45.227l-45.227 44.8-280.747-281.173c-15.787-15.36-25.173-36.693-25.173-60.16v-426.667c0-46.933 38.4-85.333 85.333-85.333h384c35.413 0 65.707 21.333 78.507 52.053l128.853 300.8c3.84 9.813 5.973 20.053 5.973 31.147v81.493l-0.427 0.427 0.427 3.413z" />
39 44
 </font></defs></svg>

バイナリ
fonts/jitsi.ttf ファイルの表示


バイナリ
fonts/jitsi.woff ファイルの表示


+ 942
- 914
fonts/selection.json
ファイル差分が大きすぎるため省略します
ファイルの表示


バイナリ
images/leftDropdownPointer.png ファイルの表示


+ 109
- 136
index.html ファイルの表示

@@ -96,58 +96,121 @@
96 96
         <!--#include virtual="plugin.welcomepage.footer.html" -->
97 97
     </div>
98 98
     <div id="videoconference_page">
99
-        <div style="position: relative;" id="header_container">
100
-            <div id="header">
99
+        <div id="mainToolbarContainer">
101 100
                 <div id="notice" class="notice" style="display: none">
102 101
                     <span id="noticeText" class="noticeText"></span>
103 102
                 </div>
104
-                <span id="toolbar">
105
-                    <span id="authentication" class="authentication" style="display: none">
106
-                        <a class="button icon-avatar" id="toolbar_button_authentication" data-i18n="[content]toolbar.authenticate"></a>
107
-                        <ul class="loginmenu">
108
-                            <span class="loginmenuPadding"></span>
109
-                            <li id="toolbar_auth_identity"></li>
110
-                            <li id="toolbar_button_login">
111
-                                <a class="authButton" data-i18n="toolbar.login"></a>
112
-                            </li>
113
-                            <li id="toolbar_button_logout">
114
-                                <a class="authButton" data-i18n="toolbar.logout"></a>
115
-                            </li>
116
-                        </ul>
117
-                    </span>
118
-                    <a class="button icon-microphone" id="toolbar_button_mute" data-container="body" data-toggle="popover" data-placement="bottom" shortcut="mutePopover" data-i18n="[content]toolbar.mute" content="Mute / Unmute">
119
-                        <ul id="micMutedPopup" class="loginmenu">
120
-                            <li data-i18n="[html]toolbar.micMutedPopup"></li>
121
-                        </ul>
122
-                        <ul id="unableToUnmutePopup" class="loginmenu">
123
-                            <li data-i18n="[html]toolbar.unableToUnmutePopup"></li>
124
-                        </ul>
125
-                    </a>
126
-                    <a class="button icon-camera" id="toolbar_button_camera" data-container="body" data-toggle="popover" data-placement="bottom" shortcut="toggleVideoPopover" data-i18n="[content]toolbar.videomute" content="Start / stop camera"></a>
127
-                    <a class="button" id="toolbar_button_record" data-container="body" data-toggle="popover" data-placement="bottom" style="display: none"></a>
128
-                    <a class="button icon-security" id="toolbar_button_security" data-container="body" data-toggle="popover" data-placement="bottom" data-i18n="[content]toolbar.lock" content="Lock / unlock room"></a>
129
-                    <a class="button icon-link" id="toolbar_button_link" data-container="body" data-toggle="popover" data-placement="bottom" data-i18n="[content]toolbar.invite" content="Invite others"></a>
130
-                    <a class="button icon-chat" id="toolbar_button_chat" data-container="body" data-toggle="popover" shortcut="toggleChatPopover" data-placement="bottom" data-i18n="[content]toolbar.chat" content="Open / close chat">
131
-                        <span id="unreadMessages"></span>
132
-                    </a>
133
-                    <a class="button icon-share-doc" id="toolbar_button_etherpad" data-container="body" data-toggle="popover" data-placement="bottom" content="Shared document" data-i18n="[content]toolbar.etherpad"></a>
134
-                    <a class="button fa fa-share-alt-square" id="toolbar_button_sharedvideo" data-container="body" data-toggle="popover" data-placement="bottom" content="Share a YouTube video" data-i18n="[content]toolbar.sharedvideo" style="display: none">
135
-                        <ul id="sharedVideoMutedPopup" class="loginmenu">
136
-                            <li data-i18n="[html]toolbar.sharedVideoMutedPopup"></li>
137
-                        </ul>
138
-                    </a>
139
-                    <a class="button icon-share-desktop" id="toolbar_button_desktopsharing" data-container="body" data-toggle="popover" data-placement="bottom" shortcut="toggleDesktopSharingPopover" content="Share screen" data-i18n="[content]toolbar.sharescreen" style="display: none"></a>
140
-                    <a class="button icon-full-screen" id="toolbar_button_fullScreen" data-container="body" data-toggle="popover" data-placement="bottom" content="Enter / Exit Full Screen" data-i18n="[content]toolbar.fullscreen"></a>
141
-                    <a class="button icon-telephone" id="toolbar_button_sip" data-container="body" data-toggle="popover" data-placement="bottom" content="Call SIP number" data-i18n="[content]toolbar.sip" style="display: none"></a>
142
-                    <a class="button icon-dialpad" id="toolbar_button_dialpad" data-container="body" data-toggle="popover" data-placement="bottom" content="Open dialpad" data-i18n="[content]toolbar.dialpad" style="display: none"></a>
143
-                    <a class="button icon-settings" id="toolbar_button_settings" data-container="body" data-toggle="popover" data-placement="bottom" content="Settings" data-i18n="[content]toolbar.Settings"></a>
144
-                    <a class="button icon-hangup" id="toolbar_button_hangup" data-container="body" data-toggle="popover" data-placement="bottom" content="Hang Up" data-i18n="[content]toolbar.hangup"></a>
145
-                </span>
103
+                <span id="mainToolbar" class="toolbar"></span>
104
+        </div>
105
+        <div id="subject" class="hide"></div>
106
+        <div id="extendedToolbar" class="toolbar">
107
+            <a class="button" id="toolbar_button_profile" data-container="body" data-placement="right" data-i18n="[content]toolbar.profile" content="Edit your profile">
108
+                <img id="avatar" src="images/avatar2.png"/>
109
+            </a>
110
+            <span id="authentication" class="authentication" style="display: none">
111
+                <a class="button icon-avatar" id="toolbar_button_authentication" data-i18n="[content]toolbar.authenticate"></a>
112
+                <ul class="loginmenu extendedToolbarPopup">
113
+                    <span class="loginmenuPadding"></span>
114
+                    <li id="toolbar_auth_identity"></li>
115
+                    <li id="toolbar_button_login">
116
+                        <a class="authButton" data-i18n="toolbar.login"></a>
117
+                    </li>
118
+                    <li id="toolbar_button_logout">
119
+                        <a class="authButton" data-i18n="toolbar.logout"></a>
120
+                    </li>
121
+                </ul>
122
+            </span>
123
+            <a class="button icon-contactList" id="toolbar_contact_list" data-container="body" data-toggle="popover" data-placement="right" shortcut="contactlistpopover"  data-i18n="[content]bottomtoolbar.contactlist" content="Open / close contact list">
124
+                <span id="numberOfParticipants"></span>
125
+            </a>
126
+            <a class="button icon-chat" id="toolbar_button_chat" data-container="body" data-toggle="popover" shortcut="toggleChatPopover" data-placement="right" data-i18n="[content]toolbar.chat" content="Open / close chat">
127
+                <span id="unreadMessages"></span>
128
+            </a>
129
+            <a class="button" id="toolbar_button_record" data-container="body" data-toggle="popover" data-placement="right" style="display: none"></a>
130
+            <a class="button icon-security" id="toolbar_button_security" data-container="body" data-toggle="popover" data-placement="right" data-i18n="[content]toolbar.lock" content="Lock / unlock room"></a>
131
+            <a class="button icon-share-doc" id="toolbar_button_etherpad" data-container="body" data-toggle="popover" data-placement="right" content="Shared document" data-i18n="[content]toolbar.etherpad"></a>
132
+            <a class="button icon-shared-video" id="toolbar_button_sharedvideo" data-container="body" data-toggle="popover" data-placement="right" content="Share a YouTube video" data-i18n="[content]toolbar.sharedvideo" style="display: none">
133
+                <ul id="sharedVideoMutedPopup" class="loginmenu extendedToolbarPopup">
134
+                    <li data-i18n="[html]toolbar.sharedVideoMutedPopup"></li>
135
+                </ul>
136
+            </a>
137
+            <a class="button icon-telephone" id="toolbar_button_sip" data-container="body" data-toggle="popover" data-placement="right" content="Call SIP number" data-i18n="[content]toolbar.sip" style="display: none"></a>
138
+            <a class="button icon-dialpad" id="toolbar_button_dialpad" data-container="body" data-toggle="popover" data-placement="right" content="Open dialpad" data-i18n="[content]toolbar.dialpad" style="display: none"></a>
139
+            <a class="button icon-settings" id="toolbar_button_settings" data-container="body" data-toggle="popover" data-placement="right" content="Settings" data-i18n="[content]toolbar.Settings"></a>
140
+            <a class="button icon-full-screen" id="toolbar_button_fullScreen" data-container="body" data-toggle="popover" data-placement="right" shortcut="toggleFullscreenPopover" data-i18n="[content]toolbar.fullscreen" content="Enter / Exit Full Screen"></a>
141
+            <a class="button icon-toggle-filmstrip" id="toolbar_film_strip" data-container="body" data-toggle="popover" shortcut="filmstripPopover" data-placement="right" data-i18n="[content]toolbar.filmstrip" content="Show / hide videos"></a>
142
+            <a class="button icon-feedback" id="feedbackButton" data-container="body" data-toggle="popover" data-placement="right" data-i18n="[content]feedback"></a>
143
+            <div id="sideToolbarContainer">
144
+                <div id="profile_container" class="sideToolbarContainer__inner">
145
+                    <div class="title" data-i18n="profile.title"></div>
146
+                    <div class="sideToolbarBlock first">
147
+                        <label class="first" data-i18n="profile.setDisplayNameLabel"></label>
148
+                        <input type="text" id="setDisplayName" data-i18n="[placeholder]settings.name" placeholder="Name">
149
+                    </div>
150
+                    <div class="sideToolbarBlock">
151
+                        <label data-i18n="profile.setEmailLabel"></label>
152
+                        <input type="text" id="setEmail" placeholder="Enter e-mail">
153
+                    </div>
154
+                </div>
155
+                <div id="chat_container" class="sideToolbarContainer__inner">
156
+                    <div id="nickname">
157
+                        <span data-i18n="chat.nickname.title"></span>
158
+                        <form>
159
+                            <input type='text' id="nickinput" data-i18n="[placeholder]chat.nickname.popover" autofocus>
160
+                        </form>
161
+                    </div>
162
+
163
+                    <div id="chatconversation"></div>
164
+                    <audio id="chatNotification" src="sounds/incomingMessage.wav" preload="auto"></audio>
165
+                    <textarea id="usermsg" data-i18n="[placeholder]chat.messagebox" autofocus></textarea>
166
+                    <div id="smileysarea">
167
+                        <div id="smileys" id="toggle_smileys">
168
+                            <img src="images/smile.svg"/>
169
+                        </div>
170
+                    </div>
171
+                </div>
172
+                <div id="contacts_container" class="sideToolbarContainer__inner">
173
+                    <div class="title" data-i18n="contactlist"></div>
174
+                    <ul id="contacts"></ul>
175
+                </div>
176
+                <div id="settings_container" class="sideToolbarContainer__inner">
177
+                    <div class="title" data-i18n="settings.title"></div>
178
+                    <select class="first" id="languages_selectbox"></select>
179
+                    <div class="subTitle" data-i18n="settings.audioVideo"></div>
180
+                    <div id="devicesOptions">
181
+                        <div class="sideToolbarBlock first">
182
+                            <label class="first" data-i18n="settings.selectCamera"></label>
183
+                            <select id="selectCamera"></select>
184
+                        </div>
185
+                        <div class="sideToolbarBlock">
186
+                            <label data-i18n="settings.selectMic"></label>
187
+                            <select  id="selectMic"></select>
188
+                        </div>
189
+                        <div class="sideToolbarBlock">
190
+                            <label data-i18n="settings.selectAudioOutput"></label>
191
+                            <select  id="selectAudioOutput"></select>
192
+                        </div>
193
+                    </div>
194
+                    <div class="subTitle" data-i18n="settings.moderator"></div>
195
+                    <div id = "startMutedOptions">
196
+                        <div class="sideToolbarBlock first">
197
+                            <input type="checkbox" id="startAudioMuted">
198
+                            <label class="startMutedLabel" for="startAudioMuted" data-i18n="settings.startAudioMuted"></label>
199
+                        </div>
200
+                        <div class="sideToolbarBlock">
201
+                            <input type="checkbox" id="startVideoMuted">
202
+                            <label class="startMutedLabel" for="startVideoMuted" data-i18n="settings.startVideoMuted"></label>
203
+                        </div>
204
+                    </div>
205
+                    <div id="followMeOptions" class="sideToolbarBlock">
206
+                        <input type="checkbox" id="followMeCheckBox">
207
+                        <label class="followMeLabel" for="followMeCheckBox" data-i18n="settings.followMe"></label>
208
+                    </div>
209
+                    <a id="downloadlog" data-container="body" data-toggle="popover" data-placement="right" data-i18n="[data-content]downloadlogs" ><i class="icon-download"></i></a>
210
+                </div>
146 211
             </div>
147
-            <div id="subject"></div>
148 212
         </div>
149 213
         <div id="videospace">
150
-
151 214
             <div id="largeVideoContainer" class="videocontainer">
152 215
                 <div id="presentation"></div>
153 216
                 <div id="sharedVideo"><div id="sharedVideoIFrame"></div></div>
@@ -183,96 +246,6 @@
183 246
                 <audio id="userJoined" src="sounds/joined.wav" preload="auto"></audio>
184 247
                 <audio id="userLeft" src="sounds/left.wav" preload="auto"></audio>
185 248
             </div>
186
-            <span id="bottomToolbar">
187
-                <span class="bottomToolbar_span">
188
-                    <a class="bottomToolbarButton" id="bottom_toolbar_chat" data-container="body" data-toggle="popover" shortcut="toggleChatPopover" data-placement="top" data-i18n="[content]bottomtoolbar.chat" content="Open / close chat">
189
-                        <i id="chatBottomButton" class="icon-chat-simple">
190
-                            <span id="bottomUnreadMessages"></span>
191
-                        </i>
192
-                    </a>
193
-                </span>
194
-                <span class="bottomToolbar_span">
195
-                    <a class="bottomToolbarButton" id="bottom_toolbar_contact_list" data-container="body" data-toggle="popover" data-placement="top" id="contactlistpopover"  data-i18n="[content]bottomtoolbar.contactlist" content="Open / close contact list">
196
-                        <i id="contactListButton" class="icon-contactList">
197
-                            <span id="numberOfParticipants"></span>
198
-                        </i>
199
-                    </a>
200
-                </span>
201
-                <span class="bottomToolbar_span">
202
-                    <a class="bottomToolbarButton" id="bottom_toolbar_film_strip" data-container="body" data-toggle="popover" shortcut="filmstripPopover" data-placement="top" data-i18n="[content]bottomtoolbar.filmstrip" content="Show / hide film strip">
203
-                        <i id="filmStripButton" class="icon-filmstrip"></i>
204
-                    </a>
205
-                </span>
206
-            </span>
207
-        </div>
208
-        <div id="chatspace" class="right-panel" style="display:none;">
209
-            <div id="nickname">
210
-                <span data-i18n="chat.nickname.title"></span>
211
-                <form>
212
-                    <input type='text' id="nickinput" data-i18n="[placeholder]chat.nickname.popover" autofocus>
213
-                </form>
214
-            </div>
215
-
216
-            <div id="chatconversation"></div>
217
-            <audio id="chatNotification" src="sounds/incomingMessage.wav" preload="auto"></audio>
218
-                <textarea id="usermsg" data-i18n="[placeholder]chat.messagebox" autofocus></textarea>
219
-            <div id="smileysarea">
220
-                <div id="smileys" id="toggle_smileys">
221
-                    <img src="images/smile.svg"/>
222
-                </div>
223
-            </div>
224
-        </div>
225
-        <div id="contactlist" class="right-panel" style="display:none;">
226
-            <div class="title">
227
-                <i class="icon-contactList"></i>
228
-                <span data-i18n="contactlist"></span>
229
-            </div>
230
-            <ul id="contacts"></ul>
231
-        </div>
232
-        <div id="settingsmenu" class="right-panel" style="display:none;">
233
-            <div class="title">
234
-                <i class="icon-settings"></i>
235
-                <span data-i18n="settings.title"></span>
236
-            </div>
237
-            <img id="avatar" src="images/avatar2.png"/>
238
-            <div class="arrow-up"></div>
239
-            <input type="text" id="setDisplayName" data-i18n="[placeholder]settings.name" placeholder="Name">
240
-            <input type="text" id="setEmail" placeholder="E-Mail">
241
-            <select id="languages_selectbox"></select>
242
-            <div id = "startMutedOptions">
243
-                <label class = "startMutedLabel">
244
-                    <input type="checkbox" id="startAudioMuted">
245
-                    <span  data-i18n="settings.startAudioMuted"></span>
246
-                </label>
247
-                <label class = "startMutedLabel">
248
-                    <input type="checkbox" id="startVideoMuted">
249
-                    <span data-i18n="settings.startVideoMuted"></span>
250
-                </label>
251
-            </div>
252
-            <div id="devicesOptions">
253
-                <label className="devicesOptionsLabel">
254
-                    <span data-i18n="settings.selectCamera"></span>
255
-                    <select id="selectCamera"></select>
256
-                </label>
257
-                <label className="devicesOptionsLabel">
258
-                    <span data-i18n="settings.selectMic"></span>
259
-                    <select id="selectMic"></select>
260
-                </label>
261
-                <label className="devicesOptionsLabel">
262
-                    <span data-i18n="settings.selectAudioOutput"></span>
263
-                    <select id="selectAudioOutput"></select>
264
-                </label>
265
-            </div>
266
-            <div id="followMeOptions">
267
-                <label class = "followMeLabel">
268
-                    <input type="checkbox" id="followMeCheckBox">
269
-                    <span  data-i18n="settings.followMe"></span>
270
-                </label>
271
-            </div>
272
-            <a id="downloadlog" data-container="body" data-toggle="popover" data-placement="right" data-i18n="[data-content]downloadlogs" ><i class="fa fa-cloud-download"></i></a>
273
-        </div>
274
-        <div id="feedbackButtonDiv">
275
-            <a id="feedbackButton" data-container="body" data-toggle="popover" data-placement="right" data-i18n="[data-content]feedback"><i class="fa fa-heart"></i></a>
276 249
         </div>
277 250
     </div>
278 251
     <div id="keyboard-shortcuts" class="keyboard-shortcuts" style="display:none;">

+ 6
- 2
interface_config.js ファイルの表示

@@ -2,6 +2,9 @@ var interfaceConfig = {
2 2
     CANVAS_EXTRA: 104,
3 3
     CANVAS_RADIUS: 0,
4 4
     SHADOW_COLOR: '#ffffff',
5
+    // TO FIX: this needs to be handled from SASS variables. There are some
6
+    // methods allowing to use variables both in css and js.
7
+    DEFAULT_BACKGROUND: '#474747',
5 8
     INITIAL_TOOLBAR_TIMEOUT: 20000,
6 9
     TOOLBAR_TIMEOUT: 4000,
7 10
     DEFAULT_REMOTE_DISPLAY_NAME: "Fellow Jitster",
@@ -16,7 +19,8 @@ var interfaceConfig = {
16 19
     INVITATION_POWERED_BY: true,
17 20
     // the toolbar buttons line is intentionally left in one line, to be able
18 21
     // to easily override values or remove them using regex
19
-    TOOLBAR_BUTTONS: ['authentication', 'microphone', 'camera', 'desktop', 'recording', 'security', 'invite', 'chat', 'etherpad', 'sharedvideo', 'fullscreen', 'sip', 'dialpad', 'settings', 'hangup', 'filmstrip', 'contacts'], // jshint ignore:line
22
+    MAIN_TOOLBAR_BUTTONS: ['microphone', 'camera', 'desktop', 'invite', 'hangup'], // jshint ignore:line
23
+    TOOLBAR_BUTTONS: ['profile', 'authentication', 'microphone', 'camera', 'desktop', 'recording', 'security', 'invite', 'chat', 'etherpad', 'sharedvideo', 'fullscreen', 'sip', 'dialpad', 'settings', 'hangup', 'filmstrip', 'contacts'], // jshint ignore:line
20 24
     // Determines how the video would fit the screen. 'both' would fit the whole
21 25
     // screen, 'height' would fit the original video height to the height of the
22 26
     // screen, 'width' would fit the original video width to the width of the
@@ -29,4 +33,4 @@ var interfaceConfig = {
29 33
     RANDOM_AVATAR_URL_PREFIX: false,
30 34
     RANDOM_AVATAR_URL_SUFFIX: false,
31 35
     FILM_STRIP_MAX_HEIGHT: 120
32
-};
36
+};

+ 23
- 12
lang/main.json ファイルの表示

@@ -1,5 +1,5 @@
1 1
 {
2
-    "contactlist": "CONTACT LIST",
2
+    "contactlist": "ON CALL (__participants__)",
3 3
     "connectionsettings": "Connection Settings",
4 4
     "poweredby": "powered by",
5 5
     "downloadlogs": "Download logs",
@@ -11,7 +11,7 @@
11 11
     "raisedHand": "Would like to speak",
12 12
     "defaultNickname": "ex. Jane Pink",
13 13
     "defaultLink": "e.g. __url__",
14
-    "calling": "Calling __name__ ...",
14
+    "callingName": "__name__",
15 15
     "userMedia": {
16 16
       "react-nativeGrantPermissions": "Please grant permissions to use your camera and microphone by pressing <b><i>Allow</i></b> button",
17 17
       "chromeGrantPermissions": "Please grant permissions to use your camera and microphone by pressing <b><i>Allow</i></b> button",
@@ -27,7 +27,7 @@
27 27
         "raiseHand": "Raise your hand.",
28 28
         "pushToTalk": "Push to talk.",
29 29
         "toggleScreensharing": "Switch between camera and screensharing.",
30
-        "toggleFilmstrip": "Show or hide the filmstrip.",
30
+        "toggleFilmstrip": "Show or hide the videos.",
31 31
         "toggleShortcuts": "Show or hide this help menu.",
32 32
         "focusLocal": "Focus on the local video.",
33 33
         "focusRemote": "Focus on one of the remote videos.",
@@ -93,11 +93,12 @@
93 93
         "micMutedPopup": "Your microphone has been muted so that you<br/>would fully enjoy your shared video.",
94 94
         "unableToUnmutePopup": "You cannot un-mute while the shared video is on.",
95 95
         "cameraDisabled": "Camera is not available",
96
-        "micDisabled": "Microphone is not available"
96
+        "micDisabled": "Microphone is not available",
97
+        "filmstrip": "Show / hide videos"
97 98
     },
98 99
     "bottomtoolbar": {
99 100
         "chat": "Open / close chat",
100
-        "filmstrip": "Show / hide film strip",
101
+        "filmstrip": "Show / hide videos",
101 102
         "contactlist": "Open / close contact list"
102 103
     },
103 104
     "chat":{
@@ -112,14 +113,24 @@
112 113
         "title": "SETTINGS",
113 114
         "update": "Update",
114 115
         "name": "Name",
115
-        "startAudioMuted": "Start without audio",
116
-        "startVideoMuted": "Start without video",
116
+        "startAudioMuted": "Everyone starts muted",
117
+        "startVideoMuted": "Everyone starts hidden",
117 118
         "selectCamera": "Select camera",
118 119
         "selectMic": "Select microphone",
119 120
         "selectAudioOutput": "Select audio output",
120
-        "followMe": "Enable follow me",
121
+        "followMe": "Everyone follows me",
121 122
         "noDevice": "None",
122
-        "noPermission": "Permission to use device is not granted"
123
+        "noPermission": "Permission to use device is not granted",
124
+        "cameraAndMic": "Camera and microphone",
125
+        "moderator": "MODERATOR",
126
+        "password": "SET PASSWORD",
127
+        "audioVideo": "AUDIO / VIDEO",
128
+        "setPasswordLabel": "Lock your room with a password."
129
+    },
130
+    "profile": {
131
+        "title": "PROFILE",
132
+        "setDisplayNameLabel": "Set your display name",
133
+        "setEmailLabel": "Set your gravatar email"
123 134
     },
124 135
     "videothumbnail":
125 136
     {
@@ -221,18 +232,18 @@
221 232
         "Remove": "Remove",
222 233
         "passwordMsg": "Set a password to lock your room",
223 234
         "Invite": "Invite",
224
-        "shareLink": "Share this link with everyone you want to invite",
235
+        "shareLink": "Copy and share this link",
225 236
         "settings1": "Configure your conference",
226 237
         "settings2": "Participants join muted",
227 238
         "settings3": "Require nicknames<br/><br/>Set a password to lock your room:",
228
-        "yourPassword": "your password",
239
+        "yourPassword": "Enter new password",
229 240
         "Back": "Back",
230 241
         "serviceUnavailable": "Service unavailable",
231 242
         "gracefulShutdown": "Our service is currently down for maintenance. Please try again later.",
232 243
         "Yes": "Yes",
233 244
         "reservationError": "Reservation system error",
234 245
         "reservationErrorMsg": "Error code: __code__, message: __msg__",
235
-        "password": "password",
246
+        "password": "Enter password",
236 247
         "userPassword": "user password",
237 248
         "token": "token",
238 249
         "tokenAuthFailed": "Failed to authenticate with XMPP server: invalid token",

+ 8
- 8
modules/UI/Feedback.js ファイルの表示

@@ -20,11 +20,11 @@ var constructOverallFeedbackHtml = function() {
20 20
         feedbackQuestion +
21 21
         '</div><br/><br/>' +
22 22
         '<div id="stars">' +
23
-        '<a><i class="fa fa-star-o fa fa-star"></i></a>' +
24
-        '<a><i class="fa fa-star-o fa fa-star"></i></a>' +
25
-        '<a><i class="fa fa-star-o fa fa-star"></i></a>' +
26
-        '<a><i class="fa fa-star-o fa fa-star"></i></a>' +
27
-        '<a><i class="fa fa-star-o fa fa-star"></i></a>' +
23
+        '<a><i class="icon-star icon-star-full"></i></a>' +
24
+        '<a><i class="icon-star icon-star-full"></i></a>' +
25
+        '<a><i class="icon-star icon-star-full"></i></a>' +
26
+        '<a><i class="icon-star icon-star-full"></i></a>' +
27
+        '<a><i class="icon-star icon-star-full"></i></a>' +
28 28
         '</div></div>';
29 29
 
30 30
     return message;
@@ -252,10 +252,10 @@ var Feedback = {
252 252
     {
253 253
         $('#stars >a >i').each(function(index) {
254 254
             if (index <= starCount) {
255
-                $(this).removeClass("fa-star-o");
255
+                $(this).removeClass("icon-star");
256 256
             }
257 257
             else
258
-                $(this).addClass("fa-star-o");
258
+                $(this).addClass("icon-star");
259 259
         });
260 260
     },
261 261
     /**
@@ -280,7 +280,7 @@ var Feedback = {
280 280
     unhoverStars: function (starCount)
281 281
     {
282 282
         $('#stars >a >i').each(function(index) {
283
-            if (index <= starCount && $(this).hasClass("fa-star-o"))
283
+            if (index <= starCount && $(this).hasClass("icon-star"))
284 284
                 $(this).removeClass("starHover");
285 285
         });
286 286
     }

+ 54
- 29
modules/UI/UI.js ファイルの表示

@@ -5,10 +5,9 @@ var UI = {};
5 5
 import Chat from "./side_pannels/chat/Chat";
6 6
 import Toolbar from "./toolbars/Toolbar";
7 7
 import ToolbarToggler from "./toolbars/ToolbarToggler";
8
-import BottomToolbar from "./toolbars/BottomToolbar";
9 8
 import ContactList from "./side_pannels/contactlist/ContactList";
10 9
 import Avatar from "./avatar/Avatar";
11
-import PanelToggler from "./side_pannels/SidePanelToggler";
10
+import SideContainerToggler from "./side_pannels/SideContainerToggler";
12 11
 import UIUtil from "./util/UIUtil";
13 12
 import UIEvents from "../../service/UI/UIEvents";
14 13
 import CQEvents from '../../service/connectionquality/CQEvents';
@@ -20,6 +19,7 @@ import GumPermissionsOverlay from './gum_overlay/UserMediaPermissionsGuidanceOve
20 19
 import VideoLayout from "./videolayout/VideoLayout";
21 20
 import FilmStrip from "./videolayout/FilmStrip";
22 21
 import SettingsMenu from "./side_pannels/settings/SettingsMenu";
22
+import Profile from "./side_pannels/profile/Profile";
23 23
 import Settings from "./../settings/Settings";
24 24
 import { reload } from '../util/helpers';
25 25
 import RingOverlay from "./ring_overlay/RingOverlay";
@@ -134,7 +134,6 @@ function setupChat() {
134 134
  */
135 135
 function setupToolbars() {
136 136
     Toolbar.init(eventEmitter);
137
-    BottomToolbar.setupListeners(eventEmitter);
138 137
 }
139 138
 
140 139
 /**
@@ -142,7 +141,7 @@ function setupToolbars() {
142 141
  * (a.k.a. presentation mode in Chrome).
143 142
  * @see https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API
144 143
  */
145
-function toggleFullScreen () {
144
+UI.toggleFullScreen = function() {
146 145
                             // alternative standard method
147 146
     let isNotFullScreen = !document.fullscreenElement &&
148 147
             !document.mozFullScreenElement && // current working methods
@@ -171,7 +170,7 @@ function toggleFullScreen () {
171 170
             document.webkitExitFullscreen();
172 171
         }
173 172
     }
174
-}
173
+};
175 174
 
176 175
 /**
177 176
  * Notify user that server has shut down.
@@ -253,7 +252,7 @@ UI.changeDisplayName = function (id, displayName) {
253 252
     VideoLayout.onDisplayNameChanged(id, displayName);
254 253
 
255 254
     if (APP.conference.isLocalId(id) || id === 'localVideoContainer') {
256
-        SettingsMenu.changeDisplayName(displayName);
255
+        Profile.changeDisplayName(displayName);
257 256
         Chat.setChatConversationMode(!!displayName);
258 257
     }
259 258
 };
@@ -299,7 +298,7 @@ UI.initConference = function () {
299 298
     //if local role changes buttons state will be again updated
300 299
     UI.updateLocalRole(false);
301 300
 
302
-    ToolbarToggler.showToolbar();
301
+    UI.showToolbar();
303 302
 
304 303
     let displayName = config.displayJids ? id : Settings.getDisplayName();
305 304
 
@@ -337,7 +336,7 @@ UI.mucJoined = function () {
337 336
  */
338 337
 UI.handleToggleFilmStrip = () => {
339 338
     UI.toggleFilmStrip();
340
-    VideoLayout.resizeVideoArea(PanelToggler.isVisible(), true, false);
339
+    VideoLayout.resizeVideoArea(true, false);
341 340
 };
342 341
 
343 342
 /**
@@ -357,16 +356,20 @@ function registerListeners() {
357 356
         }
358 357
     });
359 358
 
360
-    UI.addListener(UIEvents.FULLSCREEN_TOGGLE, toggleFullScreen);
359
+    UI.addListener(UIEvents.FULLSCREEN_TOGGLE, UI.toggleFullScreen);
361 360
 
362 361
     UI.addListener(UIEvents.TOGGLE_CHAT, UI.toggleChat);
363 362
 
364 363
     UI.addListener(UIEvents.TOGGLE_SETTINGS, function () {
365
-        PanelToggler.toggleSettingsMenu();
364
+        UI.toggleSidePanel("settings_container");
366 365
     });
367 366
 
368 367
     UI.addListener(UIEvents.TOGGLE_CONTACT_LIST, UI.toggleContactList);
369 368
 
369
+    UI.addListener( UIEvents.TOGGLE_PROFILE, function() {
370
+        UI.toggleSidePanel("profile_container");
371
+    });
372
+
370 373
     UI.addListener(UIEvents.TOGGLE_FILM_STRIP, UI.handleToggleFilmStrip);
371 374
 
372 375
     UI.addListener(UIEvents.FOLLOW_ME_ENABLED, function (isEnabled) {
@@ -380,8 +383,8 @@ function registerListeners() {
380 383
  */
381 384
 function bindEvents() {
382 385
     function onResize() {
383
-        PanelToggler.resizeChat();
384
-        VideoLayout.resizeVideoArea(PanelToggler.isVisible());
386
+        SideContainerToggler.resize();
387
+        VideoLayout.resizeVideoArea();
385 388
     }
386 389
 
387 390
     // Resize and reposition videos in full screen mode.
@@ -430,22 +433,22 @@ UI.start = function () {
430 433
     registerListeners();
431 434
 
432 435
     ToolbarToggler.init();
433
-    BottomToolbar.init();
436
+    SideContainerToggler.init(eventEmitter);
434 437
     FilmStrip.init(eventEmitter);
435 438
 
436 439
     VideoLayout.init(eventEmitter);
437 440
     if (!interfaceConfig.filmStripOnly) {
438
-        VideoLayout.initLargeVideo(PanelToggler.isVisible());
441
+        VideoLayout.initLargeVideo();
439 442
     }
440
-    VideoLayout.resizeVideoArea(PanelToggler.isVisible(), true, true);
443
+    VideoLayout.resizeVideoArea(true, true);
441 444
 
442 445
     ContactList.init(eventEmitter);
443 446
 
444 447
     bindEvents();
445 448
     sharedVideoManager = new SharedVideoManager(eventEmitter);
446 449
     if (!interfaceConfig.filmStripOnly) {
447
-        $("#videospace").mousemove(function () {
448
-            return ToolbarToggler.showToolbar();
450
+        $("#videoconference_page").mousemove(function () {
451
+            return UI.showToolbar();
449 452
         });
450 453
         setupToolbars();
451 454
         setupChat();
@@ -468,9 +471,8 @@ UI.start = function () {
468 471
             elem.href = 'data:application/json;charset=utf-8,\n' + data;
469 472
         });
470 473
     } else {
471
-        $("#header").css("display", "none");
474
+        $("#mainToolbarContainer").css("display", "none");
472 475
         $("#downloadlog").css("display", "none");
473
-        BottomToolbar.hide();
474 476
         FilmStrip.setupFilmStripOnly();
475 477
         messageHandler.enableNotifications(false);
476 478
         $('body').popover("disable");
@@ -499,17 +501,11 @@ UI.start = function () {
499 501
             "hideEasing": "linear",
500 502
             "showMethod": "fadeIn",
501 503
             "hideMethod": "fadeOut",
502
-            "reposition": function () {
503
-                if (PanelToggler.isVisible()) {
504
-                    $("#toast-container").addClass("notification-bottom-right-center");
505
-                } else {
506
-                    $("#toast-container").removeClass("notification-bottom-right-center");
507
-                }
508
-            },
509 504
             "newestOnTop": false
510 505
         };
511 506
 
512 507
         SettingsMenu.init(eventEmitter);
508
+        Profile.init(eventEmitter);
513 509
     }
514 510
 
515 511
     if(APP.tokenData.callee) {
@@ -727,16 +723,26 @@ UI.isFilmStripVisible = function () {
727 723
  * Toggles chat panel.
728 724
  */
729 725
 UI.toggleChat = function () {
730
-    PanelToggler.toggleChat();
726
+    UI.toggleSidePanel("chat_container");
731 727
 };
732 728
 
733 729
 /**
734 730
  * Toggles contact list panel.
735 731
  */
736 732
 UI.toggleContactList = function () {
737
-    PanelToggler.toggleContactList();
733
+    UI.toggleSidePanel("contacts_container");
734
+};
735
+
736
+/**
737
+ * Toggles the given side panel.
738
+ *
739
+ * @param {String} sidePanelId the identifier of the side panel to toggle
740
+ */
741
+UI.toggleSidePanel = function (sidePanelId) {
742
+    SideContainerToggler.toggle(sidePanelId);
738 743
 };
739 744
 
745
+
740 746
 /**
741 747
  * Handle new user display name.
742 748
  */
@@ -828,6 +834,16 @@ UI.removeListener = function (type, listener) {
828 834
     eventEmitter.removeListener(type, listener);
829 835
 };
830 836
 
837
+/**
838
+ * Emits the event of given type by specifying the parameters in options.
839
+ *
840
+ * @param type the type of the event we're emitting
841
+ * @param options the parameters for the event
842
+ */
843
+UI.emitEvent = function (type, options) {
844
+    eventEmitter.emit(type, options);
845
+};
846
+
831 847
 UI.clickOnVideo = function (videoNumber) {
832 848
     var remoteVideos = $(".videocontainer:not(#mixedstream)");
833 849
     if (remoteVideos.length > videoNumber) {
@@ -854,7 +870,7 @@ function changeAvatar(id, avatarUrl) {
854 870
     VideoLayout.changeUserAvatar(id, avatarUrl);
855 871
     ContactList.changeUserAvatar(id, avatarUrl);
856 872
     if (APP.conference.isLocalId(id)) {
857
-        SettingsMenu.changeAvatar(avatarUrl);
873
+        Profile.changeAvatar(avatarUrl);
858 874
     }
859 875
 }
860 876
 
@@ -1483,6 +1499,15 @@ UI.hideRingOverLay = function () {
1483 1499
     FilmStrip.toggleFilmStrip(true);
1484 1500
 };
1485 1501
 
1502
+/**
1503
+ * Indicates if the ring overlay is currently visible.
1504
+ *
1505
+ * @returns {*|boolean} {true} if the ring overlay is visible, {false} otherwise
1506
+ */
1507
+UI.isRingOverlayVisible = function () {
1508
+    return RingOverlay.isVisible();
1509
+};
1510
+
1486 1511
 /**
1487 1512
  * Shows browser-specific overlay with guidance how to proceed with gUM prompt.
1488 1513
  * @param {string} browser - name of browser for which to show the guidance

+ 0
- 1
modules/UI/etherpad/Etherpad.js ファイルの表示

@@ -4,7 +4,6 @@ import VideoLayout from "../videolayout/VideoLayout";
4 4
 import LargeContainer from '../videolayout/LargeContainer';
5 5
 import UIUtil from "../util/UIUtil";
6 6
 import UIEvents from "../../../service/UI/UIEvents";
7
-import SidePanelToggler from "../side_pannels/SidePanelToggler";
8 7
 import FilmStrip from '../videolayout/FilmStrip';
9 8
 
10 9
 /**

+ 0
- 2
modules/UI/recording/Recording.js ファイルの表示

@@ -19,7 +19,6 @@ import UIUtil from '../util/UIUtil';
19 19
 import VideoLayout from '../videolayout/VideoLayout';
20 20
 import Feedback from '../Feedback.js';
21 21
 import Toolbar from '../toolbars/Toolbar';
22
-import BottomToolbar from '../toolbars/BottomToolbar';
23 22
 
24 23
 /**
25 24
  * The dialog for user input.
@@ -260,7 +259,6 @@ var Recording = {
260 259
             VideoLayout.setLocalVideoVisible(false);
261 260
             Feedback.enableFeedback(false);
262 261
             Toolbar.enable(false);
263
-            BottomToolbar.enable(false);
264 262
             APP.UI.messageHandler.enableNotifications(false);
265 263
             APP.UI.messageHandler.enablePopups(false);
266 264
         }

+ 50
- 22
modules/UI/ring_overlay/RingOverlay.js ファイルの表示

@@ -1,4 +1,5 @@
1 1
 /* global $ */
2
+/* jshint -W101 */
2 3
 
3 4
 /**
4 5
  * Shows ring overlay
@@ -8,35 +9,39 @@ class RingOverlay {
8 9
      * @param callee instance of User class from TokenData.js
9 10
      */
10 11
     constructor(callee) {
12
+        this._containerId = 'ringOverlay';
13
+        this._audioContainerId = 'ringOverlayRinging';
14
+
11 15
         this.callee = callee;
12
-        this._buildHtml();
13
-        this.audio = $("#ring_overlay_ringing");
14
-        this.audio[0].play();
16
+        this.render();
17
+        this.audio = document.getElementById(this._audioContainerId);
18
+        this.audio.play();
15 19
         this._setAudioTimeout();
16 20
     }
17 21
 
18 22
     /**
19 23
      * Builds and appends the ring overlay to the html document
20 24
      */
21
-    _buildHtml() {
22
-        $("body").append("<div class='overlay_container' >" +
23
-        "<div class='overlay' /><div class='overlay_content'>" +
24
-        "<img class='overlay_avatar' src='" +
25
-        this.callee.getAvatarUrl() + "' />" +
26
-        "<span data-i18n='calling' data-i18n-options='" +
27
-        JSON.stringify({name: this.callee.getName()}) +
28
-        "' class='overlay_text'>Calling " +
29
-        this.callee.getName() + "...</span></div>" +
30
-        "<audio id='ring_overlay_ringing' src='/sounds/ring.ogg' /></div>");
25
+    _getHtmlStr(callee) {
26
+        return `
27
+            <div id="${this._containerId}" class='ringing' >
28
+                <div class='ringing__content'>
29
+                    <p>Calling...</p>
30
+                    <img class='ringing__avatar' src="${callee.getAvatarUrl()}" />
31
+                    <div class="ringing__caller-info">
32
+                        <p>${callee.getName()}</p>
33
+                    </div>
34
+                </div>
35
+                <audio id="${this._audioContainerId}" src="/sounds/ring.ogg" />
36
+            </div>`;
31 37
     }
32 38
 
33 39
     /**
34
-     * Sets the interval that is going to play the ringing sound.
40
+     *
35 41
      */
36
-    _setAudioTimeout() {
37
-        this.interval = setInterval( () => {
38
-            this.audio[0].play();
39
-        }, 5000);
42
+    render() {
43
+        this.htmlStr = this._getHtmlStr(this.callee);
44
+        this._attach();
40 45
     }
41 46
 
42 47
     /**
@@ -44,9 +49,28 @@ class RingOverlay {
44 49
      * related to the ring overlay.
45 50
      */
46 51
     destroy() {
47
-        if(this.interval)
52
+        if (this.interval) {
48 53
             clearInterval(this.interval);
49
-        $(".overlay_container").remove();
54
+        }
55
+
56
+        this._detach();
57
+    }
58
+
59
+    _attach() {
60
+        $("body").append(this.htmlStr);
61
+    }
62
+
63
+    _detach() {
64
+        $(`#${this._containerId}`).remove();
65
+    }
66
+
67
+    /**
68
+     * Sets the interval that is going to play the ringing sound.
69
+     */
70
+    _setAudioTimeout() {
71
+        this.interval = setInterval( () => {
72
+            this.audio.play();
73
+        }, 5000);
50 74
     }
51 75
 }
52 76
 
@@ -66,26 +90,30 @@ export default {
66 90
         if(overlay) {
67 91
             this.hide();
68 92
         }
93
+
69 94
         overlay = new RingOverlay(callee);
70 95
     },
96
+
71 97
     /**
72 98
      * Hides the ring overlay. Destroys all the elements related to the ring
73 99
      * overlay.
74 100
      */
75 101
     hide() {
76
-        if(!overlay)
102
+        if(!overlay) {
77 103
             return false;
104
+        }
78 105
         overlay.destroy();
79 106
         overlay = null;
80 107
         return true;
81 108
     },
109
+
82 110
     /**
83 111
      * Checks whether or not the ring overlay is currently displayed.
84 112
      *
85 113
      * @returns {boolean} true if the ring overlay is currently displayed or
86 114
      * false otherwise.
87 115
      */
88
-    isDisplayed () {
116
+    isVisible () {
89 117
         return overlay !== null;
90 118
     }
91 119
 };

+ 127
- 0
modules/UI/side_pannels/SideContainerToggler.js ファイルの表示

@@ -0,0 +1,127 @@
1
+/* global $ */
2
+import UIEvents from "../../../service/UI/UIEvents";
3
+
4
+/**
5
+ * Handles open and close of the extended toolbar side panel
6
+ * (chat, settings, etc.).
7
+ *
8
+ * @type {{init, toggle, isVisible, hide, show, resize}}
9
+ */
10
+const SideContainerToggler = {
11
+    /**
12
+     * Initialises this toggler by registering the listeners.
13
+     *
14
+     * @param eventEmitter
15
+     */
16
+    init(eventEmitter) {
17
+        this.eventEmitter = eventEmitter;
18
+
19
+        // Adds a listener for the animation end event that would take care
20
+        // of hiding all internal containers when the extendedToolbarPanel is
21
+        // closed.
22
+        document.getElementById("sideToolbarContainer")
23
+            .addEventListener("animationend", function(e) {
24
+                if(e.animationName === "slideOutExt")
25
+                    $("#sideToolbarContainer").children().each(function() {
26
+                        if ($(this).hasClass("show"))
27
+                            SideContainerToggler.hideInnerContainer($(this));
28
+                    });
29
+            }, false);
30
+    },
31
+
32
+    /**
33
+     * Toggles the container with the given element id.
34
+     *
35
+     * @param {String} elementId the identifier of the container element to
36
+     * toggle
37
+     */
38
+    toggle(elementId) {
39
+        let elementSelector = $(`#${elementId}`);
40
+        let isSelectorVisible = elementSelector.hasClass("show");
41
+
42
+        if (isSelectorVisible) {
43
+            this.hide();
44
+        }
45
+        else {
46
+            if (this.isVisible())
47
+                $("#sideToolbarContainer").children().each(function() {
48
+                    if ($(this).id !== elementId && $(this).hasClass("show"))
49
+                        SideContainerToggler.hideInnerContainer($(this));
50
+                });
51
+
52
+            if (!this.isVisible())
53
+                this.show();
54
+
55
+            this.showInnerContainer(elementSelector);
56
+        }
57
+    },
58
+
59
+    /**
60
+     * Returns {true} if the side toolbar panel is currently visible,
61
+     * otherwise returns {false}.
62
+     */
63
+    isVisible() {
64
+        return $("#sideToolbarContainer").hasClass("slideInExt");
65
+    },
66
+
67
+    /**
68
+     * Returns {true} if the side toolbar panel is currently hovered and
69
+     * {false} otherwise.
70
+     */
71
+    isHovered() {
72
+        return $("#sideToolbarContainer:hover").length > 0;
73
+    },
74
+
75
+    /**
76
+     * Hides the side toolbar panel with a slide out animation.
77
+     */
78
+    hide() {
79
+        $("#sideToolbarContainer")
80
+            .removeClass("slideInExt").addClass("slideOutExt");
81
+    },
82
+
83
+    /**
84
+     * Shows the side toolbar panel with a slide in animation.
85
+     */
86
+    show() {
87
+        if (!this.isVisible())
88
+            $("#sideToolbarContainer")
89
+                .removeClass("slideOutExt").addClass("slideInExt");
90
+    },
91
+
92
+    /**
93
+     * Hides the inner container given by the selector.
94
+     *
95
+     * @param {Object} containerSelector the jquery selector for the
96
+     * element to hide
97
+     */
98
+    hideInnerContainer(containerSelector) {
99
+        containerSelector.removeClass("show").addClass("hide");
100
+
101
+        this.eventEmitter.emit(UIEvents.SIDE_TOOLBAR_CONTAINER_TOGGLED,
102
+            containerSelector.attr('id'), false);
103
+    },
104
+
105
+    /**
106
+     * Shows the inner container given by the selector.
107
+     *
108
+     * @param {Object} containerSelector the jquery selector for the
109
+     * element to show
110
+     */
111
+    showInnerContainer(containerSelector) {
112
+        containerSelector.removeClass("hide").addClass("show");
113
+
114
+        this.eventEmitter.emit(UIEvents.SIDE_TOOLBAR_CONTAINER_TOGGLED,
115
+            containerSelector.attr('id'), true);
116
+    },
117
+
118
+    /**
119
+     * TO FIX: do we need to resize the chat?
120
+     */
121
+    resize () {
122
+        //let [width, height] = UIUtil.getSidePanelSize();
123
+        //Chat.resizeChat(width, height);
124
+    }
125
+};
126
+
127
+export default SideContainerToggler;

+ 0
- 186
modules/UI/side_pannels/SidePanelToggler.js ファイルの表示

@@ -1,186 +0,0 @@
1
-/* global require, $ */
2
-import Chat from "./chat/Chat";
3
-import ContactList from "./contactlist/ContactList";
4
-import Settings from "./../../settings/Settings";
5
-import SettingsMenu from "./settings/SettingsMenu";
6
-import VideoLayout from "../videolayout/VideoLayout";
7
-import ToolbarToggler from "../toolbars/ToolbarToggler";
8
-import UIUtil from "../util/UIUtil";
9
-
10
-const buttons = {
11
-    '#chatspace': '#chatBottomButton',
12
-    '#contactlist': '#contactListButton',
13
-    '#settingsmenu': '#toolbar_button_settings'
14
-};
15
-
16
-var currentlyOpen = null;
17
-
18
-/**
19
- * Toggles the windows in the side panel
20
- * @param object the window that should be shown
21
- * @param selector the selector for the element containing the panel
22
- * @param onOpenComplete function to be called when the panel is opened
23
- * @param onOpen function to be called if the window is going to be opened
24
- * @param onClose function to be called if the window is going to be closed
25
- * @param onVideoResizeComplete function to be called after the video area
26
- * is resized
27
- */
28
-function toggle (object, selector, onOpenComplete,
29
-                 onOpen, onClose, onVideoResizeComplete) {
30
-    let isSideBarVisible = object.isVisible();
31
-
32
-    UIUtil.buttonClick(buttons[selector], "active");
33
-
34
-    if (isSideBarVisible) {
35
-        $("#toast-container").animate({
36
-            right: 5
37
-        }, {
38
-            queue: false,
39
-            duration: 500
40
-        });
41
-
42
-        $(selector).hide("slide", {
43
-            direction: "right",
44
-            queue: false,
45
-            duration: 500,
46
-            // Set the size to 0 at the end of the animation to ensure that
47
-            // the is(":visible") function on this selector will return {false}
48
-            // when the element is hidden.
49
-            complete: function() {$(selector).css("width", "0");}
50
-        });
51
-
52
-        resizeVideoArea(false, onVideoResizeComplete);
53
-
54
-        if(typeof onClose === "function") {
55
-            onClose();
56
-        }
57
-
58
-        currentlyOpen = null;
59
-    } else {
60
-        resizeVideoArea(true, onVideoResizeComplete);
61
-
62
-        // Undock the toolbar when the chat is shown and if we're in a
63
-        // video mode.
64
-        if (VideoLayout.isLargeVideoVisible()) {
65
-            ToolbarToggler.dockToolbar(false);
66
-        }
67
-
68
-        if (currentlyOpen) {
69
-            var current = $(currentlyOpen);
70
-            UIUtil.buttonClick(buttons[currentlyOpen], "active");
71
-            current.css('z-index', 4);
72
-            setTimeout(function () {
73
-                current.css('display', 'none');
74
-                current.css('z-index', 5);
75
-            }, 500);
76
-        }
77
-
78
-        $("#toast-container").animate({
79
-            right: (UIUtil.getSidePanelSize()[0] + 5)
80
-        }, {
81
-            queue: false,
82
-            duration: 500
83
-        });
84
-        // Set the size dynamically (not in the css), so that we're sure that
85
-        // when is(":visible") is called on this selector the result is {false}
86
-        // before it's actually visible.
87
-        // (Chrome seems to return {true} for an element which is in the DOM and
88
-        // has non-null size set).
89
-        $(selector).css("width", "20%");
90
-        $(selector).show("slide", {
91
-            direction: "right",
92
-            queue: false,
93
-            duration: 500,
94
-            complete: onOpenComplete
95
-        });
96
-        if(typeof onOpen === "function") {
97
-            onOpen();
98
-        }
99
-
100
-        currentlyOpen = selector;
101
-    }
102
-}
103
-
104
-function resizeVideoArea(isSidePanelVisible, completeFunction) {
105
-    VideoLayout.resizeVideoArea(isSidePanelVisible,
106
-        false,//don't force thumbnail count update
107
-        true, //animate
108
-        completeFunction);
109
-}
110
-
111
-/**
112
- * Toggler for the chat, contact list, settings menu, etc..
113
- */
114
-var PanelToggler = {
115
-
116
-    /**
117
-     * Opens / closes the chat area.
118
-     */
119
-    toggleChat () {
120
-        var chatCompleteFunction = Chat.isVisible()
121
-            ? function () {}
122
-            : function () {
123
-                Chat.scrollChatToBottom();
124
-                $('#chatspace').trigger('shown');
125
-            };
126
-
127
-        toggle(Chat, //Object
128
-            '#chatspace', // Selector
129
-            function () { //onOpenComplete
130
-                // Request the focus in the nickname field or the chat input
131
-                // field.
132
-                if ($('#nickname').css('visibility') === 'visible') {
133
-                    $('#nickinput').focus();
134
-                } else {
135
-                    $('#usermsg').focus();
136
-                }
137
-            },
138
-            () => this.resizeChat(), //OnOpen
139
-            null,
140
-            chatCompleteFunction); //OnClose
141
-    },
142
-
143
-    resizeChat () {
144
-        let [width, height] = UIUtil.getSidePanelSize();
145
-        Chat.resizeChat(width, height);
146
-    },
147
-
148
-    /**
149
-     * Opens / closes the contact list area.
150
-     */
151
-    toggleContactList () {
152
-        var completeFunction = ContactList.isVisible()
153
-            ? function () {}
154
-            : function () {
155
-                $('#contactlist').trigger('shown');
156
-            };
157
-
158
-        toggle(ContactList,
159
-            '#contactlist',
160
-            null,
161
-            function() {
162
-                ContactList.setVisualNotification(false);
163
-            },
164
-            null,
165
-            completeFunction);
166
-    },
167
-
168
-    /**
169
-     * Opens / closes the settings menu
170
-     */
171
-    toggleSettingsMenu () {
172
-        toggle(SettingsMenu,
173
-            '#settingsmenu',
174
-            null,
175
-            function() {},
176
-            null);
177
-    },
178
-
179
-    isVisible () {
180
-        return (Chat.isVisible() ||
181
-                ContactList.isVisible() ||
182
-                SettingsMenu.isVisible());
183
-    }
184
-};
185
-
186
-export default PanelToggler;

+ 8
- 27
modules/UI/side_pannels/chat/Chat.js ファイルの表示

@@ -18,15 +18,11 @@ var unreadMessages = 0;
18 18
  */
19 19
 function setVisualNotification(show) {
20 20
     var unreadMsgElement = document.getElementById('unreadMessages');
21
-    var unreadMsgBottomElement
22
-        = document.getElementById('bottomUnreadMessages');
23 21
 
24 22
     var glower = $('#toolbar_button_chat');
25
-    var bottomGlower = $('#chatBottomButton');
26 23
 
27 24
     if (unreadMessages) {
28 25
         unreadMsgElement.innerHTML = unreadMessages.toString();
29
-        unreadMsgBottomElement.innerHTML = unreadMessages.toString();
30 26
 
31 27
         ToolbarToggler.dockToolbar(true);
32 28
 
@@ -42,19 +38,6 @@ function setVisualNotification(show) {
42 38
                 'top:' + topIndent +
43 39
                 '; left:' + leftIndent + ';');
44 40
 
45
-        var chatBottomButtonElement
46
-            = document.getElementById('chatBottomButton').parentNode;
47
-        var bottomLeftIndent = (UIUtil.getTextWidth(chatBottomButtonElement) -
48
-            UIUtil.getTextWidth(unreadMsgBottomElement)) / 2;
49
-        var bottomTopIndent = (UIUtil.getTextHeight(chatBottomButtonElement) -
50
-            UIUtil.getTextHeight(unreadMsgBottomElement)) / 2 - 2;
51
-
52
-        unreadMsgBottomElement.setAttribute(
53
-            'style',
54
-                'top:' + bottomTopIndent +
55
-                '; left:' + bottomLeftIndent + ';');
56
-
57
-
58 41
         if (!glower.hasClass('icon-chat-simple')) {
59 42
             glower.removeClass('icon-chat');
60 43
             glower.addClass('icon-chat-simple');
@@ -62,7 +45,6 @@ function setVisualNotification(show) {
62 45
     }
63 46
     else {
64 47
         unreadMsgElement.innerHTML = '';
65
-        unreadMsgBottomElement.innerHTML = '';
66 48
         glower.removeClass('icon-chat-simple');
67 49
         glower.addClass('icon-chat');
68 50
     }
@@ -70,15 +52,12 @@ function setVisualNotification(show) {
70 52
     if (show && !notificationInterval) {
71 53
         notificationInterval = window.setInterval(function () {
72 54
             glower.toggleClass('active');
73
-            bottomGlower.toggleClass('active glowing');
74 55
         }, 800);
75 56
     }
76 57
     else if (!show && notificationInterval) {
77 58
         window.clearInterval(notificationInterval);
78 59
         notificationInterval = false;
79 60
         glower.removeClass('active');
80
-        bottomGlower.removeClass('glowing');
81
-        bottomGlower.addClass('active');
82 61
     }
83 62
 }
84 63
 
@@ -144,7 +123,7 @@ function addSmileys() {
144 123
         smileysContainer.appendChild(smileyContainer);
145 124
     }
146 125
 
147
-    $("#chatspace").append(smileysContainer);
126
+    $("#chat_container").append(smileysContainer);
148 127
 }
149 128
 
150 129
 /**
@@ -152,7 +131,7 @@ function addSmileys() {
152 131
  */
153 132
 function resizeChatConversation() {
154 133
     var msgareaHeight = $('#usermsg').outerHeight();
155
-    var chatspace = $('#chatspace');
134
+    var chatspace = $('#chat_container');
156 135
     var width = chatspace.width();
157 136
     var chat = $('#chatconversation');
158 137
     var smileys = $('#smileysarea');
@@ -208,7 +187,7 @@ var Chat = {
208 187
         };
209 188
         usermsg.autosize({callback: onTextAreaResize});
210 189
 
211
-        $("#chatspace").bind("shown",
190
+        $("#chat_container").bind("shown",
212 191
             function () {
213 192
                 unreadMessages = 0;
214 193
                 setVisualNotification(false);
@@ -296,7 +275,8 @@ var Chat = {
296 275
      * conversation mode or not.
297 276
      */
298 277
     setChatConversationMode (isConversationMode) {
299
-        $('#chatspace').toggleClass('is-conversation-mode', isConversationMode);
278
+        $('#chat_container')
279
+            .toggleClass('is-conversation-mode', isConversationMode);
300 280
         if (isConversationMode) {
301 281
             $('#usermsg').focus();
302 282
         }
@@ -306,7 +286,7 @@ var Chat = {
306 286
      * Resizes the chat area.
307 287
      */
308 288
     resizeChat (width, height) {
309
-        $('#chatspace').width(width).height(height);
289
+        $('#chat_container').width(width).height(height);
310 290
 
311 291
         resizeChatConversation();
312 292
     },
@@ -315,7 +295,8 @@ var Chat = {
315 295
      * Indicates if the chat is currently visible.
316 296
      */
317 297
     isVisible () {
318
-        return UIUtil.isVisible(document.getElementById("chatspace"));
298
+        return UIUtil.isVisible(
299
+            document.getElementById("chat_container"));
319 300
     },
320 301
     /**
321 302
      * Shows and hides the window with the smileys

+ 11
- 25
modules/UI/side_pannels/contactlist/ContactList.js ファイルの表示

@@ -14,16 +14,19 @@ let notificationInterval;
14 14
  */
15 15
 function updateNumberOfParticipants(delta) {
16 16
     numberOfContacts += delta;
17
-    if (numberOfContacts === 1) {
18
-        // when the user is alone we don't show the number of participants
19
-        $("#numberOfParticipants").text('');
20
-        ContactList.setVisualNotification(false);
21
-    } else if (numberOfContacts > 1) {
22
-        ContactList.setVisualNotification(!ContactList.isVisible());
23
-        $("#numberOfParticipants").text(numberOfContacts);
24
-    } else {
17
+
18
+    if (numberOfContacts <= 0) {
25 19
         console.error("Invalid number of participants: " + numberOfContacts);
20
+        return;
26 21
     }
22
+
23
+    let buttonIndicatorText = (numberOfContacts === 1) ? '' : numberOfContacts;
24
+    $("#numberOfParticipants").text(buttonIndicatorText);
25
+
26
+    $("#contacts_container>div.title").text(
27
+        APP.translation.translateString(
28
+            "contactlist", {participants: numberOfContacts}
29
+        ));
27 30
 }
28 31
 
29 32
 /**
@@ -131,23 +134,6 @@ var ContactList = {
131 134
         }
132 135
     },
133 136
 
134
-    setVisualNotification (show, stopGlowingIn) {
135
-        let glower = $('#contactListButton');
136
-
137
-        if (show && !notificationInterval) {
138
-            notificationInterval = window.setInterval(function () {
139
-                glower.toggleClass('active glowing');
140
-            }, 800);
141
-        } else if (!show && notificationInterval) {
142
-            stopGlowing(glower);
143
-        }
144
-        if (stopGlowingIn) {
145
-            setTimeout(function () {
146
-                stopGlowing(glower);
147
-            }, stopGlowingIn);
148
-        }
149
-    },
150
-
151 137
     setClickable (id, isClickable) {
152 138
         getContactEl(id).toggleClass('clickable', isClickable);
153 139
     },

+ 61
- 0
modules/UI/side_pannels/profile/Profile.js ファイルの表示

@@ -0,0 +1,61 @@
1
+/* global APP, $, JitsiMeetJS */
2
+import UIUtil from "../../util/UIUtil";
3
+import UIEvents from "../../../../service/UI/UIEvents";
4
+import languages from "../../../../service/translation/languages";
5
+import Settings from '../../../settings/Settings';
6
+
7
+export default {
8
+    init (emitter) {
9
+        // DISPLAY NAME
10
+        function updateDisplayName () {
11
+            emitter.emit(UIEvents.NICKNAME_CHANGED, $('#setDisplayName').val());
12
+        }
13
+
14
+        $('#setDisplayName')
15
+            .val(Settings.getDisplayName())
16
+            .keyup(function (event) {
17
+                if (event.keyCode === 13) { // enter
18
+                    updateDisplayName();
19
+                }
20
+            })
21
+            .focusout(updateDisplayName);
22
+
23
+
24
+        // EMAIL
25
+        function updateEmail () {
26
+            emitter.emit(UIEvents.EMAIL_CHANGED, $('#setEmail').val());
27
+        }
28
+
29
+        $('#setEmail')
30
+            .val(Settings.getEmail())
31
+            .keyup(function (event) {
32
+                if (event.keyCode === 13) { // enter
33
+                    updateEmail();
34
+                }
35
+            }).focusout(updateEmail);
36
+    },
37
+
38
+    /**
39
+     * Check if settings menu is visible or not.
40
+     * @returns {boolean}
41
+     */
42
+    isVisible () {
43
+        return UIUtil.isVisible(document.getElementById("profile_container"));
44
+    },
45
+
46
+    /**
47
+     * Change user display name in the settings menu.
48
+     * @param {string} newDisplayName
49
+     */
50
+    changeDisplayName (newDisplayName) {
51
+        $('#setDisplayName').val(newDisplayName);
52
+    },
53
+
54
+    /**
55
+     * Change user avatar in the settings menu.
56
+     * @param {string} avatarUrl url of the new avatar
57
+     */
58
+    changeAvatar (avatarUrl) {
59
+        $('#avatar').attr('src', avatarUrl);
60
+    }
61
+};

+ 3
- 47
modules/UI/side_pannels/settings/SettingsMenu.js ファイルの表示

@@ -62,34 +62,6 @@ function generateDevicesOptions(items, selectedId, permissionGranted) {
62 62
 
63 63
 export default {
64 64
     init (emitter) {
65
-
66
-        // DISPLAY NAME
67
-        function updateDisplayName () {
68
-            emitter.emit(UIEvents.NICKNAME_CHANGED, $('#setDisplayName').val());
69
-        }
70
-        $('#setDisplayName')
71
-            .val(Settings.getDisplayName())
72
-            .keyup(function (event) {
73
-                if (event.keyCode === 13) { // enter
74
-                    updateDisplayName();
75
-                }
76
-            })
77
-            .focusout(updateDisplayName);
78
-
79
-
80
-        // EMAIL
81
-        function updateEmail () {
82
-            emitter.emit(UIEvents.EMAIL_CHANGED, $('#setEmail').val());
83
-        }
84
-
85
-        $('#setEmail')
86
-            .val(Settings.getEmail())
87
-            .keyup(function (event) {
88
-            if (event.keyCode === 13) { // enter
89
-                updateEmail();
90
-            }
91
-        }).focusout(updateEmail);
92
-
93 65
         // START MUTED
94 66
         $("#startMutedOptions").change(function () {
95 67
             let startAudioMuted = $("#startAudioMuted").is(":checked");
@@ -191,23 +163,7 @@ export default {
191 163
      * @returns {boolean}
192 164
      */
193 165
     isVisible () {
194
-        return UIUtil.isVisible(document.getElementById("settingsmenu"));
195
-    },
196
-
197
-    /**
198
-     * Change user display name in the settings menu.
199
-     * @param {string} newDisplayName
200
-     */
201
-    changeDisplayName (newDisplayName) {
202
-        $('#setDisplayName').val(newDisplayName);
203
-    },
204
-
205
-    /**
206
-     * Change user avatar in the settings menu.
207
-     * @param {string} avatarUrl url of the new avatar
208
-     */
209
-    changeAvatar (avatarUrl) {
210
-        $('#avatar').attr('src', avatarUrl);
166
+        return UIUtil.isVisible(document.getElementById("settings_container"));
211 167
     },
212 168
 
213 169
     /**
@@ -290,6 +246,6 @@ export default {
290 246
 
291 247
         $('#devicesOptions').show();
292 248
 
293
-        APP.translation.translateElement($('#settingsmenu option'));
249
+        APP.translation.translateElement($('#settings_container option'));
294 250
     }
295
-};
251
+};

+ 0
- 130
modules/UI/toolbars/BottomToolbar.js ファイルの表示

@@ -1,130 +0,0 @@
1
-/* global $, APP, interfaceConfig, JitsiMeetJS */
2
-import UIUtil from '../util/UIUtil';
3
-import UIEvents from '../../../service/UI/UIEvents';
4
-
5
-const defaultBottomToolbarButtons = {
6
-    'chat': {
7
-        id: '#bottom_toolbar_chat'
8
-    },
9
-    'contacts': {
10
-        id: '#bottom_toolbar_contact_list'
11
-    },
12
-    'filmstrip': {
13
-        id: '#bottom_toolbar_film_strip',
14
-        shortcut: "F",
15
-        shortcutAttr: "filmstripPopover",
16
-        shortcutFunc: function() {
17
-            JitsiMeetJS.analytics.sendEvent("shortcut.film.toggled");
18
-            APP.UI.handleToggleFilmStrip();
19
-        },
20
-        shortcutDescription: "keyboardShortcuts.toggleFilmstrip"
21
-    }
22
-};
23
-
24
-const BottomToolbar = {
25
-    init () {
26
-        this.toolbar = $('#bottomToolbar');
27
-
28
-        // The bottom toolbar is enabled by default.
29
-        this.enabled = true;
30
-    },
31
-    /**
32
-     * Enables / disables the bottom toolbar.
33
-     * @param {e} set to {true} to enable the bottom toolbar or {false}
34
-     * to disable it
35
-     */
36
-    enable (e) {
37
-        this.enabled = e;
38
-        if (!e && this.isVisible())
39
-            this.hide(false);
40
-    },
41
-    /**
42
-     * Indicates if the bottom toolbar is currently enabled.
43
-     * @return {this.enabled}
44
-     */
45
-    isEnabled() {
46
-        return this.enabled;
47
-    },
48
-
49
-    setupListeners (emitter) {
50
-        UIUtil.hideDisabledButtons(defaultBottomToolbarButtons);
51
-
52
-        const buttonHandlers = {
53
-            "bottom_toolbar_contact_list": function () {
54
-                JitsiMeetJS.analytics.sendEvent(
55
-                    'bottomtoolbar.contacts.toggled');
56
-                emitter.emit(UIEvents.TOGGLE_CONTACT_LIST);
57
-            },
58
-            "bottom_toolbar_film_strip": function () {
59
-                JitsiMeetJS.analytics.sendEvent(
60
-                    'bottomtoolbar.filmstrip.toggled');
61
-                emitter.emit(UIEvents.TOGGLE_FILM_STRIP);
62
-            },
63
-            "bottom_toolbar_chat": function () {
64
-                JitsiMeetJS.analytics.sendEvent('bottomtoolbar.chat.toggled');
65
-                emitter.emit(UIEvents.TOGGLE_CHAT);
66
-            }
67
-        };
68
-
69
-        Object.keys(defaultBottomToolbarButtons).forEach(
70
-                id => {
71
-                if (UIUtil.isButtonEnabled(id)) {
72
-                    var button = defaultBottomToolbarButtons[id];
73
-
74
-                    if (button.shortcut)
75
-                        APP.keyboardshortcut.registerShortcut(
76
-                            button.shortcut,
77
-                            button.shortcutAttr,
78
-                            button.shortcutFunc,
79
-                            button.shortcutDescription
80
-                        );
81
-                }
82
-            }
83
-        );
84
-
85
-        Object.keys(buttonHandlers).forEach(
86
-            buttonId => $(`#${buttonId}`).click(buttonHandlers[buttonId])
87
-        );
88
-    },
89
-
90
-    resizeToolbar (thumbWidth, thumbHeight) {
91
-        let bottom = (thumbHeight - this.toolbar.outerHeight())/2 + 18;
92
-        this.toolbar.css({bottom});
93
-    },
94
-
95
-    /**
96
-     * Returns true if this toolbar is currently visible, or false otherwise.
97
-     * @return <tt>true</tt> if currently visible, <tt>false</tt> - otherwise
98
-     */
99
-    isVisible() {
100
-        return this.toolbar.is(":visible");
101
-    },
102
-
103
-    /**
104
-     * Hides the bottom toolbar with animation or not depending on the animate
105
-     * parameter.
106
-     * @param animate <tt>true</tt> to hide the bottom toolbar with animation,
107
-     * <tt>false</tt> or nothing to hide it without animation.
108
-     */
109
-    hide(animate) {
110
-        if (animate)
111
-            this.toolbar.hide("slide", {direction: "right", duration: 300});
112
-        else
113
-            this.toolbar.css("display", "none");
114
-    },
115
-
116
-    /**
117
-     * Shows the bottom toolbar with animation or not depending on the animate
118
-     * parameter.
119
-     * @param animate <tt>true</tt> to show the bottom toolbar with animation,
120
-     * <tt>false</tt> or nothing to show it without animation.
121
-     */
122
-    show(animate) {
123
-        if (animate)
124
-            this.toolbar.show("slide", {direction: "right", duration: 300});
125
-        else
126
-            this.toolbar.css("display", "block");
127
-    }
128
-};
129
-
130
-export default BottomToolbar;

+ 234
- 27
modules/UI/toolbars/Toolbar.js ファイルの表示

@@ -2,6 +2,7 @@
2 2
 /* jshint -W101 */
3 3
 import UIUtil from '../util/UIUtil';
4 4
 import UIEvents from '../../../service/UI/UIEvents';
5
+import SideContainerToggler from "../side_pannels/SideContainerToggler";
5 6
 
6 7
 let roomUrl = null;
7 8
 let emitter = null;
@@ -19,9 +20,13 @@ function openLinkDialog () {
19 20
     } else {
20 21
         inviteAttributes = "value=\"" + encodeURI(roomUrl) + "\"";
21 22
     }
23
+
24
+    let title = APP.translation.generateTranslationHTML("dialog.shareLink");
22 25
     APP.UI.messageHandler.openTwoButtonDialog(
23
-        "dialog.shareLink", null, null,
24
-        `<input id="inviteLinkRef" type="text" ${inviteAttributes} onclick="this.select();" readonly>`,
26
+        null, null, null,
27
+        '<h2>' + title + '</h2>'
28
+        + '<input id="inviteLinkRef" type="text" '
29
+        + inviteAttributes + ' onclick="this.select();" readonly>',
25 30
         false, "dialog.Invite",
26 31
         function (e, v) {
27 32
             if (v && roomUrl) {
@@ -37,7 +42,8 @@ function openLinkDialog () {
37 42
                 document.getElementById('inviteLinkRef').select();
38 43
             } else {
39 44
                 if (event && event.target) {
40
-                    $(event.target).find('button[value=true]').prop('disabled', true);
45
+                    $(event.target).find('button[value=true]')
46
+                        .prop('disabled', true);
41 47
                 }
42 48
             }
43 49
         },
@@ -49,6 +55,10 @@ function openLinkDialog () {
49 55
 }
50 56
 
51 57
 const buttonHandlers = {
58
+    "toolbar_button_profile": function () {
59
+        JitsiMeetJS.analytics.sendEvent('toolbar.profile.toggled');
60
+        emitter.emit(UIEvents.TOGGLE_PROFILE);
61
+    },
52 62
     "toolbar_button_mute": function () {
53 63
         let sharedVideoManager = APP.UI.getSharedVideoManager();
54 64
 
@@ -92,6 +102,11 @@ const buttonHandlers = {
92 102
         JitsiMeetJS.analytics.sendEvent('toolbar.chat.toggled');
93 103
         emitter.emit(UIEvents.TOGGLE_CHAT);
94 104
     },
105
+    "toolbar_contact_list": function () {
106
+        JitsiMeetJS.analytics.sendEvent(
107
+            'toolbar.contacts.toggled');
108
+        emitter.emit(UIEvents.TOGGLE_CONTACT_LIST);
109
+    },
95 110
     "toolbar_button_etherpad": function () {
96 111
         JitsiMeetJS.analytics.sendEvent('toolbar.etherpad.clicked');
97 112
         emitter.emit(UIEvents.ETHERPAD_CLICKED);
@@ -110,7 +125,7 @@ const buttonHandlers = {
110 125
     },
111 126
     "toolbar_button_fullScreen": function() {
112 127
         JitsiMeetJS.analytics.sendEvent('toolbar.fullscreen.enabled');
113
-        UIUtil.buttonClick("#toolbar_button_fullScreen",
128
+        UIUtil.buttonClick("toolbar_button_fullScreen",
114 129
             "icon-full-screen icon-exit-full-screen");
115 130
         emitter.emit(UIEvents.FULLSCREEN_TOGGLE);
116 131
     },
@@ -150,66 +165,129 @@ const buttonHandlers = {
150 165
                 }
151 166
             }
152 167
         );
168
+    },
169
+    "toolbar_film_strip": function () {
170
+        JitsiMeetJS.analytics.sendEvent(
171
+            'bottomtoolbar.filmstrip.toggled');
172
+        emitter.emit(UIEvents.TOGGLE_FILM_STRIP);
153 173
     }
154 174
 };
175
+
155 176
 const defaultToolbarButtons = {
156 177
     'microphone': {
157
-        id: '#toolbar_button_mute',
178
+        id: 'toolbar_button_mute',
179
+        className: "button icon-microphone",
158 180
         shortcut: 'M',
159 181
         shortcutAttr: 'mutePopover',
160 182
         shortcutFunc: function() {
161 183
             JitsiMeetJS.analytics.sendEvent('shortcut.audiomute.toggled');
162 184
             APP.conference.toggleAudioMuted();
163 185
         },
164
-        shortcutDescription: "keyboardShortcuts.mute"
186
+        shortcutDescription: "keyboardShortcuts.mute",
187
+        popups: [
188
+            {
189
+                id: "micMutedPopup",
190
+                className: "loginmenu",
191
+                dataAttr: "[html]toolbar.micMutedPopup"
192
+            },
193
+            {
194
+                id: "unableToUnmutePopup",
195
+                className: "loginmenu",
196
+                dataAttr: "[html]toolbar.unableToUnmutePopup"
197
+            }
198
+        ],
199
+        content: "Mute / Unmute",
200
+        i18n: "[content]toolbar.mute"
165 201
     },
166 202
     'camera': {
167
-        id: '#toolbar_button_camera',
203
+        id: 'toolbar_button_camera',
204
+        className: "button icon-camera",
168 205
         shortcut: 'V',
169 206
         shortcutAttr: 'toggleVideoPopover',
170 207
         shortcutFunc: function() {
171 208
             JitsiMeetJS.analytics.sendEvent('shortcut.videomute.toggled');
172 209
             APP.conference.toggleVideoMuted();
173 210
         },
174
-        shortcutDescription: "keyboardShortcuts.videoMute"
211
+        shortcutDescription: "keyboardShortcuts.videoMute",
212
+        content: "Start / stop camera",
213
+        i18n: "[content]toolbar.videomute"
175 214
     },
176 215
     'desktop': {
177
-        id: '#toolbar_button_desktopsharing',
216
+        id: 'toolbar_button_desktopsharing',
217
+        className: 'button icon-share-desktop',
178 218
         shortcut: 'D',
179 219
         shortcutAttr: 'toggleDesktopSharingPopover',
180 220
         shortcutFunc: function() {
181 221
             JitsiMeetJS.analytics.sendEvent('shortcut.screen.toggled');
182 222
             APP.conference.toggleScreenSharing();
183 223
         },
184
-        shortcutDescription: "keyboardShortcuts.toggleScreensharing"
224
+        shortcutDescription: 'keyboardShortcuts.toggleScreensharing',
225
+        content: 'Share screen',
226
+        i18n: '[content]toolbar.sharescreen'
185 227
     },
186 228
     'security': {
187
-        id: '#toolbar_button_security'
229
+        id: 'toolbar_button_security'
188 230
     },
189 231
     'invite': {
190
-        id: '#toolbar_button_link'
232
+        id: 'toolbar_button_link',
233
+        className: 'button icon-link',
234
+        content: 'Invite others',
235
+        i18n: '[content]toolbar.invite'
191 236
     },
192 237
     'chat': {
193
-        id: '#toolbar_button_chat',
238
+        id: 'toolbar_button_chat',
194 239
         shortcut: 'C',
195 240
         shortcutAttr: 'toggleChatPopover',
196 241
         shortcutFunc: function() {
197 242
             JitsiMeetJS.analytics.sendEvent('shortcut.chat.toggled');
198 243
             APP.UI.toggleChat();
199 244
         },
200
-        shortcutDescription: "keyboardShortcuts.toggleChat"
245
+        shortcutDescription: 'keyboardShortcuts.toggleChat',
246
+        sideContainerId: 'chat_container'
247
+    },
248
+    'contacts': {
249
+        id: 'toolbar_contact_list',
250
+        sideContainerId: 'contacts_container'
251
+    },
252
+    'profile': {
253
+        id: 'toolbar_button_profile',
254
+        sideContainerId: 'profile_container'
201 255
     },
202 256
     'etherpad': {
203
-        id: '#toolbar_button_etherpad'
257
+        id: 'toolbar_button_etherpad'
204 258
     },
205 259
     'fullscreen': {
206
-        id: '#toolbar_button_fullScreen'
260
+        id: 'toolbar_button_fullScreen',
261
+        className: "button icon-full-screen",
262
+        shortcut: 'F',
263
+        shortcutAttr: 'toggleFullscreenPopover',
264
+        shortcutFunc: function() {
265
+            JitsiMeetJS.analytics.sendEvent('shortcut.fullscreen.toggled');
266
+            APP.UI.toggleFullScreen();
267
+        },
268
+        shortcutDescription: "keyboardShortcuts.toggleChat",
269
+        content: "Enter / Exit Full Screen",
270
+        i18n: "[content]toolbar.fullscreen"
207 271
     },
208 272
     'settings': {
209
-        id: '#toolbar_button_settings'
273
+        id: 'toolbar_button_settings',
274
+        sideContainerId: "settings_container"
210 275
     },
211 276
     'hangup': {
212
-        id: '#toolbar_button_hangup'
277
+        id: 'toolbar_button_hangup',
278
+        className: "button icon-hangup",
279
+        content: "Hang Up",
280
+        i18n: "[content]toolbar.hangup"
281
+    },
282
+    'filmstrip': {
283
+        id: 'toolbar_film_strip',
284
+        shortcut: "F",
285
+        shortcutAttr: "filmstripPopover",
286
+        shortcutFunc: function() {
287
+            JitsiMeetJS.analytics.sendEvent("shortcut.film.toggled");
288
+            APP.UI.toggleFilmStrip();
289
+        },
290
+        shortcutDescription: "keyboardShortcuts.toggleFilmstrip"
213 291
     }
214 292
 };
215 293
 
@@ -242,7 +320,10 @@ const Toolbar = {
242 320
         emitter = eventEmitter;
243 321
         // The toolbar is enabled by default.
244 322
         this.enabled = true;
245
-        this.toolbarSelector = $("#header");
323
+        this.toolbarSelector = $("#mainToolbarContainer");
324
+        this.extendedToolbarSelector = $("#extendedToolbar");
325
+
326
+        this._initMainToolbarButtons();
246 327
 
247 328
         UIUtil.hideDisabledButtons(defaultToolbarButtons);
248 329
 
@@ -267,6 +348,12 @@ const Toolbar = {
267 348
                 !$(this).prop('disabled') && buttonHandlers[buttonId](event);
268 349
             })
269 350
         );
351
+
352
+        APP.UI.addListener(UIEvents.SIDE_TOOLBAR_CONTAINER_TOGGLED,
353
+            function(containerId, isVisible) {
354
+                Toolbar._handleSideToolbarContainerToggled( containerId,
355
+                                                            isVisible);
356
+            });
270 357
     },
271 358
     /**
272 359
      * Enables / disables the toolbar.
@@ -307,7 +394,7 @@ const Toolbar = {
307 394
      */
308 395
     unlockLockButton () {
309 396
         if ($("#toolbar_button_security").hasClass("icon-security-locked"))
310
-            UIUtil.buttonClick("#toolbar_button_security",
397
+            UIUtil.buttonClick("toolbar_button_security",
311 398
                                 "icon-security icon-security-locked");
312 399
     },
313 400
 
@@ -316,7 +403,7 @@ const Toolbar = {
316 403
      */
317 404
     lockLockButton () {
318 405
         if ($("#toolbar_button_security").hasClass("icon-security"))
319
-            UIUtil.buttonClick("#toolbar_button_security",
406
+            UIUtil.buttonClick("toolbar_button_security",
320 407
                                 "icon-security icon-security-locked");
321 408
     },
322 409
 
@@ -507,7 +594,9 @@ const Toolbar = {
507 594
         });
508 595
         if (hovered)
509 596
             return true;
510
-        if ($("#bottomToolbar:hover").length > 0) {
597
+        if ($("#bottomToolbar:hover").length > 0
598
+            || $("#extendedToolbar:hover").length > 0
599
+            || SideContainerToggler.isHovered()) {
511 600
             return true;
512 601
         }
513 602
         return false;
@@ -518,7 +607,7 @@ const Toolbar = {
518 607
      * @return <tt>true</tt> if currently visible, <tt>false</tt> - otherwise
519 608
      */
520 609
     isVisible() {
521
-        return this.toolbarSelector.is(":visible");
610
+        return this.toolbarSelector.hasClass("slideInY");
522 611
     },
523 612
 
524 613
     /**
@@ -526,8 +615,17 @@ const Toolbar = {
526 615
      * parameter.
527 616
      */
528 617
     hide() {
529
-        this.toolbarSelector.hide(
530
-            "slide", { direction: "up", duration: 300});
618
+        this.toolbarSelector.toggleClass("slideInY").toggleClass("slideOutY");
619
+
620
+        let slideInAnimation = (SideContainerToggler.isVisible)
621
+                                    ? "slideInExtX"
622
+                                    : "slideInX";
623
+        let slideOutAnimation = (SideContainerToggler.isVisible)
624
+                                    ? "slideOutExtX"
625
+                                    : "slideOutX";
626
+
627
+        this.extendedToolbarSelector.toggleClass(slideInAnimation)
628
+            .toggleClass(slideOutAnimation);
531 629
     },
532 630
 
533 631
     /**
@@ -535,8 +633,117 @@ const Toolbar = {
535 633
      * parameter.
536 634
      */
537 635
     show() {
538
-        this.toolbarSelector.show(
539
-            "slide", { direction: "up", duration: 300});
636
+        if (this.toolbarSelector.hasClass("slideOutY"))
637
+            this.toolbarSelector.toggleClass("slideOutY");
638
+
639
+        let slideInAnimation = (SideContainerToggler.isVisible)
640
+                                ? "slideInExtX"
641
+                                : "slideInX";
642
+        let slideOutAnimation = (SideContainerToggler.isVisible)
643
+                                ? "slideOutExtX"
644
+                                : "slideOutX";
645
+
646
+        if (this.extendedToolbarSelector.hasClass(slideOutAnimation))
647
+            this.extendedToolbarSelector.toggleClass(slideOutAnimation);
648
+
649
+        this.toolbarSelector.toggleClass("slideInY");
650
+        this.extendedToolbarSelector.toggleClass(slideInAnimation);
651
+    },
652
+
653
+    registerClickListeners(listener) {
654
+        $('#mainToolbarContainer').click(listener);
655
+
656
+        $("#extendedToolbar").click(listener);
657
+    },
658
+
659
+    /**
660
+     * Handles the side toolbar toggle.
661
+     */
662
+    _handleSideToolbarContainerToggled(containerId, isVisible) {
663
+        Object.keys(defaultToolbarButtons).forEach(
664
+            id => {
665
+                if (!UIUtil.isButtonEnabled(id))
666
+                    return;
667
+
668
+                var button = defaultToolbarButtons[id];
669
+
670
+                if (button.sideContainerId
671
+                    && button.sideContainerId === containerId) {
672
+                    UIUtil.buttonClick(button.id, "selected");
673
+                    return;
674
+                }
675
+            }
676
+        );
677
+    },
678
+    /**
679
+     * TODO: Fix mic popups
680
+     * <a class="button icon-microphone" id="toolbar_button_mute" data-container="body" data-toggle="popover" data-placement="bottom" shortcut="mutePopover" data-i18n="[content]toolbar.mute" content="Mute / Unmute">
681
+     *   <ul id="micMutedPopup" class="loginmenu">
682
+     *       <li data-i18n="[html]toolbar.micMutedPopup"></li>
683
+     *   </ul>
684
+     *   <ul id="unableToUnmutePopup" class="loginmenu">
685
+     *       <li data-i18n="[html]toolbar.unableToUnmutePopup"></li>
686
+     *   </ul>
687
+     * </a>
688
+     */
689
+    _initMainToolbarButtons() {
690
+        interfaceConfig.MAIN_TOOLBAR_BUTTONS.forEach((value, index) => {
691
+            if (value && value in defaultToolbarButtons) {
692
+                let button = defaultToolbarButtons[value];
693
+                this._addMainToolbarButton(
694
+                    button,
695
+                    (index === 0),
696
+                    (index === interfaceConfig.MAIN_TOOLBAR_BUTTONS.length -1));
697
+            }
698
+        });
699
+    },
700
+
701
+    /**
702
+     * Adds the given button to the main (top) toolbar.
703
+     *
704
+     * @param {Object} the button to add.
705
+     * @param {boolean} isFirst indicates if this is the first button in the
706
+     * toolbar
707
+     * @param {boolean} isLast indicates if this is the last button in the
708
+     * toolbar
709
+     */
710
+    _addMainToolbarButton(button, isFirst, isLast) {
711
+        let buttonElement = document.createElement("a");
712
+        if (button.className)
713
+            buttonElement.className = button.className
714
+                                    + ((isFirst) ? " first" : "")
715
+                                    + ((isLast) ? " last" : "");
716
+
717
+        buttonElement.id = button.id;
718
+
719
+        if (button.shortcutAttr)
720
+            buttonElement.setAttribute("shortcut", button.shortcutAttr);
721
+
722
+        if (button.content)
723
+            buttonElement.setAttribute("content", button.content);
724
+
725
+        if (button.i18n)
726
+            buttonElement.setAttribute("data-i18n", button.i18n);
727
+
728
+        buttonElement.setAttribute("data-container", "body");
729
+        buttonElement.setAttribute("data-toggle", "popover");
730
+        buttonElement.setAttribute("data-placement", "bottom");
731
+        this._addPopups(buttonElement, button.popups);
732
+
733
+        document.getElementById("mainToolbar")
734
+            .appendChild(buttonElement);
735
+    },
736
+
737
+    _addPopups(buttonElement, popups = []) {
738
+        popups.forEach((popup) => {
739
+            let popupElement = document.createElement("ul");
740
+            popupElement.id = popup.id;
741
+            popupElement.className = popup.className;
742
+            let liElement = document.createElement("li");
743
+            liElement.setAttribute("data-i18n", popup.dataAttr);
744
+            popupElement.appendChild(liElement);
745
+            buttonElement.appendChild(popupElement);
746
+        });
540 747
     }
541 748
 };
542 749
 

+ 28
- 12
modules/UI/toolbars/ToolbarToggler.js ファイルの表示

@@ -1,8 +1,8 @@
1 1
 /* global APP, config, $, interfaceConfig */
2 2
 
3 3
 import UIUtil from '../util/UIUtil';
4
-import BottomToolbar from './BottomToolbar';
5 4
 import Toolbar from './Toolbar';
5
+import SideContainerToggler from "../side_pannels/SideContainerToggler";
6 6
 import FilmStrip from '../videolayout/FilmStrip.js';
7 7
 
8 8
 let toolbarTimeoutObject;
@@ -23,8 +23,11 @@ function showDesktopSharingButton() {
23 23
 
24 24
 /**
25 25
  * Hides the toolbar.
26
+ *
27
+ * @param force {true} to force the hiding of the toolbar without caring about
28
+ * the extended toolbar side panels.
26 29
  */
27
-function hideToolbar() {
30
+function hideToolbar(force) {
28 31
     if (alwaysVisibleToolbar) {
29 32
         return;
30 33
     }
@@ -32,14 +35,11 @@ function hideToolbar() {
32 35
     clearTimeout(toolbarTimeoutObject);
33 36
     toolbarTimeoutObject = null;
34 37
 
35
-    if (Toolbar.isHovered()) {
38
+    if (Toolbar.isHovered() || APP.UI.isRingOverlayVisible()) {
36 39
         toolbarTimeoutObject = setTimeout(hideToolbar, toolbarTimeout);
37
-    } else {
40
+    } else if (!SideContainerToggler.isVisible() || force) {
38 41
         Toolbar.hide();
39 42
         $('#subject').animate({top: "-=40"}, 300);
40
-        if (!FilmStrip.isFilmStripVisible()) {
41
-            BottomToolbar.hide(true);
42
-        }
43 43
     }
44 44
 }
45 45
 
@@ -49,7 +49,26 @@ const ToolbarToggler = {
49 49
      */
50 50
     init() {
51 51
         alwaysVisibleToolbar = (config.alwaysVisibleToolbar === true);
52
+
53
+        this._registerWindowClickListeners();
54
+    },
55
+
56
+    /**
57
+     * Registers click listeners handling the show and hode of toolbars when
58
+     * user clicks outside of toolbar area.
59
+     */
60
+    _registerWindowClickListeners() {
61
+        $(window).click(function() {
62
+            (Toolbar.isEnabled() && Toolbar.isVisible())
63
+                ? hideToolbar(true)
64
+                : this.showToolbar();
65
+        }.bind(this));
66
+
67
+        Toolbar.registerClickListeners(function(event){
68
+            event.stopPropagation();
69
+        });
52 70
     },
71
+
53 72
     /**
54 73
      * Sets the value of alwaysVisibleToolbar variable.
55 74
      * @param value {boolean} the new value of alwaysVisibleToolbar variable
@@ -57,12 +76,14 @@ const ToolbarToggler = {
57 76
     setAlwaysVisibleToolbar(value) {
58 77
         alwaysVisibleToolbar = value;
59 78
     },
79
+
60 80
     /**
61 81
      * Resets the value of alwaysVisibleToolbar variable to the default one.
62 82
      */
63 83
     resetAlwaysVisibleToolbar() {
64 84
         alwaysVisibleToolbar = (config.alwaysVisibleToolbar === true);
65 85
     },
86
+
66 87
     /**
67 88
      * Shows the main toolbar.
68 89
      */
@@ -78,11 +99,6 @@ const ToolbarToggler = {
78 99
             updateTimeout = true;
79 100
         }
80 101
 
81
-        if (BottomToolbar.isEnabled() && !BottomToolbar.isVisible()) {
82
-            BottomToolbar.show(true);
83
-            updateTimeout = true;
84
-        }
85
-
86 102
         if (updateTimeout) {
87 103
             if (toolbarTimeoutObject) {
88 104
                 clearTimeout(toolbarTimeoutObject);

+ 2
- 1
modules/UI/util/MessageHandler.js ファイルの表示

@@ -258,7 +258,8 @@ var messageHandler = {
258 258
     notify: function(displayName, displayNameKey, cls, messageKey,
259 259
                      messageArguments, options) {
260 260
 
261
-        if(!notificationsEnabled)
261
+        // If we're in ringing state we skip all toaster notifications.
262
+        if(!notificationsEnabled || APP.UI.isRingOverlayVisible())
262 263
             return;
263 264
 
264 265
         var displayNameSpan = '<span class="nickname" ';

+ 5
- 23
modules/UI/util/UIUtil.js ファイルの表示

@@ -5,31 +5,12 @@
5 5
  */
6 6
  var UIUtil = {
7 7
 
8
-    /**
9
-     * Returns the size of the side panel.
10
-     */
11
-     getSidePanelSize () {
12
-        var availableHeight = window.innerHeight;
13
-        var availableWidth = window.innerWidth;
14
-
15
-        var panelWidth = 200;
16
-        if (availableWidth * 0.2 < 200) {
17
-            panelWidth = availableWidth * 0.2;
18
-        }
19
-
20
-        return [panelWidth, availableHeight];
21
-     },
22
-
23 8
     /**
24 9
      * Returns the available video width.
25 10
      */
26
-    getAvailableVideoWidth: function (isSidePanelVisible) {
11
+    getAvailableVideoWidth: function () {
27 12
         let rightPanelWidth = 0;
28 13
 
29
-        if (isSidePanelVisible) {
30
-            rightPanelWidth = UIUtil.getSidePanelSize()[0];
31
-        }
32
-
33 14
         return window.innerWidth - rightPanelWidth;
34 15
     },
35 16
 
@@ -37,7 +18,8 @@
37 18
      * Changes the style class of the element given by id.
38 19
      */
39 20
     buttonClick: function(id, classname) {
40
-        $(id).toggleClass(classname); // add the class to the clicked element
21
+        // add the class to the clicked element
22
+        $("#" + id).toggleClass(classname);
41 23
     },
42 24
     /**
43 25
      * Returns the text width for the given element.
@@ -130,7 +112,7 @@
130 112
         var selector = Object.keys(mappings)
131 113
           .map(function (buttonName) {
132 114
                 return UIUtil.isButtonEnabled(buttonName)
133
-                    ? null : mappings[buttonName].id; })
115
+                    ? null : "#" + mappings[buttonName].id; })
134 116
           .filter(function (item) { return item; })
135 117
           .join(',');
136 118
         $(selector).hide();
@@ -138,7 +120,7 @@
138 120
 
139 121
     redirect (url) {
140 122
          window.location.href = url;
141
-     },
123
+    },
142 124
 
143 125
      isFullScreen () {
144 126
          return document.fullScreen

+ 2
- 4
modules/UI/videolayout/FilmStrip.js ファイルの表示

@@ -68,10 +68,8 @@ const FilmStrip = {
68 68
 
69 69
     /**
70 70
      * Calculates the thumbnail size.
71
-     * @param videoAreaAvailableWidth the currently available video area width
72
-     * that we want to take into account when calculating the film strip width.
73 71
      */
74
-     calculateThumbnailSize (isSideBarVisible) {
72
+     calculateThumbnailSize () {
75 73
         let availableHeight = interfaceConfig.FILM_STRIP_MAX_HEIGHT;
76 74
 
77 75
         let numvids = this.getThumbs(true).length;
@@ -84,7 +82,7 @@ const FilmStrip = {
84 82
          * film strip size hasn't been updated yet, but it will be.
85 83
          */
86 84
         let videoAreaAvailableWidth
87
-            = UIUtil.getAvailableVideoWidth(isSideBarVisible)
85
+            = UIUtil.getAvailableVideoWidth()
88 86
                 - UIUtil.parseCssInt(this.filmStrip.css('right'), 10)
89 87
                 - UIUtil.parseCssInt(this.filmStrip.css('paddingLeft'), 10)
90 88
                 - UIUtil.parseCssInt(this.filmStrip.css('paddingRight'), 10)

+ 12
- 4
modules/UI/videolayout/LargeVideo.js ファイルの表示

@@ -317,6 +317,15 @@ class VideoContainer extends LargeContainer {
317 317
      * @param {boolean} show
318 318
      */
319 319
     showAvatar (show) {
320
+        // TO FIX: Video background need to be black, so that we don't have a
321
+        // flickering effect when scrolling between videos and have the screen
322
+        // move to grey before going back to video. Avatars though can have the
323
+        // default background set.
324
+        // In order to fix this code we need to introduce video background or
325
+        // find a workaround for the video flickering.
326
+        $("#largeVideoContainer").css("background",
327
+            (show) ? interfaceConfig.DEFAULT_BACKGROUND : "#000");
328
+
320 329
         this.$avatar.css("visibility", show ? "visible" : "hidden");
321 330
     }
322 331
 
@@ -536,11 +545,10 @@ export default class LargeVideoManager {
536 545
     }
537 546
 
538 547
     /**
539
-     * Update container size optionally taking side bar size into account.
540
-     * @param {boolean} isSideBarVisible if side bar is visible.
548
+     * Update container size.
541 549
      */
542
-    updateContainerSize (isSideBarVisible) {
543
-        this.width = UIUtil.getAvailableVideoWidth(isSideBarVisible);
550
+    updateContainerSize () {
551
+        this.width = UIUtil.getAvailableVideoWidth();
544 552
         this.height = window.innerHeight;
545 553
     }
546 554
 

+ 1
- 1
modules/UI/videolayout/LocalVideo.js ファイルの表示

@@ -45,7 +45,7 @@ function createEditDisplayNameButton() {
45 45
     UIUtil.setTooltip(editButton,
46 46
         "videothumbnail.editnickname",
47 47
         "top");
48
-    editButton.innerHTML = '<i class="fa fa-pencil"></i>';
48
+    editButton.innerHTML = '<i class="icon-edit"></i>';
49 49
 
50 50
     return editButton;
51 51
 }

+ 1
- 1
modules/UI/videolayout/RemoteVideo.js ファイルの表示

@@ -119,7 +119,7 @@ RemoteVideo.prototype._generatePopupContent = function () {
119 119
     muteMenuItem.appendChild(muteLinkItem);
120 120
     popupmenuElement.appendChild(muteMenuItem);
121 121
 
122
-    var ejectIndicator = "<i style='float:left;' class='fa fa-eject'></i>";
122
+    var ejectIndicator = "<i style='float:left;' class='icon-kick'></i>";
123 123
 
124 124
     var ejectMenuItem = document.createElement('li');
125 125
     var ejectLinkItem = document.createElement('a');

+ 1
- 1
modules/UI/videolayout/SmallVideo.js ファイルの表示

@@ -309,7 +309,7 @@ SmallVideo.prototype.createModeratorIndicatorElement = function () {
309 309
     if (indicatorSpan.children().length !== 0)
310 310
         return;
311 311
     var moderatorIndicator = document.createElement('i');
312
-    moderatorIndicator.className = 'fa fa-star';
312
+    moderatorIndicator.className = 'icon-star';
313 313
     indicatorSpan[0].appendChild(moderatorIndicator);
314 314
 
315 315
     UIUtil.setTooltip(indicatorSpan[0],

+ 7
- 16
modules/UI/videolayout/VideoLayout.js ファイルの表示

@@ -3,7 +3,6 @@
3 3
 
4 4
 import AudioLevels from "../audio_levels/AudioLevels";
5 5
 import Avatar from "../avatar/Avatar";
6
-import BottomToolbar from "../toolbars/BottomToolbar";
7 6
 import FilmStrip from "./FilmStrip";
8 7
 import UIEvents from "../../../service/UI/UIEvents";
9 8
 import UIUtil from "../util/UIUtil";
@@ -12,7 +11,6 @@ import RemoteVideo from "./RemoteVideo";
12 11
 import LargeVideoManager, {VIDEO_CONTAINER_TYPE} from "./LargeVideo";
13 12
 import {SHARED_VIDEO_CONTAINER_TYPE} from '../shared_video/SharedVideo';
14 13
 import LocalVideo from "./LocalVideo";
15
-import PanelToggler from "../side_pannels/SidePanelToggler";
16 14
 
17 15
 const RTCUIUtil = JitsiMeetJS.util.RTCUIHelper;
18 16
 
@@ -115,12 +113,12 @@ var VideoLayout = {
115 113
         this.lastNCount = config.channelLastN;
116 114
     },
117 115
 
118
-    initLargeVideo (isSideBarVisible) {
116
+    initLargeVideo () {
119 117
         largeVideo = new LargeVideoManager();
120 118
         if(localFlipX) {
121 119
             largeVideo.onLocalFlipXChange(localFlipX);
122 120
         }
123
-        largeVideo.updateContainerSize(isSideBarVisible);
121
+        largeVideo.updateContainerSize();
124 122
         AudioLevels.init();
125 123
     },
126 124
 
@@ -487,21 +485,16 @@ var VideoLayout = {
487 485
      */
488 486
     resizeThumbnails (  animate = false,
489 487
                         forceUpdate = false,
490
-                        isSideBarVisible = null,
491 488
                         onComplete = null) {
492
-        isSideBarVisible
493
-            = (isSideBarVisible !== null)
494
-                ? isSideBarVisible : PanelToggler.isVisible();
495 489
 
496 490
         let {thumbWidth, thumbHeight}
497
-            = FilmStrip.calculateThumbnailSize(isSideBarVisible);
491
+            = FilmStrip.calculateThumbnailSize();
498 492
 
499 493
         $('.userAvatar').css('left', (thumbWidth - thumbHeight) / 2);
500 494
 
501 495
         FilmStrip.resizeThumbnails(thumbWidth, thumbHeight,
502 496
             animate, forceUpdate)
503 497
             .then(function () {
504
-                BottomToolbar.resizeToolbar(thumbWidth, thumbHeight);
505 498
                 AudioLevels.updateCanvasSize(thumbWidth, thumbHeight);
506 499
                 if (onComplete && typeof onComplete === "function")
507 500
                     onComplete();
@@ -891,31 +884,29 @@ var VideoLayout = {
891 884
     /**
892 885
      * Resizes the video area.
893 886
      *
894
-     * @param isSideBarVisible indicates if the side bar is currently visible
895 887
      * @param forceUpdate indicates that hidden thumbnails will be shown
896 888
      * @param completeFunction a function to be called when the video area is
897 889
      * resized.
898 890
      */
899
-    resizeVideoArea (isSideBarVisible,
900
-                    forceUpdate = false,
891
+    resizeVideoArea (forceUpdate = false,
901 892
                     animate = false,
902 893
                     completeFunction = null) {
903 894
 
904 895
         if (largeVideo) {
905
-            largeVideo.updateContainerSize(isSideBarVisible);
896
+            largeVideo.updateContainerSize();
906 897
             largeVideo.resize(animate);
907 898
         }
908 899
 
909 900
         // Calculate available width and height.
910 901
         let availableHeight = window.innerHeight;
911
-        let availableWidth = UIUtil.getAvailableVideoWidth(isSideBarVisible);
902
+        let availableWidth = UIUtil.getAvailableVideoWidth();
912 903
 
913 904
         if (availableWidth < 0 || availableHeight < 0) {
914 905
             return;
915 906
         }
916 907
 
917 908
         // Resize the thumbnails first.
918
-        this.resizeThumbnails(false, forceUpdate, isSideBarVisible);
909
+        this.resizeThumbnails(false, forceUpdate);
919 910
 
920 911
         // Resize the video area element.
921 912
         $('#videospace').animate({

+ 17
- 1
service/UI/UIEvents.js ファイルの表示

@@ -37,6 +37,10 @@ export default {
37 37
     TOGGLE_CHAT: "UI.toggle_chat",
38 38
     TOGGLE_SETTINGS: "UI.toggle_settings",
39 39
     TOGGLE_CONTACT_LIST: "UI.toggle_contact_list",
40
+    /**
41
+     * Notifies that the profile toolbar button has been clicked.
42
+     */
43
+    TOGGLE_PROFILE: "UI.toggle_profile",
40 44
     /**
41 45
      * Notifies that a command to toggle the film strip has been issued. The
42 46
      * event may optionally specify a {Boolean} (primitive) value to assign to
@@ -68,26 +72,38 @@ export default {
68 72
     VIDEO_DEVICE_CHANGED: "UI.video_device_changed",
69 73
     AUDIO_DEVICE_CHANGED: "UI.audio_device_changed",
70 74
     AUDIO_OUTPUT_DEVICE_CHANGED: "UI.audio_output_device_changed",
75
+
71 76
     /**
72 77
      * Notifies interested listeners that the follow-me feature is enabled or
73 78
      * disabled.
74 79
      */
75 80
     FOLLOW_ME_ENABLED: "UI.follow_me_enabled",
81
+
76 82
     /**
77 83
      * Notifies that flipX property of the local video is changed.
78 84
      */
79 85
     LOCAL_FLIPX_CHANGED: "UI.local_flipx_changed",
86
+
80 87
     // An event which indicates that the resolution of a remote video has
81 88
     // changed.
82 89
     RESOLUTION_CHANGED: "UI.resolution_changed",
90
+
83 91
     /**
84 92
      * Notifies that the button "Go to webstore" is pressed on the dialog for
85 93
      * external extension installation.
86 94
      */
87 95
     OPEN_EXTENSION_STORE: "UI.open_extension_store",
96
+
88 97
     /**
89 98
      * Notifies that the button "Cancel" is pressed on the dialog for
90 99
      * external extension installation.
91 100
      */
92
-    EXTERNAL_INSTALLATION_CANCELED: "UI.external_installation_canceled"
101
+    EXTERNAL_INSTALLATION_CANCELED: "UI.external_installation_canceled",
102
+
103
+    /**
104
+     * Notifies that the side toolbar container has been toggled. The actual
105
+     * event must contain the identifier of the container that has been toggled
106
+     * and information about toggle on or off.
107
+     */
108
+    SIDE_TOOLBAR_CONTAINER_TOGGLED: "UI.side_container_toggled"
93 109
 };

読み込み中…
キャンセル
保存