Compare commits

..

539 Commits
1237 ... 1449

Author SHA1 Message Date
hristoterezov
4b1dfb9a33 Merge pull request #1095 from BeatC/shortcuts-reversed
Shortcuts reversed
2016-11-03 09:14:05 -05:00
Ilya Daynatovich
30e717bd20 Rename classname; Refactor click on video method 2016-11-03 12:13:03 +02:00
Ilya Daynatovich
d703271c96 Fix bug with resizing when using shortcut for switching btw videos 2016-11-03 11:48:48 +02:00
Ilya Daynatovich
c6c701330a Change order of remote videos when clicking on shortcut 2016-11-03 11:48:48 +02:00
yanas
f02f050e56 Merge pull request #1106 from jitsi/disabled-sidepanels-load
Disables loading side panels when they are disabled.
2016-11-02 18:16:13 -05:00
damencho
f6609524ea Disables loading side panels when they are disabled.
Adds some safety checks for disabled contactlist.
2016-11-02 16:14:36 -05:00
Lyubomir Marinov
6eb767ba11 [React Native] Disable audio levels
The audio levels are gathered by lib-jitsi-meet via polling of
RTCPeerConnection.getStats() which is very slow on Android. Since the
mobile app makes no use of audio levels, it is easiest to disable them
for now in order to not penalize the app.
2016-11-02 14:44:42 -05:00
yanas
c4d0340956 Merge pull request #1034 from m-voloshin/FEATURE-hide-filmstrip
Filmstrip is extended with "Hide" button
2016-11-02 14:24:45 -05:00
hristoterezov
10f04575ed Merge pull request #1060 from kkrisstoff/task/toolbar-side-panel
make side panels init from js
2016-11-02 13:22:55 -05:00
Дамян Минков
a9c984e7db Merge pull request #1091 from BeatC/customer-agreement
Customer agreement
2016-11-02 13:18:33 -05:00
yanas
03fd87476a Merge pull request #1104 from BeatC/adjust-notification-width
Adjusted notification width
2016-11-02 12:40:05 -05:00
Дамян Минков
317f0e736c Merge pull request #1105 from jitsi/fix_frozen_msg
fix(LargeVideoManager): frozen displayname in a msg
2016-11-02 11:58:58 -05:00
Konstantyn Pahsura
9f280e320d _.template removed 2016-11-02 18:42:39 +02:00
Konstantyn Pahsura
a1e098680d make side panels init from js 2016-11-02 18:42:39 +02:00
paweldomas
ede4808ec4 fix(LargeVideoManager): frozen displayname in a msg
The "data-i18n-options" attribute value is stored in jQuery cache and
at the time when i18-next tries to access it to do the translation
it gets the old value from the cache and the message is not updated
correctly. Passing the "msgOptions" explicitly to "translateElement"
fixes the problem by avoiding jQuery cache.
2016-11-02 11:32:40 -05:00
yanas
e86294191a Merge pull request #1098 from BeatC/toolbar-splitter-restyle
Restyled toolbar splitter
2016-11-02 09:27:08 -05:00
yanas
0bf372b8ab Merge pull request #1103 from jitsi/esc-shortcuts-dialog
Esc closes shortcuts dialog
2016-11-02 09:22:34 -05:00
Ilya Daynatovich
ae7ad8b456 Adjusted notification width 2016-11-02 13:09:18 +02:00
Ilya Daynatovich
16c70fddba Restyled toolbar splitter 2016-11-02 12:13:30 +02:00
Дамян Минков
e679509c56 Merge pull request #1094 from bgrozev/conn-quality
Conn quality
2016-11-01 17:46:13 -05:00
hristoterezov
f08e9afc19 Merge pull request #1069 from jitsi/update-i18next
Updates i18next and bundles default translations.
2016-11-01 17:02:17 -05:00
damencho
215d8b1355 Updates show/hide of shortcuts dialog.
Fixes not able to close it with esc button.
2016-11-01 16:48:29 -05:00
damencho
aaca510f8a Updates jsdoc. 2016-11-01 15:34:21 -05:00
yanas
3ad1573130 Merge pull request #1100 from jitsi/close-page-update
Close page update
2016-11-01 15:31:43 -05:00
Дамян Минков
31d6a41759 Merge pull request #1099 from jitsi/fix_toolbar_popups
fix(toolbar): popups
2016-11-01 15:07:15 -05:00
hristoterezov
e731f6c3f3 feat(translation): ES6 support 2016-11-01 15:05:43 -05:00
damencho
1f200b63a7 Updates i18next and bundles default translations. 2016-11-01 15:05:23 -05:00
damencho
ae01275729 Renames variables. 2016-11-01 14:46:47 -05:00
Lyubomir Marinov
fab93a170e [iOS] Mark the app as VoIP 2016-11-01 13:59:53 -05:00
damencho
f28311a2ce Changes line color for static pages. 2016-11-01 13:28:04 -05:00
damencho
7da8db74b0 Adds default title to static pages. 2016-11-01 13:25:05 -05:00
damencho
5feeef0122 Handles data from feedback callback and use it for correct close page. 2016-11-01 13:14:21 -05:00
damencho
87f7be2182 Updates close page and adds a second one.
Close pages text are different depending whether feedback was provided or not.
2016-11-01 13:13:07 -05:00
damencho
e81a10de4a Reports to close callback whether feedback is submitted. 2016-11-01 13:10:58 -05:00
hristoterezov
8d9863a635 fix(toolbar): popups 2016-11-01 11:07:27 -05:00
Lyubomir Marinov
456b3030e3 [iOS] Fix the Xcode project file for CocoaPods 2016-11-01 07:58:26 -05:00
Ilya Daynatovich
d72695ae0f Added app substitution 2016-11-01 11:30:01 +02:00
yanas
e6748cf153 Merge pull request #1093 from jitsi/text-updates
Text updates.
2016-10-31 17:40:18 -05:00
yanas
a5e7c86125 Merge pull request #1092 from jitsi/update-lock-state
Updates lock state
2016-10-31 17:29:11 -05:00
hristoterezov
a7a7f269c3 Merge pull request #1054 from kkrisstoff/task/make-extended-toolbar-dynamically-created-buttons
make extended buttons dynamic
2016-10-31 16:50:14 -05:00
Boris Grozev
c815b1f25b feat: Updates the GSM bars' thresholds.
Adapts to changes in lib-jitsi-meet. Uses an Array which guarantees the
order of its elements, and avoids setting a css property multiple times.
2016-10-31 16:08:24 -05:00
Boris Grozev
c98ffdc817 refactor: Don't calculate remote connection quality. 2016-10-31 16:07:25 -05:00
Boris Grozev
09016c2182 refactor: Moves more code to lib-jitsi-meet. 2016-10-31 16:07:25 -05:00
Boris Grozev
22b2f17234 refactor: Moves more code to lib-jitsi-meet. 2016-10-31 16:07:25 -05:00
Boris Grozev
0c1bef927b Don't use no double non-positives. 2016-10-31 16:07:25 -05:00
Boris Grozev
4aa47a7901 feat: moves isConnectionInterrupted to lib-jitsi-meet. 2016-10-31 16:07:25 -05:00
Boris Grozev
051db50b3f feat: Moves connectionquality to lib-jitsi-meet. 2016-10-31 16:07:25 -05:00
yanas
c726a1a879 Text updates. 2016-10-31 16:00:11 -05:00
damencho
2edb279d22 Fixes password set remotely text. 2016-10-31 14:40:46 -05:00
Lyubomir Marinov
20e7c6d873 [iOS] Crashlytics 2016-10-31 14:08:25 -05:00
damencho
96479e0474 Fixes password and isModerator check in invite dialog. 2016-10-31 14:01:22 -05:00
Дамян Минков
1036768b2a Merge pull request #1080 from jitsi/dont_show_again
Implement dont show again util
2016-10-31 13:36:50 -05:00
Konstantyn Pahsura
77e28a6a45 toolbar buttons fixes 2016-10-31 20:25:27 +02:00
hristoterezov
a8b69d5cd8 feat(MessageHandler): Implement dont show again utility 2016-10-31 13:02:41 -05:00
Дамян Минков
9054e72b7f Merge pull request #1090 from jitsi/file_loading_err
Prevent from displaying broken page
2016-10-31 13:00:06 -05:00
Maxim Voloshin
dc93940bbd Filmstrip is extended with "Hide" button 2016-10-31 19:59:45 +02:00
Lyubomir Marinov
b6a6c99c9d [React Native] Enable scrolling of the thumbnails 2016-10-31 12:33:53 -05:00
Ilya Daynatovich
544792b9cc Editions in colors 2016-10-31 19:21:15 +02:00
hristoterezov
7e2fe30472 feat(JitsiLocalStorage): Implement localStorage wrapper 2016-10-31 12:11:03 -05:00
Ilya Daynatovich
5e7e5b317b Fix texts 2016-10-31 19:02:32 +02:00
Ilya Daynatovich
a63bb5d906 Add policy section 2016-10-31 18:23:28 +02:00
paweldomas
0354dd2c24 feat(index.html): prevent from displaying broken page
The commit adds an error listener which will replace the document body
with an error message if any of the files required for the app to
be displayed correctly fails to load.
2016-10-31 10:50:01 -05:00
Ilya Daynatovich
647f577332 Rearrange overlay layout 2016-10-31 17:35:22 +02:00
Kostiantyn Pashura
be1ba21166 make extended buttons dynamic 2016-10-31 13:30:16 +02:00
Lyubomir Marinov
8b2491c7a2 [tvOS] Automatic Xcode project file fixes
Xcode insists on automatically fixing the project file with tvOS
support. In order to not have to constantly ignore these automatic
changes when committing, commit them.
2016-10-30 20:43:29 -05:00
Lyubomir Marinov
f987a53313 [iOS] Clean up the Xcode project file 2016-10-30 20:26:39 -05:00
Lyubomir Marinov
d875b35b32 [Android] Crashlytics 2016-10-30 18:12:33 -05:00
yanas
df76d6990e Merge pull request #1062 from m-voloshin/FEATURE-tooltip-for-contact-list
New tooltip for contact list
2016-10-28 16:11:01 -05:00
yanas
86ffccb95a Merge pull request #1076 from kkrisstoff/UI/bugs-and-adjustments
audio_level oppacity and addParticipant button name
2016-10-28 16:10:47 -05:00
yanas
50494eb745 Updates to master 2016-10-28 13:20:38 -05:00
Konstantyn Pahsura
28f719b58a dropdown styles fixes 2016-10-28 13:09:47 -05:00
yanas
d384cd77c6 Merge pull request #1085 from jitsi/video-thumbnail-hover
Update _variables.scss
2016-10-28 12:54:25 -05:00
yanas
bb3384dc7c Update _variables.scss 2016-10-28 12:53:50 -05:00
yanas
ae9819a45c Merge pull request #1075 from BeatC/menu-restyling-editions
Adjust alignment of remote video menu
2016-10-28 12:43:12 -05:00
yanas
40473a16c7 Merge pull request #1084 from jitsi/toolbar_animation
fix(Toolbar): Both toolbars are displayed in the same time
2016-10-28 12:40:37 -05:00
hristoterezov
baad364b04 fix(Toolbar): Both toolbars are displayed in the same time 2016-10-28 12:39:25 -05:00
Дамян Минков
d2f52b534a Merge pull request #1083 from jitsi/fix_hover_thumbnail
fix(Thubmnail_PopupMenu): the thumbnail should be considered hovered when the popup menu is hovered
2016-10-28 11:59:36 -05:00
Lyubomir Marinov
532010c916 Update project files as recommended by Xcode 2016-10-28 11:30:04 -05:00
paweldomas
e349cc59ad style(translation): adds comment about lang auto detection 2016-10-28 11:17:09 -05:00
hristoterezov
634a18e847 fix(Thubmnail_PopupMenu): the thumbnail should be considered hovered when the popup menu is hovered 2016-10-28 11:16:40 -05:00
paweldomas
01581196f0 Merge pull request #1082 from 'BeatC/config-option-to-freeze-translation'
Add detect translation freeze in interface config
2016-10-28 11:14:22 -05:00
Konstantyn Pahsura
d7ed0bac69 audio_level oppacity and addParticipant button name 2016-10-28 18:39:40 +03:00
Ilya Daynatovich
209272f940 Add detect translation freeze in interface config 2016-10-28 16:18:08 +03:00
Ilya Daynatovich
138ed6a487 Fixed interface 2016-10-28 13:52:08 +03:00
Ilya Daynatovich
d84d0b65ca Adjust alignment of remote video menu 2016-10-28 13:52:08 +03:00
Paweł Domas
2fe69d409b Merge pull request #1071 from jitsi/ongoing-work-video-thumbnails
Ongoing work video thumbnails
2016-10-27 17:13:27 -05:00
damencho
9764fe52de Removed not needed setting of the quality to 0.
We now just hide the icon with values and show the interrupted one. Calling this one was causing troubles like flickering and stats popover not able to hide, once shown. On hover we are calling updateView which ends to this call which destroy and create the popover, which maybe is leading to this problems.
2016-10-27 16:56:32 -05:00
damencho
131d5cc256 Change the colour of the connection indicator badge. 2016-10-27 15:27:28 -05:00
Дамян Минков
7fead897ed Merge pull request #1079 from jitsi/fix_avatar_z_index
Do not display avatar on top of the connection problem messages
2016-10-27 15:26:22 -05:00
paweldomas
e3d5bd3dfb fix(css): do not display avatar on top of the messages
Previously the z-index was introduced in order to have the avatar
visible on top of the black video element, but now we're always hiding
the video element when the avatar is displayed, so it's no longer
required.
2016-10-27 14:52:32 -05:00
damencho
e3edef2999 Renames videocontainer overlay to hoverOverlay. 2016-10-27 14:32:22 -05:00
damencho
328ff54423 Fixes undefined error and shared video. 2016-10-27 14:08:06 -05:00
damencho
2807346bdf Makes decision what to show in avatar consistent (in updateView). 2016-10-27 13:17:17 -05:00
damencho
fec8f4e005 Fixes an issue with mixing visibility functions for elements.
In small video we use UIUtil.setVisibility, so we should not use jquery show/hide for the same element.
2016-10-26 17:36:07 -05:00
damencho
3ae299cf2b Fixes comments. 2016-10-26 17:18:36 -05:00
Дамян Минков
bbf68a97bb Merge pull request #1072 from jitsi/fix_stop_rec_dialog
Make the stop recording dialog work again
2016-10-26 16:14:28 -05:00
paweldomas
739e2bd35a fix(Recording): broken stop recording dialog 2016-10-26 16:10:45 -05:00
damencho
7acda03024 Adds an overlay to dim videos when showing displayname. 2016-10-26 15:51:09 -05:00
damencho
5cead57723 Reverts hover over small video to show display name. 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
1e24be6dd4 Fix editing the name 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
8d80e13e31 Fix connection indicator bars 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
69b79b7687 Fix icon styles 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
698b3caeb8 fix styles in connection indicators 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
323684c5fe fix conflicts after rebase 2016-10-26 15:51:09 -05:00
Ilya Daynatovich
09e3fb9917 Fixed hack with displayname margin 2016-10-26 15:51:09 -05:00
yanas
a17a98991c Ongoing work on video thumbnail layout 2016-10-26 15:51:09 -05:00
yanas
3fe43abdea Move the display name to the center 2016-10-26 15:51:09 -05:00
Lyubomir Marinov
64112e00e6 react-native-webrtc 0.53.1 2016-10-26 15:20:06 -05:00
Дамян Минков
61651f7060 Merge pull request #1070 from jitsi/mute_participant_dialog
feat(Mute_Participant): Implement warning dialog for muting remote participant
2016-10-26 15:05:29 -05:00
hristoterezov
09c8e14465 feat(Mute_Participant): Implement warning dialog for muting remote participant 2016-10-26 14:57:09 -05:00
hristoterezov
0bb772d242 Merge pull request #1059 from BeatC/toolbar-animation
Change main toolbar animation; optimize mousemove handler
2016-10-26 11:52:01 -05:00
George Politis
68b587b110 Merge pull request #1064 from jitsi/5xx_reloads
Page reloads on BOSH HTTP errors
2016-10-26 11:39:44 -05:00
Дамян Минков
dd4a5f2705 Adds 404 error page in default configs. 2016-10-26 09:21:15 -05:00
yanas
79c52e1a77 Merge pull request #1061 from BeatC/button-shifted
Button shifted
2016-10-25 22:29:52 -05:00
hristoterezov
221f6d1d68 Merge pull request #1056 from jitsi/translations-update
Translations update
2016-10-25 18:11:15 -05:00
hristoterezov
ea0f0da8a4 feat(JitsiPopover): Add onBeforePosition option 2016-10-25 17:57:29 -05:00
hristoterezov
d2ccd20c78 Merge branch 'm-voloshin-FIX-frozen-tooltips' 2016-10-25 16:52:29 -05:00
hristoterezov
8762aae111 fix(SmallVideo): Add translateElement call removed by previous commit 2016-10-25 16:52:11 -05:00
hristoterezov
05fcaa2554 Merge branch 'FIX-frozen-tooltips' of git://github.com/m-voloshin/jitsi-meet into m-voloshin-FIX-frozen-tooltips 2016-10-25 16:51:03 -05:00
paweldomas
3c6d464b32 feat(PageReload): make the reload interval random, between 10-30 sec 2016-10-25 15:58:09 -05:00
paweldomas
c95c46edac feat(conference): reload the page when XMPP connection is dropped 2016-10-25 15:57:53 -05:00
damencho
b2a1c9881e Fixes comments from review.
Adds a safe check, i18n is expecting undefined not null. Fix a method name and translation to be at placeholder.
2016-10-25 15:18:56 -05:00
Lyubomir Marinov
9f10a059ef React Native 0.36.0, React 15.3.2 2016-10-25 14:57:18 -05:00
Maxim Voloshin
86f1d287d7 Fix comments 2016-10-25 20:40:43 +03:00
Maxim Voloshin
6820ec8d23 Show and hide indicators using pure js 2016-10-25 20:40:00 +03:00
Lyubomir Marinov
4997ae79e3 Fix toolbar's mute buttons when starting muted
The toolbar's mute buttons depict respective features/base/media states.
However, (un)muting is practically carried out by features/base/tracks.
When the mobile app enters a conference configured to invite the joining
participant to mute themselves, the tracks would be muted but the
toolbar's mute buttons would not reflect that.
2016-10-25 11:43:15 -05:00
Maxim Voloshin
c76fa50aa5 New tooltip for contact list 2016-10-25 19:27:27 +03:00
Maxim Voloshin
1c218191b0 Apply tooltip for indicator once 2016-10-25 17:50:28 +03:00
Ilya Daynatovich
84d71d558e fix invite dialog design 2016-10-25 17:33:51 +03:00
Ilya Daynatovich
659c84d696 fix margin 2016-10-25 17:24:11 +03:00
Ilya Daynatovich
99d50ade11 Change main toolbar animation; optimize mousemove handler 2016-10-25 14:55:43 +03:00
Дамян Минков
f271eb4610 Merge pull request #980 from kkrisstoff/task/add-error-page
error layout added
2016-10-24 16:31:16 -05:00
damencho
076f7a82de Updates translation readme. 2016-10-24 14:42:23 -05:00
damencho
547f96c0c1 Merge branch 'master' into translations-update 2016-10-24 14:40:50 -05:00
damencho
8a789aa608 Fixes some translations. 2016-10-24 14:17:22 -05:00
yanas
8fd23771f4 Merge pull request #1058 from kkrisstoff/select2-background-changes
dropdown color changes
2016-10-24 13:02:54 -05:00
Konstantyn Pahsura
15bc3b9ad4 dropdown color changes 2016-10-24 20:40:23 +03:00
yanas
3196ffd941 Merge pull request #1042 from m-voloshin/FEATURE-hd-label-relocation
Relocate "HD" label
2016-10-24 12:21:26 -05:00
Kostiantyn Pashura
84d2b79b4f 404 error page added 2016-10-24 19:33:08 +03:00
bgrozev
a4e1f939cd Merge pull request #1057 from jitsi/fix_connection_problem_z_idx
Reduce the z index of the connection problems message
2016-10-24 11:09:48 -05:00
damencho
563ea1244c Updates openMessageDialog to get only key and options. 2016-10-21 22:10:33 -05:00
hristoterezov
3dca6f2354 Merge pull request #1008 from jitsi/page_reload_overlay
Page reload overlay
2016-10-21 14:36:06 -05:00
paweldomas
bf5a1d1f8e fix(videolayout css): reduce conn problem msg z-index
For small window sizes and many video thumbnails the message may go on
top of the thumbnails.
2016-10-21 14:03:34 -05:00
paweldomas
a615649933 fix(PageReloadOverlay): changes text and adjusts style 2016-10-21 13:50:23 -05:00
paweldomas
3c0c823a37 ref(Overlay): introduce base class 2016-10-21 13:50:08 -05:00
damencho
efed4bf13c Merge branch 'master' into translations-update 2016-10-21 13:19:23 -05:00
damencho
5217bf0bb8 Removes translateString and use translateElement.
Removing translateString forces using data-i18n attributes, to make sure we do not forget to set them. Missing data-i18n attributes is a problem with late loading where we can end up without translation, without text. Missing data-i18n attributes is also problem that strings will not be translated when changing language.
Fixes a bug in invite dialog, where remove password button was shown for non moderators.
2016-10-21 12:11:22 -05:00
paweldomas
98de4c90b5 fix(RingOverlay): puts the "ring overlay" back below the toolbars 2016-10-21 10:47:21 -05:00
paweldomas
8c426e8bb7 fix(ToolbarToggle): restore call overlay to the timeout check 2016-10-21 10:27:10 -05:00
paweldomas
5bc727804f fix(PageReloadOverlay): do not log message every second 2016-10-21 10:18:03 -05:00
yanas
32bfebc924 Merge pull request #1033 from BeatC/add-jsdoc
Add JSDoc and rename method
2016-10-21 10:12:31 -05:00
paweldomas
8f8b1385fa ref(ConferenceUrl): converts to class and binds instance to global APP
Converts ConferenceUrl to a class and binds an instance to the global
APP variable, as requested by HTerezov.
2016-10-21 09:46:09 -05:00
paweldomas
d342f93547 fix(Invite): remove unused 'updateInviteUrl' 2016-10-21 09:25:14 -05:00
paweldomas
ecfc56461e fix(ToolbarToggler): remove Yoda condition
Is not very readable and is not used across the project
2016-10-21 09:22:17 -05:00
Maxim Voloshin
d09a8b1896 Adjusted styles for "Live Streaming" indicator. 2016-10-21 13:38:12 +03:00
Maxim Voloshin
88be44b472 Relocated "HD" label 2016-10-21 13:38:12 +03:00
Дамян Минков
4b82bc0e33 Merge pull request #1049 from jitsi/fix_thank_you_dialog
fix(feedback): Fixes the logic for the thank you dialog
2016-10-20 22:30:18 -05:00
hristoterezov
3022754f19 fix(feedback): Fixes the logic for the thank you dialog 2016-10-20 14:20:28 -05:00
paweldomas
f7bfe8d8bf feat: introduce ConferenceUrl module
We need to make sure that on the page reload all original parameters
used to load the conference are preserved. New modules helps to manage
different types of conference URLs like the one used for invites and
the one for reloading the page.
2016-10-20 13:53:24 -05:00
paweldomas
210605d8f3 fix(MessageHandler): suppress the notifications on top of the overlay 2016-10-20 13:52:35 -05:00
paweldomas
52344ff741 fix(ToolbarToggler): restore 'force' arg in timeout logic 2016-10-20 13:52:35 -05:00
paweldomas
687b0cad8e fix(ToolbarToggler): remove call overlay from the timeout check
Remove check for the call overlay being visible in postponing
the toolbar being hidden, as we don't want to have it displayed at all
when the overlay is there.
2016-10-20 13:52:35 -05:00
paweldomas
0053c4df49 feat(PageReloadOverlay): log the reload event 2016-10-20 13:52:35 -05:00
paweldomas
2a5b4dde31 feat: implement PageReloadOverlay 2016-10-20 13:52:35 -05:00
paweldomas
d2690444ac fix(overlay): bring overlay on top of the toolbars 2016-10-20 13:52:35 -05:00
paweldomas
c473178dfe fix(UserMediaPermissionsGuidanceOverlay): broken display 2016-10-20 13:50:11 -05:00
paweldomas
229a3b4418 fix(conference): disconnect on VIDEOBRIDGE_NOT_AVAILABLE error
Will disconnect on ConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE.
Show the same message when either JVB is not available or Jicofo
disconnects.
2016-10-20 13:50:11 -05:00
yanas
63dfa5247f Merge pull request #1048 from BeatC/menu-restyle
Menu restyle
2016-10-20 13:48:19 -05:00
Maxim Voloshin
469dee36ee Initialised variable for notification opacity 2016-10-20 13:03:00 -05:00
Maxim Voloshin
abb1482456 Applied updated design for notifications 2016-10-20 13:03:00 -05:00
Lyubomir Marinov
e1c5ea11bc Merge branch 'kkrisstoff-task/dropdown-aui-changes'
the commit.
2016-10-20 12:39:23 -05:00
Lyubomir Marinov
55b741d11b Merge branch 'master' into kkrisstoff-task/dropdown-aui-changes 2016-10-20 12:10:50 -05:00
Ilya Daynatovich
8f57179aa4 return default value 2016-10-20 19:41:04 +03:00
yanas
0fa5aa48af Merge pull request #992 from kkrisstoff/task/make-extended-toolbar-dynamically-created
toolbar: authentication button changed
2016-10-20 11:40:35 -05:00
Ilya Daynatovich
62af73ea09 Add new option to jitsi-popover 2016-10-20 19:28:19 +03:00
Ilya Daynatovich
0e8297ea8d restyle of menu 2016-10-20 19:28:19 +03:00
Ilya Daynatovich
70861465e1 Editions in jitsi popover styles 2016-10-20 19:28:19 +03:00
yanas
3bf8b7fbe2 Merge pull request #1007 from BeatC/connection-indicator-restyle
Connection indicator restyle
2016-10-20 11:08:51 -05:00
Kostiantyn Pashura
436f3b9d9b auth btn removed. login/logout --> Profile 2016-10-20 12:28:58 +03:00
Kostiantyn Pashura
71475038ba toolbar: authentication button changed 2016-10-20 12:26:53 +03:00
Lyubomir Marinov
c9edc0ae15 Merge branch 'master' into kkrisstoff-task/dropdown-aui-changes 2016-10-19 19:06:58 -05:00
Lyubomir Marinov
242c1419fd Format source code for (some) consistency 2016-10-19 18:54:21 -05:00
yanas
8ca0943881 Merge pull request #880 from jitsi/ring-overlay-style
style(LargeVideo): Rename LARGE_VIDEO_AVATAR_DISPLAYED event
2016-10-19 16:24:34 -05:00
hristoterezov
58a07355fb style(RingOverlay): Rename onAvatarDisplayed to onAvatarVisible 2016-10-19 15:58:36 -05:00
hristoterezov
4acfb033c8 style(LargeVideo): Rename LARGE_VIDEO_AVATAR_DISPLAYED event 2016-10-19 15:57:02 -05:00
Lyubomir Marinov
572fb20dd4 Merge branch 'task/dropdown-aui-changes' of https://github.com/kkrisstoff/jitsi-meet into kkrisstoff-task/dropdown-aui-changes 2016-10-19 13:38:38 -05:00
Lyubomir Marinov
d15413cd18 Merge branch 'mlaux-bugfix/android-launcher-intent' 2016-10-19 12:24:37 -05:00
Matt Laux
c18caf52d0 Fix Android launcher intent so that app appears in drawer. 2016-10-19 10:59:09 -05:00
Ilya Daynatovich
c09e10a584 updates in connection indicator styles 2016-10-19 17:57:16 +03:00
Lyubomir Marinov
1ff0bdbcfd Fix the in-app icons on Android
Bundle our custom icon font jitsi.ttf in the Android app (which we
already do for the iOS app).

Additionally, remove icon font files which are not in use.
2016-10-19 09:10:11 -05:00
Kostiantyn Pashura
736b98869f dropdown restyle 2016-10-19 12:40:03 +03:00
Kostiantyn Pashura
91fd16e9b4 aui checkbox removed 2016-10-19 12:40:03 +03:00
Kostiantyn Pashura
8118b4aea1 aui select and checkbox added 2016-10-19 12:40:03 +03:00
Дамян Минков
f62d7dbdf7 Merge pull request #1040 from jitsi/fix-feedback-color-and-size
Fix feedback button color and star size
2016-10-18 15:25:40 -05:00
yanas
1bf2920f3e Fix feedback button color and star size 2016-10-18 15:23:52 -05:00
Дамян Минков
8ecf079a3f Merge pull request #1039 from jitsi/stop-logging-servers-in-the-name
Stop logging servers in the event name
2016-10-18 15:18:44 -05:00
Emil Ivov
05ae9134a8 Update conference.js 2016-10-18 15:15:47 -05:00
damencho
040f4a6618 Adds data-i18n attribute. 2016-10-18 15:02:09 -05:00
damencho
a9aa29d0ad Adds data-i18n attribute to the feedback. 2016-10-18 15:01:58 -05:00
damencho
54cfbaaba0 Updates some translations for login dialog. 2016-10-18 15:01:50 -05:00
damencho
0455c26fb2 Uses titleKey to generate title string containing data-i18n attribute. 2016-10-18 15:00:09 -05:00
damencho
65f8c9ad97 Removes title param from openTwoButtonDialog. 2016-10-18 14:54:30 -05:00
damencho
f0ac52614b Removes title param from openTwoButtonDialog. 2016-10-18 14:54:22 -05:00
damencho
b5f0d30298 Removes not used parameter of openMessageDialog (title).
We pass key which is enough to obtain the title.
2016-10-18 14:54:14 -05:00
Дамян Минков
d97ed17052 Merge pull request #1038 from jitsi/api_commands
fix(iframe_api): toggleScreenSharing command
2016-10-18 14:52:21 -05:00
hristoterezov
dc43135980 fix(iframe_api): toggleScreenSharing command 2016-10-18 14:37:55 -05:00
Дамян Минков
27158752b0 Merge pull request #1025 from BeatC/display-name-required-dialog-fixes
fix display name required dialog
2016-10-18 14:36:03 -05:00
Дамян Минков
5c6f897ce7 Merge pull request #1030 from coresh/patch-1
Fixes issue of method 'setTooltip'
2016-10-18 14:35:53 -05:00
Дамян Минков
d415a15e93 Merge pull request #1037 from jitsi/add-specific-read-only-color
Add specific color for read-only input
2016-10-18 14:35:47 -05:00
yanas
19709cd3fc Adds comments. 2016-10-18 14:30:59 -05:00
yanas
89e15b6d3d Add specific color for read-only input 2016-10-18 14:27:16 -05:00
yanas
dcf2d64067 Merge pull request #1036 from jitsi/fix-placeholder-style
Fixes placeholder color
2016-10-18 13:00:22 -05:00
yanas
c459e3cffd Merge pull request #1031 from BeatC/invite-dialog-visual-bugs
Fix some visual bugs
2016-10-18 11:59:11 -05:00
yanas
8eb7303bd9 Fixes placeholder color 2016-10-18 11:57:38 -05:00
yanas
de67abd21d Merge pull request #1032 from kkrisstoff/Feedback-dialog-theme
feedback style variables
2016-10-18 11:20:44 -05:00
yanas
bb5495b495 Merge pull request #990 from jitsi/chatmessage_position
fix(chat): Issue with position of chat messages
2016-10-18 11:13:26 -05:00
Kostiantyn Pashura
124303b8b8 feedback style variables 2016-10-18 18:37:32 +03:00
Ilya Daynatovich
9078596f3a fix after rebase 2016-10-18 18:23:08 +03:00
Ilya Daynatovich
3254bbaabb Change styles in jitsi poppover 2016-10-18 17:57:19 +03:00
Ilya Daynatovich
26792625f2 BEMificated classes and add title 2016-10-18 17:57:19 +03:00
Ilya Daynatovich
c54938374d Editions in jitsi popover styles 2016-10-18 17:57:19 +03:00
Ilya Daynatovich
83e7f23d0f Update Connection indicator and popover js 2016-10-18 17:57:19 +03:00
Ilya Daynatovich
b7fccf5040 Update styles for popover 2016-10-18 17:57:19 +03:00
Lyubomir Marinov
a91deca6cd Remove source code duplication
An error was discovered and fixed by GitHub user blackneck in
jitsi/jitsi-meet PR #1017. The faulty source code was a piece of
duplication though. Remove the source code duplication there to reduce
the risks of bugs.
2016-10-18 09:39:17 -05:00
Ilya Daynatovich
cbc7fe5d98 Add JSDoc and rename method 2016-10-18 17:20:48 +03:00
Lyubomir Marinov
cf3ea2b8af Merge branch 'blackneck-master' 2016-10-18 09:05:46 -05:00
Ilya Daynatovich
a4c3348630 Fix some visual bugs 2016-10-18 16:53:28 +03:00
coresh
6bd5d6e4d5 Fixes issue of method 'setTooltip'
Fixes issue of method 'setTooltip' in modules/UI/util/UIUtil.js: Excluded 'Uncaught TypeError':
```
UIUtil.js:134 Uncaught TypeError: Cannot read property 'setAttribute' of null
```
2016-10-18 09:34:09 +00:00
yanas
442d2fa316 Merge pull request #1024 from BeatC/shortcut-dialog-fixes
Fix shortcut dialog toggling
2016-10-17 23:40:22 -05:00
Lyubomir Marinov
3ecc24d85e Remove obsolete Temasys workaround on React Native
jitsi/lib-jitsi-meet#66b601e disabled the execution of Temasys'
adapter.screenshare.js on browsers on which we don't use Temasys such as
React Native. Henceforth, no Temasys workarounds are necessary on React
Native.
2016-10-17 19:51:58 -05:00
Lyubomir Marinov
5e3193e087 Fix the iOS enterprise deployment build 2016-10-17 18:57:15 -05:00
yanas
b96743f4de Merge pull request #1028 from jitsi/fix-profile-title
Trivial fix of capital letters.
2016-10-17 17:20:00 -05:00
yanas
2eec52485d Fixes Profile panel title 2016-10-17 17:18:06 -05:00
Дамян Минков
c2085a5a9d Merge pull request #1027 from jitsi/fix-contact-list-resizing
Some contact list styling adjustments
2016-10-17 17:17:22 -05:00
yanas
f8733b2501 Remove semicolon 2016-10-17 16:53:16 -05:00
yanas
5597847190 Some contact list styling adjustments 2016-10-17 16:49:31 -05:00
Дамян Минков
13d187b878 Merge pull request #1019 from jitsi/add-toolbar-splitter-button
Adds toolbar splitter button
2016-10-17 16:35:15 -05:00
yanas
43906a4e30 Fix undefined check. 2016-10-17 16:05:46 -05:00
yanas
9641dbf373 Adds toolbar splitter button 2016-10-17 16:05:46 -05:00
yanas
ad2fb28f97 Merge pull request #1023 from BeatC/invite-dialog-enter-for-password
Add possibilty to set password via return key
2016-10-17 14:42:44 -05:00
Дамян Минков
2f11e85304 Updates ios project file, disables LLVM Bitcode. 2016-10-17 10:58:58 -05:00
Ilya Daynatovich
25aeb184af fix display name required dialog 2016-10-17 17:29:41 +03:00
Lyubomir Marinov
ba778c50ac Merge branch 'master' of https://github.com/blackneck/jitsi-meet into blackneck-master 2016-10-17 08:56:19 -05:00
Ilya Daynatovich
d06aef511f Fix shortcut dialog toggling 2016-10-17 16:35:47 +03:00
Ilya Daynatovich
d94b50f1e4 Add possibilty to set password via return key 2016-10-17 15:51:55 +03:00
Дамян Минков
367c9401eb Merge pull request #1020 from jitsi/invite-dialog-fix
Initialise the invite dialog on user action
2016-10-14 16:08:05 -05:00
yanas
338e1bac00 Initialise the invite dialog on user action 2016-10-14 15:38:19 -05:00
Paweł Domas
6148b4b229 Merge pull request #1018 from jitsi/fix-gms-bars-2
Fixes cannot read property of undefined if there is no local video.
2016-10-14 15:18:43 -05:00
damencho
e5f38e34e9 Fixes cannot read property of undefined if there is no local video. 2016-10-14 15:14:56 -05:00
Alexander Chernoshej
60eb76355b fix tiny mistake on removing local tracks 2016-10-14 17:26:55 +03:00
Дамян Минков
da86cba7ea Merge pull request #1014 from jitsi/fix-cdn-issue-with-remove-pass
Fixes cdn issue with remove password link.
2016-10-13 20:06:40 -05:00
Paweł Domas
33c026cc06 Merge pull request #1010 from jitsi/fullscreen-feature-fixes
Fullscreen feature fixes
2016-10-13 18:39:47 -05:00
yanas
22a2d85ee2 Fixes cdn issue with remove password link. 2016-10-13 17:57:45 -05:00
yanas
26ff54366b Moves full screen functions in UIUtil 2016-10-13 17:28:24 -05:00
hristoterezov
762420fcc8 Merge pull request #997 from jitsi/gsm-bars-2
Calculates quality based on the resolution and upload.
2016-10-13 16:26:42 -05:00
Paweł Domas
856a18fc2a Merge pull request #1011 from jitsi/adds-id-to-etherpad-iframe
Adds an id to etherpad iframe.
2016-10-13 15:49:00 -05:00
damencho
9ed6e0e2f9 Adds an id to etherpad iframe. 2016-10-13 15:46:44 -05:00
damencho
bbe475cb4e Fixes review comments.
Uses some ES6 syntax. Also removes inputHeight key for resolution as it makes no sence to have dictionary with one key. Removes some code duplication. Makes code consistent: method params for updateLocalStats and updateRemoteStats.
2016-10-13 15:31:16 -05:00
yanas
36fdb3127f Removes unrelated comment. 2016-10-13 15:17:15 -05:00
yanas
ee31d24f7c Puts fullscreen button in the top toolbar 2016-10-13 15:10:10 -05:00
yanas
7baa473e55 Fixes full screen event handling 2016-10-13 15:10:10 -05:00
yanas
688e71cd1b Merge pull request #995 from jitsi/ring_overlay_disable_ringing
Add interfaceConfig option for disabling ringing
2016-10-13 14:28:21 -05:00
Lyubomir Marinov
ce9fff2a8d Merge remote-tracking branch 'origin/master' 2016-10-13 13:33:37 -05:00
Lyubomir Marinov
6202935a27 Merge branch 'm-voloshin-FIX-audio-level' 2016-10-13 13:29:54 -05:00
Дамян Минков
df7a6f0df6 Merge pull request #1004 from jitsi/hangup_fixes
Refactor hangup.

Refactor hangup after room.leave is made to return Promise that waits for actual leave.
2016-10-13 11:36:54 -05:00
Maxim Voloshin
4ae0d1b882 Clean up audio level after previous speaker 2016-10-13 16:43:21 +03:00
hristoterezov
84fd0531f6 fix(Avatar): Avatar to return the local avatar when jid is null 2016-10-12 17:02:50 -05:00
hristoterezov
71d767f0b4 fix(hangup): Show Feedback independently from room.leave 2016-10-12 16:30:44 -05:00
hristoterezov
5fe0c62842 style(RingOverlay): Fix naming and aligning after review 2016-10-12 13:10:58 -05:00
Paweł Domas
58b4e0d59a Merge pull request #1002 from jitsi/react-native
Merge jitsi-meet-react's mobile support
2016-10-12 12:38:06 -05:00
hristoterezov
94366190a0 Merge pull request #928 from maximax123/fix-command
hot fix api.executeCommand
2016-10-12 11:38:31 -05:00
yanas
491ce70e1a Merge pull request #999 from BeatC/theming
Add main file for switch theming
2016-10-12 11:34:01 -05:00
Lyubomir Marinov
7f3ff13c18 Merge jitsi-meet-react's mobile support
As a step toward merging jitsi-meet-react with jitsi-meet to share as
much source code as possible between mobile and Web, merge the part of
jitsi-meet-react's source tree which supports mobile inside the
jitsi-meet source tree and leave jitsi-meet-react's Web support in the
source code revision history but don't have it in master anymore because
it's different from jitsi-meet's Web support. In other words, the two
projects are mechanically merged at the file level and don't really
share source code between mobile and Web.
2016-10-12 10:31:52 -05:00
Lyubomir Marinov
1edebf83ae Remove .babelrc to simplify React Native support
React Native's module bundler (aka packager) has its default Babel
preset - react-native/babel-preset - which it uses in the absence of a
custom .babelrc. Unfortunately, the default may be tripped by the
presence of a .babelrc in dependencies. Additionally, if the default
does not get tripped, the npm install of lib-jitsi-meet as a dependency
may fall into a recursion in which Babel attempts to transpile
react-native/babel-preset. To reduce the risks of stumbling upon such
problems, move Babel's configuration inside the Webpack configuration
file.
2016-10-12 10:31:52 -05:00
Lyubomir Marinov
d55e0f70d9 Import jitsi/jitsi-meet-react#2f23d98
As an intermediate step on the path to merging jitsi-meet and
jitsi-meet-react, import the whole source code of jitsi-meet-react as it
stands at
2f23d98424
i.e. the lastest master at the time of this import. No modifications are
applied to the imported source code in order to preserve a complete
snapshot of it in the repository of jitsi-meet and, thus, facilitate
comparison later on. Consequently, the source code of jitsi-meet and/or
jitsi-meet-react may not work. For example, jitsi-meet's jshint may be
unable to parse jitsi-meet-react's source code.
2016-10-12 10:31:52 -05:00
Ilya Daynatovich
429325ca6d Add main file for switch theming 2016-10-12 12:08:45 +03:00
yanas
1238ffbc40 Merge branch 'BeatC-jit/dialogs-redesign' 2016-10-11 19:10:43 -05:00
yanas
e24d5da0ef Fix eslint errors 2016-10-11 19:09:16 -05:00
yanas
74f31db434 Dialogs re-design, invite and password modifications 2016-10-11 19:08:24 -05:00
damencho
a2c71d05e6 Calculates quality based on the resolution and upload. 2016-10-11 14:54:22 -05:00
hristoterezov
e5503deadd feat(RingOverlay): Add interfaceConfig option for disabling ringing 2016-10-11 10:17:41 -05:00
Дамян Минков
d5541f612f Merge pull request #994 from jitsi/disable_dominant_speaker_indicator
feat(SmallVideo.js): New interface.config property for dominant speaker icon disable
2016-10-10 22:23:21 -05:00
hristoterezov
8fafd2b4ea feat(SmallVideo.js): New interface.config property for dominant speaker icon disable 2016-10-10 17:37:21 -05:00
ibauersachs
f66555a88f Commit from translate.jitsi.org by user ibauersachs.: 265 of 265 strings translated (0 fuzzy). 2016-10-09 08:36:48 +00:00
ibauersachs
ab895280f4 Commit from translate.jitsi.org by user ibauersachs.: 265 of 265 strings translated (0 fuzzy). 2016-10-09 08:36:39 +00:00
hristoterezov
b9705b5eed Merge pull request #991 from jitsi/filmstripfix
Fixes desktop expansion on filmstirp shortcut hide.
2016-10-07 18:05:18 -05:00
Emil Ivov
224bbdf8a9 Fixes desktop expansion on filmstirp shortcut hide. 2016-10-07 17:27:32 -05:00
Lyubomir Marinov
b8af817ea3 Merge branch 'restyle-toggle-state' 2016-10-07 15:59:16 -05:00
Lyubomir Marinov
231cd49916 Remove duplication 2016-10-07 15:31:00 -05:00
Lyubomir Marinov
35c1a77845 Merge branch 'master' into restyle-toggle-state 2016-10-07 14:09:12 -05:00
yanas
125e894624 Rename functions, fix jquery element ref and indentetation 2016-10-07 13:55:27 -05:00
hristoterezov
53cb40be4c fix(chat): Issue with position of chat messages 2016-10-07 11:23:33 -05:00
yanas
7e26625324 Merge pull request #983 from kkrisstoff/bug/make-HD-label-a-circle
border-radius for HD
2016-10-06 16:52:51 -05:00
yanas
0e9835dde2 Restyles the toolbar button toggle state 2016-10-06 16:25:15 -05:00
Lyubomir Marinov
1f66abac4d Merge branch 'analytics' 2016-10-06 15:46:55 -05:00
hristoterezov
6e4a710df6 feat(analytics): Add analytics permanent properties and use new paramenters format 2016-10-06 15:28:16 -05:00
Lyubomir Marinov
3f0aa500f7 Merge branch 'external_api' 2016-10-06 12:57:30 -05:00
Kostiantyn Pashura
e868984116 border-radius for HD 2016-10-06 15:25:58 +03:00
hristoterezov
7f24d14832 refactor(conference.js) hangup functionality 2016-10-05 20:23:43 -05:00
hristoterezov
47d39ed5ca feat(iframe_api): Implement readyToClose event and hangup command 2016-10-05 16:33:09 -05:00
yanas
924bb3c7f7 Merge pull request #948 from m-voloshin/space-for-ptt
Spacebar is used to activate Push-To-Talk
2016-10-05 12:03:54 -05:00
yanas
3c8e704ace Merge pull request #973 from m-voloshin/remove-black-line
Removed black line from contact list and message list
2016-10-03 16:35:34 -05:00
yanas
f2d6ff3426 Merge pull request #974 from m-voloshin/feedback-icon-padding
Fix padding for feedback button
2016-10-03 15:15:11 -05:00
hristoterezov
480f0c703a Merge pull request #976 from jitsi/eslint
ESLint
2016-10-03 12:53:57 -05:00
Lyubomir Marinov
a2b076985a ESLint
Enable ESLint on jitsi-meet with the same configuration and the same
goals as in lib-jitsi-meet.
2016-10-03 11:12:27 -05:00
Maxim Voloshin
9babe4a44d Fix padding for feedback button 2016-10-03 15:47:45 +03:00
Maxim Voloshin
d2c2936efa Removed black line from contact list and message list 2016-10-03 15:24:55 +03:00
yanas
98bc16801c Merge pull request #967 from jitsi/analytics_feedback
feat(analytics): Implement sendFeedback method
2016-10-01 12:25:19 -05:00
hristoterezov
71790b07b7 feat(analytics): Implement sendFeedback method 2016-09-30 17:28:32 -05:00
yanas
4ffe013165 Merge pull request #965 from jitsi/raise-hand-update
Updates raised hand to overwrite dominant speaker.
2016-09-30 12:14:58 -05:00
damencho
6320ef1caa Updates raised hand to overwrite dominant speaker. 2016-09-30 11:47:43 -05:00
hristoterezov
d10158c9fb Merge pull request #964 from jitsi/webpack
Fix babel-preset-es2015's version
2016-09-30 11:20:26 -05:00
Lyubomir Marinov
92f1061db8 Fix babel-preset-es2015's version
The latest version of babel-preset-es2015 6.16.0 fails with 'Unsupported
preset format: undefined.' Use the previous one then.
2016-09-30 11:16:51 -05:00
Lyubomir Marinov
c8f18040f6 Merge branch 'master' into webpack 2016-09-30 11:16:22 -05:00
hristoterezov
17b57ea852 Merge pull request #957 from jitsi/webpack
Switch from Browserify to Webpack
2016-09-30 10:32:36 -05:00
Lyubomir Marinov
b2a70b263a Merge branch 'talk-muted' 2016-09-30 09:39:26 -05:00
Дамян Минков
b3f0620f5b Merge pull request #963 from m-voloshin/destroy-tooltips
Completely remove attributes to destroy tooltip properly
2016-09-30 09:28:26 -05:00
Lyubomir Marinov
c95a8e058c Merge branch 'master' into talk-muted 2016-09-30 08:57:28 -05:00
Lyubomir Marinov
ecf44498b8 Merge branch 'master' into webpack 2016-09-30 08:52:36 -05:00
Maxim Voloshin
2f92aa9645 Completely remove attributes to destroy tooltip properly 2016-09-30 14:06:57 +03:00
yanas
e894b0db43 Merge pull request #962 from jitsi/remove-tooltip
Remove tooltip update
2016-09-29 17:14:09 -05:00
damencho
da65bbaa2d Updates remove tooltip util method.
Destroy is just hiding current tooltip, we also need to remove other attributes to stop showing the tooltip.
2016-09-29 16:47:32 -05:00
ibauersachs
032509be15 Commit from translate.jitsi.org by user ibauersachs.: 265 of 265 strings translated (0 fuzzy). 2016-09-29 17:00:31 +00:00
Hristo Terezov
c6f81668de Remove an unnecessary exclude from Webpack 2016-09-29 11:31:28 -05:00
Lyubomir Marinov
43d0582b2f Don't use path.resolve 2016-09-29 11:31:28 -05:00
Lyubomir Marinov
818ddad2c3 Do not distribute unminimized artifacts
The build process is capable of bundling both minimized and unminimized
artifacts for lib-jitsi-meet, jitsi-meet and external_api. However,
there does not seem to be a good reason to (1) always wait for the
building of the two versions and (2) distributing the unminimized
artifacts.
2016-09-29 11:31:28 -05:00
Lyubomir Marinov
c8f79dbd2d Switch from Browserify to Webpack 2016-09-29 11:31:28 -05:00
Lyubomir Marinov
1ceb3f0129 Switch lib-jitsi-meet from Browserify to Webpack
Since the library lib-jitsi-meet does not publish its binaries, it is
always been necessary to produce the binaries i.e. lib-jitsi-meet.js and
lib-jitsi-meet.js as part of the npm install step. Which means that any
modifications to the devDependencies of lib-jitsi-meet's package.json
always have to be reflected in jitsi-meet's package.json. Because
Webpack replaced Browserify in lib-jitsi-meet, Webpack has to become a
devDependency of jitsi-meet.
2016-09-29 11:31:28 -05:00
yanas
fe7911b944 Merge pull request #959 from m-voloshin/keyboard-shortcuts-help
Removed duplicates from keyboard shortcuts
2016-09-29 10:42:27 -05:00
yanas
0dcf8add63 Merge pull request #961 from m-voloshin/username-editing
Allow user to edit initial username
2016-09-29 10:34:17 -05:00
Paweł Domas
ae2ea4f421 Merge pull request #954 from jitsi/handle-conference-left
Waits for conference left event before navigating away from the page.
2016-09-29 10:06:57 -05:00
Maxim Voloshin
664d7a4f67 Allow user to edit initial username 2016-09-29 17:40:26 +03:00
Maxim Voloshin
6e90b767ef Removed separate check for SPACE 2016-09-29 16:07:21 +03:00
Maxim Voloshin
268a2ea7ce Removed duplicates from keyboard shortcuts 2016-09-29 15:31:45 +03:00
yanas
854fef35cb Merge pull request #955 from jitsi/audio-levels-redesign
Audio levels redesign. PR Review done from @damencho and @emcho.
2016-09-29 00:48:29 -05:00
yanas
b58556b6c3 Fixes audio level algorithm. 2016-09-29 00:22:05 -05:00
hristoterezov
97aaa36f7d Merge pull request #942 from jitsi/enable-languages
Match enabled languages to available languages
2016-09-28 19:22:27 -05:00
damencho
07f111abbd Fixes hangup when callstats is disabled. 2016-09-28 17:27:55 -05:00
yanas
3bb877cc3a Audio levels redesign. 2016-09-28 16:41:13 -05:00
Любомир Маринов
17bcc9bfcc Merge pull request #956 from jitsi/revert-903-webpack
Revert "Switch from Browserify to Webpack"
2016-09-28 16:38:42 -05:00
hristoterezov
c7cd771de2 Revert "Switch from Browserify to Webpack" 2016-09-28 16:37:24 -05:00
hristoterezov
77e65f727f Merge pull request #903 from jitsi/webpack
Switch from Browserify to Webpack
2016-09-28 16:37:07 -05:00
damencho
d793cdc797 Waits for conference left event before navigating away from the page. 2016-09-28 16:05:51 -05:00
Дамян Минков
4ec266ef11 Merge pull request #953 from jitsi/log_server
feat(log): Logs server field from jwt token
2016-09-28 15:47:56 -05:00
hristoterezov
fcc9532bde feat(log): Logs server field from jwt token 2016-09-28 15:19:16 -05:00
Paweł Domas
b4a191e27a Merge pull request #946 from jitsi/fix-moderator-notifications
Fixes moderator notifications on moderator indicator disabled
2016-09-28 14:26:00 -05:00
Lyubomir Marinov
973d40a877 Don't use path.resolve 2016-09-28 14:15:02 -05:00
Lyubomir Marinov
ce3090b8fe Do not distribute unminimized artifacts
The build process is capable of bundling both minimized and unminimized
artifacts for lib-jitsi-meet, jitsi-meet and external_api. However,
there does not seem to be a good reason to (1) always wait for the
building of the two versions and (2) distributing the unminimized
artifacts.
2016-09-28 13:57:53 -05:00
Lyubomir Marinov
f6662745d1 Switch from Browserify to Webpack 2016-09-28 13:57:53 -05:00
Lyubomir Marinov
4289df1681 Switch lib-jitsi-meet from Browserify to Webpack
Since the library lib-jitsi-meet does not publish its binaries, it is
always been necessary to produce the binaries i.e. lib-jitsi-meet.js and
lib-jitsi-meet.js as part of the npm install step. Which means that any
modifications to the devDependencies of lib-jitsi-meet's package.json
always have to be reflected in jitsi-meet's package.json. Because
Webpack replaced Browserify in lib-jitsi-meet, Webpack has to become a
devDependency of jitsi-meet.
2016-09-28 13:57:53 -05:00
paweldomas
dad3c57fad fix(conference): react to local role change only when it changes
We initialise the UI for isModerator = false on startup, so we should
not react to the event unless it gets out of sync.
2016-09-28 13:41:02 -05:00
Lyubomir Marinov
8f4b94f732 Merge branch 'm-voloshin-tooltips-global-handler' 2016-09-28 13:10:51 -05:00
yanas
76f8ca2116 Merge pull request #947 from jitsi/not-allowed-error
Not allowed error
2016-09-28 12:40:53 -05:00
Paweł Domas
94e5cda02d Merge pull request #951 from jitsi/prosody-tokens-case-insensitive-room
Prosody tokens case insensitive room name
2016-09-28 12:36:28 -05:00
yanas
066b4f16a0 Merge pull request #949 from m-voloshin/videospace-layout-fix
Removed initial animation of the video thumbnail
2016-09-28 11:50:46 -05:00
damencho
f3381b31ed Updates tokens room name verification to be case insensitive.
Room names used inside prosody are all lower case, when verify with room name from token make sure we use the room name in lower case.
2016-09-28 11:49:50 -05:00
damencho
15f4288e4a Fixes some jshint errors. 2016-09-28 11:29:47 -05:00
Lyubomir Marinov
4569970bc4 Merge branch 'tooltips-global-handler' of https://github.com/m-voloshin/jitsi-meet into m-voloshin-tooltips-global-handler 2016-09-28 11:29:15 -05:00
Maxim Voloshin
b2e0b49556 Updated JSDocs for 'TOOLTIP_POSITIONS' constant 2016-09-28 18:09:09 +03:00
Lyubomir Marinov
03152d65ab Merge branch 'tooltips-global-handler' of https://github.com/m-voloshin/jitsi-meet into m-voloshin-tooltips-global-handler 2016-09-28 09:58:49 -05:00
Maxim Voloshin
96735d47c4 Attached JSDocs for 'TOOLTIP_POSITIONS' constant 2016-09-28 17:52:27 +03:00
Lyubomir Marinov
16266e3622 Merge branch 'tooltips-global-handler' of https://github.com/m-voloshin/jitsi-meet into m-voloshin-tooltips-global-handler 2016-09-28 09:27:58 -05:00
Maxim Voloshin
87ed7b7989 Redesigned "setTooltip" method 2016-09-28 17:22:03 +03:00
Lyubomir Marinov
fef95f7cf1 Merge branch 'tooltips-global-handler' of https://github.com/m-voloshin/jitsi-meet into m-voloshin-tooltips-global-handler 2016-09-28 07:38:32 -05:00
Maxim Voloshin
36d1f7d06f Removed initial animation of the video thumbnail 2016-09-28 15:08:15 +03:00
Maxim Voloshin
33078a868c Spacebar is used to activate Push-To-Talk 2016-09-28 13:03:47 +03:00
hristoterezov
2a8700bca3 Merge pull request #938 from jitsi/participant_conn_status
Adds participant connection status notifications
2016-09-27 17:54:22 -05:00
damencho
1e54111aad Adds authentication error page.
When we receive a conference failed event with reason not allowed we show that page.
2016-09-27 17:26:38 -05:00
damencho
57003be3a3 Renames the style from close to redirect page. 2016-09-27 16:49:23 -05:00
yanas
f10177a352 Fixes moderator notifications on moderator indicator disabled 2016-09-27 14:32:54 -05:00
Maxim Voloshin
939b87ffed Tooltiped elements are mardked with "data-tooltip" attribute 2016-09-27 19:49:49 +03:00
Emil Ivov
6ccc58a060 Merge pull request #945 from jitsi/feedback-improvements
Feedback window improvements.
2016-09-26 23:14:19 -05:00
yanas
08b2fbe30f Fixes feedback message and button active state 2016-09-26 22:43:20 -05:00
Emil Ivov
cbd15f45a4 Merge pull request #944 from jitsi/pin-hover-improvements
Pin hover improvements
2016-09-26 22:42:37 -05:00
yanas
37dcc6c994 Improves the pin and hover borders 2016-09-26 22:26:05 -05:00
yanas
6249ff89ff Feedback window improvements. 2016-09-26 21:15:24 -05:00
yanas
07441b092c Merge pull request #943 from m-voloshin/fix-cursor-for-icon
Default cursor for icons
2016-09-26 15:43:51 -05:00
yanas
1c8535a2d5 Improves the pin and hover borders 2016-09-26 15:40:56 -05:00
Maxim Voloshin
047a2369b3 Default cursor for icons 2016-09-26 22:46:39 +03:00
paweldomas
7585413e7d fix(VideoLayout): from avatar to video transition
When user reconnected and the avatar is displayed we need to perform
full large video update in order to transition correctly.
2016-09-26 14:40:00 -05:00
paweldomas
6e0ba1de33 ref(VideoLayout): rename 'videoConnectionMessage'
Renames 'videoConnectionMessage' to 'localConnectionMessage', because
it is displayed when we're having problems with our local connection
and a different one will be shown for the remote connectivity issues.
2016-09-26 14:40:00 -05:00
paweldomas
661ea2cf45 feat(VideoLayout): add remote connection problems UI
Grey filter will be applied to the remote video/avatar displayed on
"large" and a message indicating remote connectivity issues will be
shown on top of that.
2016-09-26 14:39:58 -05:00
ibauersachs
bcee2a207d Commit from translate.jitsi.org by user ibauersachs.: 265 of 265 strings translated (0 fuzzy). 2016-09-26 19:36:34 +00:00
Ingo Bauersachs
e94bf73cc3 Match enabled languages to available languages 2016-09-26 21:34:46 +02:00
Ingo Bauersachs
03e8331e4f Add polish and russian 2016-09-26 21:28:55 +02:00
ibauersachs
bbd5e55e5e Commit from translate.jitsi.org by user ibauersachs.: 263 of 263 strings translated (0 fuzzy). 2016-09-26 19:03:16 +00:00
Maxim Voloshin
212798ad19 Global handler for tooltips 2016-09-26 21:29:40 +03:00
yanas
bb0f6e0989 Remove unused variable. 2016-09-26 13:02:59 -05:00
paweldomas
42fd3097de feat(VideoContainer): add 'wasVideoRendered' flag
The 'wasVideoRendered' flag will tell whether or not we have any video
image rendered(even if stalled) on the large video element.
2016-09-26 13:01:35 -05:00
paweldomas
5952261e87 ref(LargeVideoManager): introduce 'setVideoConnectionMessage' 2016-09-26 13:01:35 -05:00
paweldomas
62d2e3e2a4 feat(conference.js): add 'getParticipantDisplayName' 2016-09-26 13:01:35 -05:00
paweldomas
5843c6c569 ref(LargeVideoManager): rename 'enableVideoProblemFilter' 2016-09-26 13:01:35 -05:00
paweldomas
352e784cad fix(VideoLayout): show video when the connection is back 2016-09-26 13:01:35 -05:00
paweldomas
b8937e0349 fix(LargeVideoManager): hide video when avatar is displayed 2016-09-26 13:01:35 -05:00
paweldomas
0aea799b50 doc(LargeVideoManager): fills missing JS doc 2016-09-26 13:01:35 -05:00
paweldomas
46766ec239 fix(RemoteVideo): avoid black thumbnail
When the user is having connectivity issues we use the image cached in
the video element to show the preview in greyscale. It looks like this
cached image gets invalided after prolonged periods of time the video
element being hidden(and it is hidden when the video is muted). So we
never show this image if the user gets muted during connectivity
disruption in order to avoid blackness.
2016-09-26 13:01:35 -05:00
paweldomas
66bbc4d9fd fix(RemoteVideo): change hasVideoStarted logic
We used to rely on 'currentTime' of the video element, but we execute
'updateView' from the 'onplay' callback and on fast machines it may
happen that the value is 0 even though the video has just started.
2016-09-26 13:01:35 -05:00
paweldomas
40f2c593a2 ref(SmallVideo): figure out what is to be displayed
At any point of time we display one of the three: video, avatar or
blackness. The purpose of this commit is to make that fact more clear
in the code.
2016-09-26 13:01:35 -05:00
paweldomas
30cb948dcf feat(SmallVideo): make thumbnail grey
The video or the avatar on a thumbnail will be displayed in greyscale
when the user is having connectivity issues.
2016-09-26 13:01:35 -05:00
paweldomas
fceb512a03 ref(SmallVideo): add 'isCurrentlyOnLargeVideo' 2016-09-26 13:01:35 -05:00
paweldomas
4722054c3e ref(SmallVideo): adds avatar selector 2016-09-26 13:01:34 -05:00
paweldomas
9d1364b6fb feat(RemoteVideo): show disconnected GSM bars for remotes 2016-09-26 13:01:34 -05:00
paweldomas
5daceaead7 feat(conference.js): add isParticipantConnectionActive 2016-09-26 13:01:34 -05:00
paweldomas
8a43699a89 feat(ConnectionIndicator): show disconnected GSM bars on local thumbnail 2016-09-26 13:01:34 -05:00
paweldomas
3ef5dd20ef ref(RemoteVideo): store JitsiParticipant instead of id 2016-09-26 13:01:34 -05:00
paweldomas
e9445866a5 ref(ConnectionIndicator.js): make CQ 'object' optional 2016-09-26 13:01:34 -05:00
paweldomas
cf931f8a9f ref(ConnectionIndicator.js) pass icon class as an argument 2016-09-26 13:01:34 -05:00
yanas
3140257b69 Remove unused function. 2016-09-26 12:55:18 -05:00
Дамян Минков
b3d6e5876e Merge pull request #922 from jitsi/fix_filter_not_applied
Fix notification about network issues not displayed when expected
2016-09-26 10:04:14 -05:00
Дамян Минков
c437f64f35 Merge pull request #933 from jitsi/fix-everyone-moderator
Fixes moderator related elements when everyone is moderator
2016-09-23 18:04:53 -05:00
yanas
af91fb50b2 Fixes moderator related elements when everyone is moderator 2016-09-23 17:42:29 -05:00
Emil Ivov
a35e194a2d Merge pull request #932 from jitsi/fix_jibri
fix(FilmStrip): Add check for thumbnails
2016-09-23 16:46:49 -05:00
hristoterezov
42d9d0393d fix(FilmStrip): Add check for thumbnails 2016-09-23 16:44:32 -05:00
jitsi-pootle
d319e837f5 New files added from translate.jitsi.org based on templates 2016-09-23 19:49:12 +00:00
yanas
a054a0d61d Merge pull request #919 from kkrisstoff/add/raise-hand-icon
rise-hand-ico: blured class added
2016-09-23 11:59:40 -05:00
yanas
8e75da8540 Merge pull request #926 from jitsi/lock-fixes
Changes the state of room locker if room was locked not by current user.
2016-09-23 11:51:42 -05:00
damencho
975b13f868 Fixes setting remote room lock state change. 2016-09-23 11:34:21 -05:00
yanas
75f80ae877 Update _close.scss 2016-09-23 11:26:48 -05:00
Kostiantyn Pashura
7c824d9da0 rise-hand-ico: blured class added 2016-09-23 15:56:16 +03:00
Gubin, Maksim
9aa7f80e82 hot fix api.executeCommand 2016-09-23 14:04:19 +03:00
hristoterezov
b772c151fc Merge pull request #925 from jitsi/invite-to-share-dialog
Invite to share dialog
2016-09-22 21:53:40 -05:00
yanas
d2e42c2a7d Update MessageHandler.js 2016-09-22 21:11:24 -05:00
yanas
b54f92b2ae Fixes the copy action. 2016-09-22 18:17:37 -05:00
yanas
5ef241ae66 Merge pull request #927 from jitsi/fix-feedback-resolve
Makes sure we always resolve(call the callback) in feedback dialog.
2016-09-22 17:47:17 -05:00
damencho
eb2e709749 Makes sure we always resolve(call the callback) in feedback dialog.
Call the callback even when clicking outside the dialog, or escaping to close it.
2016-09-22 16:55:08 -05:00
yanas
06247266ad Merge pull request #924 from jitsi/add-close-page
Adds close page
2016-09-22 16:20:14 -05:00
damencho
f9a5b62326 Changes the state of room locker if room was locked not by current user. 2016-09-22 16:10:17 -05:00
yanas
644faca306 Re-designs invite dialog as share link. 2016-09-22 15:50:09 -05:00
yanas
9cb0723f8d Remove duplicate styles. 2016-09-22 15:32:54 -05:00
yanas
48c99e796f Includes content to close html. 2016-09-22 15:32:54 -05:00
damencho
fcf7069b25 Adds close page.
When enabled after hanging up redirect to close page, if needed feedback will be displayed.
2016-09-22 15:32:54 -05:00
damencho
415619021f Moves handling of thank you dialog.
Moves handling of thank you dialog out of the Promise that handles the feedback and just before we redirect to welcome page.
2016-09-22 15:32:54 -05:00
yanas
88a45cf991 Fixes colors in dialogs. 2016-09-22 14:50:31 -05:00
yanas
7eb85fe7aa Merge pull request #923 from jitsi/fix_ringoverlay_sound
fix(ringoverlay): Path of the ogg file
2016-09-22 14:08:25 -05:00
hristoterezov
0e5fe88b5e fix(ringoverlay): Path of the ogg file 2016-09-22 13:50:10 -05:00
yanas
b754361268 Merge pull request #920 from jitsi/remove_prezi_leftovers
fix: remove Prezi leftovers
2016-09-22 12:45:20 -05:00
paweldomas
419950ca49 fix(VideoLayout): "connection interrupted" shown only on video
The message about having connectivity issues should be displayed only
on top of the video like the "video problems filter" is.
2016-09-22 12:43:23 -05:00
paweldomas
11953cbb60 feat(conference.js): add isConnectionInterrupted getter 2016-09-22 12:43:12 -05:00
paweldomas
ecfc05bcc8 fix(LargeVideoManager): enable video problems filter on VideoContainer
Only the VideoContainer is interested in showing the video problems
filter which is meant to be displayed when ICE is disconnected.
2016-09-22 12:43:03 -05:00
yanas
b0012b4d63 Merge pull request #921 from jitsi/contaclist-title-update
Always show number of participants badge in toolbar.
2016-09-22 12:40:39 -05:00
damencho
febaf49d07 Always show number of participants badge in toolbar.
Includes showing 1 when user is alone in the room.
2016-09-22 12:02:38 -05:00
paweldomas
e3f3287f14 fix: remove Prezi leftovers 2016-09-22 11:35:35 -05:00
Дамян Минков
fbd2879aa3 Merge pull request #918 from kkrisstoff/make-the-star-configurable
disable_star_indicator added
2016-09-22 10:19:16 -05:00
yanas
4db8faa526 Merge pull request #914 from jitsi/fix_toolbar_ringoverlay
fix(toolbar): Issue with toolbar is positioned under the ring overlay
2016-09-22 10:12:38 -05:00
Дамян Минков
586ea2ae0d Merge pull request #911 from jitsi/small_videolayout_refactoring
Small videolayout refactoring
2016-09-22 09:45:15 -05:00
paweldomas
e39648ce21 ref(LargeVideo): rename to LargeVideoManager
It is confusing when the name of the main class exported from the file
is not the same as the filename.
2016-09-22 08:57:14 -05:00
paweldomas
e0a05c5908 ref(LargeVideo): move VideoContainer to separate file
VideoContainer is a separate being which implements the LargeContainer
and it's confusing to have it in the same file. This was encouraging to
access private parts of the VideoContainer directly(not through
the interface).
2016-09-22 08:57:14 -05:00
paweldomas
2c01fde713 ref(SmallVideo): rename 'isMuted' to avoid confusion 2016-09-22 08:57:01 -05:00
Kostiantyn Pashura
82ebfd9945 disable_star_indicator added 2016-09-22 12:52:53 +03:00
yanas
92641c20f3 Merge pull request #916 from jitsi/contaclist-title-update
Moves the number in the code, not as a translation parameter.
2016-09-21 22:15:48 -05:00
yanas
f145d98a12 Merge pull request #915 from jitsi/update-tooltip-from-profile
Update tooltip from profile
2016-09-21 18:15:54 -05:00
yanas
a3d2c95d80 Merge pull request #913 from jitsi/adjust-feedback-question
Adjusts feedback dialog question.
2016-09-21 18:01:31 -05:00
yanas
a5a9936e25 Adjusts feedback text and takes into account comment 2016-09-21 18:00:21 -05:00
damencho
cfeb03740c Moves the number in the code, not as a translation parameter.
There is sometimes problems with cache and late loading of the translations, this commit avoids showing translation key in the contactlist title, by moving the parameter into the code.
2016-09-21 17:16:00 -05:00
damencho
4ab0fca4d7 Removes tooltip from profile avatar when not clickable. 2016-09-21 16:35:42 -05:00
damencho
df3b7e2dbc Adds utility method to remove tooltips. 2016-09-21 16:35:03 -05:00
hristoterezov
302b0cf776 fix(toolbar): Issue with toolbar is positioned under the ring overlay 2016-09-21 16:34:06 -05:00
yanas
e7cbacf9a2 Merge pull request #912 from jitsi/remove-download-logs-link
Remove download logs link
2016-09-21 16:18:18 -05:00
Любомир Маринов
f9817b12bf Merge pull request #910 from jitsi/fix_jitsi_track_error_import
fix(UI): Show the correct message on NO_DATA_FROM_SOURCE GUM errors
2016-09-21 15:57:32 -05:00
damencho
bbc7aedb48 Adds download logs method for debugging.
Adds a download logs method that can be called from console to take usefull messages for debugging.
console> APP.conference.saveLogs();
2016-09-21 15:46:10 -05:00
damencho
4fdc11c6fb Removes download logs references. 2016-09-21 15:45:08 -05:00
hristoterezov
e1cb75fe04 fix(UI): Show the correct message on NO_DATA_FROM_SOURCE GUM errors 2016-09-21 15:31:49 -05:00
yanas
0bf6d52eef Merge pull request #902 from jitsi/fix-authentication-failed-msg
Fixes message for authentication failed.
2016-09-20 12:47:53 -05:00
yanas
7453198472 Fixes message for authentication failed. 2016-09-20 12:08:44 -05:00
Дамян Минков
0c1120c1a8 Merge pull request #897 from jitsi/settings-css-adjustments
Some css and lang adjustments to settings and contact list.
2016-09-20 10:48:57 -05:00
yanas
efbc84d18b Merge pull request #898 from m-voloshin/tooltip-fix-layer
Adjustment for layer order
2016-09-20 10:45:57 -05:00
Дамян Минков
cdca1a46ef Merge pull request #901 from jitsi/remove-missing-method
Removes missing and unused method.
2016-09-20 10:20:23 -05:00
yanas
689f7dc8f3 Merge pull request #900 from jitsi/delete-css-ds_store
Delete css/.DS_Store
2016-09-20 10:17:35 -05:00
yanas
4ca9349de7 Removes missing and unused method. 2016-09-20 10:16:15 -05:00
Lyubomir Marinov
9d6253455a Delete css/.DS_Store 2016-09-20 10:12:56 -05:00
Maxim Voloshin
388f868165 Adjustment for layer order 2016-09-20 13:15:10 +03:00
yanas
aacb39a439 Some css adjustments to settings and contact list. 2016-09-20 01:14:00 -05:00
yanas
298338f076 Merge pull request #896 from jitsi/fix-feedback-dialog
Feedback dialog changes
2016-09-19 23:52:14 -05:00
yanas
2d2915967c Fixes focus in Feedback and makes animation configurable. 2016-09-19 23:25:03 -05:00
Kostiantyn Pashura
4572e1d344 feedback dialog changes 2016-09-19 22:27:41 -05:00
yanas
f8b200f32c Merge pull request #892 from m-voloshin/blue-badges
Blue badges
2016-09-19 22:27:10 -05:00
yanas
3d4addd9ef Fixes badge font and corrects file name. 2016-09-19 22:07:10 -05:00
yanas
2919a60403 Adds blue badges to contact list and chat. 2016-09-19 21:22:41 -05:00
Paweł Domas
a07858cc72 Merge pull request #891 from jitsi/video-thumbnail-toolbar-fixes
Video thumbnail toolbar fixes
2016-09-19 19:31:08 -05:00
yanas
d1d4674136 Fixes some jsdocs. 2016-09-19 18:04:55 -05:00
Paweł Domas
9b5d4b8ceb Merge pull request #856 from jitsi/implement_muted_ended_track_events
feat(UI): Add UI support for camera issue detection
2016-09-19 16:03:06 -05:00
hristoterezov
abe216a0bb feat(UI): Add UI support for camera issue detection 2016-09-19 14:49:50 -05:00
hristoterezov
84983c341e Merge pull request #844 from jitsi/device-selection-rework
Device selection rework
2016-09-19 13:56:21 -05:00
Paweł Domas
075423ee96 Merge pull request #895 from jitsi/fix-incorrect-json-file
Fix incorrect JSON file
2016-09-19 13:29:06 -05:00
Lyubomir Marinov
2ff77676e2 Fix incorrect JSON file
The extension of the file modules/UI/side_pannels/chat/smileys.json
suggests that the format of the file is JSON. However, it contains
JavaScript RegExp instances which do not represent valid JSON. Such
discrepancies between file extension and format cause failures in
certain tools such as Webpack. Convert the file (both extension and
format) into a valid ES2015 module.
2016-09-19 12:48:38 -05:00
yanas
2da3373e10 Merge pull request #890 from jitsi/updates-watermark-link
Updates handling links on watermarks.
2016-09-18 17:02:12 -05:00
yanas
1486eac752 Applies fixes to thumbnail video toolbar from m-voloshin 2016-09-18 16:58:34 -05:00
yanas
c5adecb6e1 Adds menu icon to font. 2016-09-18 16:42:33 -05:00
damencho
e4c4236386 Updates handling links on watermarks.
When link is missing disable clicking.
2016-09-16 15:17:34 -05:00
yanas
e5e7e043ee Merge pull request #889 from BeatC/tooltips-bg
Change color for tooltip
2016-09-16 12:54:15 -05:00
Ilya Daynatovich
f8d01b4312 Change color for tooltip 2016-09-16 19:05:23 +03:00
Дамян Минков
f0a898c674 Merge pull request #885 from jitsi/add-raise-hand-toggle
Adds raise hand toggle state.
2016-09-16 10:28:12 -05:00
yanas
8b7bdb4957 Changes the raise hand event name to fit better the action 2016-09-16 10:22:50 -05:00
yanas
bd46430434 Small color change 2016-09-16 10:22:50 -05:00
yanas
a1635ccc68 Adds javadoc 2016-09-16 10:22:50 -05:00
yanas
1853fa6fae Adds raise hand toggle state. 2016-09-16 10:22:50 -05:00
Дамян Минков
692f0792e1 Merge pull request #886 from jitsi/fix-some-tooltips
Fixes dominant speaker and raised hand tooltips
2016-09-16 10:18:23 -05:00
yanas
bc222c60e0 Fixes dominant speaker and raised hand tooltips 2016-09-16 00:37:29 -05:00
yanas
96bbf0419c Adds tooltips 2016-09-16 00:04:19 -05:00
yanas
531e3d2765 Merge pull request #884 from jitsi/updates-lock-room
Updates lock room
2016-09-15 22:24:58 -05:00
damencho
02165786f1 Handles case where somebody removed lock of the room while we attempt to join.
Receiving password required, marks the room as locked, but if we try to enter without password, mark it as unlocked till we receive a password required error or we successfully join.
2016-09-15 16:34:02 -05:00
damencho
a449223b40 Clears the password if user cancels password prompt.
Clears the password if user cancel attempt to enter password, as using one instance of locker for multiple attempts keeps the password.
2016-09-15 16:32:10 -05:00
yanas
12344ab486 Merge pull request #883 from jitsi/contactlist-displayname
Syncs contactlist display names with thumbnails.
2016-09-15 15:22:47 -05:00
yanas
b6e18d8a68 Merge pull request #882 from jitsi/fix-hide-toolbar
Fixes hiding toolbar.
2016-09-15 15:10:54 -05:00
damencho
1a0677cb59 Syncs contactlist display names with thumbnails.
Uses the same display names in the contact list as in the thumbnails, for local and remote.
2016-09-15 15:01:48 -05:00
damencho
c483587853 Fixes hiding toolbar.
Receiving messages docks the toolbar to be able to see number of unread messages. We need to undock it when we read the messages. We skip undocking if we are not in video mode (on large), cause stuff like youtube video share is docking/undocking the toolbar.
2016-09-15 14:02:56 -05:00
hristoterezov
9b25467080 Merge pull request #878 from jitsi/video-thumbnail-redesign
Video thumbnails redesign
2016-09-15 13:48:07 -05:00
yanas
f37fd15fca Merge pull request #876 from jitsi/ui-ringoverlay-stop
feat(ringoverlay): Stop ringing after 30s and change the message
2016-09-14 21:44:59 -05:00
yanas
5092f52716 Merge pull request #874 from jitsi/ui-fix-ringoverlay
feat(ringoverlay): Change the background when the avatar is displayed
2016-09-14 21:40:54 -05:00
yanas
0013745783 Video thumbnails redesign 2016-09-14 21:20:54 -05:00
hristoterezov
ad5fa13339 feat(ringoverlay): Stop ringing after 30s and change the message 2016-09-14 17:55:43 -05:00
yanas
e1fa5ecb34 Merge pull request #873 from jitsi/chat-updates
Chat updates
2016-09-14 17:08:34 -05:00
damencho
e1512e3776 Fixes focusing on write area or nickname input when chat is open. 2016-09-14 16:47:10 -05:00
hristoterezov
dab5252746 feat(ringoverlay): Change the background when the avatar is displayed 2016-09-14 16:26:17 -05:00
damencho
d8dd564b06 Fixes clearing message counter on opening the chat. 2016-09-14 15:22:36 -05:00
damencho
407b082780 Removes changing the message icon and flashing on new message. 2016-09-14 15:18:14 -05:00
damencho
a671093489 Introduces chat_container_id variable. 2016-09-14 15:13:15 -05:00
damencho
3ee61df319 Updates talk while muted indication after latest ui changes. 2016-09-14 13:26:28 -05:00
damencho
c43b1f54c7 Shows toolbar before showing talk while muted notification. 2016-09-14 13:26:28 -05:00
damencho
1a554828e1 Adds option to add custom timeout for hiding toolbar. 2016-09-14 13:26:28 -05:00
damencho
974a0334df Updates text for talk while muted. 2016-09-14 13:26:28 -05:00
damencho
e7e7c7d5a0 Handles talk while muted event. 2016-09-14 13:26:28 -05:00
Дамян Минков
29f0c0b311 Merge pull request #870 from jitsi/add-raised-hand-icon
Adds raise hand icon
2016-09-14 12:17:06 -05:00
yanas
955680018f Merge pull request #872 from jitsi/fix-hiding-toolbars
Fixes hiding toolbars.
2016-09-14 12:16:57 -05:00
damencho
686e85cd4f Fixes hiding toolbars.
Schedule new hide check if toolbar is hovered, overlay is shown or the sideBar container is visible (chat, contactlist , etc.).
2016-09-14 11:51:47 -05:00
hristoterezov
297d4e65fc style(gitignore): Add .sync-config.cson 2016-09-14 11:38:43 -05:00
yanas
0e94bf7e0b Merge pull request #871 from jitsi/fix-remote-video-thumb
Fixes parameters for VideoLayout.resizeThumbnails.
2016-09-14 11:00:14 -05:00
damencho
a5bc9625ef Fixes parameters for VideoLayout.resizeThumbnails. 2016-09-14 10:48:38 -05:00
yanas
cbde4f89b2 Adds raise hand icon 2016-09-14 09:00:59 -05:00
yanas
891c108191 Merges fix from m-voloshin for Firefox toolbar 2016-09-14 08:25:11 -05:00
yanas
764d767789 Update _variables.scss 2016-09-14 01:22:33 -05:00
yanas
7ded10cd8d Merge pull request #865 from jitsi/add-raise-hand-button
Adds a possibility to add raise hand as a button
2016-09-13 23:09:18 -05:00
yanas
3b05a16b32 Fix for button appearing in both toolbars 2016-09-13 22:10:13 -05:00
yanas
cf49c8c6ff Adds raise hand button to the side toolbar 2016-09-13 21:21:31 -05:00
yanas
99bf4bc44d Adds a possibility to add raise hand as a button 2016-09-13 21:21:31 -05:00
yanas
929639b06b Merge pull request #863 from jitsi/contact-list-update
Contact list update
2016-09-13 21:21:03 -05:00
damencho
4c72833f5a Adds an option and hide avatars in contact list. 2016-09-13 17:14:05 -05:00
damencho
e3eaac5bef Disables click toggler. 2016-09-13 17:12:10 -05:00
damencho
0683f94edb Skips storing devices (mic and camera) if there is no user selection.
Skips storing device ids in localstorage if the user hasn't selected a device to use, and keeps using system defaults. Removes calls to private library method for setting initial realDeviceIds, as this had been added to the library.
2016-09-07 16:48:57 -05:00
317 changed files with 19830 additions and 4909 deletions

6
.buckconfig Normal file
View File

@@ -0,0 +1,6 @@
[android]
target = Google Inc.:Google APIs:23
[maven_repositories]
central = https://repo1.maven.org/maven2

11
.eslintignore Normal file
View File

@@ -0,0 +1,11 @@
# The build artifacts of the jitsi-meet project.
build/*
# Third-party source code which we (1) do not want to modify or (2) try to
# modify as little as possible.
libs/*
# ESLint will by default ignore its own configuration file. However, there does
# not seem to be a reason why we will want to risk being inconsistent with our
# remaining JavaScript source code.
!.eslintrc.js

37
.eslintrc.js Normal file
View File

@@ -0,0 +1,37 @@
module.exports = {
'env': {
'browser': true,
'commonjs': true,
'es6': true
},
'extends': 'eslint:recommended',
'globals': {
// The globals that (1) are accessed but not defined within many of our
// files, (2) are certainly defined, and (3) we would like to use
// without explicitly specifying them (using a comment) inside of our
// files.
'__filename': false
},
'parserOptions': {
'ecmaFeatures': {
'experimentalObjectRestSpread': true
},
'sourceType': 'module'
},
'rules': {
'new-cap': [
'error',
{
'capIsNew': false // Behave like JSHint's newcap.
}
],
// While it is considered a best practice to avoid using methods on
// console in JavaScript that is designed to be executed in the browser
// and ESLint includes the rule among its set of recommended rules, (1)
// the general practice is to strip such calls before pushing to
// production and (2) we prefer to utilize console in lib-jitsi-meet
// (and jitsi-meet).
'no-console': 'off',
'semi': 'error'
}
};

51
.gitignore vendored
View File

@@ -1,7 +1,4 @@
node_modules
*.swp
.idea/
*.iml
.*.tmp
deploy-local.sh
libs/
@@ -9,3 +6,51 @@ all.css
*css.map
unsupported_browser.css
.remote-sync.json
.sync-config.cson
# The following are automatically generated by the react-native command line
# utility (either with the init or upgrade option which pull in the latest
# template files recommended by Facebook for React Native).
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IJ
#
*.iml
.idea
.gradle
local.properties
# node.js
#
node_modules/
npm-debug.log
# BUCK
#
buck-out/
\.buckd/
android/app/libs
android/keystores/debug.keystore

View File

@@ -1,4 +1,6 @@
node_modules
libs
debian
debian/
libs/
node_modules/
react/
analytics.js
webpack.config.babel.js

1
.watchmanconfig Normal file
View File

@@ -0,0 +1 @@
{}

12
404.html Normal file
View File

@@ -0,0 +1,12 @@
<html>
<head>
<link rel="stylesheet" href="css/all.css"/>
<!--#include virtual="title.html" -->
</head>
<body>
<div class="error_page">
<h2>404 Not Found</h2>
<p class="error_page__message">You can create new conversation <a href="/">here</a></p>
</div>
</body>
</html>

View File

@@ -1,20 +1,17 @@
NPM = npm
BROWSERIFY = ./node_modules/.bin/browserify
NODE_SASS = ./node_modules/.bin/node-sass
UGLIFYJS = ./node_modules/.bin/uglifyjs
EXORCIST = ./node_modules/.bin/exorcist
BUILD_DIR = build
CLEANCSS = ./node_modules/.bin/cleancss
STYLES_MAIN = css/main.scss
STYLES_UNSUPPORTED_BROWSER = css/unsupported_browser.scss
DEPLOY_DIR = libs
LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet/
NODE_SASS = ./node_modules/.bin/node-sass
NPM = npm
OUTPUT_DIR = .
STYLES_BUNDLE = css/all.bundle.css
STYLES_DESTINATION = css/all.css
DEPLOY_DIR = libs
BROWSERIFY_FLAGS = -d
OUTPUT_DIR = .
LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet/
IFRAME_API_DIR = ./modules/API/external
STYLES_MAIN = css/main.scss
STYLES_UNSUPPORTED_BROWSER = css/unsupported_browser.scss
WEBPACK = ./node_modules/.bin/webpack
all: update-deps compile compile-iframe-api uglify uglify-iframe-api deploy clean
all: update-deps compile deploy clean
# FIXME: there is a problem with node-sass not correctly installed (compiled)
# a quick fix to make sure it is installed on every update
@@ -23,13 +20,10 @@ update-deps:
$(NPM) update && $(NPM) install node-sass
compile:
$(BROWSERIFY) $(BROWSERIFY_FLAGS) -e app.js -s APP | $(EXORCIST) $(OUTPUT_DIR)/app.bundle.js.map > $(OUTPUT_DIR)/app.bundle.js
compile-iframe-api:
$(BROWSERIFY) $(BROWSERIFY_FLAGS) -e $(IFRAME_API_DIR)/external_api.js -s JitsiMeetExternalAPI | $(EXORCIST) $(OUTPUT_DIR)/external_api.js.map > $(OUTPUT_DIR)/external_api.js
$(WEBPACK) -p
clean:
rm -f $(OUTPUT_DIR)/app.bundle.* $(OUTPUT_DIR)/external_api.*
rm -fr $(BUILD_DIR)
deploy: deploy-init deploy-appbundle deploy-lib-jitsi-meet deploy-css deploy-local
@@ -37,20 +31,20 @@ deploy-init:
mkdir -p $(DEPLOY_DIR)
deploy-appbundle:
cp $(OUTPUT_DIR)/app.bundle.min.js $(OUTPUT_DIR)/app.bundle.min.map \
$(OUTPUT_DIR)/app.bundle.js $(OUTPUT_DIR)/app.bundle.js.map \
$(OUTPUT_DIR)/external_api.js.map $(OUTPUT_DIR)/external_api.js \
$(OUTPUT_DIR)/external_api.min.map $(OUTPUT_DIR)/external_api.min.js \
$(OUTPUT_DIR)/analytics.js \
$(DEPLOY_DIR)
cp \
$(BUILD_DIR)/app.bundle.min.js \
$(BUILD_DIR)/app.bundle.min.map \
$(BUILD_DIR)/external_api.min.js \
$(BUILD_DIR)/external_api.min.map \
$(OUTPUT_DIR)/analytics.js \
$(DEPLOY_DIR)
deploy-lib-jitsi-meet:
cp $(LIBJITSIMEET_DIR)/lib-jitsi-meet.min.js \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.min.map \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.js \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.js.map \
$(LIBJITSIMEET_DIR)/connection_optimization/external_connect.js \
$(DEPLOY_DIR)
cp \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.min.js \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.min.map \
$(LIBJITSIMEET_DIR)/connection_optimization/external_connect.js \
$(DEPLOY_DIR)
deploy-css:
$(NODE_SASS) css/unsupported_browser.scss css/unsupported_browser.css ; \
@@ -61,13 +55,6 @@ deploy-css:
deploy-local:
([ ! -x deploy-local.sh ] || ./deploy-local.sh)
uglify:
$(UGLIFYJS) -p relative $(OUTPUT_DIR)/app.bundle.js -o $(OUTPUT_DIR)/app.bundle.min.js --source-map $(OUTPUT_DIR)/app.bundle.min.map --in-source-map $(OUTPUT_DIR)/app.bundle.js.map
uglify-iframe-api:
$(UGLIFYJS) -p relative $(OUTPUT_DIR)/external_api.js -o $(OUTPUT_DIR)/external_api.min.js --source-map $(OUTPUT_DIR)/external_api.min.map --in-source-map $(OUTPUT_DIR)/external_api.js.map
source-package:
mkdir -p source_package/jitsi-meet/css && \
cp -r *.js *.html connection_optimization favicon.ico fonts images libs sounds LICENSE lang source_package/jitsi-meet && \

View File

@@ -1,5 +1,9 @@
/* global ga */
(function (ctx) {
function Analytics() {
/* eslint-disable */
/**
* Google Analytics
*/
@@ -8,16 +12,20 @@
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-319188-14', 'jit.si');
ga('send', 'pageview');
/* eslint-enable */
}
Analytics.prototype.sendEvent = function (action, data, label, browserName) {
Analytics.prototype.sendEvent = function (action, data) {
// empty label if missing value for it and add the value,
// the value should be integer or null
var value = Math.round(parseFloat(data));
var value = data.value;
value = value? Math.round(parseFloat(value)) : null;
var label = data.label || "";
ga('send', 'event', 'jit.si',
action + '.' + browserName, label ? label : "", value ? value : null);
action + '.' + data.browserName, label, value);
};
ctx.Analytics = Analytics;
}(window));
}(window));

66
android/app/BUCK Normal file
View File

@@ -0,0 +1,66 @@
import re
# To learn about Buck see [Docs](https://buckbuild.com/).
# To run your application with Buck:
# - install Buck
# - `npm start` - to start the packager
# - `cd android`
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
# - `buck install -r android/app` - compile, install and run application
#
lib_deps = []
for jarfile in glob(['libs/*.jar']):
name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile)
lib_deps.append(':' + name)
prebuilt_jar(
name = name,
binary_jar = jarfile,
)
for aarfile in glob(['libs/*.aar']):
name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile)
lib_deps.append(':' + name)
android_prebuilt_aar(
name = name,
aar = aarfile,
)
android_library(
name = 'all-libs',
exported_deps = lib_deps
)
android_library(
name = 'app-code',
srcs = glob([
'src/main/java/**/*.java',
]),
deps = [
':all-libs',
':build_config',
':res',
],
)
android_build_config(
name = 'build_config',
package = 'org.jitsi.jitsi_meet_react',
)
android_resource(
name = 'res',
res = 'src/main/res',
package = 'org.jitsi.jitsi_meet_react',
)
android_binary(
name = 'app',
package_type = 'debug',
manifest = 'src/main/AndroidManifest.xml',
keystore = '//android/keystores:debug',
deps = [
':app-code',
],
)

173
android/app/build.gradle Normal file
View File

@@ -0,0 +1,173 @@
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
import com.android.build.OutputFile
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
* and their defaults. If you decide to add a configuration block, make sure to add it before the
* `apply from: "../../node_modules/react-native/react.gradle"` line.
*
* project.ext.react = [
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
* // the entry file for bundle generation
* entryFile: "index.android.js",
*
* // whether to bundle JS and assets in debug mode
* bundleInDebug: false,
*
* // whether to bundle JS and assets in release mode
* bundleInRelease: true,
*
* // whether to bundle JS and assets in another build variant (if configured).
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
* // The configuration property can be in the following formats
* // 'bundleIn${productFlavor}${buildType}'
* // 'bundleIn${buildType}'
* // bundleInFreeDebug: true,
* // bundleInPaidRelease: true,
* // bundleInBeta: true,
*
* // the root of your project, i.e. where "package.json" lives
* root: "../../",
*
* // where to put the JS bundle asset in debug mode
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
*
* // where to put the JS bundle asset in release mode
* jsBundleDirRelease: "$buildDir/intermediates/assets/release",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in debug mode
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in release mode
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
*
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
* // date; if you have any other folders that you want to ignore for performance reasons (gradle
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
* // for example, you might want to remove it from here.
* inputExcludes: ["android/**", "ios/**"],
*
* // override which node gets called and with what additional arguments
* nodeExecutableAndArgs: ["node"]
*
* // supply additional arguments to the packager
* extraPackagerArgs: []
* ]
*/
apply from: '../../node_modules/react-native/react.gradle'
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = false
android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
defaultConfig {
applicationId 'org.jitsi.jitsi_meet_react'
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName '1.0'
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
packagingOptions {
// The project react-native does not provide 64-bit binaries at the
// time of this writing. Unfortunately, packaging any 64-bit
// binaries into the .apk will crash the app at runtime on 64-bit
// platforms.
exclude 'lib/x86_64/libjingle_peerconnection_so.so'
exclude 'lib/arm64-v8a/libjingle_peerconnection_so.so'
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include 'armeabi-v7a', 'x86'
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
def versionCodes = ['armeabi-v7a':1, 'x86':2]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
}
if (project.hasProperty('JITSI_SIGNING')
&& new File(project.property('JITSI_SIGNING')).exists()) {
apply from: project.property('JITSI_SIGNING');
}
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
compile project(':react-native-vector-icons')
compile project(':react-native-webrtc')
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.facebook.react:react-native:+'
compile('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') {
transitive = true
}
}
apply from: '../../node_modules/react-native-vector-icons/fonts.gradle'
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}

66
android/app/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,66 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Disabling obfuscation is useful if you collect stack traces from production crashes
# (unless you are using a system that supports de-obfuscate the stack traces).
-dontobfuscate
# React Native
# Keep our interfaces so they can be used by other ProGuard rules.
# See http://sourceforge.net/p/proguard/bugs/466/
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.proguard.annotations.DoNotStrip class *
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.proguard.annotations.DoNotStrip *;
@com.facebook.common.internal.DoNotStrip *;
}
-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
void set*(***);
*** get*();
}
-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * extends com.facebook.react.bridge.NativeModule { *; }
-keepclassmembers,includedescriptorclasses class * { native <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp <fields>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }
-dontwarn com.facebook.react.**
# okhttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
# okio
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**

View File

@@ -0,0 +1,50 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.jitsi.jitsi_meet_react"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- WebRTC -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="22" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".MainApplication"
android:theme="@style/AppTheme">
<activity
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:host="beta.meet.jit.si" android:scheme="https" />
<data android:host="chaos.hipchat.me" android:scheme="https" />
<data android:host="enso.me" android:scheme="https" />
<data android:host="meet.jit.si" android:scheme="https" />
</intent-filter>
</activity>
<activity
android:name="com.facebook.react.devsupport.DevSettingsActivity" />
<meta-data
android:name="io.fabric.ApiKey"
android:value="a8ae24a58302ba79da1d312138e941f6b86e3242" />
</application>
</manifest>

Binary file not shown.

View File

@@ -0,0 +1,56 @@
package org.jitsi.jitsi_meet_react;
import android.os.Bundle;
import com.crashlytics.android.Crashlytics;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import io.fabric.sdk.android.Fabric;
public class MainActivity extends ReactActivity {
/**
* {@inheritDoc}
*
* Overrides {@link ReactActivity#createRootActivityDelegate()} to customize
* the {@link ReactRootView} with a background color that is in accord with
* the JavaScript and iOS parts of the application and causes less perceived
* visual flicker than the default background color.
*/
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new ReactActivityDelegate(this, getMainComponentName()) {
/**
* {@inheritDoc}
*
* Overrides {@link ReactActivityDelegate#createRootView()} to
* customize the {@link ReactRootView} with a background color that
* is in accord with the JavaScript and iOS parts of the application
* and causes less perceived visual flicker than the default
* background color.
*/
@Override
protected ReactRootView createRootView() {
ReactRootView rootView = super.createRootView();
rootView.setBackgroundColor(0xFF111111);
return rootView;
}
};
}
/**
* Returns the name of the main component registered from JavaScript.
* This is used to schedule rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "App";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fabric.with(this, new Crashlytics());
}
}

View File

@@ -0,0 +1,39 @@
package org.jitsi.jitsi_meet_react;
import android.app.Application;
import android.util.Log;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.oney.WebRTCModule.WebRTCModulePackage;
import java.util.Arrays;
import java.util.List;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new VectorIconsPackage(),
new WebRTCModulePackage()
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -0,0 +1,3 @@
<resources>
<string name="app_name">Jitsi Meet</string>
</resources>

View File

@@ -0,0 +1,8 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
</resources>

24
android/build.gradle Normal file
View File

@@ -0,0 +1,24 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}

20
android/gradle.properties Normal file
View File

@@ -0,0 +1,20 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.useDeprecatedNdk=true

Binary file not shown.

View File

@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip

164
android/gradlew vendored Executable file
View File

@@ -0,0 +1,164 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

90
android/gradlew.bat vendored Normal file
View File

@@ -0,0 +1,90 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

8
android/keystores/BUCK Normal file
View File

@@ -0,0 +1,8 @@
keystore(
name = 'debug',
store = 'debug.keystore',
properties = 'debug.keystore.properties',
visibility = [
'PUBLIC',
],
)

View File

@@ -0,0 +1,4 @@
key.store=debug.keystore
key.alias=androiddebugkey
key.store.password=android
key.alias.password=android

7
android/settings.gradle Normal file
View File

@@ -0,0 +1,7 @@
rootProject.name = 'jitsi-meet-react'
include ':app'
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
include ':react-native-webrtc'
project(':react-native-webrtc').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webrtc/android')

36
app.js
View File

@@ -1,4 +1,4 @@
/* global $, JitsiMeetJS, config, getRoomName */
/* global $, config, getRoomName */
/* application specific logic */
import "babel-polyfill";
@@ -8,10 +8,14 @@ import "jquery-ui";
import "strophe";
import "strophe-disco";
import "strophe-caps";
import "tooltip";
import "popover";
import "jQuery-Impromptu";
import "autosize";
import 'aui';
import 'aui-experimental';
import 'aui-css';
import 'aui-experimental-css';
window.toastr = require("toastr");
import URLProcessor from "./modules/config/URLProcessor";
@@ -20,10 +24,12 @@ import RoomnameGenerator from './modules/util/RoomnameGenerator';
import UI from "./modules/UI/UI";
import settings from "./modules/settings/Settings";
import conference from './conference';
import ConferenceUrl from './modules/URL/ConferenceUrl';
import API from './modules/API/API';
import UIEvents from './service/UI/UIEvents';
import getTokenData from "./modules/TokenData/TokenData";
import translation from "./modules/translation/translation";
/**
* Tries to push history state with the following parameters:
@@ -43,6 +49,18 @@ function pushHistoryState(roomName, URL) {
return null;
}
/**
* Replaces current history state(replaces the URL displayed by the browser).
* @param {string} newUrl the URL string which is to be displayed by the browser
* to the user.
*/
function replaceHistoryState (newUrl) {
if (window.history
&& typeof window.history.replaceState === 'function') {
window.history.replaceState({}, document.title, newUrl);
}
}
/**
* Builds and returns the room name.
*/
@@ -78,12 +96,18 @@ const APP = {
UI,
settings,
conference,
translation,
/**
* After the APP has been initialized provides utility methods for dealing
* with the conference room URL(address).
* @type ConferenceUrl
*/
ConferenceUrl : null,
connection: null,
API,
init () {
this.keyboardshortcut =
require("./modules/keyboardshortcut/keyboardshortcut");
this.translation = require("./modules/translation/translation");
this.configFetch = require("./modules/config/HttpConfigFetch");
this.tokenData = getTokenData();
}
@@ -103,6 +127,10 @@ function setTokenData() {
function init() {
setTokenData();
// Initialize the conference URL handler
APP.ConferenceUrl = new ConferenceUrl(window.location);
// Clean up the URL displayed by the browser
replaceHistoryState(APP.ConferenceUrl.getInviteUrl());
var isUIReady = APP.UI.start();
if (isUIReady) {
APP.conference.init({roomName: buildRoomName()}).then(function () {

9
authError.html Normal file
View File

@@ -0,0 +1,9 @@
<html>
<head>
<link rel="stylesheet" href="css/all.css"/>
<!--#include virtual="title.html" -->
</head>
<body>
<div class="redirectPageMessage">Sorry! You are not allowed to be here :(</div>
</body>
</html>

31
close.html Normal file
View File

@@ -0,0 +1,31 @@
<html>
<head>
<link rel="stylesheet" href="css/all.css"/>
<!--#include virtual="title.html" -->
<script><!--#include virtual="/interface_config.js" --></script>
<script>function translateStr(id, msg) {
var div = document.getElementById(id);
div.innerHTML = msg;
}
function translate() {
translateStr('hintMessage',
'You can use video calls with '
+ interfaceConfig.APP_NAME +' for your business');
}
</script>
</head>
<body onload="translate();">
<div class="redirectPageMessage">
<div class="thanks-msg">
<p id="thanksMessage">Thank you for your feedback!</p>
</div>
<div class="hint-msg">
<p>
<span>Did you know?</span>
<span class="hint-msg__holder" id="hintMessage"></span>
</p>
<div class="happy-software"></div>
</div>
</div>
</body>
</html>

33
close2.html Normal file
View File

@@ -0,0 +1,33 @@
<html>
<head>
<link rel="stylesheet" href="css/all.css"/>
<!--#include virtual="title.html" -->
<script><!--#include virtual="/interface_config.js" --></script>
<script>function translateStr(id, msg) {
var div = document.getElementById(id);
div.innerHTML = msg;
}
function translate() {
translateStr('thanksMessage',
'Thank you for using ' + interfaceConfig.APP_NAME);
translateStr('hintMessage',
'You can use video calls with '
+ interfaceConfig.APP_NAME +' for your business');
}
</script>
</head>
<body onload="translate();">
<div class="redirectPageMessage">
<div class="thanks-msg">
<p id="thanksMessage"></p>
</div>
<div class="hint-msg">
<p>
<span>Did you know?</span>
<span class="hint-msg__holder" id="hintMessage"></span>
</p>
<div class="happy-software"></div>
</div>
</div>
</body>
</html>

View File

@@ -1,22 +1,17 @@
/* global $, APP, JitsiMeetJS, config, interfaceConfig */
import {openConnection} from './connection';
//FIXME:
import createRoomLocker from './modules/UI/authentication/RoomLocker';
//FIXME:
import Invite from './modules/UI/invite/Invite';
import ContactList from './modules/UI/side_pannels/contactlist/ContactList';
import AuthHandler from './modules/UI/authentication/AuthHandler';
import ConnectionQuality from './modules/connectionquality/connectionquality';
import Recorder from './modules/recorder/Recorder';
import CQEvents from './service/connectionquality/CQEvents';
import UIEvents from './service/UI/UIEvents';
import mediaDeviceHelper from './modules/devices/mediaDeviceHelper';
import {reportError} from './modules/util/helpers';
import UIErrors from './modules/UI/UIErrors';
import UIEvents from './service/UI/UIEvents';
import UIUtil from './modules/UI/util/UIUtil';
const ConnectionEvents = JitsiMeetJS.events.connection;
const ConnectionErrors = JitsiMeetJS.errors.connection;
@@ -27,25 +22,21 @@ const ConferenceErrors = JitsiMeetJS.errors.conference;
const TrackEvents = JitsiMeetJS.events.track;
const TrackErrors = JitsiMeetJS.errors.track;
let room, connection, localAudio, localVideo, roomLocker;
const ConnectionQualityEvents = JitsiMeetJS.events.connectionQuality;
/**
* Indicates whether the connection is interrupted or not.
*/
let connectionIsInterrupted = false;
let room, connection, localAudio, localVideo;
/**
* Indicates whether extension external installation is in progress or not.
*/
let DSExternalInstallationInProgress = false;
import {VIDEO_CONTAINER_TYPE} from "./modules/UI/videolayout/LargeVideo";
import {VIDEO_CONTAINER_TYPE} from "./modules/UI/videolayout/VideoContainer";
/**
* Known custom conference commands.
*/
const commands = {
CONNECTION_QUALITY: "stats",
EMAIL: "email",
AVATAR_URL: "avatar-url",
AVATAR_ID: "avatar-id",
@@ -151,29 +142,24 @@ function getDisplayName (id) {
/**
* Mute or unmute local audio stream if it exists.
* @param {boolean} muted if audio stream should be muted or unmuted.
* @param {boolean} indicates if this local audio mute was a result of user
* interaction
*
* @param {boolean} muted - if audio stream should be muted or unmuted.
* @param {boolean} userInteraction - indicates if this local audio mute was a
* result of user interaction
*/
function muteLocalAudio (muted, userInteraction) {
if (!localAudio) {
function muteLocalAudio (muted) {
muteLocalMedia(localAudio, muted, 'Audio');
}
function muteLocalMedia(localMedia, muted, localMediaTypeString) {
if (!localMedia) {
return;
}
if (muted) {
localAudio.mute().then(function(value) {},
function(value) {
console.warn('Audio Mute was rejected:', value);
}
);
} else {
localAudio.unmute().then(function(value) {},
function(value) {
console.warn('Audio unmute was rejected:', value);
}
);
}
const method = muted ? 'mute' : 'unmute';
localMedia[method]().catch(reason => {
console.warn(`${localMediaTypeString} ${method} was rejected:`, reason);
});
}
/**
@@ -181,85 +167,45 @@ function muteLocalAudio (muted, userInteraction) {
* @param {boolean} muted if video stream should be muted or unmuted.
*/
function muteLocalVideo (muted) {
if (!localVideo) {
return;
}
if (muted) {
localVideo.mute().then(function(value) {},
function(value) {
console.warn('Video mute was rejected:', value);
}
);
} else {
localVideo.unmute().then(function(value) {},
function(value) {
console.warn('Video unmute was rejected:', value);
}
);
}
muteLocalMedia(localVideo, muted, 'Video');
}
/**
* Check if the welcome page is enabled and redirects to it.
* If requested show a thank you dialog before that.
* If we have a close page enabled, redirect to it without
* showing any other dialog.
*
* @param {object} options used to decide which particular close page to show
* or if close page is disabled, whether we should show the thankyou dialog
* @param {boolean} options.thankYouDialogVisible - whether we should
* show thank you dialog
* @param {boolean} options.feedbackSubmitted - whether feedback was submitted
*/
function maybeRedirectToWelcomePage() {
if (!config.enableWelcomePage) {
function maybeRedirectToWelcomePage(options) {
// if close page is enabled redirect to it, without further action
if (config.enableClosePage) {
if (options.feedbackSubmitted)
window.location.pathname = "close.html";
else
window.location.pathname = "close2.html";
return;
}
// redirect to welcome page
setTimeout(() => {
APP.settings.setWelcomePageEnabled(true);
window.location.pathname = "/";
}, 3000);
}
/**
* Executes connection.disconnect and shows the feedback dialog
* @param {boolean} [requestFeedback=false] if user feedback should be requested
* @returns Promise.
*/
function disconnectAndShowFeedback(requestFeedback) {
APP.UI.hideRingOverLay();
connection.disconnect();
APP.API.notifyConferenceLeft(APP.conference.roomName);
if (requestFeedback) {
return APP.UI.requestFeedback();
} else {
return Promise.resolve();
// else: show thankYou dialog only if there is no feedback
if (options.thankYouDialogVisible)
APP.UI.messageHandler.openMessageDialog(
null, "dialog.thankYou", {appName:interfaceConfig.APP_NAME});
// if Welcome page is enabled redirect to welcome page after 3 sec.
if (config.enableWelcomePage) {
setTimeout(() => {
APP.settings.setWelcomePageEnabled(true);
window.location.pathname = "/";
}, 3000);
}
}
/**
* Disconnect from the conference and optionally request user feedback.
* @param {boolean} [requestFeedback=false] if user feedback should be requested
*/
function hangup (requestFeedback = false) {
const errCallback = (f, err) => {
// If we want to break out the chain in our error handler, it needs
// to return a rejected promise. In the case of feedback request
// in progress it's important to not redirect to the welcome page
// (see below maybeRedirectToWelcomePage call).
if (err === UIErrors.FEEDBACK_REQUEST_IN_PROGRESS) {
return Promise.reject('Feedback request in progress.');
}
else {
console.error('Error occurred during hanging up: ', err);
return Promise.resolve();
}
};
const disconnect = disconnectAndShowFeedback.bind(null, requestFeedback);
APP.conference._room.leave()
.then(disconnect)
.catch(errCallback.bind(null, disconnect))
.then(maybeRedirectToWelcomePage)
.catch(function(err){
console.log(err);
});
}
/**
* Create local tracks of specified types.
* @param {Object} options
@@ -293,8 +239,13 @@ function createLocalTracks (options, checkForPermissionPrompt) {
firefox_fake_device: config.firefox_fake_device,
desktopSharingExtensionExternalInstallation:
options.desktopSharingExtensionExternalInstallation
}, checkForPermissionPrompt)
.catch(function (err) {
}, checkForPermissionPrompt).then( (tracks) => {
tracks.forEach((track) => {
track.on(TrackEvents.NO_DATA_FROM_SOURCE,
APP.UI.showTrackNotWorkingDialog.bind(null, track));
});
return tracks;
}).catch(function (err) {
console.error(
'failed to create local tracks', options.devices, err);
return Promise.reject(err);
@@ -345,7 +296,7 @@ class ConferenceConnector {
room.on(ConferenceEvents.CONFERENCE_ERROR,
this._onConferenceError.bind(this));
}
_handleConferenceFailed(err, msg) {
_handleConferenceFailed(err) {
this._unsubscribe();
this._reject(err);
}
@@ -355,10 +306,7 @@ class ConferenceConnector {
switch (err) {
// room is locked by the password
case ConferenceErrors.PASSWORD_REQUIRED:
APP.UI.markRoomLocked(true);
roomLocker.requirePassword().then(function () {
room.join(roomLocker.password);
});
APP.UI.emitEvent(UIEvents.PASSWORD_REQUIRED);
break;
case ConferenceErrors.CONNECTION_ERROR:
@@ -368,8 +316,11 @@ class ConferenceConnector {
}
break;
case ConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE:
APP.UI.notifyBridgeDown();
case ConferenceErrors.NOT_ALLOWED_ERROR:
{
// let's show some auth not allowed page
window.location.pathname = "authError.html";
}
break;
// not enough rights to create conference
@@ -380,8 +331,7 @@ class ConferenceConnector {
}, 5000);
// notify user that auth is required
AuthHandler.requireAuth(room, roomLocker.password);
AuthHandler.requireAuth(room, this.invite.getRoomLocker().password);
break;
case ConferenceErrors.RESERVATION_ERROR:
@@ -407,6 +357,10 @@ class ConferenceConnector {
}
break;
// FIXME FOCUS_DISCONNECTED is confusing event name.
// What really happens there is that the library is not ready yet,
// because Jicofo is not available, but it is going to give
// it another try.
case ConferenceErrors.FOCUS_DISCONNECTED:
{
let [focus, retrySec] = params;
@@ -415,8 +369,17 @@ class ConferenceConnector {
break;
case ConferenceErrors.FOCUS_LEFT:
case ConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE:
// Log the page reload event
// FIXME (CallStats - issue) this event will not make it to
// the CallStats, because the log queue is not flushed, before
// "fabric terminated" is sent to the backed
APP.conference.logEvent('page.reload');
// FIXME the conference should be stopped by the library and not by
// the app. Both the errors above are unrecoverable from the library
// perspective.
room.leave().then(() => connection.disconnect());
APP.UI.notifyFocusLeft();
APP.UI.showPageReloadOverlay();
break;
case ConferenceErrors.CONFERENCE_MAX_USERS:
@@ -462,6 +425,37 @@ class ConferenceConnector {
}
}
/**
* Disconnects the connection.
* @returns resolved Promise. We need this in order to make the Promise.all
* call in hangup() to resolve when all operations are finished.
*/
function disconnect() {
connection.disconnect();
APP.API.notifyConferenceLeft(APP.conference.roomName);
return Promise.resolve();
}
/**
* Set permanent ptoperties to analytics.
* NOTE: Has to be used after JitsiMeetJS.init. otherwise analytics will be
* null.
*/
function setAnalyticsPermanentProperties() {
let permanentProperties = {
userAgent: navigator.userAgent,
roomName: APP.conference.roomName
};
let {server, group} = APP.tokenData;
if(server) {
permanentProperties.server = server;
}
if(group) {
permanentProperties.group = group;
}
JitsiMeetJS.analytics.addPermanentProperties(permanentProperties);
}
export default {
isModerator: false,
audioMuted: false,
@@ -509,22 +503,28 @@ export default {
}
return JitsiMeetJS.init(config)
.then(() => createInitialLocalTracksAndConnect(options.roomName))
.then(([tracks, con]) => {
.then(() => {
setAnalyticsPermanentProperties();
return createInitialLocalTracksAndConnect(options.roomName);
}).then(([tracks, con]) => {
console.log('initialized with %s local tracks', tracks.length);
APP.connection = connection = con;
this._bindConnectionFailedHandler(con);
this._createRoom(tracks);
this.isDesktopSharingEnabled =
JitsiMeetJS.isDesktopSharingEnabled();
if (UIUtil.isButtonEnabled('contacts'))
APP.UI.ContactList = new ContactList(room);
// if user didn't give access to mic or camera or doesn't have
// them at all, we disable corresponding toolbar buttons
if (!tracks.find((t) => t.isAudioTrack())) {
APP.UI.disableMicrophoneButton();
APP.UI.setMicrophoneButtonEnabled(false);
}
if (!tracks.find((t) => t.isVideoTrack())) {
APP.UI.disableCameraButton();
APP.UI.setCameraButtonEnabled(false);
}
this._initDeviceList();
@@ -547,6 +547,28 @@ export default {
isLocalId (id) {
return this.getMyUserId() === id;
},
/**
* Binds a handler that will handle the case when the connection is dropped
* in the middle of the conference.
* @param {JitsiConnection} connection the connection to which the handler
* will be bound to.
* @private
*/
_bindConnectionFailedHandler (connection) {
const handler = function (error, errMsg) {
if (ConnectionErrors.OTHER_ERROR === error) {
// - item-not-found
// - connection dropped(closed by Strophe unexpectedly
// possible due too many transport errors)
console.error("XMPP connection error: " + errMsg);
APP.UI.showPageReloadOverlay();
connection.removeEventListener(
ConnectionEvents.CONNECTION_FAILED, handler);
}
};
connection.addEventListener(
ConnectionEvents.CONNECTION_FAILED, handler);
},
/**
* Simulates toolbar button click for audio mute. Used by shortcuts and API.
* @param mute true for mute and false for unmute.
@@ -648,6 +670,61 @@ export default {
return this._room
&& this._room.getConnectionState();
},
/**
* Checks whether or not our connection is currently in interrupted and
* reconnect attempts are in progress.
*
* @returns {boolean} true if the connection is in interrupted state or
* false otherwise.
*/
isConnectionInterrupted () {
return this._room.isConnectionInterrupted();
},
/**
* Finds JitsiParticipant for given id.
*
* @param {string} id participant's identifier(MUC nickname).
*
* @returns {JitsiParticipant|null} participant instance for given id or
* null if not found.
*/
getParticipantById (id) {
return room ? room.getParticipantById(id) : null;
},
/**
* Checks whether the user identified by given id is currently connected.
*
* @param {string} id participant's identifier(MUC nickname)
*
* @returns {boolean|null} true if participant's connection is ok or false
* if the user is having connectivity issues.
*/
isParticipantConnectionActive (id) {
let participant = this.getParticipantById(id);
return participant ? participant.isConnectionActive() : null;
},
/**
* Gets the display name foe the <tt>JitsiParticipant</tt> identified by
* the given <tt>id</tt>.
*
* @param id {string} the participant's id(MUC nickname/JVB endpoint id)
*
* @return {string} the participant's display name or the default string if
* absent.
*/
getParticipantDisplayName (id) {
let displayName = getDisplayName(id);
if (displayName) {
return displayName;
} else {
if (APP.conference.isLocalId(id)) {
return APP.translation.generateTranslationHTML(
interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME);
} else {
return interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME;
}
}
},
getMyUserId () {
return this._room
&& this._room.myUserId();
@@ -690,7 +767,7 @@ export default {
* Returns the stats.
*/
getStats() {
return ConnectionQuality.getStats();
return room.connectionQuality.getStats();
},
// end used by torture
@@ -698,6 +775,30 @@ export default {
return room.getLogs();
},
/**
* Download logs, a function that can be called from console while
* debugging.
* @param filename (optional) specify target filename
*/
saveLogs (filename = 'meetlog.json') {
// this can be called from console and will not have reference to this
// that's why we reference the global var
let logs = APP.conference.getLogs();
let data = encodeURIComponent(JSON.stringify(logs, null, ' '));
let elem = document.createElement('a');
elem.download = filename;
elem.href = 'data:application/json;charset=utf-8,\n' + data;
elem.dataset.downloadurl
= ['text/json', elem.download, elem.href].join(':');
elem.dispatchEvent(new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: false
}));
},
/**
* Exposes a Command(s) API on this instance. It is necessitated by (1) the
* desire to keep room private to this instance and (2) the need of other
@@ -750,7 +851,7 @@ export default {
room = connection.initJitsiConference(APP.conference.roomName,
this._getConferenceOptions());
this._setLocalAudioVideoStreams(localTracks);
roomLocker = createRoomLocker(room);
this.invite = new Invite(room);
this._room = room; // FIXME do not use this
let email = APP.settings.getEmail();
@@ -828,7 +929,8 @@ export default {
APP.UI.addLocalStream(stream);
stream.videoType === 'camera' && APP.UI.enableCameraButton();
stream.videoType === 'camera'
&& APP.UI.setCameraButtonEnabled(true);
} else {
this.videoMuted = false;
this.isSharingScreen = false;
@@ -857,8 +959,6 @@ export default {
return promise.then(function () {
if (stream) {
stream.on(TrackEvents.TRACK_AUDIO_NOT_WORKING,
APP.UI.showAudioNotWorkingDialog);
return room.addTrack(stream);
}
}).then(() => {
@@ -870,7 +970,7 @@ export default {
this.audioMuted = false;
}
APP.UI.enableMicrophoneButton();
APP.UI.setMicrophoneButtonEnabled(true);
APP.UI.setAudioMuted(this.getMyUserId(), this.audioMuted);
});
},
@@ -963,21 +1063,20 @@ export default {
// TrackErrors.GENERAL
// and any other
let dialogTxt;
let dialogTitle;
let dialogTitleKey;
if (err.name === TrackErrors.PERMISSION_DENIED) {
dialogTxt = APP.translation.generateTranslationHTML(
"dialog.screenSharingPermissionDeniedError");
dialogTitle = APP.translation.generateTranslationHTML(
"dialog.error");
dialogTitleKey = "dialog.error";
} else {
dialogTxt = APP.translation.generateTranslationHTML(
"dialog.failtoinstall");
dialogTitle = APP.translation.generateTranslationHTML(
"dialog.permissionDenied");
dialogTitleKey = "dialog.permissionDenied";
}
APP.UI.messageHandler.openDialog(dialogTitle, dialogTxt, false);
APP.UI.messageHandler.openDialog(
dialogTitleKey, dialogTxt, false);
});
} else {
createLocalTracks({ devices: ['video'] }).then(
@@ -1002,7 +1101,6 @@ export default {
room.on(ConferenceEvents.CONFERENCE_JOINED, () => {
APP.UI.mucJoined();
APP.API.notifyConferenceJoined(APP.conference.roomName);
connectionIsInterrupted = false;
APP.UI.markVideoInterrupted(false);
});
@@ -1013,14 +1111,13 @@ export default {
}
);
room.on(ConferenceEvents.USER_JOINED, (id, user) => {
if (user.isHidden())
return;
console.log('USER %s connnected', id, user);
APP.API.notifyUserJoined(id);
APP.UI.addUser(id, user.getDisplayName());
APP.UI.addUser(user);
// check the roles for the new user and reflect them
APP.UI.updateUserRole(user);
@@ -1036,8 +1133,10 @@ export default {
room.on(ConferenceEvents.USER_ROLE_CHANGED, (id, role) => {
if (this.isLocalId(id)) {
console.info(`My role changed, new role: ${role}`);
this.isModerator = room.isModerator();
APP.UI.updateLocalRole(room.isModerator());
if (this.isModerator !== room.isModerator()) {
this.isModerator = room.isModerator();
APP.UI.updateLocalRole(room.isModerator());
}
} else {
let user = room.getParticipantById(id);
if (user) {
@@ -1097,6 +1196,12 @@ export default {
APP.UI.setAudioLevel(id, lvl);
});
room.on(ConferenceEvents.TALK_WHILE_MUTED, () => {
APP.UI.showToolbar(6000);
UIUtil.animateShowElement($("#talkWhileMutedPopup"), true, 5000);
});
/*
room.on(ConferenceEvents.IN_LAST_N_CHANGED, (inLastN) => {
//FIXME
if (config.muteLocalVideoIfNotInLastN) {
@@ -1105,10 +1210,16 @@ export default {
// APP.UI.markVideoMuted(true/false);
}
});
*/
room.on(
ConferenceEvents.LAST_N_ENDPOINTS_CHANGED, (ids, enteringIds) => {
APP.UI.handleLastNEndpoints(ids, enteringIds);
});
room.on(
ConferenceEvents.PARTICIPANT_CONN_STATUS_CHANGED,
(id, isActive) => {
APP.UI.participantConnectionStatusChanged(id, isActive);
});
room.on(ConferenceEvents.DOMINANT_SPEAKER_CHANGED, (id) => {
if (this.isLocalId(id)) {
this.isDominantSpeaker = true;
@@ -1138,12 +1249,11 @@ export default {
}
room.on(ConferenceEvents.CONNECTION_INTERRUPTED, () => {
connectionIsInterrupted = true;
ConnectionQuality.updateLocalConnectionQuality(0);
APP.UI.showLocalConnectionInterrupted(true);
});
room.on(ConferenceEvents.CONNECTION_RESTORED, () => {
connectionIsInterrupted = false;
APP.UI.showLocalConnectionInterrupted(false);
});
room.on(ConferenceEvents.DISPLAY_NAME_CHANGED, (id, displayName) => {
@@ -1163,16 +1273,6 @@ export default {
APP.UI.updateRecordingState(status);
});
room.on(ConferenceEvents.LOCK_STATE_CHANGED, (state, error) => {
console.log("Received channel password lock change: ", state,
error);
APP.UI.markRoomLocked(state);
});
room.on(ConferenceEvents.USER_STATUS_CHANGED, function (id, status) {
APP.UI.updateUserStatus(id, status);
});
room.on(ConferenceEvents.KICKED, () => {
APP.UI.hideStats();
APP.UI.notifyKicked();
@@ -1194,19 +1294,6 @@ export default {
"resizable,scrollbars=yes,status=1");
});
APP.UI.addListener(UIEvents.ROOM_LOCK_CLICKED, () => {
if (room.isModerator()) {
let promise = roomLocker.isLocked
? roomLocker.askToUnlock()
: roomLocker.askToLock();
promise.then(() => {
APP.UI.markRoomLocked(roomLocker.isLocked);
});
} else {
roomLocker.notifyModeratorRequired();
}
});
APP.UI.addListener(UIEvents.AUDIO_MUTED, muteLocalAudio);
APP.UI.addListener(UIEvents.VIDEO_MUTED, muteLocalVideo);
@@ -1217,42 +1304,16 @@ export default {
});
}
room.on(ConferenceEvents.CONNECTION_STATS, function (stats) {
ConnectionQuality.updateLocalStats(stats, connectionIsInterrupted);
room.on(ConnectionQualityEvents.LOCAL_STATS_UPDATED,
(stats) => {
APP.UI.updateLocalStats(stats.connectionQuality, stats);
});
ConnectionQuality.addListener(CQEvents.LOCALSTATS_UPDATED,
(percent, stats) => {
APP.UI.updateLocalStats(percent, stats);
// Send only the data that remote participants care about.
let data = {
bitrate: stats.bitrate,
packetLoss: stats.packetLoss};
try {
room.broadcastEndpointMessage({
type: this.commands.defaults.CONNECTION_QUALITY,
values: data });
} catch (e) {
reportError(e);
}
});
room.on(ConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,
(participant, payload) => {
switch(payload.type) {
case this.commands.defaults.CONNECTION_QUALITY:
ConnectionQuality.updateRemoteStats(participant.getId(),
payload.values);
break;
default:
console.warn("Unknown datachannel message", payload);
}
});
ConnectionQuality.addListener(CQEvents.REMOTESTATS_UPDATED,
(id, percent, stats) => {
APP.UI.updateRemoteStats(id, percent, stats);
});
room.on(ConnectionQualityEvents.REMOTE_STATS_UPDATED,
(id, stats) => {
APP.UI.updateRemoteStats(id, stats.connectionQuality, stats);
});
room.addCommandListener(this.commands.defaults.ETHERPAD, ({value}) => {
APP.UI.initEtherpad(value);
@@ -1263,9 +1324,10 @@ export default {
APP.UI.setUserEmail(from, data.value);
});
room.addCommandListener(this.commands.defaults.AVATAR_URL,
(data, from) => {
APP.UI.setUserAvatarUrl(from, data.value);
room.addCommandListener(
this.commands.defaults.AVATAR_URL,
(data, from) => {
APP.UI.setUserAvatarUrl(from, data.value);
});
room.addCommandListener(this.commands.defaults.AVATAR_ID,
@@ -1294,15 +1356,6 @@ export default {
&& APP.UI.notifyInitiallyMuted();
});
APP.UI.addListener(UIEvents.USER_INVITED, (roomUrl) => {
APP.UI.inviteParticipants(
roomUrl,
APP.conference.roomName,
roomLocker.password,
APP.settings.getDisplayName()
);
});
room.on(
ConferenceEvents.AVAILABLE_DEVICES_CHANGED, function (id, devices) {
APP.UI.updateDevicesAvailability(id, devices);
@@ -1311,16 +1364,16 @@ export default {
// call hangup
APP.UI.addListener(UIEvents.HANGUP, () => {
hangup(true);
this.hangup(true);
});
// logout
APP.UI.addListener(UIEvents.LOGOUT, () => {
AuthHandler.logout(room).then(function (url) {
AuthHandler.logout(room).then(url => {
if (url) {
window.location.href = url;
} else {
hangup(true);
this.hangup(true);
}
});
});
@@ -1344,7 +1397,8 @@ export default {
// Longer delays will be caused by something else and will just
// poison the data.
if (delay < 2000) {
JitsiMeetJS.analytics.sendEvent('stream.switch.delay', delay);
JitsiMeetJS.analytics.sendEvent('stream.switch.delay',
{value: delay});
}
});
@@ -1389,6 +1443,8 @@ export default {
APP.UI.addListener(UIEvents.PINNED_ENDPOINT, (smallVideo, isPinned) => {
var smallVideoId = smallVideo.getId();
// FIXME why VIDEO_CONTAINER_TYPE instead of checking if
// the participant is on the large video ?
if (smallVideo.getVideoType() === VIDEO_CONTAINER_TYPE
&& !APP.conference.isLocalId(smallVideoId)) {
@@ -1416,7 +1472,7 @@ export default {
.then(([stream]) => {
this.useVideoStream(stream);
console.log('switched local video device');
APP.settings.setCameraDeviceId(cameraDeviceId);
APP.settings.setCameraDeviceId(cameraDeviceId, true);
})
.catch((err) => {
APP.UI.showDeviceErrorDialog(null, err);
@@ -1438,7 +1494,7 @@ export default {
.then(([stream]) => {
this.useAudioStream(stream);
console.log('switched local audio device');
APP.settings.setMicDeviceId(micDeviceId);
APP.settings.setMicDeviceId(micDeviceId, true);
})
.catch((err) => {
APP.UI.showDeviceErrorDialog(err, null);
@@ -1533,13 +1589,13 @@ export default {
// storage and settings menu. This is a workaround until
// getConstraints() method will be implemented in browsers.
if (localAudio) {
localAudio._setRealDeviceIdFromDeviceList(devices);
APP.settings.setMicDeviceId(localAudio.getDeviceId());
APP.settings.setMicDeviceId(
localAudio.getDeviceId(), false);
}
if (localVideo) {
localVideo._setRealDeviceIdFromDeviceList(devices);
APP.settings.setCameraDeviceId(localVideo.getDeviceId());
APP.settings.setCameraDeviceId(
localVideo.getDeviceId(), false);
}
mediaDeviceHelper.setCurrentMediaDevices(devices);
@@ -1624,14 +1680,10 @@ export default {
},
/**
* Toggles the local "raised hand" status, if the current state allows
* toggling.
* Toggles the local "raised hand" status.
*/
maybeToggleRaisedHand() {
// If we are the dominant speaker, we don't enable "raise hand".
if (this.isHandRaised || !this.isDominantSpeaker) {
this.setRaisedHand(!this.isHandRaised);
}
this.setRaisedHand(!this.isHandRaised);
},
/**
@@ -1640,11 +1692,53 @@ export default {
setRaisedHand(raisedHand) {
if (raisedHand !== this.isHandRaised)
{
APP.UI.onLocalRaiseHandChanged(raisedHand);
this.isHandRaised = raisedHand;
// Advertise the updated status
room.setLocalParticipantProperty("raisedHand", raisedHand);
// Update the view
APP.UI.setLocalRaisedHandStatus(raisedHand);
}
},
/**
* Log event to callstats and analytics.
* @param {string} name the event name
* @param {int} value the value (it's int because google analytics supports
* only int).
* NOTE: Should be used after conference.init
*/
logEvent(name, value) {
if(JitsiMeetJS.analytics) {
JitsiMeetJS.analytics.sendEvent(name, {value});
}
if(room) {
room.sendApplicationLog(JSON.stringify({name, value}));
}
},
/**
* Disconnect from the conference and optionally request user feedback.
* @param {boolean} [requestFeedback=false] if user feedback should be
* requested
*/
hangup (requestFeedback = false) {
APP.UI.hideRingOverLay();
let requestFeedbackPromise = requestFeedback
? APP.UI.requestFeedbackOnHangup()
// false - because the thank you dialog shouldn't be displayed
.catch(() => Promise.resolve(false))
: Promise.resolve(true);// true - because the thank you dialog
//should be displayed
// All promises are returning Promise.resolve to make Promise.all to
// be resolved when both Promises are finished. Otherwise Promise.all
// will reject on first rejected Promise and we can redirect the page
// before all operations are done.
Promise.all([
requestFeedbackPromise,
room.leave().then(disconnect, disconnect)
]).then(values => {
APP.API.notifyReadyToClose();
maybeRedirectToWelcomePage(values[0]);
});
}
};

View File

@@ -1,5 +1,6 @@
/* jshint -W101 */
var config = {
/* jshint maxlen:false */
var config = { // eslint-disable-line no-unused-vars
// configLocation: './config.json', // see ./modules/HttpConfigFetch.js
hosts: {
domain: 'jitsi-meet.example.com',
@@ -56,6 +57,8 @@ var config = {
//disableAdaptiveSimulcast: false,
enableRecording: false,
enableWelcomePage: true,
//enableClosePage: false, // enabling the close page will ignore the welcome
// page redirection when call is hangup
disableSimulcast: false,
logStats: false, // Enable logging of PeerConnection stats via the focus
// requireDisplayName: true, // Forces the participants that doesn't have display name to enter it when they enter the room.

View File

@@ -1,5 +1,6 @@
/* global APP, JitsiMeetJS, config */
import AuthHandler from './modules/UI/authentication/AuthHandler';
import jitsiLocalStorage from './modules/util/JitsiLocalStorage';
const ConnectionEvents = JitsiMeetJS.events.connection;
const ConnectionErrors = JitsiMeetJS.errors.connection;
@@ -107,9 +108,9 @@ function connect(id, password, roomName) {
export function openConnection({id, password, retry, roomName}) {
let usernameOverride
= window.localStorage.getItem("xmpp_username_override");
= jitsiLocalStorage.getItem("xmpp_username_override");
let passwordOverride
= window.localStorage.getItem("xmpp_password_override");
= jitsiLocalStorage.getItem("xmpp_password_override");
if (usernameOverride && usernameOverride.length > 0) {
id = usernameOverride;

BIN
css/.DS_Store vendored

Binary file not shown.

14
css/404.scss Normal file
View File

@@ -0,0 +1,14 @@
.error_page {
width: 60%;
margin: 20% auto;
text-align: center;
h2 {
font-size: 36px;
}
&__message {
font-size: 24px;
margin-top: 20px;
}
}

83
css/_animations.scss Normal file
View File

@@ -0,0 +1,83 @@
/**
* Project animations
**/
/**
* Slide in animation for extended toolbar.
*/
@include keyframes(slideInX) {
0% { transform: translateX(-100%); }
100% { transform: translateX(0%); }
}
@include keyframes(slideOutX) {
0% { transform: translateX(0%); }
100% { transform: translateX(-100%); }
}
@include keyframes(slideInExtX) {
0% { transform: translateX(-500%); }
100% { transform: translateX(0%); }
}
@include keyframes(slideOutExtX) {
0% { transform: translateX(0%); }
100% { transform: translateX(-500%); }
}
/**
* Slide in / out animation for main toolbar.
*/
@include keyframes(slideInY) {
100% { transform: translateY(0%); }
}
@include keyframes(slideOutY) {
0% { transform: translateY(0%); }
100% { transform: translateY(-100%); }
}
/**
* Slide in animation for extended toolbar (inner) panel.
*/
// FIX: Can't use percentage because of breaking animation when width is changed
// (100% of 0 is also zero) Extracted this to config variable.
@include keyframes(slideInExt) {
from { left: -$sidebarWidth; }
to { left: 0; }
}
@include keyframes(slideOutExt) {
from { left: 0; }
to { left: -$sidebarWidth; }
}
/**
* Slide in animation for extended toolbar container
**/
@include keyframes(slideOutExtContainer) {
from { width: $sidebarWidth; }
to { width: 0; }
}
@include keyframes(slideInExtContainer) {
from { width: 0; }
to { width: $sidebarWidth; }
}
/**
* Fade in / out animations
**/
@include keyframes(fadeIn) {
from { opacity: 0; }
to { opacity: 1; }
}
@include keyframes(fadeOut) {
from { opacity: 1; }
to { opacity: 0; }
}

View File

@@ -13,6 +13,10 @@ html, body{
overflow: hidden;
}
p {
margin: 0;
}
html, body, input, textarea, keygen, select, button {
font-family: $baseFontFamily !important;
}
@@ -26,24 +30,29 @@ html, body, input, textarea, keygen, select, button {
}
input[type='text'], input[type='password'], textarea {
-webkit-user-select: text;
user-select: text;
display: inline-block;
padding: 5px;
color: $defaultDarkColor;
width: 100%;
padding: 5px 7px;
color: $inputColor;
border-radius: $borderRadius;
line-height: 32px;
height: 32px;
text-align: left;
border:1px solid $inputBorderColor;
background-color: $inputBackground;
outline: none; /* removes the default outline */
resize: none; /* prevents the user-resizing, adjust to taste */
}
@include placeholder {
color: $placeHolderColor;
}
textarea {
overflow: hidden;
word-wrap: break-word;
resize: horizontal;
resize: none;
line-height: 1.5em;
}
button.no-icon {
@@ -53,12 +62,8 @@ button.no-icon {
button, input, select, textarea {
margin: 0;
vertical-align: baseline;
color: $defaultDarkColor;
background: $inputLightBackground;
font-size: 12px;
border: none;
box-shadow: none;
outline: none;
color: $inputColor;
font-size: 1em;
}
button, select, input[type="button"],
@@ -72,7 +77,7 @@ input[type="reset"], input[type="submit"] {
button {
color: #FFF;
background-color: $buttonBackground !important;
background-color: $buttonBackground;
border-radius: $borderRadius;
}
@@ -81,24 +86,6 @@ form {
display: block;
}
#downloadlog {
display: none;
position: absolute;
bottom: 5;
left: 5;
overflow: visible;
color: rgba(255,255,255,.50);
}
.active {
background-color: #00ccff;
}
.glow
{
text-shadow: 0px 0px 30px #06a5df, 0px 0px 10px #06a5df, 0px 0px 5px #06a5df,0px 0px 3px #06a5df;
}
.watermark {
display: block;
position: absolute;
@@ -175,4 +162,42 @@ form {
display: -ms-flexbox !important;
display: -webkit-flex !important;
display: flex !important;
}
/**
* Tooltips
**/
.tipsy {
z-index: $tooltipsZ;
&-inner {
background-color: $tooltipBg;
}
&-arrow {
border-color: $tooltipBg;
}
}
/**
* Dialogs fade
*/
.aui-blanket {
visibility: visible;
}
.link {
cursor: pointer;
color: $linkFontColor;
@include transition(color .1s ease-out);
&:hover {
color: $linkHoverFontColor;
text-decoration: underline;
@include transition(color .1s ease-in);
}
}
#inviteLinkRef {
-webkit-user-select: text;
user-select: text;
}

View File

@@ -13,8 +13,7 @@
font-size: 10pt;
width: 100%;
height: 90%;
overflow-y: scroll;
overflow-x: hidden;
overflow: auto;
word-wrap: break-word;
a:link {
@@ -104,11 +103,6 @@
color: #a7a7a7;
}
#unreadMessages {
font-size: 8px;
position: absolute;
}
#chat_container .username {
float: left;
padding-left: 5px;
@@ -135,7 +129,7 @@
.chatmessage {
background: #3a3a3a;
width: 93%;
margin-left: 5%;
margin-left: 9px;
margin-right: auto;
border-radius: 5px;
border-top-left-radius: 0px;
@@ -238,4 +232,4 @@
#usermsg::-webkit-scrollbar-track-piece {
background: #3a3a3a;
}
}

43
css/_connection-info.scss Normal file
View File

@@ -0,0 +1,43 @@
%connection-info {
text-align: left;
font-size: 12px;
font-weight: 400;
color: $popoverFontColor;
td {
padding: 2px 0;
}
}
.connection-info
{
float: left;
padding: 5px;
padding-left: 0;
@extend %connection-info;
> table {
white-space: nowrap;
@extend %connection-info;
}
td:nth-child(n-1) {
padding-left: 5px;
}
&__icon {
margin-right: 2px;
}
&__download
{
@extend .connection-info__icon;
color: $downloadConnectionIconColor;
}
&__upload
{
@extend .connection-info__icon;
color: $uploadConnectionIconColor;
}
}

View File

@@ -2,14 +2,12 @@
cursor: default;
> ul#contacts {
position: absolute;
top: 31px;
font-size: 12px;
bottom: 0px;
width: 100%;
margin: 0px;
margin: 0;
margin-top: 16px;
padding: 0px;
overflow-y: scroll;
overflow-x: hidden;
width: 100%;
}
.clickable {
@@ -20,13 +18,13 @@
#contacts {
>li {
color: $defaultSideBarFontColor;
list-style-type: none;
text-align: left;
white-space: nowrap;
color: #FFF;
font-size: 10pt;
padding: 7px 10px;
margin: 2px;
padding: 6px 10%;
&:hover,
&:active {
@@ -37,6 +35,9 @@
display: inline-block;
vertical-align: middle;
margin: 0px;
width: 100%;
text-overflow: ellipsis;
overflow: hidden;
}
}
}

View File

@@ -1,107 +0,0 @@
@-webkit-keyframes shake-rotate {
0% {
-webkit-transform:scale(1) rotate(0deg);
transform:scale(1) rotate(0deg)
}
50% {
-webkit-transform:scale(.8) rotate(-5deg);
transform:scale(.8) rotate(-5deg)
}
to {
-webkit-transform:scale(1) rotate(3deg);
transform:scale(1) rotate(3deg)
}
}
@keyframes shake-rotate {
0% {
-webkit-transform:scale(1) rotate(0deg);
transform:scale(1) rotate(0deg)
}
50% {
-webkit-transform:scale(.8) rotate(-5deg);
transform:scale(.8) rotate(-5deg)
}
to {
-webkit-transform:scale(1) rotate(3deg);
transform:scale(1) rotate(3deg)
}
}
.shake-rotate {
-webkit-animation-duration: .4s;
animation-duration: .4s;
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
-webkit-animation-name: shake-rotate;
animation-name: shake-rotate;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out
}
.text-center {
text-align: center;
}
.feedbackDetails textarea {
resize: vertical;
min-height: 100px;
}
.feedback-rating {
line-height: 1.2;
padding: 20px 0;
h2 {
font-weight: 400;
font-size: 24px;
line-height: 1.2;
padding: auto;
margin: auto;
border: none;
}
p {
margin-top: 10px;
margin-left: 0px;
margin-bottom: 0px;
margin-right: 0px;
}
.star-label {
font-size: 16px;
color: $rateStarLabelColor;
}
.star-btn {
color: $rateStarDefault;
font-size: 36px;
position: relative;
cursor: pointer;
outline: none;
text-decoration: none;
@include transition(all .2s ease);
&.starHover,
&.active,
&:hover {
color: $rateStarActivity;
.fa {
top: -6px;
}
};
&.rated:hover .fa {
top: 0;
}
.fa {
position: relative;
}
}
}

View File

@@ -255,9 +255,6 @@
.fa-road:before {
content: "\f018";
}
.fa-download:before {
content: "\f019";
}
.fa-arrow-circle-o-down:before {
content: "\f01a";
}
@@ -842,9 +839,6 @@
.fa-exchange:before {
content: "\f0ec";
}
.fa-cloud-download:before {
content: "\f0ed";
}
.fa-cloud-upload:before {
content: "\f0ee";
}

View File

@@ -16,8 +16,9 @@
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 0.75em;
line-height: 1.22em;
font-size: 1.22em;
cursor: default;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
@@ -42,9 +43,6 @@
.icon-chat:before {
content: "\e906";
}
.icon-download:before {
content: "\e902";
}
.icon-edit:before {
content: "\e907";
}
@@ -57,12 +55,21 @@
.icon-kick:before {
content: "\e904";
}
.icon-menu-up:before {
content: "\e91f";
}
.icon-menu-down:before {
content: "\e920";
}
.icon-full-screen:before {
content: "\e90b";
}
.icon-exit-full-screen:before {
content: "\e90c";
}
.icon-star:before {
content: "\e916";
}
.icon-star-full:before {
content: "\e90a";
}
@@ -84,6 +91,9 @@
.icon-mic-disabled:before {
content: "\e912";
}
.icon-raised-hand:before {
content: "\e91e";
}
.icon-contactList:before {
content: "\e91b";
}
@@ -96,9 +106,6 @@
.icon-settings:before {
content: "\e915";
}
.icon-star:before {
content: "\e916";
}
.icon-share-desktop:before {
content: "\e917";
}
@@ -123,6 +130,7 @@
.icon-recEnable:before {
content: "\e614";
}
// FIXME not used anymore - consider removing in the next font update
.icon-presentation:before {
content: "\e603";
}

6
css/_functions.scss Normal file
View File

@@ -0,0 +1,6 @@
/* Functions */
/* Pixels to Ems function */
@function em($value, $base: 16) {
@return #{$value / $base}em;
}

29
css/_inlay.scss Normal file
View File

@@ -0,0 +1,29 @@
.inlay {
margin-top: 14%;
@include border-radius(3px);
padding: 40px 38px 44px;
color: #fff;
background: lighten(desaturate($defaultBackground, 70%), 20%);
text-align: center;
&__title {
margin: 12px 0;
padding-bottom: 17px;
color: $popoverFontColor;
font-size: 21px;
letter-spacing: 0.3px;
border-bottom: 1px solid $auiBorderColor;
}
&__text {
color: $popoverFontColor;
display: block;
margin-top: 22px;
font-size: 16px;
}
&__icon {
margin: 0 10px;
font-size: 50px;
}
}

View File

@@ -6,100 +6,43 @@
display: none;
max-width: 300px;
min-width: 100px;
padding: 1px;
text-align: left;
color: #333333;
background-color: #ffffff;
color: $popoverFontColor;
background-color: $popoverBg;
background-clip: padding-box;
border: 1px solid #cccccc;
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 6px;
border-radius: 3px;
/*-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);*/
/*box-shadow: 0 5px 10px rgba(0, 0, 0, 0.4);*/
white-space: normal;
margin-top: -10px;
margin-bottom: 35px;
}
.jitsipopover.black
{
background-color: rgba(0,0,0,0.8);
color: #ffffff;
}
&__menu-padding {
height: 35px;
width: 100px;
position: absolute;
bottom: -35px;
}
.jitsipopover-content {
padding: 9px 14px;
font-size: 10pt;
white-space:pre-wrap;
text-align: center;
}
&__showmore {
display: block;
text-align: center;
width: 90px;
margin: 10px auto;
}
.jitsipopover > .arrow,
.jitsipopover > .arrow:after {
position: absolute;
display: block;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
}
.jitsipopover > .arrow {
border-width: 11px;
left: 50%;
margin-left: -11px;
border-bottom-width: 0;
border-top-color: #999999;
border-top-color: rgba(0, 0, 0, 0.25);
bottom: -11px;
}
.jitsipopover > .arrow:after {
border-width: 10px;
content: " ";
bottom: 1px;
margin-left: -10px;
border-bottom-width: 0;
border-top-color: #ffffff;
}
.jitsipopover.black > .arrow:after
{
border-top-color: rgba(0, 0, 0, 0.8);
}
.jitsiPopupmenuPadding {
height: 35px;
width: 100px;
position: absolute;
bottom: -35px;
}
.jitsipopover_green
{
color: #4abd04;
}
.jitsipopover_orange
{
color: #ffa800;
}
.jitsipopover_blue
{
color: #21B9FC;
}
.jitsipopover_showmore
{
background-color: #21B9FC;
color: #ffffff;
cursor: pointer;
border-radius: 3px;
text-align: center;
width: 90px;
height: 16px;
padding-top: 4px;
padding-left: 10px;
padding-right: 10px;
margin: 15px auto 0px auto;
> .arrow {
position: absolute;
display: block;
left: 50%;
bottom: -5px;
margin-left: -5px;
width: 0;
height: 0;
border-color: transparent;
border-top-color: $popoverBg;
border-style: solid;
border-width: 5px;
border-bottom-width: 0;
}
}

View File

@@ -9,7 +9,8 @@
}
div.jqi{
width: 400px;
position: absolute;
position: absolute;
color: #3a3a3a;
background-color: #ffffff;
font-size: 11px;
text-align: left;

View File

@@ -31,24 +31,6 @@ ul.loginmenu:after {
left: 18px;
}
li a.authButton{
background-color: #06a5df;
padding-top: 3px;
padding-bottom: 3px;
padding-left: 29px;
padding-right: 29px;
border-radius: 4px;
cursor: pointer;
}
span.authentication:hover ul.loginmenu, ul.loginmenu:hover {
display:block !important;
}
span.authentication {
position: relative;
}
a.disabled {
color: gray !important;
pointer-events: none;
@@ -73,4 +55,4 @@ ul.loginmenu.extendedToolbarPopup:after {
position: absolute;
top: 18px;
left: -7px;
}
}

View File

@@ -18,6 +18,14 @@
animation: $animations;
}
@mixin flex() {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
/**
* Keyframes mixin.
*/
@@ -36,17 +44,102 @@
}
}
@mixin circle($diameter) {
width: $diameter;
height: $diameter;
border-radius: 50%;
}
/**
* Absolute position the element at the top left corner
**/
@mixin topLeft() {
position: absolute;
top: 0;
left: 0;
}
@mixin absoluteAligning() {
top: 50%;
left: 50%;
position: absolute;
@include transform(translate(-50%, -50%))
}
@mixin transform($func) {
-moz-transform: $func;
-ms-transform: $func;
-webkit-transform: $func;
-o-transform: $func;
transform: $func;
-moz-transform: $func;
-ms-transform: $func;
-webkit-transform: $func;
-o-transform: $func;
transform: $func;
}
@mixin transition($transition...) {
-moz-transition: $transition;
-o-transition: $transition;
-webkit-transition: $transition;
transition: $transition;
-moz-transition: $transition;
-o-transition: $transition;
-webkit-transition: $transition;
transition: $transition;
}
/**
* Mixin styling placeholder
**/
@mixin placeholder() {
$selectors: (
"::-webkit-input-placeholder",
"::-moz-placeholder",
":-moz-placeholder",
":-ms-input-placeholder"
);
@each $selector in $selectors {
#{$selector} {
@content;
}
}
}
@mixin box-shadow($h, $y, $blur, $color, $inset: false) {
@if $inset {
-webkit-box-shadow: inset $h $y $blur $color;
-moz-box-shadow: inset $h $y $blur $color;
box-shadow: inset $h $y $blur $color;
} @else {
-webkit-box-shadow: $h $y $blur $color;
-moz-box-shadow: $h $y $blur $color;
box-shadow: $h $y $blur $color;
}
}
@mixin no-box-shadow {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
@mixin box-sizing($box-model) {
-webkit-box-sizing: $box-model; // Safari <= 5
-moz-box-sizing: $box-model; // Firefox <= 19
box-sizing: $box-model;
}
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
border-radius: $radius;
/* stops bg color from leaking outside the border: */
background-clip: padding-box;
}
@mixin opacity($opacity) {
opacity: $opacity;
$opacity-ie: $opacity * 100;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=$opacity-ie);
filter: alpha(opacity=$opacity-ie); //IE8
}
@mixin text-truncate {
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

View File

@@ -19,11 +19,6 @@
width: 100%;
}
.jqibuttons button {
margin-right: 5px;
float:right;
}
button.jqidefaultbutton #inviteLinkRef {
color: #2c8ad2;
}

15
css/_policy.scss Normal file
View File

@@ -0,0 +1,15 @@
.policy {
&__logo {
display: block;
width: 200px;
height: 50px;
margin: 30px auto 0;
}
&__text {
text-align: center;
font-size: 14px;
line-height: 21px;
font-weight: 300;
}
}

View File

@@ -1,58 +1,69 @@
/*Initialize*/
ul.popupmenu {
padding: 0px 10px 0px 10px;
margin: 0;
/**
* Initialize
**/
.popupmenu {
padding: 0;
margin: 2px 0;
bottom: 0;
width: 100px;
height: auto;
}
ul.popupmenu li {
list-style-type: none;
text-align: left;
}
&:first-child {
margin-top: 2px;
}
ul.popupmenu li:hover {
background-color: rgba(256, 256, 256, .2);
border-radius:3px;
}
&__item {
list-style-type: none;
text-align: left;
height: 35px;
/*Link Appearance*/
ul.popupmenu li a {
display: block;
text-decoration: none;
color: #fff;
padding: 5px;
font-size: 9pt;
width: 100%;
cursor: hand;
}
&:hover {
background-color: $popupMenuSelectedItemBackground;
}
}
ul.popupmenu li a i.icon-kick {
font-size: 8pt;
}
// Link Appearance
&__link {
display: block;
box-sizing: border-box;
text-decoration: none;
color: #fff;
padding: 5px;
height: 100%;
font-size: 9pt;
width: 100%;
cursor: hand;
ul.popupmenu li a span {
display: inline-block;
width: 20px;
height: 16px;
text-align: center;
}
&.disabled {
color: gray !important;
pointer-events: none;
}
}
ul.popupmenu li a div {
display: inline-block;
line-height: 25px;
}
&__text {
display: inline-block;
vertical-align: middle;
}
ul.popupmenu li a i {
line-height: 25px;
&__icon {
vertical-align: middle;
position: relative;
display: inline-block;
width: 20px;
height: 100%;
text-align: center;
> * {
@include absoluteAligning();
}
}
.icon-kick {
font-size: 8pt;
}
}
span.remotevideomenu:hover ul.popupmenu, ul.popupmenu:hover {
display:block !important;
}
a.disabled {
color: gray !important;
pointer-events: none;
}

View File

@@ -1,4 +1,4 @@
.recordingSpinner {
display: none;
vertical-align: text-bottom;
vertical-align: top;
}

41
css/_redirect_page.scss Normal file
View File

@@ -0,0 +1,41 @@
html, body {
width: 100%;
height:100%;
color: $defaultColor;
background: $defaultBackground;
}
.redirectPageMessage {
width: 30%;
margin: 20% auto;
text-align: center;
font-size: 24px;
.thanks-msg {
border-bottom: 1px solid $selectBg;
padding-left: 30px;
padding-right: 30px;
p {
margin: 30px auto;
font-size: 24px;
line-height: 24px;
}
}
.hint-msg{
p {
margin: 26px auto;
font-weight: 600;
font-size: 16px;
line-height: 18px;
.hint-msg__holder{
font-weight: 200;
}
}
.happy-software{
width: 120px;
height: 86px;
margin: 0 auto;
background: $happySoftwareBackground;
}
}
}

View File

@@ -1,114 +0,0 @@
/**
* Toolbar side panel main container element.
*/
#sideToolbarContainer {
display: inline-block;
position:absolute;
top: 0px;
left: $defaultToolbarSize;
width: 0%;
height: 100%;
max-width: 200px;
background-color: rgba(0,0,0,0.8);
z-index: 800;
overflow: hidden;
/**
* Labels inside the side panel.
*/
label {
color: $defaultSemiDarkColor;
}
/**
* Form elements and blocks.
*/
input, label, select, button, a, .sideToolbarBlock {
display: inline-block;
margin-top: 15px;
margin-left: 10%;
width: 80%;
}
/**
* Specify colors for edit elements.
*/
select, input[type="button"], input[type="text"],
input[type="reset"], input[type="submit"] {
color: $defaultColor;
background: $inputBackground;
border: none;
}
/**
* Specify styling of elements inside a block.
*/
.sideToolbarBlock {
input, label, button, a, select {
margin-top: 5px;
margin-left: 0;
width: 100%;
}
.startMutedLabel,
.followMeLabel {
display: inline;
margin-top: 0;
}
}
/**
* Inner container, for example contact list, settings or profile.
*/
.sideToolbarContainer__inner {
display: none;
width: 200px;
color: #FFF;
/**
* Titles and subtitles of inner containers.
*/
> div.title,
div.subTitle {
color: $defaultColor !important;
text-align: left;
margin: 10px 0px 10px 0px;
padding: 5px 10px 5px 10px;
}
/**
* Main title size.
*/
> div.title {
font-size: 16px;
}
/**
* Subtitle specific properties.
*/
> div.subTitle {
font-size: 12px;
background: $inputSemiBackground !important;
margin-top: 20px !important;
margin-bottom: 8px !important;
}
/**
* First element after a title.
*/
.first {
margin-top: 0px !important;
}
}
}
#device_settings {
width : auto !important;
text-align: center;
}
#startAudioMuted,
#startVideoMuted,
#followMeCheckBox {
width: 13px !important;
}

View File

@@ -0,0 +1,146 @@
/**
* Toolbar side panel main container element.
*/
#sideToolbarContainer {
background-color: rgba(0,0,0,0.8);
height: 100%;
left: $defaultToolbarSize;
max-width: $sidebarWidth;
overflow: hidden;
position: absolute;
top: 0;
width: 0;
z-index: 800;
/**
* Labels inside the side panel.
*/
label {
color: $defaultColor;
}
/**
* Form elements and blocks.
*/
input, select, a,
.sideToolbarBlock, .input-control, .button-control {
display: block;
margin-top: 15px;
margin-left: 10%;
width: 80%;
}
/**
* Specify colors for edit elements.
*/
select, input[type="button"], input[type="text"], input[type="reset"],
input[type="submit"] {
color: $inputColor;
background: $inputBackground;
border: none;
}
/**
* Specify styling of elements inside a block.
*/
.sideToolbarBlock {
input, button, a, select {
margin-left: 0;
margin-top: 5px;
width: 100%;
}
input[type='checkbox'] {
display: inline;
width: auto !important;
> label {
margin-top: 5px;
width: 80%;
}
}
}
/**
* Inner container, for example contact list, settings or profile.
*/
.sideToolbarContainer__inner {
display: none;
height: 100%;
width: $sidebarWidth;
position: absolute;
box-sizing: border-box;
color: #FFF;
/**
* Titles and subtitles of inner containers.
*/
div.title, div.subTitle {
margin: 10px 0;
}
/**
* Main title size.
*/
div.title {
color: $defaultColor !important;
font-size: 16px;
text-align: center;
}
/**
* Subtitle specific properties.
*/
div.subTitle {
color: $defaultSideBarFontColor !important;
font-size: 11px;
font-weight: 500;
margin-left: 10%;
text-align: left;
}
/**
* First element after a title.
*/
.first {
margin-top: 0 !important;
}
/**
* Buttons in the side toolbar container.
*/
.button-control {
margin: 9px 0;
width: 100%;
}
}
}
#device_settings {
width : auto !important;
text-align: center;
}
/**
* Profile
*/
.auth_container {
ul {
padding: 0;
li {
list-style-type: none;
a.authButton {
width: 160px;
margin: 10px 20px;
padding: 3px 29px;
box-sizing: border-box;
background-color: #06a5df;
border-radius: 4px;
cursor: pointer;
color: $defaultColor;
text-decoration: none;
text-align: center;
}
}
}
}

View File

@@ -7,206 +7,100 @@
*
* Author: John Papa and Hans Fjällemark
* Project: https://github.com/CodeSeven/toastr
*
* Last updated: October 13, 2016
*/
.toast-title {
.toast-title,
.toast-message .nickname {
font-weight: bold;
margin: 0 0 3px;
@include text-truncate;
}
.toast-message {
-ms-word-wrap: break-word;
word-wrap: break-word;
}
.toast-message a,
.toast-message label {
color: #ffffff;
}
.toast-message .nickname {
font-weight: bold;
}
.toast-message a:hover {
color: #cccccc;
.toast-message label,
.toast-message .connected,
.toast-message .disconnected {
color: $notificationLinkColor;
text-decoration: none;
}
.toast-message a:hover {
text-decoration: underline;
}
.toast-message br {
display: none;
}
// close button
.toast-close-button {
position: relative;
right: -0.3em;
top: -0.3em;
float: right;
color: $notificationColor;
background: transparent;
font-size: 15px;
height: 15px;
width: 15px;
font-weight: bold;
color: #ffffff;
background: transparent !important;
-webkit-text-shadow: 0 1px 0 #ffffff;
text-shadow: 0 1px 0 #ffffff;
opacity: 0.8;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
filter: alpha(opacity=80);
line-height: 1.2;
height: 20px;
width: 20px;
padding: 0;
border: 0;
margin: -6px -10px 0 0;
float: right;
cursor: pointer;
@include opacity(0.4);
/* Additional properties for button version
iOS requires the button element instead of an anchor tag.
If you want the anchor version, it requires `href="#"`. */
-webkit-appearance: none;
}
.toast-close-button:hover,
.toast-close-button:focus {
color: #ffffff;
text-decoration: none;
cursor: pointer;
opacity: 1;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
filter: alpha(opacity=100);
@include opacity(1);
}
/*Additional properties for button version
iOS requires the button element instead of an anchor tag.
If you want the anchor version, it requires `href="#"`.*/
button.toast-close-button {
padding: 0;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
.toast {
color: $notificationColor;
background-color: $notificationBackground;
font-size: $notificationFontSize;
padding: $notificationPadding;
border: 1px solid lighten($notificationBackground, 10%);
@include border-radius($notificationBorderRadius);
@include box-shadow(1px, 1px, 2px, rgba(0,0,0,0.3));
@include opacity($notificationOpacity);
}
.toast-top-full-width {
top: 0;
right: 0;
width: 100%;
}
.toast-bottom-full-width {
bottom: 0;
right: 0;
width: 100%;
}
.toast-top-left {
top: 12px;
left: 12px;
}
.toast-top-right {
top: 12px;
right: 12px;
}
.toast-bottom-right {
right: 12px;
bottom: 12px;
}
.toast-bottom-left {
bottom: 12px;
left: 12px;
.toast:hover {
@include opacity(1);
}
#toast-container {
position: fixed;
z-index: 1012;
/*overrides*/
}
#toast-container * {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
#toast-container > div {
margin: 0 0 6px;
padding: 15px 15px 15px 15px;
width: 300px;
-moz-border-radius: 3px 3px 3px 3px;
-webkit-border-radius: 3px 3px 3px 3px;
border-radius: 3px 3px 3px 3px;
background-position: 15px center;
background-repeat: no-repeat;
-moz-box-shadow: 0 0 12px #999999;
-webkit-box-shadow: 0 0 12px #999999;
box-shadow: 0 0 12px #999999;
color: #ffffff;
opacity: 0.8;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
filter: alpha(opacity=80);
}
#toast-container > :hover {
-moz-box-shadow: 0 0 12px #000000;
-webkit-box-shadow: 0 0 12px #000000;
box-shadow: 0 0 12px #000000;
opacity: 1;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
filter: alpha(opacity=100);
cursor: pointer;
}
#toast-container .toast-info,
#toast-container .toast-success,
#toast-container .toast-error,
#toast-container .toast-warning
{
padding: 10px 10px 10px 10px !important;
}
#toast-container.toast-top-full-width > div,
#toast-container.toast-bottom-full-width > div {
width: 100%;
margin: auto;
}
.toast {
background-color: #030303;
}
.toast-success {
background-color: #51a351;
}
.toast-error {
background-color: #bd362f;
}
.toast-info {
background-color: #2f96b4;
}
.toast-warning {
background-color: #f89406;
}
/*Responsive Design*/
@media all and (max-width: 240px) {
#toast-container > div {
padding: 8px 8px 8px 8px;
width: 11em;
}
#toast-container .toast-close-button {
right: -0.2em;
top: -0.2em;
}
}
@media all and (min-width: 241px) and (max-width: 480px) {
#toast-container > div {
padding: 8px 8px 8px 8px;
width: 18em;
}
#toast-container .toast-close-button {
right: -0.2em;
top: -0.2em;
}
}
@media all and (min-width: 481px) and (max-width: 768px) {
#toast-container > div {
padding: 15px 15px 15px 15px;
width: 25em;
}
z-index: $notificationZ;
}
#toast-container.notification-bottom-right {
bottom: 140px;
right: 5px;
bottom: 135px;
right: 13px;
}
#toast-container.notification-bottom-right-center {
right: 205px;
#toast-container * {
@include box-sizing(border-box);
}
#toast-container .toast-info {
-webkit-box-shadow: none;
box-shadow: none;
}
.toast-close-button {
right: -7px;
top: -19px;
}
#toast-container .toast-info {
background-color: black;
border: 1px solid #3a3a3a;
width: 220px;
padding: 10px 10px 10px 50px;
#toast-container .toast {
width: $notificationWidth;
margin: 0 0 8px;
}

View File

@@ -1,9 +1,21 @@
.toolbar {
background-color: rgba(0,0,0,0.5);
background-color: $toolbarBackground;
position: relative;
z-index: $toolbarZ;
height: 100%;
pointer-events: auto;
/**
* Splitter button in the toolbar.
*/
&__splitter {
display: inline-block;
vertical-align: middle;
width: 1px;
height: 50%;
margin: 0 $splitterToolbarButtonMargin;
background: $splitterColor;
}
}
#mainToolbarContainer{
@@ -16,8 +28,7 @@
z-index: $toolbarZ;
pointer-events: none;
min-height: 100px;
transform: translateY(-100%);
-webkit-transform: translateY(-100%);
opacity: 0;
}
#subject {
@@ -42,30 +53,22 @@
margin-left: auto;
margin-right: auto;
width: auto;
border-radius: 4px;
.first {
border-bottom-left-radius: 4px;
border-top-left-radius: 4px;
}
.last {
border-bottom-right-radius: 4px;
border-top-right-radius: 4px;
}
border-radius: 3px;
overflow: hidden;
}
#extendedToolbar {
display: flex;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-box;
display: -webkit-flex;
display: flex;
width: $defaultToolbarSize;
height: 100%;
top: 0px;
left: 0px;
top: 0;
left: 0;
padding-top: 10px;
box-sizing: border-box;
flex-direction: column;
flex-wrap: nowrap;
justify-content: flex-start;
@@ -83,14 +86,6 @@
display: none;
}
#numberOfParticipants {
position: absolute;
top: 5px;
line-height: 13px;
font-weight: bold;
font-size: 11px;
}
#mainToolbar a.button:last-child::after {
content: none;
}
@@ -118,6 +113,10 @@
cursor: default;
}
.button.toggled {
background: $toolbarToggleBackground !important;
}
a.button.unclickable:hover,
a.button.unclickable:active,
a.button.unclickable.selected{
@@ -129,6 +128,7 @@ a.button:hover,
a.button:active,
a.button.selected {
cursor: pointer;
text-decoration: none;
// sum opacity with background layer should give us 0.8
background: $toolbarSelectBackground;
}
@@ -144,6 +144,36 @@ a.button>#avatar {
margin-top: auto;
}
/**
* Round badge.
*/
.badge-round {
background-color: $toolbarBadgeBackground;
color: $toolbarBadgeColor;
font-size: 9px;
line-height: 13px;
font-weight: 700;
text-align: center;
border-radius: 50%;
min-width: 13px;
overflow: hidden;
text-overflow: ellipsis;
box-sizing: border-box;
vertical-align: middle;
// Do not inherit the font-family from the toolbar button, because it's an
// icon style.
font-family: $baseFontFamily;
}
/**
* Toolbar specific round badge.
*/
.toolbar .badge-round {
position: absolute;
right: 9px;
bottom: 9px;
}
/**
* START of slide in animation for extended toolbar.
*/
@@ -232,5 +262,12 @@ a.button>#avatar {
}
/**
* END of slide in animation for extended toolbar panel.
* START of fade in animation for main toolbar
*/
.fadeIn {
@include animation('fadeIn .3s linear .2s forwards');
}
.fadeOut {
@include animation('fadeOut .5s linear forwards');
}

View File

@@ -1,5 +1,6 @@
@import "themes/light";
/**
<<<<<<< HEAD
* Style variables
*/
$baseFontFamily: 'open_sanslight', 'Helvetica Neue', Helvetica, Arial, sans-serif;
@@ -11,32 +12,118 @@ $hangupFontSize: 2em;
*/
$defaultToolbarSize: 50px;
// Video layout.
$thumbnailToolbarHeight: 22px;
$thumbnailIndicatorBorder: 0px;
$thumbnailIndicatorSize: $thumbnailToolbarHeight;
$thumbnailVideoMargin: 2px;
/**
* Color variables.
*/
$defaultColor: #F1F1F1;
$defaultSideBarFontColor: #44A5FF;
$defaultSemiDarkColor: #ACACAC;
$defaultDarkColor: #4F4F4F;
$defaultBackground: #474747;
$defaultDarkColor: #2b3d5c;
$tooltipBg: rgba(0,0,0, 0.7);
/**
* Toolbar
*/
$toolbarBackground: rgba(0, 0, 0, 0.5);
$toolbarSelectBackground: rgba(0, 0, 0, .6);
$inputBackground: rgba(132, 132, 132, .5);
$toolbarBadgeBackground: #165ECC;
$toolbarBadgeColor: #FFFFFF;
$toolbarToggleBackground: #12499C;
$splitterToolbarButtonMargin: 18px;
/*
* Main controls
* TODO: looks like we don't use it
*/
$inputSemiBackground: rgba(132, 132, 132, .8);
$inputLightBackground: #EBEBEB;
$inputBorderColor: #EBEBEB;
$buttonBackground: #44A5FF;
/*
* Video layout
*/
$videoThumbnailHovered: rgba(22, 94, 204, .4);
$videoThumbnailSelected: #165ECC;
$participantNameColor: #fff;
$thumbnailPictogramColor: #fff;
$dominantSpeakerBg: #165ecc;
$raiseHandBg: #D6D61E;
$audioLevelBg: #44A5FF;
$connectionIndicatorBg: #165ecc;
$audioLevelShadow: rgba(9, 36, 77, 0.9);
$videoStateIndicatorColor: $defaultColor;
$videoStateIndicatorBackground: $toolbarBackground;
/**
* Feedback Modal
*/
$feedbackContentBg: #fff;
$feedbackInputBg: #fff;
$feedbackTextColor: #000;
$feedbackInputTextColor: #333;
$feedbackInputPlaceholderColor: #777;
$rateStarLabelColor: #333;
$rateStarDefault: #ccc;
$rateStarActivity: #165ecc;
$rateStarSize: 34px;
$feedbackCancelFontColor: #333;
/**
* Notifications
*/
$notificationFontSize: 13px;
$notificationColor: #FFFFFF;
$notificationBackground: $tooltipBg;
$notificationTitleColor: $notificationColor;
$notificationMessageColor: $notificationColor;
$notificationLinkColor: $notificationColor;
$notificationOpacity: 0.9;
$notificationPadding: 15px 20px;
$notificationBorderRadius: 4px;
$notificationWidth: 215px;
/**
* Misc.
*/
$borderRadius: 4px;
$defaultWatermarkLink: '../images/watermark.png';
$sidebarWidth: 200px;
$happySoftwareBackground: transparent;
/**
* Z-indexes. TODO: Replace this by a function.
*/
$tooltipsZ: 901;
$toolbarZ: 900;
$overlayZ: 800;
$overlayZ: 902;
$notificationZ: 1012;
$ringingZ: 800;
$dropdownZ: 901;
$dropdownMaskZ: 900;
$rateStarDefault: #ccc;
$rateStarActivity: #f6c342;
$rateStarLabelColor: #333;
/**
* Font Colors
*/
$defaultFontColor: #777;
$defaultLightFontColor: #F1F1F1;
$defaultDarkFontColor: #000;
/**
* Forms
*/
//dropdown
$selectFontColor: $defaultLightFontColor;
$selectBg: $defaultBackground;
$selectActiveBg: $defaultBackground;
$selectActiveItemBg: $defaultDarkColor;
//inputs
$inputControlEmColor: #f29424;
//buttons
$linkFontColor: #489afe;
$linkHoverFontColor: #287ade;

View File

@@ -1,5 +1,10 @@
#videoconference_page {
min-height: 100%;
}
#videospace {
display: block;
min-height: 100%;
position: absolute;
top: 0px;
left: 0px;
@@ -13,19 +18,18 @@
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
flex-direction: row;
flex-direction: row-reverse;
flex-wrap: nowrap;
justify-content: flex-end;
justify-content: flex-start;
position:absolute;
text-align:right;
height:196px;
padding: 18px;
padding: 10px 10px 17px 5px;
bottom: 0;
left: 0;
right: 20px;
right: 0;
width:auto;
border:1px solid transparent;
border: 2px solid transparent;
z-index: 5;
transition: bottom 2s;
overflow: visible !important;
@@ -39,37 +43,85 @@
.videocontainer {
position: relative;
text-align: center;
&__background {
@include topLeft();
width: 100%;
height: 100%;
background-color: black;
}
}
#remoteVideos .videocontainer {
display: none;
background-color: black;
position: relative;
background-size: contain;
border: 2px solid transparent;
border-radius:1px;
border: 1px solid #212425;
margin: 0 $thumbnailVideoMargin;
}
#remoteVideos .videocontainer.videoContainerFocused {
/**
* The toolbar of the video thumbnail.
*/
.videocontainer__toolbar,
.videocontainer__toptoolbar {
position: absolute;
left: 0;
z-index: 3;
width: 100%;
box-sizing: border-box; // Includes the padding in the 100% width.
}
.videocontainer__toolbar {
bottom: 0;
padding: 0 5px 0 5px;
height: $thumbnailToolbarHeight;
}
.videocontainer__toptoolbar {
$toolbarPadding: 5px;
top: 0;
padding: $toolbarPadding;
padding-bottom: 0;
height: $thumbnailIndicatorSize + $toolbarPadding;
}
.videocontainer__hoverOverlay {
position: relative;
width: 100%;
height: 100%;
visibility: hidden;
background: rgba(0,0,0,.6);
z-index: 2;
}
#remoteVideos .videocontainer.videoContainerFocused,
#remoteVideos .videocontainer:hover {
cursor: hand;
}
/**
* Focused video thumbnail.
*/
#remoteVideos .videocontainer.videoContainerFocused {
transition-duration: 0.5s;
-webkit-transition-duration: 0.5s;
-webkit-animation-name: greyPulse;
-webkit-animation-duration: 2s;
-webkit-animation-iteration-count: 1;
border: 2px solid $videoThumbnailSelected !important;
box-shadow: inset 0 0 3px $videoThumbnailSelected,
0 0 3px $videoThumbnailSelected !important;
}
/**
* Hovered video thumbnail.
*/
#remoteVideos .videocontainer:hover {
border: 1px solid #c1c1c1;
}
#remoteVideos .videocontainer.videoContainerFocused {
box-shadow: inset 0 0 28px #006d91;
border: 1px solid #006d91;
}
#remoteVideos .videocontainer.videoContainerFocused:hover {
box-shadow: inset 0 0 5px #c1c1c1, 0 0 10px #c1c1c1, inset 0 0 60px #006d91;
border: 1px solid #c1c1c1;
cursor: hand;
border: 2px solid $videoThumbnailHovered;
box-shadow: inset 0 0 3px $videoThumbnailHovered,
0 0 3px $videoThumbnailHovered;
}
#localVideoWrapper {
@@ -113,7 +165,6 @@
object-fit: cover;
}
#presentation,
#sharedVideo,
#etherpad,
#localVideoWrapper>video,
@@ -132,8 +183,7 @@
height: 100%;
}
#etherpad,
#presentation {
#etherpad {
text-align: center;
}
@@ -141,132 +191,48 @@
z-index: 0;
}
#remoteVideos .videocontainer>span.focusindicator,
#remoteVideos .videocontainer>div.remotevideomenu {
position: absolute;
color: #FFFFFF;
top: 0;
left: 0;
padding: 5px 0px;
width: 25px;
font-size: 11pt;
text-shadow: 0px 1px 0px rgba(255,255,255,.3), 0px -1px 0px rgba(0,0,0,.7);
border: 0px;
z-index: 2;
text-align: center;
}
#remoteVideos .videocontainer>span.focusindicator {
/**
* Positions video thumbnail display name and editor.
*/
.videocontainer .displayname,
.videocontainer .editdisplayname {
display: inline-block;
}
#remoteVideos .videocontainer>div.remotevideomenu {
display: block;
}
.videocontainer>span.displayname,
.videocontainer>input.displayname {
display: none;
position: absolute;
color: #FFFFFF;
background: rgba(0,0,0,.7);
left: 10%;
width: 80%;
top: 50%;
@include transform(translateY(-40%));
color: $participantNameColor;
text-align: center;
text-overflow: ellipsis;
width: 70%;
height: 20%;
left: 15%;
top: 40%;
padding: 5px;
font-size: 11pt;
font-size: 12px;
font-weight: 100;
overflow: hidden;
white-space: nowrap;
line-height: $thumbnailToolbarHeight;
z-index: 2;
border-radius:3px;
}
.videocontainer>span.status {
display: inline-block;
position: absolute;
color: #FFFFFF;
background: rgba(0,0,0,.7);
text-align: center;
text-overflow: ellipsis;
width: 70%;
height: 15%;
left: 15%;
bottom: 2%;
padding: 5px;
font-size: 10pt;
overflow: hidden;
white-space: nowrap;
z-index: 2;
border-radius:3px;
/**
* Positions video thumbnail display name editor.
*/
.videocontainer .editdisplayname {
outline: none;
border: none;
background: none;
box-shadow: none;
padding: 0;
}
.connectionindicator
{
display: inline-block;
position: absolute;
top: 7px;
right: 0;
padding: 0px 5px;
z-index: 3;
width: 18px;
height: 13px;
}
.connection.connection_empty
{
color: #8B8B8B;/*#FFFFFF*/
overflow: hidden;
}
.connection.connection_full
{
color: #FFFFFF;/*#15A1ED*/
overflow: hidden;
}
.connection
{
position: absolute;
left: 0px;
top: 0px;
font-size: 8pt;
border: 0px;
width: 18px;
height: 13px;
}
.connection_info
{
float: left;
padding-bottom: 5px;
}
.connection_info > table
{
white-space: nowrap;
}
.connection_info, .connection_info > table
{
text-align: left;
font-size: 11px;
color: #ffffff;
}
#localVideoContainer>span.status:hover,
#localVideoContainer>span.displayname:hover {
#localVideoContainer .displayname:hover {
cursor: text;
}
.videocontainer>span.status,
.videocontainer>span.displayname {
.videocontainer .displayname {
pointer-events: none;
}
.videocontainer>input.displayname {
.videocontainer .editdisplayname {
height: auto;
}
@@ -274,7 +240,6 @@
pointer-events: auto !important;
}
.videocontainer>a.status,
.videocontainer>a.displayname {
display: inline-block;
position: absolute;
@@ -287,53 +252,164 @@
z-index: 2;
}
.videocontainer>span.audioMuted {
display: inline-block;
position: absolute;
color: #FFFFFF;
top: 0;
padding: 8px 5px;
width: 25px;
/**
* Video thumbnail toolbar icon.
*/
.videocontainer .toolbar-icon {
font-size: 8pt;
text-shadow: 0px 1px 0px rgba(255,255,255,.3), 0px -1px 0px rgba(0,0,0,.7);
border: 0px;
z-index: 3;
text-align: center;
text-shadow: 0px 1px 0px rgba(255,255,255,.3), 0px -1px 0px rgba(0,0,0,.7);
color: #FFFFFF;
width: 12px;
line-height: $thumbnailToolbarHeight;
height: $thumbnailToolbarHeight;
padding: 0;
border: 0;
margin: 0px 5px 0px 0px;
float: left;
}
.videocontainer>span.videoMuted {
/**
* Toolbar icon internal i elements (font icons).
*/
.toolbar-icon>i {
line-height: $thumbnailToolbarHeight;
}
/**
* Toolbar icons positioned on the right.
*/
.toolbar-icon.right {
float: right;
margin: 0px 0px 0px 5px;
}
#raisehandindicator {
background: $raiseHandBg;
}
#connectionindicator {
background: $connectionIndicatorBg;
}
.videocontainer__toptoolbar span.indicator {
position: relative;
font-size: 8pt;
text-align: center;
line-height: $thumbnailToolbarHeight;
display: none;
padding: 0;
margin-right: 5px;
float: left;
@include circle($thumbnailIndicatorSize);
box-sizing: border-box;
z-index: 3;
background: $dominantSpeakerBg;
color: $thumbnailPictogramColor;
border: $thumbnailIndicatorBorder solid $thumbnailPictogramColor;
.indicatoricon {
position: absolute;
top: 50%;
left: 0;
@include transform(translateY(-50%));
width: $thumbnailIndicatorSize - 2 * $thumbnailIndicatorBorder;
height: $thumbnailIndicatorSize - 2 * $thumbnailIndicatorBorder;
line-height: $thumbnailIndicatorSize - 2 * $thumbnailIndicatorBorder;
}
.connection {
position: relative;
margin: 0 auto;
width: 12px;
height: 8px;
&_empty
{
@include topLeft();
max-width: 12px;
width: 12px;
color: #8B8B8B;/*#FFFFFF*/
overflow: hidden;
}
&_lost
{
@include topLeft();
max-width: 12px;
width: 12px;
color: #8B8B8B;
overflow: visible;
}
&_full
{
@include topLeft();
max-width: 12px;
width: 12px;
color: #FFFFFF;/*#15A1ED*/
overflow: hidden;
}
}
.icon-connection,
.icon-connection-lost {
font-size: 6pt;
}
}
.remotevideomenu
{
display: inline-block;
position: absolute;
color: #FFFFFF;
top: 0;
top: 0px;
right: 0;
padding: 8px 5px;
width: 25px;
margin: 7px;
z-index: 3;
width: 18px;
height: 13px;
color: #FFF;
font-size: 8pt;
text-shadow: 0px 1px 0px rgba(255,255,255,.3), 0px -1px 0px rgba(0,0,0,.7);
border: 0px;
z-index: 3;
}
.videocontainer>span.indicator {
bottom: 0px;
left: 0px;
width: 25px;
height: 25px;
z-index: 3;
text-align: center;
border-radius: 50%;
background: #21B9FC;
margin: 5px;
display: inline-block;
/**
* Audio indicator on video thumbnails.
*/
.videocontainer>span.audioindicator {
position: absolute;
color: #FFFFFF;
font-size: 11pt;
border: 0px;
}
display: inline-block;
left: 6px;
top: 50%;
margin-top: -17px;
width: 6px;
height: 35px;
z-index: 2;
border: none;
#indicatoricon {
padding-top: 5px;
.audiodot-top,
.audiodot-bottom,
.audiodot-middle {
opacity: 0;
display: inline-block;
@include circle(5px);
background: $audioLevelShadow;
margin: 1px 0 1px 0;
transition: opacity .25s ease-in-out;
-moz-transition: opacity .25s ease-in-out;
}
span.audiodot-top::after,
span.audiodot-bottom::after,
span.audiodot-middle::after {
content: "";
display: inline-block;
width: 5px;
height: 5px;
border-radius: 50%;
-webkit-filter: blur(0.5px);
filter: blur(0.5px);
background: $audioLevelBg;
}
}
#reloadPresentation {
@@ -366,39 +442,40 @@
width: 300px;
height: 300px;
margin: auto;
overflow: hidden;
position: relative;
}
#dominantSpeakerAudioLevel {
position: absolute;
top: 0px;
left: 0px;
z-index: 2;
visibility: inherit;
}
#mixedstream {
display:none !important;
}
#dominantSpeakerAvatar {
#dominantSpeakerAvatar,
.dynamic-shadow {
width: 200px;
height: 200px;
}
#dominantSpeakerAvatar {
top: 50px;
margin: auto;
position: relative;
border-radius: 100px;
z-index: 3;
visibility: inherit;
background-color: #000000;
}
.userAvatar {
height: 100%;
.dynamic-shadow {
border-radius: 50%;
position: absolute;
left: 0;
border-radius: 2px;
top: 50%;
left: 50%;
margin: -100px 0 0 -100px;
transition: box-shadow 0.3s ease;
}
.userAvatar {
@include circle(60px);
@include absoluteAligning();
}
.sharedVideoAvatar {
@@ -436,17 +513,49 @@
filter: grayscale(.5) opacity(0.8);
}
.remoteVideoProblemFilter {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
.videoProblemFilter {
-webkit-filter: blur(10px) grayscale(.5) opacity(0.8);
filter: blur(10px) grayscale(.5) opacity(0.8);
}
#videoConnectionMessage {
.videoThumbnailProblemFilter {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
#remoteConnectionMessage {
display: none;
position: absolute;
width: auto;
z-index: 2;
font-weight: 600;
font-size: 14px;
text-align: center;
color: #FFF;
opacity: .80;
text-shadow: 0px 0px 1px rgba(0,0,0,0.3),
0px 1px 1px rgba(0,0,0,0.3),
1px 0px 1px rgba(0,0,0,0.3),
0px 0px 1px rgba(0,0,0,0.3);
background: rgba(0,0,0,.5);
border-radius: 5px;
padding: 5px;
padding-left: 10px;
padding-right: 10px;
}
#localConnectionMessage {
display: none;
position: absolute;
width: 100%;
top:50%;
z-index: 1011;
z-index: 2;
font-weight: 600;
font-size: 14px;
text-align: center;
@@ -458,46 +567,78 @@
0px 0px 1px rgba(0,0,0,0.3);
}
#videoResolutionLabel {
display: none;
.video-state-indicator {
background: $videoStateIndicatorBackground;
color: $videoStateIndicatorColor;
font-size: 13px;
line-height: 20px;
text-align: center;
min-width: 40px;
height: 40px;
padding: 10px 5px;
border-radius: 50%;
position: absolute;
top: 5px;
right: 5px;
background: rgba(0,0,0,.5);
padding: 10px;
color: rgba(255,255,255,.5);
box-sizing: border-box;
}
#videoResolutionLabel,
.centeredVideoLabel {
display: none;
z-index: 1011;
}
.centeredVideoLabel {
display: none;
position: absolute;
bottom: 45%;
top: auto;
right: auto;
left: auto;
line-height: 28px;
height: 28px;
width: auto;
padding: 5px;
margin-right: auto;
margin-left: auto;
background: rgba(0,0,0,.5);
color: #FFF;
z-index: 1011;
border-radius: 2px;
-webkit-transition: all 2s 2s linear;
transition: all 2s 2s linear;
&.moveToCorner {
bottom: auto;
}
}
.moveToCorner {
top: 5px;
right: 50px; /*leave free space for the HD label*/
margin-right: 0px;
margin-left: auto;
background: rgba(0,0,0,.3);
color: rgba(255,255,255,.5);
position: absolute;
top: 30px;
right: 30px;
}
.hidden {
.moveToCorner + .moveToCorner {
right: 80px;
}
.filmstripToolbar {
width: 20px;
position: absolute;
right: 4px;
bottom: 20px;
z-index: 6;
button {
font-size: 14px;
line-height: 1.2;
text-align: center;
background: transparent;
opacity: 0.7;
height: auto;
width: 100%;
padding: 0;
margin: 0 1px;
border: none;
-webkit-appearance: none;
&:hover {
opacity: 1;
}
i {
cursor: pointer;
}
}
}
.filmstripToolbar + #remoteVideos {
padding-right: 24px;
}

View File

@@ -0,0 +1,67 @@
.select2-container.aui-select2-container {
background-color: transparent !important;
a.select2-choice {
height: 28px !important;
line-height: 18px !important;
width: 100% !important;
background-color: $selectBg !important;
border-color: $selectBg !important;
color: $selectFontColor !important;
text-shadow: none !important;
font-size: 12px !important;
margin: 0 auto !important;
&:after {
border-top-color: $selectFontColor;
}
}
&.select2-dropdown-open{
a.select2-choice {
background-color: $selectActiveBg !important;
border-color: $selectActiveBg !important;
}
}
}
.select2-drop.aui-select2-drop.aui-style-default {
z-index: $dropdownZ;
background-color: $selectActiveBg;
border-color: $selectActiveBg;
.select2-results{
background-color: $selectActiveBg;
border-color: $selectActiveBg;
&::-webkit-scrollbar {
background-color: transparent;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
&::-webkit-scrollbar-track-piece {
background-color: transparent;
}
&::-webkit-scrollbar-thumb {
background-color: $selectActiveItemBg;
}
.select2-result{
&.select2-highlighted{
background-color: $selectActiveItemBg;
}
.select2-result-label{
font-size: 12px;
line-height: 20px;
}
}
}
}
.select2-drop-mask {
z-index: $dropdownMaskZ;
}

View File

@@ -0,0 +1,85 @@
.button-control {
box-sizing: border-box;
display: inline-block;
border: 1px solid $buttonBorder;
vertical-align: baseline;
height: 30px;
min-width: 60px;
padding: 4px 10px;
margin: 0;
line-height: 1.5em;
outline: none;
background-color: transparent;
float: right;
font-size: 14px;
margin-left: 10px;
color: $buttonColor;
font-weight: $buttonFontWeight;
@include transition(background-color .1s ease-out);
&[disabled] {
color: #666;
cursor: default;
}
&_full-width {
margin: 0;
width: 100%;
}
&:hover {
border: 1px solid $buttonHoverBorder;
background-color: $buttonHoverBackground;
@include transition(background-color .1s ease-in);
}
&:active {
@include box-shadow(0, 0, 1px, $buttonShadowColor, true);
}
&_light {
color: $defaultDarkColor;
background-color: $buttonLightBackground;
border: 1px solid $buttonLightBorder;
&:hover {
border: 1px solid $buttonLightHoverBorder;
background-color: $buttonLightHoverBackground;
}
}
&_link {
color: $buttonLinkColor;
background-color: $buttonLinkBackground;
&:hover {
background-color: $buttonLinkBackground;
}
}
&_primary {
background-color: $primaryButtonBackground;
border: 1px solid $primaryButtonBackground;
color: $primaryButtonColor !important;
font-weight: $primaryButtonFontWeight;
&:hover {
border: 1px solid $primaryButtonHoverBackground;
background-color: $primaryButtonHoverBackground;
}
&[disabled] {
color: $primaryButtonColor;
}
}
&_close {
color: $defaultFontColor;
}
&_submit {
color: $linkFontColor;
&:hover {
color: $linkHoverFontColor;
}
}
}

View File

@@ -0,0 +1,69 @@
.input-control {
padding: 16px 0;
&:first-child {
padding-top: 0;
}
&:last-child {
padding-bottom: 0;
}
&__text {
margin: 8px 0;
font-size: 1em
}
&__label {
font-size: 1em;
font-weight: $labelFontWeight;
}
&__input {
&:last-child {
margin-bottom: inherit;
}
&::selection {
background-color: $defaultDarkSelectionColor;
}
}
&__em {
color: $inputControlEmColor;
}
&__hint {
margin-top: 0;
font-size: $hintFontSize;
span {
vertical-align: middle;
}
}
&__container {
position: relative;
width: 100%;
margin-top: 5px;
margin-bottom: 5px;
@include flex();
.button-control {
margin: 1px 0 1px 10px;
}
}
&__right {
position: absolute;
right: 0;
}
}
/**
* Set a specific color for read only style.
*/
input:read-only {
color: $readOnlyInputColor;
}

View File

@@ -1,3 +1,9 @@
/* Functions BEGIN */
@import 'functions';
/* Functions END */
/* Variables BEGIN */
@import 'variables';
@@ -10,6 +16,12 @@
/* Mixins END */
/* Animations BEGIN */
@import "animations";
/* Animations END */
/* Fonts BEGIN */
@import 'font';
@@ -22,9 +34,11 @@
@import 'toastr';
@import 'base';
@import 'overlay/overlay';
@import 'inlay';
@import 'reload_overlay/reload_overlay';
@import 'modals/dialog';
@import 'modals/feedback/feedback';
@import 'videolayout_default';
@import 'jquery-impromptu';
@import 'modaldialog';
@import 'notice';
@import 'popup_menu';
@import 'recording';
@@ -38,8 +52,16 @@
@import 'toolbars';
@import 'side_toolbar_container';
@import 'device_settings_dialog';
@import 'feedback';
@import 'jquery.contextMenu';
@import 'keyboard-shortcuts';
@import 'redirect_page';
@import 'input-control/input-control';
@import 'shortcuts/main';
@import 'buttons/button-control';
@import "modals/invite/invite";
@import "connection-info";
@import 'aui-components/dropdown';
@import '404';
@import 'policy';
/* Modules END */
/* Modules END */

78
css/modals/_dialog.scss Normal file
View File

@@ -0,0 +1,78 @@
.dialog {
visibility: visible;
height: auto;
h3 {
color: $auiDialogColor;
}
.aui {
&-icon {
color: $auiDialogColor;
&-small {
width: 14px;
height: 14px;
}
}
&-iconfont-close-dialog {
cursor: pointer;
right: 20px;
position: absolute;
top: -49px;
}
&-dialog2 {
&-header, &-footer {
background-color: $auiDialogBg;
border: none;
}
&-header {
height: em(58, 12);
border-bottom: 1px solid $auiBorderColor;
h2 {
font-size: em(20, 12);
font-weight: $dialogTitleFontWeight;
color: $auiDialogColor;
}
&-main {
padding-right: 0;
}
}
&-footer {
border-top: 1px solid $auiBorderColor;
}
&-content {
font-size: em(14, 12);
min-height: 0;
background-color: $auiDialogContentBg;
color: $auiDialogColor;
p,span, h3 {
font-weight: $labelFontWeight;
}
&:last-child {
border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px;
}
&:first-child {
border-top-right-radius: 5px;
border-top-left-radius: 5px;
}
}
}
}
.input-control:not(:last-child) {
border-bottom: 1px solid $auiBorderColor;
}
}

View File

@@ -0,0 +1,129 @@
@-webkit-keyframes shake-rotate {
0% {
-webkit-transform:scale(1) rotate(0deg);
transform:scale(1) rotate(0deg)
}
50% {
-webkit-transform:scale(.8) rotate(-5deg);
transform:scale(.8) rotate(-5deg)
}
to {
-webkit-transform:scale(1) rotate(3deg);
transform:scale(1) rotate(3deg)
}
}
@keyframes shake-rotate {
0% {
-webkit-transform:scale(1) rotate(0deg);
transform:scale(1) rotate(0deg)
}
50% {
-webkit-transform:scale(.8) rotate(-5deg);
transform:scale(.8) rotate(-5deg)
}
to {
-webkit-transform:scale(1) rotate(3deg);
transform:scale(1) rotate(3deg)
}
}
.shake-rotate {
display: inline-block;
-webkit-animation-duration: .4s;
animation-duration: .4s;
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
-webkit-animation-name: shake-rotate;
animation-name: shake-rotate;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out
}
.feedback.aui-dialog2{
.aui-dialog2{
&-header {
background-color: $feedbackContentBg;
border-bottom-color: transparent;
padding-top: 30px;
h2 {
color: $feedbackTextColor;
text-align: center;
}
}
&-content {
background-color: $feedbackContentBg;
text-align: center;
padding: 10px 40px 20px 40px;
.input-control{
&__input {
background-color: $feedbackInputBg;
color: $feedbackInputTextColor;
&::-webkit-input-placeholder {
color: $feedbackInputPlaceholderColor;
}
&::-moz-placeholder { /* Firefox 19+ */
color: $feedbackInputPlaceholderColor;
}
&:-ms-input-placeholder {
color: $feedbackInputPlaceholderColor;
}
}
}
.rating {
line-height: 1.2;
text-align: center;
margin-top: 10px;
.star-label {
height: 16px;
font-size: 14px;
color: $rateStarLabelColor;
}
.star-btn {
display: inline-block;
color: $rateStarDefault;
font-size: $rateStarSize;
position: relative;
cursor: pointer;
outline: none;
text-decoration: none;
@include transition(all .2s ease);
&.starHover,
&.active,
&:hover {
color: $rateStarActivity;
};
}
}
.details {
padding-left: 60px;
padding-right: 60px;
margin-top: 20px;
textarea {
min-height: 100px;
}
}
}
&-footer {
background-color: $feedbackContentBg;
border-top-color: transparent;
.button-control {
color: $feedbackCancelFontColor;
}
}
}
}

View File

@@ -0,0 +1,7 @@
/*
* Sets the default cursor the remove password link. The link doesn't use
* the href attribute, so we need to set the cursor manually.
*/
#inviteDialogRemovePassword {
cursor: hand;
}

View File

@@ -1,48 +1,31 @@
.overlay {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: $overlayZ;
background: #21B9FC; /* Old browsers */
opacity: 0.75;
display: block;
}
&__container {
top: 0;
left: 0;
width: 100%;
height: 100%;
position: fixed;
z-index: $overlayZ;
background: $defaultBackground;
}
.overlay_transparent {
background: rgba(22, 185, 252, .9);
}
&__content {
position: absolute;
margin: 0 auto;
height: 100%;
width: 56%;
left: 50%;
@include transform(translateX(-50%));
.overlay_container {
width: 100%;
height: 100%;
position: fixed;
z-index: $overlayZ;
}
&_bottom {
position: absolute;
bottom: 0;
}
}
.overlay_content {
color: #fff;
font-weight: normal;
font-size: 20px;
text-align: center;
width: 400px;
height: 250px;
top: 50%;
left: 50%;
position:absolute;
margin-top: -125px;
margin-left: -200px;
}
.overlay_text_small {
font-size: 18px;
}
.overlay_icon {
position: relative;
z-index: 1013;
float: none;
font-size: 100px;
}
&__policy {
position: absolute;
bottom: 24px;
width: 100%;
}
}

View File

@@ -0,0 +1,17 @@
.reload_overlay_title {
display: block;
font-size: 16px;
line-height: 20px;
}
.reload_overlay_msg {
display: block;
font-size: 12px;
line-height: 30px;
}
#reloadProgressBar {
width: 180px;
margin: 5px auto;
}

View File

@@ -5,10 +5,15 @@
width: 100%;
height: 100%;
position: fixed;
z-index: $overlayZ;
z-index: $ringingZ;
background: linear-gradient(transparent, #000);
opacity: 0.8;
&.solidBG {
background: $defaultBackground;
opacity: 1;
}
&__content {
position: absolute;
width: 400px;
@@ -33,4 +38,4 @@
color: #333;
}
}
}
}

4
css/shortcuts/_main.scss Normal file
View File

@@ -0,0 +1,4 @@
/* Import shortcuts blocks */
@import 'regular-key';
@import 'shortcuts-list';

View File

@@ -0,0 +1,11 @@
.regular-key {
display: table-cell;
width: 25px;
height: 20px;
padding: 0;
text-align: center;
vertical-align: middle;
font-family: $baseFontFamily;
color: $defaultDarkColor;
font-size: 12px;
}

View File

@@ -0,0 +1,12 @@
.shortcuts-list {
padding: 0;
&__description {
margin-left: em(16, 14);
vertical-align: top;
}
&__item {
margin-bottom: em(7, 14);
}
}

65
css/themes/_light.scss Normal file
View File

@@ -0,0 +1,65 @@
/**
* Buttons
*/
$buttonBackground: #f5f5f5;
$buttonHoverBackground: #e9e9e9;
$buttonBorder: #ccc;
$buttonHoverBorder: #999;
$buttonColor: #333;
$buttonLightBackground: #f5f5f5;
$buttonLightHoverBackground: #e9e9e9;
$buttonLightBorder: #ccc;
$buttonLightHoverBorder: #999;
$buttonLinkBackground: transparent;
$buttonLinkColor: #0090e8;
$primaryButtonBackground: #3572b0;
$primaryButtonHoverBackground: #2a67a5;
$primaryButtonColor: #fff;
$primaryButtonFontWeight: 400;
$buttonShadowColor: #192d4f;
/**
* Color variables
**/
$defaultBackground: #474747;
/**
* Connection indicator
**/
$downloadConnectionIconColor: #4abd04;
$uploadConnectionIconColor: #ffa800;
/**
* Dialog colors
**/
$auiDialogColor: #333;
$auiDialogBg: #f5f5f5;
$auiDialogContentBg: #fff;
$auiBorderColor: #ccc;
$dialogTitleFontWeight: 400;
// Main controls
$inputBackground: #fff;
$inputBorderColor: #ccc;
$inputColor: #333;
$placeHolderColor: #a7a7a7;
$readOnlyInputColor: #a7a7a7;
$defaultDarkSelectionColor: #ccc;
$buttonFontWeight: 400;
$labelFontWeight: 400;
$hintFontSize: em(13, 14);
$linkFontColor: #3572b0;
$linkHoverFontColor: darken(#3572b0, 10%);
$dropdownColor: #333;
// Popover colors
$popoverBg: #000;
$popoverFontColor: #ffffff;
$popupMenuSelectedItemBackground: rgba(256, 256, 256, .2);
// Toolbar
$splitterColor: #ccc;

View File

@@ -82,6 +82,11 @@ api.executeCommand('toggleContactList', [])
api.executeCommand('toggleShareScreen', [])
```
* **hangup** - Hangups the call. No arguments are required.
```
api.executeCommand('hangup', [])
```
You can also execute multiple commands using the method ```executeCommands```.
```
api.executeCommands(commands)
@@ -156,6 +161,8 @@ roomName: room //the room name of the conference
}
```
* **readyToClose** - event notification fired when Jitsi Meet is ready to be closed (hangup operations are completed).
You can also add multiple event listeners by using ```addEventListeners```.
This method requires one argument of type Object. The object argument must
have keys with the names of the events and values the listeners of the events.

84
doc/coding-style.md Normal file
View File

@@ -0,0 +1,84 @@
# Comments
* Comments documenting the source code are required.
* Comments from which documentation is automatically generated are **not**
subject to case-by-case decisions. Such comments are used, for example, on
types and their members. Examples of tools which automatically generate
documentation from such comments include JSDoc, Javadoc, Doxygen.
* Comments which are not automatically processed are strongly encouraged. They
are subject to case-by-case decisions. Such comments are often observed in
function bodies.
* Comments should be formatted as proper English sentences. Such formatting pays
attention to, for example, capitalization and punctuation.
# Duplication
* Don't copy-paste source code. Reuse it.
# Formatting
* Line length is limited to 80 characters.
* Sort by alphabetical order in order to make the addition of new entities as
easy as looking a word up in a dictionary. Otherwise, one risks duplicate
entries (with conflicting values in the cases of key-value pairs). For
example:
* Within an `import` of multiple names from a module, sort the names in
alphabetical order. (Of course, the default name stays first as required by
the `import` syntax.)
````javascript
import {
DOMINANT_SPEAKER_CHANGED,
JITSI_CLIENT_CONNECTED,
JITSI_CLIENT_CREATED,
JITSI_CLIENT_DISCONNECTED,
JITSI_CLIENT_ERROR,
JITSI_CONFERENCE_JOINED,
MODERATOR_CHANGED,
PEER_JOINED,
PEER_LEFT,
RTC_ERROR
} from './actionTypes';
````
* Within a group of imports (e.g. groups of imports delimited by an empty line
may be: third-party modules, then project modules, and eventually the
private files of a module), sort the module names in alphabetical order.
````javascript
import React, { Component } from 'react';
import { connect } from 'react-redux';
````
# Indentation
* Align `switch` and `case`/`default`. Don't indent the `case`/`default` more
than its `switch`.
````javascript
switch (i) {
case 0:
...
break;
default:
...
}
````
# Naming
* An abstraction should have one name within the project and across multiple
projects. For example:
* The instance of lib-jitsi-meet's `JitsiConnection` type should be named
`connection` or `jitsiConnection` in jitsi-meet-react, not `client`.
* The class `ReducerRegistry` should be defined in ReducerRegistry.js and its
imports in other files should use the same name. Don't define the class
`Registry` in ReducerRegistry.js and then import it as `Reducers` in other
files.

View File

@@ -20,6 +20,7 @@ server {
root /usr/share/jitsi-meet;
index index.html index.htm;
error_page 404 /404.html;
location /config.js {
alias /etc/jitsi/meet/jitsi-meet.example.com-config.js;

Binary file not shown.

View File

@@ -41,4 +41,7 @@
<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" />
<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" />
<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" />
<glyph unicode="&#xe91e;" glyph-name="raised-hand" d="M982 790v-620c0-94-78-170-172-170h-310c-46 0-90 18-122 50l-336 342s54 52 56 52c10 8 22 12 34 12 10 0 18-2 26-6 2 0 184-104 184-104v508c0 36 28 64 64 64s64-28 64-64v-300h42v406c0 36 28 64 64 64s64-28 64-64v-406h42v364c0 36 28 64 64 64s64-28 64-64v-364h44v236c0 36 28 64 64 64s64-28 64-64z" />
<glyph unicode="&#xe91f;" glyph-name="menu-up" d="M512 682l256-256-60-60-196 196-196-196-60 60z" />
<glyph unicode="&#xe920;" glyph-name="menu-down" d="M708 658l60-60-256-256-256 256 60 60 196-196z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Binary file not shown.

View File

@@ -69,8 +69,10 @@
"tags": [
"account_circle"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 11,
"order": 60,
@@ -93,8 +95,10 @@
"tags": [
"autorenew"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 68,
"order": 84,
@@ -117,8 +121,10 @@
"tags": [
"call_end"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 122,
"order": 63,
@@ -141,8 +147,10 @@
"tags": [
"chat_bubble_outline"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 148,
"order": 61,
@@ -165,8 +173,10 @@
"tags": [
"cloud_download"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 164,
"order": 99,
@@ -189,8 +199,10 @@
"tags": [
"mode_edit"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 185,
"order": 89,
@@ -213,8 +225,10 @@
"tags": [
"description"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 206,
"order": 85,
@@ -237,8 +251,10 @@
"tags": [
"dialer_sip"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 215,
"order": 95,
@@ -261,8 +277,10 @@
"tags": [
"eject"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 242,
"order": 98,
@@ -275,6 +293,58 @@
"setId": 2,
"iconIdx": 243
},
{
"icon": {
"paths": [
"M512 342l256 256-60 60-196-196-196 196-60-60z"
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"expand_less"
],
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 256,
"order": 106,
"ligatures": "expand_less",
"prevSize": 32,
"code": 59679,
"name": "menu-up"
},
"setIdx": 0,
"setId": 2,
"iconIdx": 257
},
{
"icon": {
"paths": [
"M708 366l60 60-256 256-256-256 60-60 196 196z"
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"expand_more"
],
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 257,
"order": 107,
"ligatures": "expand_more",
"prevSize": 32,
"code": 59680,
"name": "menu-down"
},
"setIdx": 0,
"setId": 2,
"iconIdx": 258
},
{
"icon": {
"paths": [
@@ -285,8 +355,10 @@
"tags": [
"fullscreen"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 350,
"order": 94,
@@ -309,8 +381,10 @@
"tags": [
"fullscreen_exit"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 351,
"order": 92,
@@ -333,8 +407,10 @@
"tags": [
"star"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 363,
"order": 101,
@@ -357,8 +433,10 @@
"tags": [
"lock_open"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 473,
"order": 66,
@@ -381,8 +459,10 @@
"tags": [
"lock_outline"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 474,
"order": 65,
@@ -405,8 +485,10 @@
"tags": [
"sync"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 482,
"order": 67,
@@ -429,8 +511,10 @@
"tags": [
"mic"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 492,
"order": 68,
@@ -453,8 +537,10 @@
"tags": [
"mic_none"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 493,
"order": 69,
@@ -477,8 +563,10 @@
"tags": [
"mic_off"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 494,
"order": 70,
@@ -491,6 +579,32 @@
"setId": 2,
"iconIdx": 495
},
{
"icon": {
"paths": [
"M982 234v620c0 94-78 170-172 170h-310c-46 0-90-18-122-50l-336-342s54-52 56-52c10-8 22-12 34-12 10 0 18 2 26 6 2 0 184 104 184 104v-508c0-36 28-64 64-64s64 28 64 64v300h42v-406c0-36 28-64 64-64s64 28 64 64v406h42v-364c0-36 28-64 64-64s64 28 64 64v364h44v-236c0-36 28-64 64-64s64 28 64 64z"
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"pan_tool"
],
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 539,
"order": 105,
"ligatures": "pan_tool",
"prevSize": 32,
"code": 59678,
"name": "raised-hand"
},
"setIdx": 0,
"setId": 2,
"iconIdx": 540
},
{
"icon": {
"paths": [
@@ -501,8 +615,10 @@
"tags": [
"people_outline"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 549,
"order": 100,
@@ -525,8 +641,10 @@
"tags": [
"person_add"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 559,
"order": 87,
@@ -549,8 +667,10 @@
"tags": [
"play_circle_outline"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 590,
"order": 82,
@@ -573,8 +693,10 @@
"tags": [
"settings"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 665,
"order": 81,
@@ -597,8 +719,10 @@
"tags": [
"star_border"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 717,
"order": 76,
@@ -621,8 +745,10 @@
"tags": [
"tv"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 783,
"order": 93,
@@ -645,8 +771,10 @@
"tags": [
"videocam"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 798,
"order": 77,
@@ -669,8 +797,10 @@
"tags": [
"videocam_off"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 799,
"order": 78,
@@ -693,8 +823,10 @@
"tags": [
"volume_up"
],
"grid": 0
"grid": 0,
"attrs": []
},
"attrs": [],
"properties": {
"id": 821,
"order": 79,

1
index.android.js Normal file
View File

@@ -0,0 +1 @@
export * from './react/index.native';

View File

@@ -6,6 +6,37 @@
<script>
window.indexLoadedTime = window.performance.now();
console.log("(TIME) index.html loaded:\t", indexLoadedTime);
// XXX the code below listeners for errors and displays an error message
// in the document body when any of the required files fails to load.
// The intention is to prevent from displaying broken page.
var criticalFiles = [
"config.js",
"utils.js",
"do_external_connect.js",
"interface_config.js",
"lib-jitsi-meet.min.js",
"app.bundle.min.js",
"all.css"
];
var loadErrHandler = function(e) {
var target = e.target;
// Error on <script> and <link>(CSS)
// <script> will have .src and <link> .href
var fileRef = (target.src ? target.src : target.href);
if (("SCRIPT" === target.tagName || "LINK" === target.tagName)
&& criticalFiles.some(
function(file) { return fileRef.indexOf(file) !== -1 })) {
window.onload = function() {
document.body.innerHTML
= "The application failed to load, missing file: "
+ fileRef;
};
window.removeEventListener(
'error', loadErrHandler, true /* capture phase */);
}
}
window.addEventListener(
'error', loadErrHandler, true /* capture phase type of listener */);
</script>
<script><!--#include virtual="/config.js" --></script><!-- adapt to your needs, i.e. set hosts and bosh path -->
<script src="utils.js?v=1"></script>
@@ -30,15 +61,15 @@
<a class="poweredby" href="http://jitsi.org" target="_new" ><span data-i18n="poweredby"></span> jitsi.org</a>
<div id="enter_room_container">
<div id="enter_room_form" >
<div id="domain_name"></div>
<div id="enter_room">
<input id="enter_room_field" type="text" autofocus/>
<div class="icon-reload" id="reload_roomname"></div>
<input id="enter_room_button" type="button" data-i18n="[value]welcomepage.go" value="GO" />
<div id="enter_room_form" >
<div id="domain_name"></div>
<div id="enter_room">
<input id="enter_room_field" type="text" autofocus/>
<div class="icon-reload" id="reload_roomname"></div>
<input id="enter_room_button" type="button" data-i18n="[value]welcomepage.go" value="GO" />
</div>
</div>
</div>
</div>
<div id="brand_header"></div>
<input type='checkbox' name='checkbox' id="disable_welcome"/>
@@ -100,119 +131,19 @@
<div id="notice" class="notice" style="display: none">
<span id="noticeText" class="noticeText"></span>
</div>
<span id="mainToolbar" class="toolbar"></span>
<div id="mainToolbar" class="toolbar"></div>
</div>
<div id="subject" class="hide"></div>
<div id="extendedToolbar" class="toolbar">
<a class="button" id="toolbar_button_profile" data-container="body" data-placement="right" data-i18n="[content]toolbar.profile" content="Edit your profile">
<img id="avatar" src="images/avatar2.png"/>
</a>
<span id="authentication" class="authentication" style="display: none">
<a class="button icon-avatar" id="toolbar_button_authentication" data-i18n="[content]toolbar.authenticate"></a>
<ul class="loginmenu extendedToolbarPopup">
<span class="loginmenuPadding"></span>
<li id="toolbar_auth_identity"></li>
<li id="toolbar_button_login">
<a class="authButton" data-i18n="toolbar.login"></a>
</li>
<li id="toolbar_button_logout">
<a class="authButton" data-i18n="toolbar.logout"></a>
</li>
</ul>
</span>
<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">
<span id="numberOfParticipants"></span>
</a>
<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">
<span id="unreadMessages"></span>
</a>
<a class="button" id="toolbar_button_record" data-container="body" data-toggle="popover" data-placement="right" style="display: none"></a>
<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>
<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>
<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">
<ul id="sharedVideoMutedPopup" class="loginmenu extendedToolbarPopup">
<li data-i18n="[html]toolbar.sharedVideoMutedPopup"></li>
</ul>
</a>
<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>
<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>
<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>
<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>
<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>
<a class="button icon-feedback" id="feedbackButton" data-container="body" data-toggle="popover" data-placement="right" data-i18n="[content]feedback"></a>
<div id="sideToolbarContainer">
<div id="profile_container" class="sideToolbarContainer__inner">
<div class="title" data-i18n="profile.title"></div>
<div class="sideToolbarBlock first">
<label class="first" data-i18n="profile.setDisplayNameLabel"></label>
<input type="text" id="setDisplayName" data-i18n="[placeholder]settings.name" placeholder="Name">
</div>
<div class="sideToolbarBlock">
<label data-i18n="profile.setEmailLabel"></label>
<input type="text" id="setEmail" placeholder="Enter e-mail">
</div>
</div>
<div id="chat_container" class="sideToolbarContainer__inner">
<div id="nickname">
<span data-i18n="chat.nickname.title"></span>
<form>
<input type='text' id="nickinput" data-i18n="[placeholder]chat.nickname.popover" autofocus>
</form>
</div>
<div id="chatconversation"></div>
<audio id="chatNotification" src="sounds/incomingMessage.wav" preload="auto"></audio>
<textarea id="usermsg" data-i18n="[placeholder]chat.messagebox" autofocus></textarea>
<div id="smileysarea">
<div id="smileys" id="toggle_smileys">
<img src="images/smile.svg"/>
</div>
</div>
</div>
<div id="contacts_container" class="sideToolbarContainer__inner">
<div class="title" data-i18n="contactlist"></div>
<ul id="contacts"></ul>
</div>
<div id="settings_container" class="sideToolbarContainer__inner">
<div class="title" data-i18n="settings.title"></div>
<select id="languages_selectbox" class="first hide"></select>
<div id="deviceOptionsTitle" class="subTitle hide" data-i18n="settings.audioVideo"></div>
<div id="devicesOptions" class="hide">
<div class="sideToolbarBlock first">
<label class="first" data-i18n="settings.selectCamera"></label>
<select id="selectCamera"></select>
</div>
<div class="sideToolbarBlock">
<label data-i18n="settings.selectMic"></label>
<select id="selectMic"></select>
</div>
<div class="sideToolbarBlock">
<label data-i18n="settings.selectAudioOutput"></label>
<select id="selectAudioOutput"></select>
</div>
</div>
<div id="moderatorOptionsTitle" class="subTitle hide" data-i18n="settings.moderator"></div>
<div id = "startMutedOptions" class="hide">
<div class="sideToolbarBlock first">
<input type="checkbox" id="startAudioMuted">
<label class="startMutedLabel" for="startAudioMuted" data-i18n="settings.startAudioMuted"></label>
</div>
<div class="sideToolbarBlock">
<input type="checkbox" id="startVideoMuted">
<label class="startMutedLabel" for="startVideoMuted" data-i18n="settings.startVideoMuted"></label>
</div>
</div>
<div id="followMeOptions" class="sideToolbarBlock hide">
<input type="checkbox" id="followMeCheckBox">
<label class="followMeLabel" for="followMeCheckBox" data-i18n="settings.followMe"></label>
</div>
<a id="downloadlog" data-container="body" data-toggle="popover" data-placement="right" data-i18n="[data-content]downloadlogs" ><i class="icon-download"></i></a>
</div>
</div>
<div id="extendedToolbar" class="toolbar">
<div id="extendedToolbarButtons"></div>
<a class="button icon-feedback" id="feedbackButton"></a>
<div id="sideToolbarContainer"></div>
</div>
<div id="videospace">
<div id="largeVideoContainer" class="videocontainer">
<div id="presentation"></div>
<div id="sharedVideo"><div id="sharedVideoIFrame"></div></div>
<div id="etherpad"></div>
<a target="_new"><div class="watermark leftwatermark"></div></a>
@@ -221,27 +152,31 @@
<span data-i18n="poweredby"></span> jitsi.org
</a>
<div id="dominantSpeaker">
<div class="dynamic-shadow"></div>
<img id="dominantSpeakerAvatar" src=""/>
<canvas id="dominantSpeakerAudioLevel"></canvas>
</div>
<span id="remoteConnectionMessage"></span>
<div id="largeVideoWrapper">
<video id="largeVideo" muted="true" autoplay></video>
</div>
<span id="videoConnectionMessage"></span>
<span id="videoResolutionLabel">HD</span>
<span id="recordingLabel" class="centeredVideoLabel">
<span id="localConnectionMessage"></span>
<span id="videoResolutionLabel" class="video-state-indicator moveToCorner">HD</span>
<span id="recordingLabel" class="video-state-indicator centeredVideoLabel">
<span id="recordingLabelText"></span>
<img id="recordingSpinner" class="recordingSpinner" src="images/spin.svg"></img>
</span>
</div>
<div id="remoteVideos">
<span id="localVideoContainer" class="videocontainer">
<span id="localVideoContainer" class="videocontainer videocontainer_small">
<div class="videocontainer__background"></div>
<span id="localVideoWrapper">
<!--<video id="localVideo" autoplay muted></video> - is now per stream generated -->
</span>
<audio id="localAudio" autoplay muted></audio>
<span class="focusindicator"></span>
<div class="videocontainer__toolbar"></div>
<div class="videocontainer__toptoolbar"></div>
<div class="videocontainer__hoverOverlay"></div>
</span>
<audio id="userJoined" src="sounds/joined.wav" preload="auto"></audio>
<audio id="userLeft" src="sounds/left.wav" preload="auto"></audio>
@@ -249,9 +184,8 @@
</div>
</div>
<div id="keyboard-shortcuts" class="keyboard-shortcuts" style="display:none;">
<div class="header"><h3 data-i18n="keyboardShortcuts.keyboardShortcuts"></h3></div>
<div class="content">
<ul id="keyboard-shortcuts-list" class="item">
<ul id="keyboard-shortcuts-list" class="shortcuts-list">
</ul>
</div>
</div>

1
index.ios.js Normal file
View File

@@ -0,0 +1 @@
export * from './react/index.native';

View File

@@ -1,4 +1,4 @@
var interfaceConfig = {
var interfaceConfig = { // eslint-disable-line no-unused-vars
CANVAS_EXTRA: 104,
CANVAS_RADIUS: 0,
SHADOW_COLOR: '#ffffff',
@@ -16,22 +16,59 @@ var interfaceConfig = {
SHOW_POWERED_BY: false,
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
APP_NAME: "Jitsi Meet",
LANG_DETECTION: false, // Allow i18n to detect the system language
INVITATION_POWERED_BY: true,
/**
* If we should show authentication block in profile
*/
AUTHENTICATION_ENABLE: true,
// the toolbar buttons line is intentionally left in one line, to be able
// to easily override values or remove them using regex
MAIN_TOOLBAR_BUTTONS: ['microphone', 'camera', 'desktop', 'invite', 'hangup'], // jshint ignore:line
TOOLBAR_BUTTONS: ['profile', 'authentication', 'microphone', 'camera', 'desktop', 'recording', 'security', 'invite', 'chat', 'etherpad', 'sharedvideo', 'fullscreen', 'sip', 'dialpad', 'settings', 'hangup', 'filmstrip', 'contacts'], // jshint ignore:line
/**
* The index of the splitter button in the main toolbar. The splitter
* button is a button in the toolbar that will be applied a special styling
* visually dividing the toolbar buttons.
*/
//MAIN_TOOLBAR_SPLITTER_INDEX: -1,
/**
* the toolbar buttons line is intentionally left in one line, to be able
* to easily override values or remove them using regex
*/
TOOLBAR_BUTTONS: [
//main toolbar
'microphone', 'camera', 'desktop', 'invite', 'fullscreen', 'hangup',
//extended toolbar
'profile', 'contacts', 'chat', 'recording', 'etherpad', 'sharedvideo', 'sip', 'dialpad', 'settings', 'raisehand', 'filmstrip'], // jshint ignore:line
/**
* Main Toolbar Buttons
* All of them should be in TOOLBAR_BUTTONS
*/
MAIN_TOOLBAR_BUTTONS: ['microphone', 'camera', 'desktop', 'invite', 'fullscreen', 'hangup'], // jshint ignore:line
SETTINGS_SECTIONS: ['language', 'devices', 'moderator'],
// Determines how the video would fit the screen. 'both' would fit the whole
// screen, 'height' would fit the original video height to the height of the
// screen, 'width' would fit the original video width to the width of the
// screen respecting ratio.
VIDEO_LAYOUT_FIT: 'both',
SHOW_CONTACTLIST_AVATARS: false,
/**
* Whether to only show the filmstrip (and hide the toolbar).
*/
filmStripOnly: false,
RANDOM_AVATAR_URL_PREFIX: false,
RANDOM_AVATAR_URL_SUFFIX: false,
FILM_STRIP_MAX_HEIGHT: 120
};
FILM_STRIP_MAX_HEIGHT: 120,
LOCAL_THUMBNAIL_RATIO_WIDTH: 16,
LOCAL_THUMBNAIL_RATIO_HEIGHT: 9,
REMOTE_THUMBNAIL_RATIO_WIDTH: 1,
REMOTE_THUMBNAIL_RATIO_HEIGHT: 1,
// Enables feedback star animation.
ENABLE_FEEDBACK_ANIMATION: false,
DISABLE_FOCUS_INDICATOR: false,
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
// disables the ringing sound when the RingOverlay is shown.
DISABLE_RINGING: false,
AUDIO_LEVEL_PRIMARY_COLOR: "rgba(255,255,255,0.4)",
AUDIO_LEVEL_SECONDARY_COLOR: "rgba(255,255,255,0.2)",
POLICY_LOGO: null
};

12
ios/Podfile Normal file
View File

@@ -0,0 +1,12 @@
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'jitsi-meet-react' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
# Pods for jitsi-meet-react
pod 'Crashlytics'
pod 'Fabric'
end

16
ios/Podfile.lock Normal file
View File

@@ -0,0 +1,16 @@
PODS:
- Crashlytics (3.8.3):
- Fabric (~> 1.6.3)
- Fabric (1.6.11)
DEPENDENCIES:
- Crashlytics
- Fabric
SPEC CHECKSUMS:
Crashlytics: 2b6dbe138a42395577cfa73dfa1aa7248cadf39e
Fabric: 5911403591946b8228ab1c51d98f1d7137e863c6
PODFILE CHECKSUM: 672d557f679f28c07b3364884b4580e605000f01
COCOAPODS: 1.1.1

16
ios/app/AppDelegate.h Normal file
View File

@@ -0,0 +1,16 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) UIWindow *window;
@end

69
ios/app/AppDelegate.m Normal file
View File

@@ -0,0 +1,69 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import "AppDelegate.h"
#import <Crashlytics/Crashlytics.h>
#import <Fabric/Fabric.h>
#import "RCTBundleURLProvider.h"
#import "RCTLinkingManager.h"
#import "RCTRootView.h"
@implementation AppDelegate
// https://facebook.github.io/react-native/docs/linking.html
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler
{
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[Fabric with:@[[Crashlytics class]]];
NSURL *jsCodeLocation
= [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios"
fallbackResource:nil];
RCTRootView *rootView
= [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"App"
initialProperties:nil
launchOptions:launchOptions];
// Set a background color which is in accord with the JavaScript and Android
// parts of the application and causes less perceived visual flicker than the
// default background color.
rootView.backgroundColor
= [[UIColor alloc] initWithRed:.07f green:.07f blue:.07f alpha:1];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}
// https://facebook.github.io/react-native/docs/linking.html
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
return [RCTLinkingManager application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
@end

View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB">
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
<rect key="frame" x="20" y="439" width="441" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Jitsi Meet" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
<rect key="frame" x="20" y="140" width="441" height="43"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
</constraints>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="548" y="455"/>
</view>
</objects>
</document>

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Some files were not shown because too many files have changed in this diff Show More