Compare commits

..

1586 Commits
299 ... 1237

Author SHA1 Message Date
Дамян Минков
c18b80c43f Merge pull request #862 from jitsi/make-settings-sections-configurable
Make settings sections configurable
2016-09-13 20:46:03 -05:00
yanas
9ce83250da Fixes console logs 2016-09-13 20:43:44 -05:00
yanas
a9e31a2843 Fixes settings menu for non moderators 2016-09-13 20:43:44 -05:00
yanas
45496b7592 Make settings sections configurable 2016-09-13 20:43:44 -05:00
yanas
4075a5f4f7 Merge pull request #864 from jitsi/origin/ui-redesign-guests-profile
fix(profile_icon): Cursor and background styles
2016-09-13 19:17:45 -05:00
hristoterezov
2d4819257b fix(profile_icon): Cursor and background styles 2016-09-13 18:19:38 -05:00
yanas
406618677b Merge pull request #861 from jitsi/ui-redesign-guests-profile
feat(profile): Don't allow non-guest users to edit their profile
2016-09-13 17:38:51 -05:00
hristoterezov
f10b13328f feat(profile): Don't allow non-guest users to edit their profile 2016-09-13 16:56:05 -05:00
Дамян Минков
c609cd0ace Merge pull request #859 from jitsi/change-ringing-background
Ringing background changed to gradient
2016-09-13 16:53:32 -05:00
yanas
0396a05b38 Merge pull request #860 from jitsi/css-watermark-link-variable
Moves watermark link to be css variable.
2016-09-13 16:46:53 -05:00
damencho
4a460e09b9 Moves watermark link to be css variable. 2016-09-13 16:46:15 -05:00
yanas
d5d81c1bed Merge pull request #858 from jitsi/ui-redesign-feedback
Ui redesign feedback
2016-09-13 16:44:11 -05:00
yanas
dc6e8f99d8 Ringing background change to gradient 2016-09-13 16:32:00 -05:00
hristoterezov
e02a8c9103 fix(feedback): Styles of Feedback dialog 2016-09-13 16:06:53 -05:00
Maxim Voloshin
7b4941bde9 Redesigned feedback window 2016-09-13 16:06:53 -05:00
hristoterezov
c602839e06 Merge pull request #851 from jitsi/ui-redesign-in-progress
Ui redesign in progress
2016-09-13 14:50:59 -05:00
yanas
2aea6c4120 Remove unused dialog 2016-09-13 13:07:08 -05:00
hristoterezov
a937e025b5 fix(index.html): Remove preload attribute on local video tag 2016-09-13 12:59:59 -05:00
yanas
b9fb510006 Adds ringing.scss, which was missing 2016-09-13 10:47:22 -05:00
Дамян Минков
b3f66aea3b Merge pull request #618 from photoninger/add_firefox_supportedBrowsers
Add Firefox in list of supportedBrowsers for invite emails
2016-09-13 08:29:59 -05:00
yanas
8491fbbd95 Reverts change in makefile 2016-09-12 23:29:26 -05:00
yanas
c6ec96aca5 Adds avatar on stage specific background 2016-09-12 23:24:23 -05:00
yanas
d250623fde Ring overlay improvements and enable buttons fix 2016-09-12 23:24:10 -05:00
hristoterezov
c3b4ecbbd8 fix(ext_toolbar): position of authentication popup 2016-09-12 16:22:51 -05:00
hristoterezov
2b84a149fe fix(toolbar): Button popups 2016-09-12 14:43:34 -05:00
hristoterezov
99ca38d13f Merge pull request #852 from jitsi/make-node-sass
Installs node-sass on every update, fixes a problem in some operating…
2016-09-12 12:54:52 -05:00
damencho
bfc174ffdc Installs node-sass on every update, fixes a problem in some operating systems. 2016-09-12 12:02:43 -05:00
yanas
09f7615a35 Changes icon set. 2016-09-11 23:36:15 -05:00
yanas
fdf0e39516 Fix lock room 2016-09-11 20:49:59 -05:00
yanas
775f389e5c Fix watermark and help position related to toolbar 2016-09-11 17:06:08 -05:00
yanas
f811410b45 Settings re-design 2016-09-11 16:55:06 -05:00
yanas
50e803f1a0 Fixes side toolbar container behavior 2016-09-09 21:26:29 -05:00
Paweł Domas
9a0d8616ed Merge pull request #847 from jitsi/cs-custom-scriptUrl
Skips some url parameters that can inject scripts.
2016-09-08 18:09:04 -05:00
yanas
b4c9816d9f Rename side panels and implement toggle/untoggle policy 2016-09-08 17:38:41 -05:00
yanas
17e28069ab Re-designs toolbars, side panels like setting, contact list 2016-09-08 13:22:50 -05:00
yanas
8562d3d55d Remove bottom toolbar and change side panel position and behavior 2016-09-08 13:16:23 -05:00
damencho
d65479abc9 Skips some url parameters that can inject scripts. 2016-09-08 13:12:56 -05:00
yanas
ed29db290e Add mixins for animations and separate toolbar css 2016-09-08 12:19:45 -05:00
yanas
978c0f2f31 Remove unused import 2016-09-08 12:19:45 -05:00
damencho
62c4ff719e Fixes build. 2016-09-08 11:26:57 -05:00
Ilya Daynatovich
e28f646cef Fixed styles for unsupported browser page 2016-09-08 11:15:17 -05:00
yanas
fb63ed92a8 Resets the main font after remove 2016-09-07 22:07:13 -05:00
yanas
c0097d1e2b Merge pull request #833 from BeatC/configurable-text
Set up SASS and change base font
2016-09-07 22:05:58 -05:00
yanas
fe710d8de9 Merge pull request #842 from jitsi/revert-kicks
Revert "Temprorary disable kicks hack."
2016-09-07 10:59:23 -05:00
damencho
83546a899f Revert "Temprorary disable kicks hack."
This reverts commit 76a7c7b426.
2016-09-07 10:48:13 -05:00
hristoterezov
2eca459ff6 Merge pull request #840 from jitsi/moves-analytics-feedback
Moves analytics event for feedback to the library.
2016-09-07 09:42:30 -05:00
hristoterezov
6b23ad54db Merge pull request #839 from jitsi/removes-ds-error-onjoin
Skips selecting local participant when alone in the room.
2016-09-07 09:41:01 -05:00
damencho
5ef7f38bed Moves analytics event for feedback to the library. 2016-09-06 13:16:54 -05:00
damencho
f86056c4f8 Skips selecting local participant when alone in the room. 2016-09-06 12:00:13 -05:00
Emil Ivov
f19b364871 Merge pull request #838 from jitsi/fix_audio_not_working_msg
fix(lang): Change the message in the mic not working error dialog
2016-09-06 11:33:54 -05:00
hristoterezov
29f1d96d87 fix(lang): Change the message in the mic not working error dialog 2016-09-06 11:30:51 -05:00
yanas
2f966b7da4 Merge pull request #829 from BeatC/fix-sharing-resize-after-hiding-filmstrip
Fix problem with resizing
2016-09-04 20:16:08 -05:00
bgrozev
e3f599fbc0 Merge pull request #834 from jitsi/disable-kick-until-fixed-hack
Temprorary disable kicks hack.
2016-09-02 11:44:15 -05:00
yanas
76a7c7b426 Temprorary disable kicks hack. 2016-09-02 11:19:17 -05:00
Ilya Daynatovich
4044e11da2 Set up SASS and change base font 2016-09-02 12:55:33 +03:00
Дамян Минков
a07c21b2a3 Merge pull request #832 from jitsi/remove-avatar-url
Remove avatar url - not used anymore
2016-09-01 16:55:11 -05:00
yanas
109bedba75 Update index.html 2016-09-01 16:37:07 -05:00
Дамян Минков
aced860ba4 Merge pull request #830 from jitsi/detect_local_media_not_working
Shows dialog when lib-jitsi-meet report microphone issues
2016-09-01 14:16:50 -05:00
hristoterezov
d33324c198 Merge pull request #831 from jitsi/analytics-remove-browser-suffix
Adds browser name as parameter.
2016-09-01 14:16:41 -05:00
damencho
adb1b33441 Adds browser name as parameter. 2016-09-01 14:13:17 -05:00
yanas
238e1f1bea Merge pull request #814 from BeatC/fix-video-preview-when-resize
Fix problem with last video preview
2016-09-01 13:45:56 -05:00
hristoterezov
4c9b6ce193 Shows dialog when lib-jitsi-meet report microphone issues 2016-09-01 12:57:21 -05:00
Paweł Domas
5ef547d285 Merge pull request #828 from SamWhited/mod_token_use_proper_path
Use valid path for HTTP token fetches
2016-09-01 10:02:47 -05:00
Ilya Daynatovich
aea99b8ffb Fix problem with resizing 2016-09-01 08:53:51 +03:00
Sam Whited
9ec120d7cb Use valid path for HTTP token fetches 2016-08-31 16:25:49 -05:00
Дамян Минков
e2c5439112 Merge pull request #821 from SamWhited/hql1748_update_lock_icon_on_config_change
Update lock icon when moderator changes state
2016-08-31 15:53:17 -05:00
hristoterezov
19362d1904 Merge pull request #826 from jitsi/fix-random-avatar
Fixes random avatar
2016-08-31 15:46:53 -05:00
hristoterezov
1a69fd8a49 Merge pull request #822 from jitsi/removes-atarURL
Removes avatar url from UI.
2016-08-31 15:39:00 -05:00
yanas
224670ed03 Merge pull request #827 from jitsi/fix-missing-indications-on-no-video-device
Moves local video thumb initializations where they belong.
2016-08-31 14:55:12 -05:00
damencho
bb705e32d9 Moves local video thumb initializations where they belong.
Moves local video thumb initializations where they belong in the local video constructor. Fixes a problem when there is no video device, then audio levels and gsm bars are missing. We were doing this initializations every time a video device is changed.
2016-08-31 14:18:09 -05:00
Sam Whited
3e269978d9 Update lock icon when moderator changes state 2016-08-31 13:59:08 -05:00
Paweł Domas
9ba62c320b Merge pull request #825 from SamWhited/mod_token_improvements
Mod token improvements
2016-08-31 12:48:04 -05:00
damencho
8e6d7d3960 Sends and dispatches avatarId command. 2016-08-31 11:41:17 -05:00
damencho
3138748f57 Uses avatarId from settings.
Removes unused variable bottomToolbarEnabled.
2016-08-31 11:40:06 -05:00
damencho
6f10156bf3 Adds avatarId and respect it with lowest priority. 2016-08-31 11:37:11 -05:00
damencho
3852b34397 Adds avatarId to Settings. 2016-08-31 11:24:51 -05:00
Sam Whited
3128628d09 Populate the token cache 2016-08-31 09:30:07 -05:00
Sam Whited
d8c4c0627a SHA256 hash the kid claim before fetching tokens 2016-08-31 09:24:15 -05:00
hristoterezov
d9559ecf63 Merge pull request #817 from jitsi/fix-shortcut-tooltips
Fix shortcut appearing in tooltip of wrong buttons
2016-08-30 15:30:09 -05:00
yanas
2b492883ca Some code optimisations. 2016-08-30 14:14:52 -05:00
damencho
5ab6c551df Disables storing display name and email when using overlay ring. 2016-08-30 14:10:20 -05:00
damencho
0e27f471f1 Removes avatarURL from settings UI.
Removes storing avatarURL in localstorage and retrieving it.
2016-08-30 14:09:07 -05:00
hristoterezov
ba477ad720 Merge pull request #816 from jitsi/improve-device-errors
Updates string for not found devices.
2016-08-30 13:04:44 -05:00
yanas
7858c157c1 Fix shortcut appearing in tooltip of wrong buttons 2016-08-29 23:56:20 -05:00
damencho
a5d3cc63c3 Updates string for not found devices.
The user can be in case where there is no audio or no video device at all, so removing the requested word from the message.
2016-08-29 16:46:44 -05:00
hristoterezov
cac7ccf176 Merge pull request #812 from jitsi/attach-shortcuts-to-features
Attach keyboard shortcuts to features
2016-08-29 16:05:12 -05:00
yanas
9693cba17a Registers filmstrip shortcut from bottom toolbar 2016-08-29 15:47:24 -05:00
yanas
45e38ae4c9 Fix wrong import 2016-08-29 13:04:55 -05:00
Paweł Domas
ad68d535b4 Merge pull request #815 from SamWhited/mod_auth_token_tweaks
mod_auth_token: Misc minor fixes
2016-08-29 10:23:44 -05:00
Sam Whited
bb56ea4b33 mod_auth_token: Add semicolons
Remove unnecessary cjson config
2016-08-29 09:39:47 -05:00
Ilya Daynatovich
ba822eaeed Fix problem with last video preview 2016-08-29 16:39:57 +03:00
yanas
7076ada6f4 Attach keyboard shortcuts to features 2016-08-28 22:59:23 -05:00
Paweł Domas
84834dc4e6 Merge pull request #808 from SamWhited/auth_token_asap
Add support for fetching public keys from a server to mod_auth_token
2016-08-26 16:51:17 -05:00
hristoterezov
f9b3f34593 Merge pull request #810 from jitsi/fix-hangup-multiple-feedback-windows
Fix hangup triggering multiple feedback windows
2016-08-26 16:30:31 -05:00
Sam Whited
c17576a931 mod_auth_token: Don't timeout finished requests 2016-08-26 16:19:01 -05:00
yanas
570124058c Addresses comment about Feedback dependency 2016-08-26 16:07:20 -05:00
Sam Whited
3793119209 mod_auth_token: Fix cache hit log line 2016-08-26 16:03:08 -05:00
Sam Whited
7fb18d1cb3 Fix broken claims comparison 2016-08-26 14:47:34 -05:00
Sam Whited
4fc86175e1 mod_auth_token: Set room name on session 2016-08-26 14:41:06 -05:00
Sam Whited
c951f7f3e9 Add missing semicolons 2016-08-26 14:11:50 -05:00
yanas
777217bd75 Fixes hangup triggering multiple feedbacks. 2016-08-26 11:42:45 -05:00
yanas
2bb637e140 Fixes hangup triggering several times 2016-08-26 11:42:45 -05:00
Дамян Минков
b5c1c95a15 Merge pull request #807 from jitsi/fix_ss_external_install
Fixes the issue with SS external installation dialog is not closed after the plugin has been installed
2016-08-26 11:40:35 -05:00
Sam Whited
f2e369cfc0 mod_auth_token: Remove broken path.join 2016-08-26 09:48:02 -05:00
yanas
6329271731 Merge pull request #806 from BeatC/fix-help-dialog-behind-filmstrip
Change z-index of keyboard-shortcuts
2016-08-25 14:15:57 -05:00
yanas
1428559546 Merge pull request #805 from jitsi/fix-moderator-mute
Fixes muting particular remote participant.
2016-08-25 14:15:01 -05:00
hristoterezov
5c9a85e928 Fixes the issue with SS external installation dialog is not closed after the plugin has been installed 2016-08-25 13:27:58 -05:00
Illia Daynatovich
00355caf8d HQL-1829 Change z-index of keyboard-shortcuts 2016-08-25 12:12:29 +03:00
Sam Whited
feb1d9d8e1 Add an LRU cache to mod_auth_token 2016-08-24 15:28:13 -05:00
Sam Whited
7f2fa9597c Add basic ASAP support to mod_auth_token
See: http://s2sauth.bitbucket.org/
2016-08-24 14:08:21 -05:00
damencho
246ab88a3e Fixes muting particular remote participant.
There was a bug that the handlers for menuItem for mute and kick are added for all remote participants. When clicked multiple handlers are executed and the action will be executed for all remote participants.
2016-08-23 18:37:41 -05:00
Дамян Минков
49cc4ae087 Merge pull request #802 from jitsi/fix-video-linux-qt
Fix video thumbnails for Qt on Linux.
2016-08-23 15:36:52 -05:00
hristoterezov
8d466ad77f Merge pull request #801 from jitsi/reloads-update
Updates statistics implementation.
2016-08-23 10:20:44 -05:00
yanas
f824f78db9 Fix video thumbnails for Qt on Linux. 2016-08-22 16:31:20 -05:00
damencho
35f592bb2c Adds optional label to statistics implementation. 2016-08-22 15:18:13 -05:00
bgrozev
25a6728acc Merge pull request #663 from cmrd-senya/patch-1
Update manual-install.md
2016-08-21 14:36:06 -05:00
jitsi-pootle
169da33411 New files added from translate.jitsi.org based on templates 2016-08-21 19:30:40 +00:00
George Politis
db70cf4aa9 Merge pull request #795 from jitsi/hide-download-log
Hide download log by default
2016-08-17 16:00:09 -05:00
yanas
dcfab4401f Update main.css 2016-08-17 15:50:26 -05:00
hristoterezov
d85a91ae49 Merge pull request #792 from jitsi/remove-bottom-toolbar-button-separators-1
Remove unused css class
2016-08-16 16:53:49 -04:00
hristoterezov
a3b1a80658 Merge pull request #791 from jitsi/remove-bottom-toolbar-button-separators
Remove bottom toolbar button separators
2016-08-16 16:53:03 -04:00
yanas
db20f145fb Remove unused css class 2016-08-16 15:20:32 -05:00
yanas
986bfd02b3 Remove bottom toolbar button separators 2016-08-16 15:14:30 -05:00
Paweł Domas
57506934f2 Merge pull request #790 from jitsi/show-toolbar-in-ring-overlay
Show the toolbar even if in a ring overlay
2016-08-16 15:07:51 -05:00
yanas
372a5e2a49 Update UI.js
Show the toolbar even if in a ring overlay.
2016-08-16 13:44:34 -05:00
Дамян Минков
726b972223 Merge pull request #789 from bgrozev/cleanup
refactor: removes unused code.
2016-08-15 22:59:35 -05:00
Boris Grozev
65300b34df refactor: removes unused code. 2016-08-15 22:57:36 -05:00
Paweł Domas
d7a7733d30 Merge pull request #787 from bgrozev/resolution-change
Brings back resolution changes logging to callstats.
2016-08-15 15:16:05 -05:00
Boris Grozev
7154fd4d39 Brings back resolution changes logging to callstats. 2016-08-15 14:40:55 -05:00
Дамян Минков
45830c1086 Merge pull request #785 from bgrozev/stream-switch-logs
Logs stream switch delays using analytics instead of callstats.
2016-08-12 16:51:39 -05:00
Дамян Минков
202ad0542f Merge pull request #784 from bgrozev/round-analytics-values
Rounds floats passed to analytics (instead of truncating them).
2016-08-12 16:51:29 -05:00
Boris Grozev
c59d9e7c8b Rounds floats passed to analytics (instead of truncating them). 2016-08-12 15:22:38 -05:00
Boris Grozev
f4f0a7d90e Logs stream switch delays using analytics instead of callstats. 2016-08-12 15:13:27 -05:00
damencho
ec98e6fdff Revert "Skips the analytics file from main folder when creating deb." Excluding file, excludes it and from subfolders.
This reverts commit 157bb1931d.
2016-08-11 12:53:37 -05:00
Дамян Минков
c68bcb8fbc Merge pull request #782 from jitsi/fix-unsupported-browser-images
Fix unsupported browser images
2016-08-11 11:08:59 -05:00
yanas
c37876a8b7 Fix unsupported browser images
Fixes the path of the unsupported browser images
2016-08-11 10:14:06 -05:00
bgrozev
23a805b79c Merge pull request #780 from jitsi/fix-duplicate-analytics-files
Skips the analytics file from main folder when creating deb.
2016-08-10 16:09:01 -05:00
damencho
157bb1931d Skips the analytics file from main folder when creating deb. 2016-08-10 15:47:54 -05:00
bgrozev
e59ad67055 Merge pull request #779 from jitsi/fix_ss_from_popup
Implements extension external installation for popup windows
2016-08-10 15:25:35 -05:00
hristoterezov
97b9b67768 Merge pull request #777 from jitsi/analytics-move2
Moves loading of analytics in the library.
2016-08-10 15:19:36 -05:00
hristoterezov
f899d16a79 Implements extension external installation for popup windows 2016-08-10 14:13:32 -05:00
damencho
53288fc997 Moves analytics js next to libraries so it can be dynamically loaded. 2016-08-10 13:28:15 -05:00
yanas
7c89f2b7d1 Merge pull request #778 from jitsi/fix-toolbar-hide
Fixes the check whether we are hovering over the toolbar.
2016-08-09 18:04:04 -05:00
damencho
2c39514359 Fixes the check whether we are hovering over the toolbar. 2016-08-09 17:39:24 -05:00
damencho
536ffb31e0 Moves loading of analytics in the library. 2016-08-09 15:04:40 -05:00
Дамян Минков
a50a980de4 Merge pull request #776 from jitsi/isolate-object-fix-browser-specific
Isolate object-fit fix for Windows Qt browser only
2016-08-08 17:19:56 -05:00
yanas
da0898a066 Isolate object-fit fix for Windows Qt browser only 2016-08-08 17:03:13 -05:00
George Politis
541f83cf71 Merge pull request #774 from jitsi/analytics-move
Analytics move
2016-08-05 13:49:05 -05:00
Paweł Domas
fe6588516f Merge pull request #773 from jitsi/object-fit-fix-and-refactoring-around-it
Object fit fix and refactoring around it
2016-08-05 10:25:36 -05:00
damencho
6651168dd3 Moves render and ttfm connection times to the library. 2016-08-05 09:52:09 -05:00
yanas
ced7da405d Merge pull request #772 from jitsi/crash_no_mediastreamtrack
Fix a crash on IE/Safari when plugin is not installed
2016-08-04 16:24:03 -05:00
yanas
fd836560aa Fix object-fit on some browsers 2016-08-04 15:56:04 -05:00
yanas
5654d34ee8 Fix remote participant menu for moderator 2016-08-04 15:24:36 -05:00
damencho
6302e42229 Uses analytics from lib-jitsi-meet and adds new events.
Adds more analytics events for shortcuts, recording and shared video. Changes the way we calculate ttfm.
2016-08-04 14:19:09 -05:00
paweldomas
34a24ce290 Fix a crash on IE/Safari when plugin is not installed 2016-08-04 09:37:04 -05:00
bgrozev
71a778b65c Merge pull request #771 from jitsi/IE10-URL-fix
Fix broken invite URL on IE10
2016-08-03 15:12:25 -05:00
paweldomas
62fa4dffa8 Fix broken invite URL on IE10
IE 10 does not support "window.location.origin"
2016-08-03 14:45:50 -05:00
yanas
d3dd643a88 Revert "Fix object-fit: cover not supported for video"
This reverts commit db0c4e95f7.
2016-08-03 13:03:42 -05:00
yanas
6116df9411 Revert "Change the default font to Helvetica Neue"
This reverts commit b309ef25fd.
2016-08-03 13:01:46 -05:00
yanas
db0c4e95f7 Fix object-fit: cover not supported for video 2016-08-03 13:01:46 -05:00
Дамян Минков
9a25db34aa Merge pull request #763 from jitsi/hide_toolbar_when_ringing
Hide the toolbar when the the ring overlay is displayed
2016-08-03 13:00:52 -05:00
Paweł Domas
c7710bfe1c Merge pull request #769 from jitsi/ttfm
Adds analytics event and console log for TTFM (time to first media).
2016-08-03 12:52:20 -05:00
Дамян Минков
dd7502f8de Merge pull request #754 from bgrozev/log-json
Formats the resolution change log as JSON.
2016-08-03 12:50:22 -05:00
damencho
df01358fb8 Adds comment. 2016-08-03 12:49:19 -05:00
Paweł Domas
d3cd634bff Merge pull request #770 from jitsi/update-config-inclusion
Update config inclusion
2016-08-03 12:39:26 -05:00
damencho
1454a28a69 Fixes serving interface_config when using jetty. 2016-08-03 11:53:21 -05:00
damencho
7251c7a641 Fixes a problem when using base for the page.
The problem is when not using / before virtual files and having a base for the page nginx can search for the file in wrong location.
2016-08-03 11:52:56 -05:00
damencho
06c636311d Adds analytics event and console log for TTFM (time to first media). 2016-08-03 11:19:09 -05:00
hristoterezov
b457166726 Merge pull request #765 from jitsi/analytics-update2
Adds analytics event for rendering audio and video.
2016-08-02 14:53:19 -05:00
damencho
562c2e38db Adds analytics event for rendering audio and video. 2016-08-02 13:19:03 -05:00
hristoterezov
e2c16c9c11 Merge pull request #764 from jitsi/switch_to_luajwt
Switch back to 'luajwt' in order to fix broken JWT
2016-08-02 13:13:37 -05:00
hristoterezov
db91040443 Merge pull request #761 from jitsi/updates-index-title
Moves favicon into the title html.
2016-08-02 12:38:02 -05:00
paweldomas
9f3c209096 Switch back to 'luajwt' in order to fix broken JWT
Temporarily reference 'luajwtjitsi' luarock for immediate
deployment until our changes with RS256 support
eventually get merged with the master
2016-08-02 12:35:48 -05:00
paweldomas
123b5abb08 Hide the toolbar when the the ring overlay is displayed 2016-08-02 09:04:31 -05:00
damencho
6cb89891ce Moves favicon into the title html.
Moves favicon into the title html with all metadata for easy overriding. Moves the title html inclusion after all the connection optimisations to avoid downloading the icon to interfere those optimisations.
2016-08-01 17:11:16 -05:00
damencho
ff68caaa16 Adds a comment and disables jshint error.
Merge pull request #760 from aaronkvanmeerten/master
2016-08-01 17:00:47 -05:00
Aaron van Meerten
a58190a935 Interface Config loaded via SSI into index.html to allow deployment-specific overrides even when using CDN
update whitespace in toolbar buttons array to allow value to be more easily overridden
2016-08-01 16:42:15 -05:00
Дамян Минков
372278d163 Merge pull request #755 from jitsi/change-default-font
Change the default font to Helvetica Neue
2016-08-01 16:10:56 -05:00
Paweł Domas
a5a7b63abf Merge pull request #759 from jitsi/analytics-update
Adds more analytics events.
2016-08-01 15:43:31 -05:00
damencho
e9b7aaea84 Adds more analytics events. 2016-08-01 15:03:38 -05:00
George Politis
132d823f54 Merge pull request #758 from jitsi/updates-title-meta
Moves meta html headers inside title.html file.
2016-08-01 14:42:11 -05:00
George Politis
75eb30b09d Merge pull request #757 from jitsi/remove_query_string
Removes query arguments from the invite URL/address bar URL.
2016-08-01 14:22:43 -05:00
damencho
baa60347fb Moves meta html headers inside title.html file. 2016-08-01 14:18:54 -05:00
paweldomas
8de3e0ff0b Remove query parameters from the URL visible to the user 2016-08-01 13:44:42 -05:00
paweldomas
443c29f505 No longer use full href for the invite URL 2016-08-01 13:44:35 -05:00
yanas
b309ef25fd Change the default font to Helvetica Neue 2016-08-01 10:58:12 -05:00
Paweł Domas
0ea5175354 Merge pull request #737 from SamWhited/jwt_signing_none_check
Check for "none" alg in JWT signing
2016-08-01 08:33:08 -05:00
bgrozev
10517115c3 Merge pull request #752 from jitsi/fix_gsm_bars_resolution
Preventing the client for using/sending resolution data from/to remote participants
2016-07-28 15:37:38 -05:00
Boris Grozev
ddb356482f Formats the resolution change log as JSON. 2016-07-28 11:11:34 -05:00
hristoterezov
6ae35fb21d Preventing the client for using/sending resolution data from/to remote participants 2016-07-27 12:46:07 -05:00
bgrozev
330597182c Merge pull request #751 from jitsi/dc_send_throw
Handles the errors thrown by the data channel methods
2016-07-26 09:34:06 -05:00
Boris Grozev
adefa40dcc Simplifies code, reduces the scope of "try". 2016-07-26 08:32:25 -05:00
hristoterezov
8d162609e0 Handles the errors thrown by the data channel methods 2016-07-25 17:04:39 -05:00
Paweł Domas
0a51ddd7ef Merge pull request #750 from jitsi/fix_con_interrupted
Fixes issue with not removing connection interrupt label after reload
2016-07-25 14:09:30 -05:00
hristoterezov
c3ae8669e8 Fixes issue with not removing connection interrupt label after reload 2016-07-25 13:57:01 -05:00
Paweł Domas
974ba47e3c Merge pull request #748 from jitsi/gsm_bars_interrupted
Fixes the gsm bars during ice disconnected
2016-07-22 14:02:19 -05:00
hristoterezov
9d170e4c59 Fixes the gsm bars during ice disconnected 2016-07-22 13:42:41 -05:00
bgrozev
ae0e950c16 Merge pull request #746 from jitsi/dc_stats2
Changes the connection quality stats to be sent by the data channels
2016-07-22 07:34:01 +02:00
Дамян Минков
79412f20ab Updates quick-install doc with the new repo. 2016-07-21 22:53:58 -05:00
hristoterezov
7ea047cf1b Merge pull request #743 from jitsi/handle-initial-videotype
Uses videoType from the video track for the initial value.
2016-07-21 17:16:17 -05:00
hristoterezov
4bf5d69002 Changes the connection quality stats to be sent by the data channels 2016-07-21 17:00:57 -05:00
bgrozev
0e2d8a323a Merge pull request #732 from champtar/shortcut-help
Improve keyboard shortcut handling
2016-07-21 19:53:49 +02:00
Etienne CHAMPETIER
9a4cee1818 Improve keyboard shortcut handling
Use KeyboardEvent.key if available,
match both lower and upper case letters to keep previous behaviour

KeyboardEvent is a mess.

KeyboardEvent.which gives you, in theory, a decimal representation of the key pressed.
"r" or "R" gives you 82, which is "R", you can look at KeyboardEvent.shiftKey,
but you don't have access to capslock...

Maybe you want to use numbers, but of course NumPad will not give you the same than
"normal" numbers ...

Now if you use something else than letter, for exemple "?",
on a QWERTY keyboard "/" and "?" gives you 191,
on a AZERTY keyboard "," and "?" gives you 188, so we have to stick to letters.

This was for keydown and keyup events, keypressed event return the real char
(lower "a", "/", "?", ...) but it fails in some cases

The only non broken property is KeyboardEvent.key,
but it's only supported since Chrome 51, Opera 38, and not supported by Safari
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key

A good reference & test:
http://unixpapa.com/js/testkey.html
http://unixpapa.com/js/key.html

Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com>
2016-07-21 16:58:52 +02:00
bgrozev
b0957f387e Merge pull request #744 from jitsi/revert-741-dc_stats
Revert "Changes the connection quality stats to be sent by the data channels"
2016-07-21 08:36:12 +02:00
bgrozev
1f8dc54368 Revert "Changes the connection quality stats to be sent by the data channels" 2016-07-21 08:33:04 +02:00
damencho
74ece3a775 Uses videoType from the video track for the initial value.
Handles the case where the remote track is with initial value of camera and no further events are received for video type changed.
2016-07-20 22:13:26 -05:00
Дамян Минков
60f7b9ab93 Merge pull request #741 from jitsi/dc_stats
Changes the connection quality stats to be sent by the data channels
2016-07-20 16:13:51 -05:00
Paweł Domas
f8d555790b Merge pull request #742 from jitsi/add_languages
Adds Armenian and Occitan languages
2016-07-20 15:41:44 -05:00
hristoterezov
4ff297730c Adds Armenian and Occitan languages 2016-07-20 15:38:50 -05:00
ibauersachs
29050ea917 Commit from translate.jitsi.org by user ibauersachs.: 118 of 250 strings translated (10 fuzzy). 2016-07-20 20:19:10 +00:00
ibauersachs
c4c0bc1c37 Commit from translate.jitsi.org by user ibauersachs.: 150 of 250 strings translated (7 fuzzy). 2016-07-20 20:19:00 +00:00
ibauersachs
0f52f4e5a1 Commit from translate.jitsi.org by user ibauersachs.: 160 of 250 strings translated (6 fuzzy). 2016-07-20 20:18:47 +00:00
ibauersachs
cff7a5c2f5 Commit from translate.jitsi.org by user ibauersachs.: 151 of 250 strings translated (7 fuzzy). 2016-07-20 20:18:36 +00:00
ibauersachs
626d9a40ed Commit from translate.jitsi.org by user ibauersachs.: 163 of 250 strings translated (8 fuzzy). 2016-07-20 20:18:28 +00:00
ibauersachs
b8f26c58e3 Commit from translate.jitsi.org by user ibauersachs.: 238 of 250 strings translated (0 fuzzy). 2016-07-20 20:18:13 +00:00
ibauersachs
9dbd9b8405 Commit from translate.jitsi.org by user ibauersachs.: 237 of 250 strings translated (1 fuzzy). 2016-07-20 20:18:03 +00:00
ibauersachs
08f200f0eb Commit from translate.jitsi.org by user ibauersachs.: 203 of 250 strings translated (1 fuzzy). 2016-07-20 20:17:33 +00:00
ibauersachs
9fa65ccda6 Commit from translate.jitsi.org by user ibauersachs.: 203 of 250 strings translated (1 fuzzy). 2016-07-20 20:17:24 +00:00
hristoterezov
d0fa9e7ef1 Changes the connection quality stats to be sent by the data channels 2016-07-20 15:16:21 -05:00
Paweł Domas
d7c1976a52 Merge pull request #740 from jitsi/add_languages
Adds new languages to the language select box
2016-07-20 15:11:42 -05:00
hristoterezov
39e71efb2f Adds new languages to the language select box 2016-07-20 15:04:14 -05:00
Ingo Bauersachs
855bcf8fe3 Remove pt_BR language files 2016-07-20 21:25:37 +02:00
ibauersachs
97069f1dc6 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-20 19:28:38 +00:00
ibauersachs
bc3c6412f6 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 21:08:44 +00:00
ibauersachs
51dcb2befb Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 21:08:32 +00:00
ibauersachs
805c9e4eda Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 21:08:23 +00:00
Ingo Bauersachs
a38e85b39c Update languages.json 2016-07-19 22:51:38 +02:00
Ingo Bauersachs
96bd3a54cb Update languages.json 2016-07-19 22:37:24 +02:00
ibauersachs
4fd5fba768 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 20:38:09 +00:00
ibauersachs
06027ea8e5 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 20:37:30 +00:00
ibauersachs
6f38d58954 Commit from translate.jitsi.org by user ibauersachs.: 250 of 250 strings translated (0 fuzzy). 2016-07-19 20:37:10 +00:00
Ingo Bauersachs
30c964f1e3 Add Portuguese (Brazil) 2016-07-19 22:29:07 +02:00
ibauersachs
2a8e0bd866 Commit from translate.jitsi.org by user ibauersachs.: 249 of 249 strings translated (0 fuzzy). 2016-07-19 20:33:10 +00:00
Дамян Минков
644e12929c Merge pull request #733 from mbell8903/patch-1
Change reference to lib-jitsi-meet to use full github url
2016-07-19 10:50:06 -05:00
Sam Whited
d625b8e3f3 Check for "none" alg in JWT signing 2016-07-18 13:31:30 -05:00
hristoterezov
5b884806d2 Merge pull request #736 from jitsi/lock-error-dialog
Avoids multiple dialog when showing lock attempt errors.
2016-07-15 16:02:26 -05:00
damencho
7aa47647f0 Avoids multiple dialog when showing lock attempt errors. 2016-07-15 15:40:18 -05:00
Дамян Минков
c779dbe8ad Merge pull request #735 from jitsi/fix_typo
Fixes typo
2016-07-15 13:18:57 -05:00
Дамян Минков
64ee01d831 Merge pull request #734 from jitsi/no_audio_element_fix
Fixes the issue with missing audio element for remote participants
2016-07-15 13:18:47 -05:00
hristoterezov
52c6bbe731 Fixes typo 2016-07-15 13:14:10 -05:00
hristoterezov
1963972f75 Fixes the issue with missing audio element for remote participants 2016-07-15 13:12:14 -05:00
Michael Bell
85d0c62c1d Change reference to lib-jitsi-meet to use full github url
This resolves issue #694
2016-07-14 11:23:47 -04:00
Дамян Минков
dfa9bab9e1 Merge pull request #724 from jitsi/reloads
Implements support for conference reloads
2016-07-13 13:19:06 -05:00
champtar
3ed1532f25 Commit from translate.jitsi.org by user champtar.: 249 of 249 strings translated (0 fuzzy). 2016-07-13 11:01:42 +00:00
ibauersachs
115420db82 Commit from translate.jitsi.org by user ibauersachs.: 249 of 249 strings translated (0 fuzzy). 2016-07-12 16:39:53 +00:00
bgrozev
d2a6c4a97f Merge pull request #719 from jitsi/jibri-retries
Jibri retries
2016-07-11 15:53:25 -05:00
hristoterezov
c04874b087 Merge pull request #728 from jitsi/jwt-login-service-2
Jwt login service 2
2016-07-11 15:12:40 -05:00
Дамян Минков
a0b3018ea0 Merge pull request #729 from jitsi/issue_716
Fixes issue #716
2016-07-11 12:46:36 -05:00
hristoterezov
e46d45adea Fixes issue #716 2016-07-11 11:57:24 -05:00
paweldomas
f977030bd6 Add support for JWT login service 2016-07-11 13:47:10 +02:00
paweldomas
38fc1c01d4 Move XMPP login prompt handling to AuthHandler 2016-07-11 13:47:02 +02:00
hristoterezov
2f202deedf Merge branch 'master' into reloads 2016-07-08 16:03:10 -05:00
Дамян Минков
08bd40bb26 Merge pull request #722 from bgrozev/logging
Logs resolution changes to callstats.
2016-07-08 15:50:14 -05:00
Дамян Минков
28700173a0 Merge pull request #723 from bgrozev/doc
Adds documentation.
2016-07-08 15:49:48 -05:00
Boris Grozev
66a46fc580 Adds documentation. 2016-07-08 15:17:28 -05:00
Boris Grozev
de41977c77 Logs resolution changes to callstats. 2016-07-08 15:16:27 -05:00
hristoterezov
45c420561a Merge pull request #721 from jitsi/match-jquery-ui-version
Match the exact version of jquery-ui.
2016-07-08 14:43:22 -05:00
damencho
e240b15d61 Match the exact version of jquery-ui.
Using "compatible version" as ^... matches latest version 1.12.0 and not 1.10.5 (matches >=1.10.5 < 2.0.0) and this prevents it building from source with latest nodejs on clean environment.
2016-07-08 14:41:25 -05:00
bgrozev
486058834e Merge pull request #720 from jitsi/make-update
Executes npm update before making.
2016-07-08 10:54:45 -05:00
damencho
3e473ea9d7 Executes npm update before making.
Executes npm update before making, in order to update latest version of packages like lib-jitsi-meet which are updated from git. The npm install method is supposed to only resolve dependencies and not update to latest versions.
2016-07-08 10:52:04 -05:00
paweldomas
62dd54ab31 Display spinner for RETRYING recording status 2016-07-08 14:53:00 +02:00
paweldomas
b3e02add3d Fix moveToCorner method
If the class was contained the old code was removing it
2016-07-08 14:51:15 +02:00
hristoterezov
7bf9a82f0b Implements conference reload support 2016-07-07 20:44:04 -05:00
bgrozev
ce5ff20d5b Merge pull request #718 from jitsi/dialogs-update
Dialogs update
2016-07-06 14:52:45 -05:00
damencho
615daa8c9f Updates close function parameters. 2016-07-06 13:52:59 -05:00
damencho
5dffddceec Make sure we have only one dialog instance. 2016-07-06 13:26:27 -05:00
damencho
d5de49b5cf Returns the dialog instances that were created and adds an optional close callback. 2016-07-06 13:10:45 -05:00
damencho
62f7553ba4 Updates two button dialogs to be only single instance. 2016-07-06 11:00:04 -05:00
hristoterezov
b7ad6b606a Merge pull request #717 from tsareg/error_types
Expose JitsiTrackError through JitsiMeetJS.errorTypes.JitsiTrackError
2016-07-06 09:17:40 -05:00
tsareg
60c2ee41e3 Expose JitsiTrackError through JitsiMeetJS.errorTypes.JitsiTrackError 2016-07-06 16:21:26 +03:00
damencho
64475143cf Removes keyring dependency to switch to new build machine. 2016-06-30 15:31:35 -05:00
damencho
c1122eae3a Adds dependency to new keyring and new repo update. 2016-06-30 15:22:22 -05:00
Дамян Минков
1792b1ed85 Merge pull request #711 from jitsi/room_name_undefined
Fixes issue with room name parameter = undefined
2016-06-28 11:52:45 -05:00
hristoterezov
d624f2584d Fixes issue with room name parameter = undefined 2016-06-28 11:21:37 -05:00
Дамян Минков
f39f8d14fd Merge pull request #706 from jitsi/ui-improvements-and-styles
UI improvements and styles
2016-06-24 14:43:51 -05:00
yanas
770b003163 Change global font, unify fonts, colors and more 2016-06-24 14:09:34 -05:00
Дамян Минков
702b177e06 Merge pull request #708 from jitsi/gsm_bars_fix
Fixes issue with gsm bars for remote participants are always full
2016-06-24 12:26:48 -05:00
hristoterezov
3c0295e294 Removes console.debug 2016-06-24 12:25:21 -05:00
hristoterezov
970e8c764c Fixes issue with gsm bars for remote participants are always full 2016-06-24 12:22:51 -05:00
yanas
1d393f5786 Merge pull request #701 from tsareg/gum_permission_dialog_guidance
Show overlay with guidance for gUM permission prompts
2016-06-24 11:17:38 -05:00
tsareg
f03b228eea Merge remote-tracking branch 'remotes/upstream/master' into gum_permission_dialog_guidance 2016-06-24 13:02:58 +03:00
tsareg
d149ba6fc5 Fire an optional JitsiMediaDevices.PERMISSION_PROMPT_IS_SHOWN event when browser shows user media permission prompt when calling createLocalTracks 2016-06-24 12:47:13 +03:00
Дамян Минков
f3dc6f15e4 Merge pull request #705 from bgrozev/esc-shortcut
Hide the shortcuts panel when the Escape key is pressed.
2016-06-23 16:24:10 -05:00
tsareg
8ca282079a Changes after code review 2016-06-23 11:03:26 +03:00
yanas
769644a63f Merge pull request #700 from bgrozev/raise-hand2
Raise hand2
2016-06-22 21:59:22 -05:00
Boris Grozev
2cefea3677 Hide the shortcuts panel when the Escape key is pressed. 2016-06-22 13:30:00 -05:00
bgrozev
2e802c0f6d Merge pull request #698 from jitsi/external_api
Changes the implementation of the iframe API to use postis
2016-06-22 13:12:49 -05:00
hristoterezov
d29e39c1d2 Adds libs directory to .gitignore 2016-06-22 13:11:48 -05:00
hristoterezov
09fb5e5667 Merge pull request #703 from jitsi/fix-avatar-url-string
Fixes avatar URL setting string
2016-06-21 15:03:02 -05:00
yanas
70e5ce7aec Fixes avatar URL setting string 2016-06-21 15:01:43 -05:00
Любомир Маринов
1f942aa13d Merge pull request #697 from tsareg/fix_two_gum_error_dialogs
Fixing various edge-cases when two gUM error dialogs might be shown and other possible bugs
2016-06-21 12:49:10 -05:00
hristoterezov
b60095df28 Merge pull request #702 from jitsi/deb-update-deps
Removes unused dependency.
2016-06-21 10:52:20 -05:00
damencho
6715d41f92 Removes unused dependency.
Used to minimize strophe-plugins which were inside the source tree and now npm handles them.
2016-06-21 10:38:31 -05:00
tsareg
375b145030 Prevent possible memory leak 2016-06-21 17:39:00 +03:00
tsareg
9d3b2aee02 Show overlay with guidance for gUM permission prompts 2016-06-21 12:08:32 +03:00
Boris Grozev
2d2e27b8d0 Implements "raised hand". 2016-06-20 16:58:54 -05:00
Boris Grozev
4b6ac38058 Fixes a failure to show the dominant speaker indicator for the local participant. 2016-06-20 15:58:08 -05:00
hristoterezov
21c2469dd6 Removes unnecessary whitespaces from Makefile 2016-06-20 13:23:00 -05:00
hristoterezov
02f176c75a Changes the implementation of the iframe API to use postis 2016-06-17 15:35:40 -05:00
tsareg
8b528b582f Fixing various edge-cases when two gUM error dialogs might be shown and other possible bugs 2016-06-17 15:31:25 +03:00
Дамян Минков
72d38ad202 Merge pull request #696 from jitsi/add-pootle-langs
Add missing languages from Pootle
2016-06-15 12:53:59 -05:00
Ingo Bauersachs
7a5461e1cb Add missing languages from Pootle 2016-06-15 11:50:04 +02:00
Ingo Bauersachs
1714ede6d4 Rename Translation.md to readme.md 2016-06-15 11:45:03 +02:00
ibauersachs
f8ee97a71c Commit from translate.jitsi.org by user ibauersachs.: 240 of 240 strings translated (0 fuzzy). 2016-06-15 09:47:54 +00:00
tsareg
897a6bfbe6 Refactored conference.js code. Moved almost all code that relates to handling change of media devices to separate module. Fixed couple of bugs. 2016-06-14 20:40:15 -05:00
yanas
97237470af Visual improvements of keyboard shortcut popup 2016-06-14 20:21:32 -05:00
Boris Grozev
d79971a737 An initial version of a "keyboard shortcuts" help panel. 2016-06-14 20:16:38 -05:00
Дамян Минков
334f7bf95a Merge pull request #693 from jitsi/jwt_support
JWT client support
2016-06-14 14:38:36 -05:00
hristoterezov
661795fd51 Fixes accidentally changed value of strophejs-plugins property in package.json 2016-06-14 13:36:46 -05:00
hristoterezov
47fe71c1f1 Fixes issue with ToolbarToggle.setAlwaysVisibleToolbar 2016-06-14 11:34:56 -05:00
hristoterezov
c5eebcda98 Adds exception for preventing to send the JWT token 2016-06-13 16:43:15 -05:00
hristoterezov
8deb003ef6 JWT client support 2016-06-13 16:11:44 -05:00
George Politis
10b2746a3e Merge pull request #689 from bgrozev/makefile-improvements
Makefile improvements
2016-06-10 15:22:18 -05:00
Boris Grozev
62fd07e98e Copy the map files for the non-minified version to the deploy dir. 2016-06-10 19:44:27 +00:00
Boris Grozev
ee8a270a36 Don't run npm update, because it sometimes causes the lib-jitsi-meet npm link to be removed. 2016-06-10 19:43:29 +00:00
hristoterezov
870a4e705b Merge pull request #683 from jitsi/fixes-ff-warnings-2
Defines^2 the document encoding.
2016-06-09 10:41:43 -05:00
Любомир Маринов
9dcb717a51 Merge pull request #685 from tsareg/fix_type_error_when_enabling_permissions_for_devices
Fix TypeError when one of audioTracks or videoTracks was undefined
2016-06-09 09:37:02 -05:00
tsareg
f72e3bf552 Fix TypeError when one of audioTracks or videoTracks was undefined 2016-06-09 12:38:30 +03:00
George Politis
ef70ff7da0 Defines^2 the document encoding. 2016-06-08 23:51:45 -05:00
hristoterezov
61fa2d8ed1 Merge pull request #682 from jitsi/fixes-ff-warnings
Defines the document encoding.
2016-06-08 23:49:02 -05:00
George Politis
1bda4ca61c Defines the document encoding.
Make FF stop complaining about the character encoding of the HTML document
not being declared.
2016-06-08 18:35:28 -05:00
hristoterezov
ba00080462 Merge pull request #681 from jitsi/add-enable-disable-popup
Unifrms messageHandler access and adds enable disable
2016-06-08 15:05:03 -05:00
yanas
57815cb2fe Unifrms messageHandler access and adds enable disable 2016-06-08 14:48:45 -05:00
yanas
346ff889ea Merge pull request #679 from damencho/follow-me
Fixes follow-me to work without etherpad
2016-06-07 17:01:45 -05:00
damencho
165507b83a Removes printing audio levels by default in debug mode and makes it optional. 2016-06-07 16:40:43 -05:00
damencho
955e01a750 Adds comments for processing nextOnStage. 2016-06-07 16:39:08 -05:00
damencho
ca62f9bec2 Adds a check to make follow me work without etherpad enabled. 2016-06-07 15:13:28 -05:00
Emil Ivov
c82bf2a19c Merge pull request #678 from geekgonecrazy/master
Switch to https on iframe creation
2016-06-07 14:50:21 -05:00
Aaron Ogle
98919e0996 Changed variable from ssl to noSsl
Defaults to SSL, only if the noSsl flag is true will it use http
2016-06-07 14:08:02 -05:00
Aaron Ogle
81437263b4 Allow ssl variable to force https:// on the iframe 2016-06-06 23:06:37 -05:00
Aaron Ogle
f883199f4f Switch to https on iframe creation 2016-06-06 21:56:07 -05:00
damencho
207e6e1b7d Merge pull request #666 from champtar/source-package
Fix missing base.html in source-package
2016-06-06 17:19:45 -05:00
lyubomir
06911c4c75 Merge pull request #676 from jitsi/tsareg-handle_create_local_tracks_errors_better
Tsareg handle create local tracks errors better
2016-06-03 16:17:34 -05:00
Lyubomir Marinov
fa1ea94c5c Merge branch 'handle_create_local_tracks_errors_better' of https://github.com/tsareg/jitsi-meet into tsareg-handle_create_local_tracks_errors_better 2016-06-03 14:28:09 -05:00
hristoterezov
6b704f184b Merge pull request #675 from aaronkvanmeerten/master
Only push to history with present page URL plus room name
2016-06-03 14:13:49 -05:00
Aaron van Meerten
c2eede2bb5 Only push to history with present page URL plus room name
Use location.href instead of location.pathname to make the URL absolute
2016-06-03 13:00:09 -05:00
lyubomir
0fec9565e5 Merge pull request #668 from jitsi/jetty-ssi-impl
Adds property for initial jetty ssi configuration.
2016-06-03 09:56:43 -05:00
Emil Ivov
8114152369 Merge pull request #673 from jitsi/revert-history-pushState
Revert "Removes unnecessary history.pushState if the welcome page is …
2016-06-03 07:47:53 -05:00
yanas
968521ef7c Revert "Removes unnecessary history.pushState if the welcome page is disabled and the user enter the base URL"
This reverts commit 3d5af92c7a.
2016-06-03 07:45:57 -05:00
Paweł Domas
bdb4d019f8 Merge pull request #672 from tsareg/audio_output_change_warning
Log warning instead of error for audio output device change errors
2016-06-03 11:11:20 +02:00
tsareg
c1a93afeaf Log warning instead of error for audio output device change errors 2016-06-03 11:15:07 +03:00
hristoterezov
b8d8ef5cfd Merge pull request #670 from jitsi/handle-recording-errors
Handle recording errors
2016-06-02 18:18:42 -05:00
yanas
07c2e91ae2 Do not handle the actual error message yet 2016-06-02 17:12:40 -05:00
yanas
7e4b13fb44 Remove recorder errors import 2016-06-02 15:41:28 -05:00
yanas
69798848c0 Handle recording errors 2016-06-02 13:34:51 -05:00
Emil Ivov
9e52e65faa Merge pull request #669 from jitsi/remove_history_push
Removes unnecessary history.pushState if the welcome page is disabled and the user enter the base URL
2016-06-02 13:25:00 -05:00
hristoterezov
3d5af92c7a Removes unnecessary history.pushState if the welcome page is disabled and the user enter the base URL 2016-06-02 13:02:42 -05:00
damencho
ed9fd6c8fd Adds property for initial jetty ssi configuration. 2016-06-02 12:27:47 -05:00
Emil Ivov
6c1349c501 Merge pull request #667 from jitsi/history_fix
Fixes unhandled error from history.pushState
2016-06-01 17:53:41 -05:00
hristoterezov
6e34e33b0d Fixes unhandled error from history.pushState 2016-06-01 17:47:24 -05:00
Etienne CHAMPETIER
5d9d6b4642 Fix missing base.html in source-package
Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com>
2016-06-01 15:58:55 +02:00
Senya
8196233ed2 Update manual-install.md
There is no YOURSECRET4 mentions in the document
2016-05-29 15:04:33 +03:00
yanas
c29f9921a1 Merge pull request #662 from aaronkvanmeerten/master
make the chatArrow image reference relative
2016-05-27 11:03:20 -05:00
tsareg
f574dbe056 Changes after code review 2016-05-27 18:49:26 +03:00
Aaron van Meerten
e6385bb95d make the chatArrow image reference relative, allows for better base href support 2016-05-27 10:45:38 -05:00
tsareg
ccdba03888 Minor fixes for error dialogs 2016-05-27 14:01:43 +03:00
tsareg
e257a3dfc9 Merge branch 'master' into handle_create_local_tracks_errors_better
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2016-05-27 11:29:23 +03:00
tsareg
448fcf36b6 Show dialog for GUM errors 2016-05-26 11:53:02 +03:00
tsareg
48b219111d Use special JitsiTrackError object instead just strings for various types of errors that may happen to JitsiTrack 2016-05-25 15:04:48 +03:00
yanas
7f9c4d6480 Merge pull request #659 from aaronkvanmeerten/master
SSI inclusion of config.js
2016-05-24 12:48:07 -05:00
hristoterezov
064917886e Merge pull request #660 from jitsi/fix-user-cancel-reject-handling
Handle Promise.reject for user cancel case
2016-05-23 17:22:51 -05:00
yanas
0cf291d796 Handle Promise.reject for user cancel case 2016-05-23 16:46:41 -05:00
champtar
8418fc97f1 Commit from translate.jitsi.org by user champtar.: 203 of 203 strings translated (0 fuzzy). 2016-05-23 09:13:54 +00:00
Aaron van Meerten
6170f6c268 add support for possible ssi of <base> attribute
left blank in default meet installations, to be overridden by adding <base href="CDN_URL"> to /base.html
2016-05-20 16:51:37 -05:00
Aaron van Meerten
4dd82b3376 switch config.js values to be present directly in index.html, loaded server-side during page render instead of as a separate request 2016-05-20 16:45:40 -05:00
bgrozev
9ce5e232bb Merge pull request #658 from jitsi/nuke-preconfigured-bridge
Nukes the pre-configured bridge from the config file.
2016-05-19 14:56:37 -05:00
George Politis
318ab2c9dc Nukes the pre-configured bridge from the config file. 2016-05-19 14:51:45 -05:00
yanas
29f06bbb77 Merge pull request #657 from tsareg/switch_tracks_on_device_list_change
Switch local audio and video track when list of available devices changes
2016-05-18 15:18:31 -05:00
Kostiantyn Tsaregradskyi
c1807c3649 Handle cases when new media devices are added/removed more precisely and more predictable 2016-05-18 14:23:12 +03:00
Kostiantyn Tsaregradskyi
b270256a7a Switch local audio and video track when list of available devices changes 2016-05-17 18:58:25 +03:00
damencho
27586643c3 Merge pull request #654 from jitsi/gsm_bars
Changes the way of calculating connection quality.
2016-05-17 10:53:38 +03:00
hristoterezov
99e6453e09 Changes the way of calculating connection quality. 2016-05-12 17:48:19 -05:00
yanas
eda11f4657 Merge pull request #653 from tsareg/device_list_change_basic_support
Update devices in settings panel when list of available devices changes
2016-05-12 15:02:19 -05:00
Kostiantyn Tsaregradskyi
474155ce9d Added ability to notify about available media device list changes 2016-05-11 16:59:27 +03:00
hristoterezov
49e60a8b4f Merge pull request #645 from tsareg/master
Added ability to change output audio device through settings
2016-05-10 13:28:40 -05:00
Kostiantyn Tsaregradskyi
5e027e0a91 Added ability to switch audio output device - changes after review 2016-05-10 13:11:41 +03:00
hristoterezov
e2a7a66772 Merge pull request #624 from jitsi/updates-callstats-error-reporting
Updates callstats error reporting
2016-05-09 13:23:01 -05:00
yanas
76017bcbe3 Merge pull request #649 from jitsi/flip_flag
Adds config option for enabling the flip menu for the local video
2016-05-09 13:21:33 -05:00
hristoterezov
1eb915d312 Adds config option for enabling the flip menu for the local video 2016-05-09 12:39:42 -05:00
bgrozev
3df47f0d72 Merge pull request #647 from jitsi/updates-deployment-non-min
Updates deployment with non-minified versions of libs.
2016-05-09 08:34:33 -05:00
champtar
cc5d563599 Commit from translate.jitsi.org by user champtar.: 203 of 203 strings translated (0 fuzzy). 2016-05-09 13:26:57 +00:00
damencho
c5e7ca8a26 Adds non-minified versions of app.bundle and lib-jitsi-meet to the libs folder which is included in the deb package. 2016-05-09 11:49:04 +03:00
yanas
626b37b4fe Merge pull request #646 from jitsi/flip
Implements custom context menu to flip the local video
2016-05-08 10:50:35 -05:00
hristoterezov
c3338d3bf2 Implements custom context menu to flip the local video 2016-05-06 20:50:37 -05:00
Kostiantyn Tsaregradskyi
d34adb67dd Added ability to switch audio output device 2016-05-06 17:31:23 +03:00
George Politis
ae543e68d6 Merge pull request #642 from jitsi/fix_ff_hangup
Fixes issue with not working hangup button on FF
2016-05-05 17:03:46 -05:00
Paweł Domas
50f261effc Merge pull request #643 from jitsi/fix-recorder-error-states
Fix recorder error and state handling
2016-05-05 14:50:51 -05:00
yanas
0736206722 Fix recorder error and state handling 2016-05-05 11:46:06 -05:00
hristoterezov
9dc9dc3685 Fixes issue with not working hangup button on FF 2016-05-05 11:11:05 -05:00
Kostiantyn Tsaregradskyi
2bd600aeaf Very raw version of ability to switch audio output device 2016-05-05 17:34:15 +03:00
jitsi-pootle
2c0d60a1f4 New files added from translate.jitsi.org based on templates 2016-05-05 10:45:10 +00:00
ibauersachs
25a62f330f Commit from translate.jitsi.org by user ibauersachs.: 203 of 203 strings translated (0 fuzzy). 2016-05-04 08:40:00 +00:00
Paweł Domas
b191c58462 Merge pull request #640 from jitsi/fix-recorder-states
Fix recorder state and moderator restart
2016-05-03 15:42:50 -05:00
yanas
c07060c9cd Fix recorder state and moderator restart 2016-05-03 15:26:35 -05:00
yanas
0957ee7547 Merge pull request #639 from jitsi/external_connect_and_auth
Fixes issues when external connect and authentication are enabled
2016-05-02 15:00:06 -05:00
hristoterezov
d6ef36b4b4 Passes the room name to connect when using authentication 2016-05-02 14:47:40 -05:00
hristoterezov
6b5f6ec704 Fixes issue with multiple room query parameters added to bosh url 2016-05-02 14:22:02 -05:00
hristoterezov
0970fdd7e7 Clears external connect data after using it 2016-05-02 14:09:57 -05:00
George Politis
1ff3efa7d2 Merge pull request #638 from jitsi/hide-recorder-thumbnail
Hide recorder local thumbnail
2016-05-01 13:59:41 -05:00
yanas
ab67b42eb9 Hide recorder local thumbnail 2016-05-01 13:47:43 -05:00
hristoterezov
cdefca9fbd Merge pull request #633 from jitsi/fix-and-refactor-shared-video
Fix and refactor shared video
2016-04-29 15:39:30 -05:00
hristoterezov
9b334777b3 Merge pull request #634 from jitsi/fix-remote-video-check
Make sure remote video exist before we use it
2016-04-29 12:55:01 -05:00
George Politis
4f2a57c3a5 Merge pull request #636 from jitsi/fix_externalConnectUrl_param
Fixes issue with externalConnectUrl hash param when the value is null
2016-04-29 11:47:44 -05:00
hristoterezov
d535765648 Fixes issue with externalConnectUrl hash param when the value is null 2016-04-29 11:46:24 -05:00
yanas
edf2f8114b Make sure remote video exist before we use it 2016-04-28 21:18:48 -05:00
yanas
d95b2b034b Fix initial state of user interaction mute 2016-04-28 17:47:40 -05:00
yanas
c2f46a5cfe Refactor shared video manager 2016-04-28 17:44:12 -05:00
hristoterezov
bd7740cba1 Merge pull request #632 from jitsi/add-url-param-conn-opt
Add support for connection optimisation URL param
2016-04-28 15:17:01 -05:00
yanas
4a4e25de28 Add support for connection optimisation URL param 2016-04-28 14:56:11 -05:00
damencho
65c49b6b4c Merge pull request #622 from jitsi/add-smart-mutes-unmutes-shared-video
Add shared video smart mike mutes unmutes
2016-04-28 19:59:00 +03:00
bgrozev
202c506a8d Merge pull request #630 from jitsi/fix-missing-remote-video
Fix missing remote video exception
2016-04-27 16:51:10 -05:00
yanas
aeabad4891 Fix missing remote video exception 2016-04-27 16:28:00 -05:00
bgrozev
5cb2b15b54 Merge pull request #629 from jitsi/lipsync
Lipsync
2016-04-27 15:16:15 -05:00
damencho
81a487b856 Merge pull request #628 from jitsi/add-hidden-participant-support
Add hidden participant support
2016-04-27 18:49:37 +03:00
yanas
c881e7b640 Add hidden participant support 2016-04-27 10:16:30 -05:00
paweldomas
f2c9b8b7a5 Fix issue updating large video 'src' while on stage 2016-04-26 15:42:18 -05:00
paweldomas
0116f547ed Log an error when not an audio nor a video track is added 2016-04-26 15:40:57 -05:00
ibauersachs
13a55089a5 Commit from translate.jitsi.org by user ibauersachs.: 203 of 203 strings translated (0 fuzzy). 2016-04-26 17:13:55 +00:00
George Politis
7bb20bb967 Merge pull request #617 from bgrozev/refactor-util
Exposes the number of participants with tracks.
2016-04-26 10:23:34 -05:00
damencho
08b60bf750 Merge pull request #625 from champtar/source-package
Fix "make source-package"
2016-04-26 17:14:09 +03:00
Etienne CHAMPETIER
ca31bb935b Fix "make source-package"
Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com>
2016-04-26 13:51:09 +02:00
damencho
1f98fbb99f Adds unhandledrejection, that catches all unhandled promise rejection and logs them in callstats. 2016-04-26 11:00:42 +03:00
damencho
2442f0dfd3 Removes playerPaused variable and just use player to get its state. 2016-04-26 10:22:12 +03:00
yanas
3a9d743d47 Add shared video smart mike mutes unmutes 2016-04-25 15:39:31 -05:00
emcho
6a74296d3e Commit from translate.jitsi.org by user emcho.: 180 of 180 strings translated (0 fuzzy). 2016-04-25 19:29:18 +00:00
jitsi-pootle
af46e28fcc New files added from translate.jitsi.org based on templates 2016-04-25 17:14:01 +00:00
Bernhard Lichtinger
c9ebecbf10 Add Firefox in list of supportedBrowsers for invite emails 2016-04-22 12:32:46 +02:00
Boris Grozev
fb7c2082e6 Exposes the number of participants with tracks. 2016-04-21 17:48:30 -05:00
emcho
1feb5d00fe Commit from translate.jitsi.org by user emcho.: 180 of 180 strings translated (0 fuzzy). 2016-04-20 23:06:12 +00:00
jitsi-pootle
faa519cbeb New files added from translate.jitsi.org based on templates 2016-04-20 22:35:07 +00:00
Emil Ivov
40c7a7e1b8 Merge pull request #615 from jitsi/prosody_jwt_errors
Improve token error reporting in Prosody JWT plugin
2016-04-20 17:16:19 -05:00
paweldomas
5a95edbdcd Improve token error reporting in Prosody JWT plugin 2016-04-20 16:38:16 -05:00
hristoterezov
846ec1c9c8 Merge pull request #614 from jitsi/add-initial-id-pass-login
Adds id and password initial login
2016-04-20 15:06:23 -05:00
yanas
1c9903642b Do not remove the login params after read 2016-04-20 14:41:29 -05:00
yanas
6bfb28f63f Merge pull request #610 from jitsi/callstats_fix
Leaves the call when the hangup button is pressed
2016-04-20 14:06:16 -05:00
yanas
3408737693 Adds id and password initial login 2016-04-20 14:02:16 -05:00
damencho
bbc91f6e0c Merge pull request #613 from jitsi/fix-display-name-dialog
Fix require display name dialog
2016-04-19 16:26:22 -05:00
yanas
0bf4660309 Fix require display name dialog 2016-04-19 16:06:16 -05:00
damencho
58d5823d12 Merge pull request #612 from jitsi/add-smart-shared-video-unmute
Adds smart un-mute to the shared video
2016-04-19 13:27:08 -05:00
yanas
326dedaf40 Fix string 2016-04-19 13:24:27 -05:00
yanas
d08e37b42b Adds smart un-mute to the shared video logic 2016-04-19 13:07:04 -05:00
hristoterezov
7c7ce66ae4 Prettifying the code related to showing the feedback dialog 2016-04-19 12:15:04 -05:00
hristoterezov
73b4ad5a63 Added JitsiConference.leave() when the hangup button is pressed 2016-04-18 17:02:34 -05:00
hristoterezov
2b7ae5c167 Merge pull request #609 from jitsi/fix-feedback-enabling
Fix enable feedback button check
2016-04-15 16:11:04 -05:00
yanas
7ba8b0a24e Fix enable feedback button check 2016-04-15 15:41:51 -05:00
damencho
47a64190a6 Merge pull request #602 from jitsi/performanceTime_format
Renames performanceTimes to ConnectionTimes
2016-04-11 13:41:40 -05:00
hristoterezov
b00fb2ec7e Merge pull request #599 from damencho/updates-onDisplayNameChanged
Updates onDisplayNameChanged
2016-04-11 13:12:42 -05:00
damencho
13e3e99994 Updates websockets example. 2016-04-11 10:16:08 -05:00
hristoterezov
655b7019d1 Renames performanceTimes to ConnectionTimes 2016-04-11 10:01:23 -05:00
damencho
702eb8cbbe Merge pull request #600 from jitsi/performanceTime_format
Fixes time console.log text
2016-04-10 12:55:58 -05:00
hristoterezov
ddf39a20b8 Fixes time console.log text 2016-04-10 12:25:37 -05:00
damencho
0e4f4cbd74 Initializes display name with initial value and does not depend on initial on display name changed event. 2016-04-09 22:08:06 -05:00
bgrozev
26443b6d72 Merge pull request #598 from damencho/minimize-document-modifications
Minimize document modifications on every presence
2016-04-09 21:57:16 -05:00
damencho
0974e31da1 Updates connection quality popover only if its visible or about to be visible. 2016-04-09 12:35:54 -05:00
damencho
613569ff09 Checks whether we need to modify document, before change - on display name change. 2016-04-09 12:04:01 -05:00
hristoterezov
4d63ea2021 Merge pull request #597 from jitsi/fix-isvisible-early-call
Fix early call of SidePanel isVisible
2016-04-08 14:49:15 -05:00
yanas
b597f44605 Fix early call of SidePanel isVisible 2016-04-08 14:46:13 -05:00
lyubomir
28bac7b329 Merge pull request #596 from jitsi/fix-black-stripe
Fix the black stripe (another try)
2016-04-08 11:13:12 -05:00
yanas
d9c3eec9a8 Fix the black stripe (another try) 2016-04-08 10:55:19 -05:00
hristoterezov
a8aa62b075 Merge pull request #593 from jitsi/custom-role-recorder-view
Add custom-role to presence and special view for Recorders
2016-04-07 14:58:54 -05:00
yanas
9ef43d1fe7 Remove self and use this instead in conference.js 2016-04-07 14:11:59 -05:00
yanas
562eba8d78 Removed unused variable 2016-04-07 13:58:15 -05:00
yanas
351775a1c0 Add jsdocs to the recording view manager 2016-04-07 13:09:19 -05:00
yanas
99d9b16c13 Add Recorder controller. 2016-04-07 13:06:28 -05:00
yanas
e43c5ab54c Add custom-role to presence and special view for Recorders 2016-04-07 12:08:00 -05:00
damencho
a112b10a36 Merge pull request #591 from jitsi/fix-black-stripe
Fix black stripe and side panel animations
2016-04-06 16:15:22 -05:00
yanas
4990406010 Fix black stripe on the right of the screen 2016-04-06 15:36:41 -05:00
hristoterezov
8842823607 Merge pull request #587 from damencho/global-error-handler
Enables global error handler.
2016-04-06 13:11:22 -05:00
damencho
ccc9f4e033 Adds a check and reuses any previous onerror handlers if they exist. 2016-04-06 11:52:31 -05:00
damencho
e56c936798 Enables global error handler. 2016-04-05 17:18:38 -05:00
damencho
b46480dc16 Merge pull request #586 from jitsi/shared-video-auto-mute-popup
Shared video auto mute popup
2016-04-05 14:40:30 -05:00
yanas
a1cef0f181 Add notification popup for shared video auto mute 2016-04-05 14:17:50 -05:00
yanas
ba871d269f Fix toolbar slide up effect. 2016-04-05 14:14:30 -05:00
Paweł Domas
b60e074710 Merge pull request #584 from bgrozev/enable-as
Enable adaptive simulcast by default
2016-04-04 16:23:58 -05:00
Boris Grozev
8466aa2f78 Renames adaptiveSimulcast to disableAdaptiveSimulcast.
In conjunction with corresponding commits in lib-jitsi-meet and jicofo
this enables adaptive simulcast whenever simulcast is enabled.
2016-04-04 14:15:59 -05:00
yanas
e28975dcb5 Merge pull request #581 from damencho/shared-video-volumes
Changes mute/unmute behavior when playing a shared video.
2016-04-01 17:38:52 -05:00
damencho
e579a41284 Merge pull request #582 from jitsi/set-follow-me-initial
Init follow me attributes after enable
2016-04-01 17:29:26 -05:00
damencho
b949ffdda1 Prevents users that are not sharing the video of pausing the video and leaves the control to the user sharing the video. 2016-04-01 17:23:30 -05:00
damencho
7dad981112 Follow seeking while player is paused. 2016-04-01 17:08:35 -05:00
damencho
6efbf058fa Merge pull request #579 from jitsi/fix-black-stripe-on-load
Fix large black stripe on load.
2016-04-01 16:28:32 -05:00
yanas
a3bfce4c40 Set follow-me initial state after enable 2016-04-01 16:26:30 -05:00
damencho
bede8feccc Mutes local video when shared video is playing and mutes shared video if user wants to talk. 2016-04-01 16:24:35 -05:00
damencho
2d1e7c9baf Merge pull request #580 from jitsi/performance_torture
Stores measured times and exposes them
2016-04-01 15:43:33 -05:00
damencho
9a984b7f84 Instantly update volume changes. 2016-04-01 14:46:42 -05:00
hristoterezov
8d77088f6d Stores measured times and exposes them 2016-04-01 14:44:25 -05:00
yanas
56690037d0 Fix large black stripe on load. 2016-04-01 11:30:05 -05:00
damencho
bd09fa2601 Merge pull request #578 from jitsi/fix-settings-dialog-strings
Unifies all strings in Settings.
2016-04-01 11:21:29 -05:00
damencho
7c7f8960fa Merge pull request #576 from jitsi/hide-feedback-with-filmstrip
Hide feedback with filmstrip
2016-04-01 10:58:01 -05:00
damencho
af2809258c Merge pull request #575 from jitsi/fix-follow-me-exception
Fixes exception in follow-me when we receive an update for a video th…
2016-04-01 08:38:06 -05:00
damencho
2353c6f7e3 Merge pull request #577 from jitsi/update_gitignore
Adds libs/external_connect.js to .gitignore
2016-03-31 22:21:02 -05:00
hristoterezov
b031fdc398 Adds libs/external_connect.js to .gitignore 2016-03-31 18:03:27 -05:00
yanas
144dd85e98 Unifies all strings in Settings. 2016-03-31 17:58:02 -05:00
yanas
67e8118d74 Shows/hides feedback button when the filmstrip is shown/hidden. 2016-03-31 17:35:10 -05:00
yanas
ea9b909775 Fixes exception in follow-me when we receive an update for a video thumbnail that's not there yet. 2016-03-31 15:13:00 -05:00
yanas
b7cc03df26 Merge pull request #573 from damencho/shared-video-updates
Shared video updates
2016-03-31 14:31:57 -05:00
damencho
ebe37ff98a Handle on player error so we can remove the player. 2016-03-31 14:11:33 -05:00
damencho
fcf5c16945 Merge pull request #574 from jitsi/fix-welcome-page-field
Fixes enter room name field in the welcome page.
2016-03-31 13:45:54 -05:00
yanas
5cbe710075 Fixes enter room name field in the welcome page. 2016-03-31 13:31:05 -05:00
damencho
104503ee13 Make sure we store initial attributes in order, so it will hold the last state we want to be in. Respects quick initial stop received. 2016-03-31 12:14:45 -05:00
damencho
2e3dcb142d Updates translation. 2016-03-31 11:43:37 -05:00
damencho
6951089130 Force seek when transition from and to pause state. 2016-03-31 00:07:12 -05:00
damencho
952eaf5a0c Avoids double loading of the player. 2016-03-30 21:36:05 -05:00
hristoterezov
d9e08032ce Changes translation module to load async 2016-03-30 21:01:21 -05:00
damencho
8a80df2828 Merge pull request #561 from jitsi/connection_optimization
Implements server side connection establishment
2016-03-30 14:30:36 -05:00
hristoterezov
166a609b94 Removes console.warn message from do_external_connect.js if there is no error passed. 2016-03-30 13:32:17 -05:00
bgrozev
ff256f15a5 Merge pull request #567 from jitsi/recording-recorder-parameter
Adds an I am a recorder parameter that allows for the UI to be cleane…
2016-03-29 17:29:54 -05:00
damencho
06f3ddc822 Hides the toolbar if the user is a recorder. 2016-03-29 17:28:20 -05:00
yanas
7f7d9d5594 Adds an I am a recorder parameter that allows for the UI to be cleaner and simpler for the recorders. 2016-03-29 17:26:39 -05:00
damencho
3c33542874 Merge pull request #566 from jitsi/recording-related-work-in-progress
Fixes streaming tooltip. Checks if the stream id is not provided and …
2016-03-29 16:31:22 -05:00
yanas
76820bed8d Fixes recording state handling. 2016-03-29 16:30:08 -05:00
yanas
39c350cdba Fixes streaming tooltip. Checks if the stream id is not provided and requests the user before starting the recorder. 2016-03-29 16:07:01 -05:00
yanas
2ef9412a01 Merge pull request #565 from damencho/dock-toolbar-on-shared-video
Docks toolbar when shared video is shown.
2016-03-29 15:58:28 -05:00
damencho
a38b628d76 Docks toolbar when shared video is shown. 2016-03-29 14:36:20 -05:00
damencho
24896634f6 Merge pull request #564 from jitsi/recording-related-work-in-progress
Recording related UI modifications.
2016-03-29 13:52:24 -05:00
yanas
8b060e9cc0 Fixes mistakenly removed button. 2016-03-29 13:51:21 -05:00
yanas
6d51cb5f40 Fixes mistakenly removed button. 2016-03-29 13:49:05 -05:00
yanas
51037c2dca Fixes status change from pending to unavailable. 2016-03-29 13:46:10 -05:00
yanas
7df5e92bc9 Adds new recording module. 2016-03-29 13:10:31 -05:00
yanas
68994fbe74 Recording related UI modifications. 2016-03-29 12:13:54 -05:00
hristoterezov
4a1175d44f Fixes comments after review 2016-03-28 17:42:20 -05:00
hristoterezov
bf9c4ea444 Implements server side connection establishment 2016-03-28 16:19:32 -05:00
yanas
0bde7de37b Merge pull request #560 from damencho/seek-on-start-paused
Seeks in video when we start in paused state.
2016-03-28 13:56:09 -05:00
damencho
9632bd531c Does not accumulate multiple pause events in commands. 2016-03-28 13:38:48 -05:00
yanas
740c920cbb Merge pull request #557 from damencho/enables-sharedvideo-for-all-participants
Enables shared video for all participants, the first to share is the …
2016-03-28 13:13:46 -05:00
damencho
885210452c Updates button states on non moderator participants before showing the toolbar. 2016-03-28 11:46:45 -05:00
damencho
7c02803ef9 Seeks in video when we start in paused state. 2016-03-27 15:32:45 -05:00
damencho
7d0cd00a50 Enables shared video for all participants, the first to share is the video all will see, later attempts will result just a dialog informing that video is already shared. 2016-03-25 19:38:56 -05:00
damencho
055f96bb03 Merge pull request #556 from jitsi/fix-follow-me-exception
Fixes exception on follow me command.
2016-03-25 17:22:05 -05:00
yanas
76548f1cd0 Fixes exception on follow me command. 2016-03-25 17:15:50 -05:00
yanas
1897de75b1 Merge pull request #555 from damencho/fix-shared-video-undefined
Uses player functions only after the player has reported playing event.
2016-03-25 15:58:20 -05:00
damencho
508fd4a8df Uses player functions only after the player has reported playing event. 2016-03-25 15:36:41 -05:00
bgrozev
30cf17d99d Merge pull request #554 from jitsi/fix-background-css
Reverts back to black background. We need to fix some other things be…
2016-03-25 14:50:31 -05:00
yanas
568a5ba816 Reverts back to black background. We need to fix some other things before moving to grey background. 2016-03-25 14:48:31 -05:00
yanas
9b09e61877 Merge pull request #553 from damencho/fix-replacing-pinned
Fixes and issue where: if we receive dominant speaker event just befo…
2016-03-24 17:43:18 -05:00
yanas
1e7cd06555 Merge pull request #552 from damencho/shared-video-fixes
Shared video fixes
2016-03-24 17:42:13 -05:00
damencho
d48ef06ddb Fixes and issue where: if we receive dominant speaker event just before the video start playing, this can override already pinned video. 2016-03-24 17:10:29 -05:00
damencho
af9f651702 Check whether commands are coming from moderator. 2016-03-24 16:20:27 -05:00
damencho
9abc78ef24 Do not send SELECTED_ENDPOINT events for custom containers. 2016-03-24 16:20:27 -05:00
damencho
5112041e15 Merge pull request #551 from jitsi/fix-shared-video-ui-glitches
Fixes shared video thumbnail size and shared video on large background.
2016-03-24 14:51:42 -05:00
yanas
6edbcb9311 Fixes shared video thumbnail size and shared video on large background. 2016-03-24 14:49:26 -05:00
yanas
4ffafbe9a8 Merge pull request #545 from damencho/fix-video-switching-on-hide-container
Fix video switching on hide container
2016-03-24 13:27:41 -05:00
yanas
d0ad928d39 Merge pull request #549 from damencho/fixes-early-pause-shared-video
Fixes early initial pause event, may lead to player keep buffering wi…
2016-03-24 13:27:22 -05:00
yanas
c4f4dcdb4f Merge pull request #546 from damencho/shared-video-display-name
Removes hoverIn/Out detection for shared video that shows/hides displ…
2016-03-24 13:25:51 -05:00
damencho
27607e8754 Update variable name to pinnedId. 2016-03-24 13:16:42 -05:00
damencho
94d98ec0ab Fixes returning to dominant speaker after closing shared video. Renames a method and fix its behaviour was handling both case when removing just video element in small videos (local or remote) and when we are removingParticipantContainer, now just handles the second one and uses focusedID if any or dominantSpeakerID if any, otherwise elects new video. 2016-03-24 13:11:03 -05:00
damencho
e330dbf5d1 Fixes switching to pinned video when hiding a container. 2016-03-24 13:06:52 -05:00
damencho
f788a45bac Merge pull request #548 from jitsi/follow-me
Follow me
2016-03-24 13:02:42 -05:00
bgrozev
3f62b479da Merge pull request #550 from jitsi/polish-ui
Polish ui
2016-03-24 12:26:13 -05:00
yanas
d49dff4ae1 Fixes a config parameter name. Removes a console.log, which got there by mistake. Fixes some css properties of the chat unread messages. 2016-03-24 12:17:58 -05:00
yanas
1526d4e239 Toolbar style changes. 2016-03-24 10:03:48 -05:00
yanas
0a2a6e5677 Changing random avatars to robohash. 2016-03-24 10:03:48 -05:00
yanas
72454ff279 HD label added when the large video is in HD. 2016-03-24 10:03:48 -05:00
yanas
64d8cb2db2 Turning video thumbnails into squares. Changes the size of the dominant speaker avatar and fixes some minor thing around those two. 2016-03-24 10:01:08 -05:00
yanas
5c0088d2ef Main UI polishing. Removes rounded corners, fixes gaps. Adding custom avatars. 2016-03-24 09:59:03 -05:00
damencho
9efebc3702 Fixes early initial pause event, may lead to player keep buffering without starting. 2016-03-23 22:42:17 -05:00
yanas
cc761700fe Extends the follow-me feature by adding the possibility to follow the pinned participant, the shared video and the shared document. Adds the possibility to enable disable follow-me from the settings panel. Some other small fixes throughout the UI. 2016-03-23 20:43:29 -05:00
damencho
8df6a29741 Removes hoverIn/Out detection for shared video that shows/hides displayname, as we always display the name of the video when there is no thumb shown. And we do not want the name over the thumb. 2016-03-22 17:15:35 -05:00
yanas
b1469186d1 Merge branch 'master' of https://github.com/jitsi/jitsi-meet into follow-me 2016-03-22 15:24:02 -05:00
yanas
32c2d912be Merge pull request #543 from damencho/shared-video
Shared video, synchronized play/pause/seek/muting/volume, initial commit.
2016-03-22 15:15:36 -05:00
damencho
586b8401ae Renames event name. 2016-03-22 15:04:52 -05:00
damencho
f0fd7d7435 Renames method. 2016-03-22 14:59:03 -05:00
damencho
9a39898eea Renames event name. 2016-03-22 14:57:36 -05:00
damencho
fe7d05a951 Reverse the check to use only VIDEO_CONTAINER_TYPE. 2016-03-22 14:56:50 -05:00
damencho
1bdeda4ec3 Fixes updateLarge video to change to different container types which do not have stream. 2016-03-22 14:49:37 -05:00
damencho
2c1a9d20fd Fixes setting local video, default videoType. Fixes showing local video when there is no video device shown. 2016-03-22 13:27:11 -05:00
damencho
d82d4cbed9 Creates first the container before setting avatar, cause the avatar set will check the large video container type and type may be missing. Fixes error 'container of type undefined doesn't exist':
>    at LargeVideoManager.getContainer
>    at LargeVideoManager.get
>    at Object.isCurrentlyOnLarge
>    at Object.changeUserAvatar
>    at Object.UI.setUserAvatar
>    at Object.UI.addUser
2016-03-18 17:44:32 -05:00
damencho
9e7275acfb Updates large video when user left and we are removing the shared video. 2016-03-18 17:21:41 -05:00
damencho
ba01733c4f Adds confirmation dialog when closing shared video. 2016-03-18 17:04:13 -05:00
damencho
a1ac18a632 Fixes pausing. 2016-03-18 16:47:47 -05:00
damencho
38275ce045 Shared video, synchronized playing/seek/muting/volume initial commit. 2016-03-18 15:00:55 -05:00
damencho
83f07a7e67 Merge pull request #542 from champtar/unsupported_browser
Add unsupported_browser.css to source-package
2016-03-18 09:58:32 -05:00
Etienne CHAMPETIER
a61ce8ee3b Add unsupported_browser.css to source-package
Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com>
2016-03-18 15:23:15 +01:00
yanas
eec8129026 Merge pull request #540 from damencho/fix-etherpad
Fix etherpad
2016-03-17 22:37:00 -05:00
damencho
2b26580a7c Disables switching to dominant speaker when Etherpad is shown on large video. 2016-03-17 22:19:09 -05:00
damencho
eefdbd4fe5 Renames EtherpadContainerType to ETHERPAD_CONTAINER_TYPE. 2016-03-17 21:58:40 -05:00
Paweł Domas
7b55d8b526 Merge pull request #537 from jitsi/max_users_error
Implements dialog for max users error
2016-03-17 14:52:48 -05:00
yanas
20af89abfa Merge pull request #539 from damencho/ui-container-management-and-fixes
Ui container management and fixes
2016-03-17 14:13:18 -05:00
damencho
5963f85ad6 Fixes avatar that is shown, when we switch from container with muted video to container from other type, like etherpad. 2016-03-17 13:29:07 -05:00
hristoterezov
438cae101f Fixes error with max users limit after review 2016-03-17 13:23:03 -05:00
yanas
6a7919a904 Merge pull request #532 from damencho/resize-ds-onfilm-toggle
Resizes large video on filmstrip toggle.
2016-03-16 14:46:32 -05:00
damencho
3577f338cc Does not do force-update when resizing. 2016-03-16 14:35:30 -05:00
damencho
9e0b1beed5 Always uses current video type to search for container that will handle it. Renames video container type to camera, to match the type ot the tracks. Add the same container to be used and for tracks with type of desktop. 2016-03-16 13:28:35 -05:00
damencho
ca56734d9c Moves VideoLayout reference in SmallVideo as it is used there in updateView. 2016-03-16 13:28:28 -05:00
damencho
6955bb71f3 Adds methods to abstraction LargeContainer which are used by LargeVideo when updating video. 2016-03-16 13:28:20 -05:00
damencho
5837ef506c Removes remoteVideoTypes and uses the set/get in the small video instances. 2016-03-16 13:28:09 -05:00
damencho
3fc839cb37 Adds optional parameter to addParticipantContainer, make possible to create the SmallVideo outside VideoLayout and pass it to be displayed. 2016-03-16 13:28:00 -05:00
yanas
15865c3d42 Merge pull request #531 from damencho/remove-prezi
Merges damencho's PR for removing prezi. We still need to remove all prezi related strings from translations through translate.jitsi.org.
2016-03-16 13:18:08 -05:00
Emil Ivov
897e7a1925 Update main.json 2016-03-15 16:16:50 -05:00
hristoterezov
02ff54b659 Implements dialog for max users error 2016-03-15 14:08:01 -05:00
damencho
95f36cfd9a Merge pull request #530 from isymchych/nwjs
Example NW.js app.
2016-03-14 15:19:33 -05:00
damencho
97733cd17a Resizes large video on filmstrip toggle. 2016-03-11 12:57:49 -06:00
damencho
4ff6d276ce Removes prezi. 2016-03-11 12:00:10 -06:00
isymchych
72a761e80a integrate with nwjs 2016-03-11 15:18:37 +02:00
Lyubomir Marinov
605a892f78 Implements an initial (demo) version of "Follow Me" for film strip visibility. 2016-03-11 04:55:29 -06:00
Lyubomir Marinov
c35590dbda Allows UI.toggleFilmStrip() and UIEvents.TOGGLE_FILM_STRIP to act as setters in addition to toggles. 2016-03-11 04:54:06 -06:00
Lyubomir Marinov
972fc402e4 Exposes a Command(s) API from conference.js. 2016-03-11 04:49:13 -06:00
yanas
ed85658ce5 Merge pull request #520 from isymchych/improve-settings
Apply new settings without clickint "Update" button
2016-03-10 13:08:23 -06:00
yanas
3759676770 Merge pull request #525 from damencho/sync-mute
Syncs mute/unmute calls.
2016-03-09 16:17:00 -06:00
damencho
1c3aafd5c4 Uses the Promise returned on mute/unmute, just prints when calls were canceled due to operation in progress. 2016-03-08 17:33:09 -06:00
yanas
729ca2fbe6 Merge pull request #524 from damencho/ds-error-handle
Improves desktop sharing error handling.
2016-03-07 13:41:17 -06:00
damencho
45d997e9f1 Adds a comment to default error handling for desktop sharing. 2016-03-07 12:57:12 -06:00
damencho
6b5a52926a Merge pull request #522 from jitsi/fix_lib_rename
Fixes the compatability with lib-jitsi-meet for TRACK_REMOVED events for remote track to use peerconnection event instead of relying on TRACK_STOPPED event.
2016-03-07 11:22:22 -06:00
damencho
3a933cfb84 Avoids showing two warning dialogs when firefox extension is required and missing. 2016-03-04 15:55:44 -06:00
damencho
d78666a49d Removes listener to missing event and duplicate dialog code. 2016-03-04 15:36:53 -06:00
damencho
413e5098c8 Handles the error when user cancels desktop sharing window. 2016-03-04 15:21:07 -06:00
damencho
0470106524 Shows and error dialog when we fail to install desktop sharing plugin for some reason. 2016-03-04 15:20:05 -06:00
hristoterezov
30e1e3b23a Fixes jitsi meet to work with the renamed events and methods from the latest version of lib-jitsi-meet. 2016-03-03 14:53:36 +02:00
damencho
25a9928758 Merge pull request #521 from jitsi/fix-resizing
Fixes resizing problems introduced in last resizing commit and some previous problems with side panel open/close.
2016-03-02 14:59:23 -06:00
yanas
67a73b163e Removes empty space from the available width calculation. 2016-03-02 14:46:57 -06:00
yanas
ad44cc518a Fixes resizing problems introduced with previous resizing commit. Fixes side panel open/close code and resizing. 2016-03-02 13:50:55 -06:00
isymchych
be0abf908e auto-save setiings 2016-03-02 17:39:39 +02:00
yanas
c201de86cc Merge pull request #519 from isymchych/lastn
Use overriden config.channelLastN property in VideoLayout
2016-02-29 13:49:28 -06:00
yanas
48b225f382 Merge pull request #516 from isymchych/fix-auth
Code cleanup
2016-02-29 13:35:53 -06:00
yanas
1339b306e6 Merge pull request #517 from jitsi/fix-resizing
An additional fix should be added, which allow for more smooth resizing (we still see thumbnails going on a second row and then coming back up again), but this will be added in a separate commit.
2016-02-29 13:20:19 -06:00
isymchych
cd71b0a603 use latest version of the config.channelLastN 2016-02-26 15:22:04 +02:00
isymchych
f242c8cfdc handle missing remoteVideo when removing video element 2016-02-26 15:20:36 +02:00
Paweł Domas
259fae331f Merge pull request #518 from isymchych/really-fix-auth
Fix login/logout
2016-02-25 11:06:21 -06:00
isymchych
3cf478826e implement user logout 2016-02-25 15:52:15 +02:00
isymchych
b73bddf1c4 handle AUTH_STATUS_CHANGED event 2016-02-25 14:32:52 +02:00
isymchych
e478a73988 fix on-the-fly auth 2016-02-25 14:32:34 +02:00
isymchych
c294f592c8 code cleanup: remove redundant span.nick elements 2016-02-25 12:40:24 +02:00
isymchych
5ec28ff3c1 code cleanup: remove unused settings 2016-02-25 12:40:24 +02:00
yanas
30f3da98e5 Fixes thumbnail resize and thumbnails going on a second row. Refactors code around the film strip and resize in general. 2016-02-24 15:05:24 -06:00
yanas
194b991fb1 Merge pull request #515 from damencho/handle-track-removed
Handles track removed and removes video elements. Tested by starting/stopping desktop sharing several times and we only have one video and one audio element after the PR is applied.
2016-02-24 11:09:07 -06:00
damencho
3c61bac3c8 Handles track removed and removes video elements. When switching on and off desktop sharing video elements number grow under remote video span. 2016-02-23 16:47:55 -06:00
Paweł Domas
1a656c2c89 Merge pull request #494 from isymchych/escape-nicknames
Escape nicknames before displaying them
2016-02-23 10:50:03 -06:00
isymchych
ebf57923ae hide chat if local display name is empty 2016-02-23 17:20:33 +02:00
isymchych
0bcbd105e3 escape nicknames before displaying them 2016-02-23 17:20:33 +02:00
Paweł Domas
47f2320e94 Merge pull request #511 from isymchych/improve-focus-left
leave the room if focus left
2016-02-22 12:55:10 -06:00
isymchych
c027050e11 leave the room if focus left 2016-02-22 16:57:36 +02:00
Paweł Domas
93d5497c76 Merge pull request #508 from isymchych/fix-unmute
LargeVideo: detach previous stream when attaching new one
2016-02-19 10:11:25 -06:00
isymchych
6476503240 LargeVideo: detach previous stream when attaching new one 2016-02-18 15:38:57 +02:00
Paweł Domas
8b2244b47a Merge pull request #503 from isymchych/fix-logo-blink
Fix watermark logo blinking during video switching
2016-02-17 09:27:41 -06:00
isymchych
255f374894 fix watermark logo blinking during video switching 2016-02-17 14:37:06 +02:00
Paweł Domas
61b28fccf2 Merge pull request #499 from isymchych/fix-auth-dialog
fix authentication dialog
2016-02-16 10:48:37 -06:00
Paweł Domas
8d65fcc4c2 Merge pull request #498 from isymchych/reorder-streams-operations
Remove old track from the conference before adding new one
2016-02-16 10:32:38 -06:00
isymchych
5a1d200098 fix authentication dialog 2016-02-16 17:42:28 +02:00
isymchych
9581afb612 remove old track from the conference before adding new one 2016-02-16 15:34:32 +02:00
Paweł Domas
de8f75ddee Merge pull request #493 from isymchych/fix-screensharing-mute-on-safari
Fix screensharing mute on safari
2016-02-12 11:43:08 -06:00
isymchych
24ffc816f4 LargeVideo: show watermark even if video is muted 2016-02-12 16:47:42 +02:00
isymchych
401e5e7ae0 fix jshint issues 2016-02-12 16:28:43 +02:00
isymchych
fdfa9de150 hide large video if stream is muted 2016-02-12 16:28:43 +02:00
Paweł Domas
61f4bb63ab Merge pull request #492 from isymchych/device-selection
Allow user to select camera and microphone
2016-02-10 15:51:36 -06:00
isymchych
f65d630ad8 allow user to select camera and microphone 2016-02-10 15:37:50 +02:00
damencho
b4b9160fcb Adds room name to the bosh connection. 2016-02-09 17:44:41 -06:00
damencho
bd16b9e346 Prints audio levels in debug mode. 2016-02-09 16:49:58 -06:00
Paweł Domas
e688a5cb9f Merge pull request #487 from isymchych/video-mute-screensharing
Handle video mute/unmute during screensharing
2016-02-09 11:31:42 -06:00
damencho
dbed8c2976 Fixes push to talk. 2016-02-09 10:29:50 -06:00
isymchych
79d5bf6cfa move screensharing into single function, properly handle mute/unmute 2016-02-09 12:52:54 +02:00
isymchych
44bae94701 code cleanup 2016-02-09 12:30:34 +02:00
damencho
e81d3c02ad Shows dominant speaker icon for the local user, when he is the dominant speaker. 2016-02-08 15:42:03 -06:00
Paweł Domas
ff4de4cb5b Merge pull request #489 from isymchych/handle-focus-left
handle FOCUS_LEFT conference error
2016-02-08 09:37:57 -06:00
yanas
e09a2f5bee Fixes all shortcuts. 2016-02-05 12:53:31 -06:00
yanas
e7e8dc3457 Fixes shifted audio level glow on thumbnails. Fixes missing audio level indicator on large video avatar. 2016-02-05 11:32:09 -06:00
isymchych
379f786225 handle FOCUS_LEFT conference error 2016-02-05 17:04:48 +02:00
damencho
4228537390 Fixes autoEnableDesktopSharing option. 2016-02-04 12:43:02 -06:00
damencho
9ebf4bfacb Adds method to access stats from torture. 2016-02-04 12:41:23 -06:00
paweldomas
7ec6e9ae29 Gets rid fo RTCBrowserType usages. 2016-02-02 15:52:02 -06:00
damencho
522ca64bce Adds some docs. 2016-02-02 14:54:15 -06:00
paweldomas
8a65407d0c Merge remote-tracking branch 'isymchych/move-statistics' 2016-02-02 13:55:00 -06:00
paweldomas
8144201636 Uses RTCUIHelper class from lib-jitsi-meet to select video elements. 2016-02-02 13:54:37 -06:00
paweldomas
a6ff9f8ee2 Removes unused code related to Firefox.
Commented part seems not to be required anymore as everything work well without it.
2016-02-02 13:54:37 -06:00
hristoterezov
67f1a040eb Removes link tag for the SS plugin because it is created dynamically by the library. 2016-02-02 11:40:29 -06:00
isymchych
d19789005e use statistics module from the library 2016-02-02 17:12:40 +02:00
paweldomas
103b5d71d0 Encapsulates direct access to .currentTime field into 'hasVideoStarted' method of RemoteVideo.
Removes duplicated logic for hiding video element when the user is muted.
2016-02-01 16:08:47 -06:00
paweldomas
ab13fa35b4 'currentTime' property of stream elements are now supported by Temasys plugin. 2016-02-01 16:08:36 -06:00
paweldomas
0bf98bf6cf Fixes broken call to waitForPlayback in lastN logic. 2016-02-01 15:37:35 -06:00
paweldomas
48cedb0865 Adopts to new semantics of JitsiTrack#attach method. 2016-02-01 15:01:45 -06:00
hristoterezov
11d43f32b2 Fixes JS error for function call that not exists when start desktop sharing. 2016-01-29 16:48:12 -06:00
hristoterezov
cea0916bfd Merge branch 'master' of github.com:jitsi/jitsi-meet 2016-01-29 16:07:04 -06:00
hristoterezov
ffbaaa2622 Moves videotype signaling to the library 2016-01-29 16:06:54 -06:00
Paweł Domas
04858e7f06 Merge pull request #481 from isymchych/fix-pinning
Do not pin participant if moderator clicked item in remote user menu
2016-01-29 13:44:46 -06:00
hristoterezov
1176390214 Fixes issues for audio only participants 2016-01-29 13:31:58 -06:00
damencho
4e66aefa26 Merge pull request #482 from isymchych/docs
Describe how to use local lib-jitsi-meet repository with npm link
2016-01-29 09:41:45 -07:00
isymchych
352195bcdd Describe how to use local library with npm link 2016-01-29 18:26:16 +02:00
yanas
fe2804f474 Fixes SmallVideo object not making a difference between an audio and a video stream, which was causing FireFox issues with large video set to the audio stream. 2016-01-28 18:33:27 -06:00
damencho
2c7ee3527a Updates readme for working with lib-jitsi-meet sources. Separates deploy make targets for deploying only the lib. 2016-01-28 17:43:48 -06:00
George Politis
70346e2307 Replaces obsolete config option and enables simulcast by default. 2016-01-28 22:07:39 +00:00
damencho
33cb79fb8a Fixes lib filename. 2016-01-28 15:28:56 -06:00
damencho
e3b518cb91 Uses lib-jitsi-meet from git repo and deploy it on make. 2016-01-28 15:06:09 -06:00
damencho
c0dde18e6b Merge branch 'jitsi-meet-new' 2016-01-28 14:10:50 -06:00
paweldomas
cd8af2a823 Logs an error which occurred when trying to obtain video stream to be used after screen sharing. 2016-01-28 11:28:07 -06:00
Paweł Domas
8221a59261 Merge pull request #477 from isymchych/fix-safari-audio
do not hide small video until stream has been attached
2016-01-28 11:10:02 -06:00
isymchych
93aac798f3 do not pin participant if moderator clicked item in remote user menu 2016-01-28 16:36:55 +02:00
isymchych
6998827982 do not hide small video until stream has been attached 2016-01-28 13:59:33 +02:00
yanas
6e7ed13370 Fixes missing local video thumbnail before entering a conference. 2016-01-26 17:18:10 -06:00
yanas
ae4f5c64d4 Merge branch 'jitsi-meet-new' of https://github.com/jitsi/jitmeet into jitsi-meet-new 2016-01-26 15:28:35 -06:00
yanas
5834fbe31a Re-implements last N related code to use the library. Fixes issues with resizeThumbnails. Fixes last N related event handling. 2016-01-26 15:27:07 -06:00
paweldomas
875a7b6f4f Uses property instead of jquery to hook "onplay" event of the large video. 2016-01-26 15:27:05 -06:00
paweldomas
4cf1f92e25 Fixes broken large video resize functionality. 2016-01-26 15:26:48 -06:00
paweldomas
2fb65dd752 Uses fadeTo instead of fadeIn/fadeOut which do not seem to work correctly on Safari. 2016-01-26 11:19:21 -06:00
Lyubomir Marinov
feb0abf701 Does not disconnect from the XMPP server on unload in jitsi-meet-new because the API has taken on that responsibility. 2016-01-26 11:11:50 -06:00
hristoterezov
2ccfc30813 Merge pull request #469 from isymchych/fix-fullscreen
fix issue with fullscreen in Safari in jitsi-meet-new
2016-01-26 11:01:41 -06:00
damencho
eab83e4fbc Merge pull request #471 from isymchych/minor-fixes
Minor fixes for jitsi-meet-new
2016-01-26 09:46:20 -06:00
isymchych
bc2afd7d64 Minor fixes for jitsi-meet-new
* use proper context for the function
* remove duplicate line
2016-01-26 13:50:33 +02:00
Lyubomir Marinov
a0becb918e Do synchronous Strophe disconnect in order to increase the chances of the delivery of the unavailable presence to the XMPP server. 2016-01-25 17:01:12 -06:00
hristoterezov
e0ba89e001 Merge branch 'isymchych-video-resize-issue' into jitsi-meet-new 2016-01-25 16:45:57 -06:00
hristoterezov
714e304e98 Merge branch 'video-resize-issue' of git://github.com/isymchych/jitsi-meet into isymchych-video-resize-issue 2016-01-25 16:45:36 -06:00
hristoterezov
5e3133547d Merge branch 'isymchych-replace-remaining-events' into jitsi-meet-new 2016-01-25 16:39:53 -06:00
hristoterezov
089a9880b0 Fixes issues related to PR #452 2016-01-25 16:39:05 -06:00
damencho
66212862ce Merge branch 'chat-subject-new' of https://github.com/isymchych/jitsi-meet into jitsi-meet-new 2016-01-25 16:13:53 -06:00
damencho
e707eb9a79 Merge branch 'video-fadein-fix' of https://github.com/isymchych/jitsi-meet into jitsi-meet-new 2016-01-25 15:35:40 -06:00
hristoterezov
d6620310f5 Merge pull request #464 from isymchych/jsdocs
added documentation (jsdocs) to jitsi-meet-new
2016-01-25 14:17:46 -06:00
hristoterezov
d09021457b Fixes JS error in API module 2016-01-25 14:08:50 -06:00
damencho
5bd0074eff Adds FF fake device settings when creating local tracks. 2016-01-25 13:44:48 -06:00
hristoterezov
c2cfd4d6e2 Merge pull request #456 from isymchych/rewrite-API-module
do not use xmpp module in API module
2016-01-25 12:55:30 -06:00
Lyubomir Marinov
6dbbea9944 Decides whether to use analytics after the analytics API has been given a chance to load. 2016-01-25 11:58:15 -06:00
Lyubomir Marinov
41872781f9 Fixes a lint error about a constructor name not starting with an uppercase letter. 2016-01-25 11:40:31 -06:00
isymchych
6cda300861 synchronize Large video fadeIn/fadeOut animations 2016-01-25 19:08:07 +02:00
isymchych
6df1fcef40 Avatar.js code cleanup 2016-01-25 19:08:07 +02:00
isymchych
6b98fd52ea added some documentation (jsdocs) 2016-01-25 19:07:05 +02:00
isymchych
d31aca4483 use lib to change chat subject 2016-01-25 19:00:18 +02:00
hristoterezov
a0355ea080 Updates the lib 2016-01-22 17:30:40 -06:00
damencho
8b8cbb2ccc Handles fake video track and fixes remote audio. 2016-01-22 16:37:33 -06:00
hristoterezov
dbd24417c4 Fixes DS icon glow 2016-01-22 15:10:59 -06:00
hristoterezov
724ebdfe04 Merge branch 'jitsi-meet-new' of github.com:jitsi/jitsi-meet into jitsi-meet-new 2016-01-22 11:41:02 -06:00
hristoterezov
6ad9243446 Updates the library. Removes oncontextmenu handlers. 2016-01-22 11:37:48 -06:00
damencho
03a9c8aa1c Updates library to fix start muted. 2016-01-22 11:35:27 -06:00
paweldomas
ea6eaad563 Fixes bridge is down UI notification. 2016-01-22 11:33:17 -06:00
hristoterezov
c5f94fadd8 Merge branch 'jitsi-meet-new' of github.com:jitsi/jitsi-meet into jitsi-meet-new 2016-01-22 11:30:29 -06:00
isymchych
93aef0683b fix issue with fullscreen in Safari 2016-01-22 19:18:59 +02:00
George Politis
ff97321ea4 Updates lib-jitsi-meet@ba21635b3d04bb7f2505b446f21d341992149107 2016-01-21 17:19:53 -06:00
hristoterezov
ce41ddd024 Merge branch 'jitsi-meet-new-callstats' into jitsi-meet-new 2016-01-21 13:29:53 -06:00
hristoterezov
b174f231bf Merge branch 'jitsi-meet-new' of github.com:jitsi/jitsi-meet into jitsi-meet-new 2016-01-21 13:28:54 -06:00
hristoterezov
4ec62e40f1 Fixes jshint 2016-01-21 13:28:43 -06:00
damencho
2ef96d21e9 Updates package.json with some changes from master. 2016-01-21 13:27:55 -06:00
yanas
3fe0487df7 Fixes local video flickering when locally muted. Rearranges some of the large video avatar related code. 2016-01-21 11:39:05 -06:00
damencho
bc43108877 Makes sure we unmark remote videos as dominant speaker if any when the local participant becomes dominant speaker. 2016-01-21 11:28:47 -06:00
damencho
0291287ecb Temporary fix to make sure 2.2.0 isn't pulled which has a bug. 2016-01-21 11:08:08 -06:00
damencho
0db262da6a Fixes showing local resolution in UI. 2016-01-21 10:45:19 -06:00
damencho
c54e6c0f3c Fixes showing remote resolutions in UI. 2016-01-20 22:54:05 -06:00
hristoterezov
8787723330 Fixes desktop streaming for FF 2016-01-20 18:17:22 -06:00
George Politis
e0e5de6ec0 Revert "Temporarily disable hard video mute."
This reverts commit f02bee06aa.
2016-01-20 17:38:07 -06:00
damencho
1dd0fe4bca Decrease the ping interval. 2016-01-20 17:02:10 -06:00
hristoterezov
0d03a4fceb callstats 2016-01-20 15:41:37 -06:00
isymchych
cff44286f5 resize #videospace on window resize 2016-01-20 16:26:39 +02:00
yanas
27d509332a Merges Boris Grozev's commit from Dec 8, 2015, named: Uses a single avatar URL, allows to override gravatar with a custom URL. Commit: a2c41392 2016-01-19 17:11:16 -06:00
damencho
2af941d607 Fixes forcing tcp connections. 2016-01-19 16:58:04 -06:00
yanas
dacd54b73c Fixes clicking remote participant in the contact list. 2016-01-19 16:51:48 -06:00
yanas
2bee98744d Merges commit from Boris Grozev on jitsi-meet: Fixes a typo. 2016-01-19 16:51:47 -06:00
damencho
41b1a6f3c3 Merge branch 'logs' of https://github.com/isymchych/jitsi-meet into jitsi-meet-new 2016-01-19 14:53:10 -06:00
damencho
482f71f5ea Adds helpers to access audio levels from torture. 2016-01-19 13:32:29 -06:00
damencho
09d08b034c Removes unused code. 2016-01-19 13:31:37 -06:00
paweldomas
2dba1d9d17 Requires prosody-trunk at least 607 for jitsi-meet-tokens 2016-01-19 12:59:22 -06:00
paweldomas
428fa3f16a New JWT token impl that does not require token verification in Jicofo and uses anonymous authentication method(token goes as BOSH query param). Adds 'allow_empty_token" config option. 2016-01-19 12:59:06 -06:00
paweldomas
ac8e1ce388 Configures Jicofo when jitsi-meet-tokens package is installed 2016-01-19 12:58:59 -06:00
paweldomas
d666fbb6a4 Uses JWT for token generation in prosody plugin. 2016-01-19 12:58:51 -06:00
paweldomas
1565f0a598 Removes Prosody patch(the code is in trunk) 2016-01-19 12:55:10 -06:00
George Politis
f02bee06aa Temporarily disable hard video mute. 2016-01-15 18:50:03 -06:00
George Politis
954345da48 Removes space in cname generation of recvonly streams. 2016-01-15 14:39:53 -06:00
damencho
029ccf3b31 Adds method used by torture to obtain current audio levels. 2016-01-15 14:12:15 -06:00
damencho
7e35794e47 Passes all configs to the connection. 2016-01-15 13:50:16 -06:00
Lyubomir Marinov
ec954ad3cc Decides whether to use analytics after the analytics API has been given a chance to load. 2016-01-15 16:09:29 +02:00
Lyubomir Marinov
b49a08c485 Decides whether to use analytics after the analytics API has been given a chance to load. 2016-01-15 15:42:04 +02:00
damencho
aed2d97c10 Fixes displayname on remote video on FF. Seems innerText is not working on FF, replace it with innerHTML. 2016-01-14 16:34:22 -06:00
damencho
dcb607a586 Shows displayname after editing it. 2016-01-14 16:21:03 -06:00
damencho
3cd549a758 Hides video wrapper when avtar is shown, and make it visible when we hide the avtar. 2016-01-14 14:11:01 -06:00
damencho
765f07109a Adds utility to check for remote participants with tracks. 2016-01-14 13:50:10 -06:00
paweldomas
ea24c6a66a Fixes broken requireDisplayName feature.
It was asking for new display name even if we have had one configured already.
2016-01-14 13:39:32 -06:00
damencho
cd4ebca730 Fixes showing display name and hiding avtar, when video is muted and avtar is on large. 2016-01-14 13:30:56 -06:00
damencho
a6a6d2992e Adds helper function to obtain large video id from tests. 2016-01-14 13:30:27 -06:00
damencho
b875dc62dc Fixing remote avatars to be the same as local one. 2016-01-14 13:04:21 -06:00
damencho
809f68104d Fixes undefined error. 2016-01-14 11:15:38 -06:00
damencho
0531daf541 Updates the way we update large/small video, avatars and displayname. Fixes issue with not displying avatars in local or remote video when video muted. Fixes if pinned participant turns off video and when unpin we return to the correct dominant speaker. 2016-01-14 10:28:24 -06:00
isymchych
24b24a62c4 fixed "download logs" button 2016-01-14 17:35:37 +02:00
isymchych
666dfb9b63 do not use xmpp module in API module 2016-01-14 17:05:54 +02:00
Lyubomir Marinov
4a6e8e5e6e Manually formats config.js to bring in a bit of consistency and make uncommenting properties a tad easier and less error prone. 2016-01-14 10:06:47 +02:00
Lyubomir Marinov
ca3dd8865f Asynchronously downloads the callstats.io API because the third-party server may take 'forever' to respond. 2016-01-14 09:39:57 +02:00
Lyubomir Marinov
9b28e64e5d Prevents breakages of our functionality caused by side-effect callstats.io API failures. 2016-01-14 09:28:14 +02:00
Lyubomir Marinov
2b570a2251 Prefers public getters over duplication of logic and/or access to private fields at multiple locations. 2016-01-14 09:27:46 +02:00
Lyubomir Marinov
d7c9a97e8d Adds a FIXME (comment) to make a note of the fact that loading analytics.js after modules/statistics/AnalyticsAdapter.js forces the method AnalyticsAdapter.sendEvent to a no-op. 2016-01-14 09:27:46 +02:00
damencho
cb40ab5420 Fixes moderator icon on remote videos. 2016-01-13 15:17:33 -06:00
hristoterezov
f8c12304dc Fixes start muted. Adds the local track before the conference is joined. 2016-01-12 21:38:58 -06:00
hristoterezov
78c4c11736 Merge branch 'jitsi-meet-new' of github.com:jitsi/jitsi-meet into jitsi-meet-new 2016-01-12 21:13:03 -06:00
damencho
6a91a48823 Fixes element id name. 2016-01-12 17:29:52 -06:00
damencho
c64d008d05 Fixes element id name. 2016-01-12 16:48:47 -06:00
hristoterezov
5cda355142 Merge branch 'isymchych-jitsi-meet-new' into jitsi-meet-new 2016-01-12 15:51:00 -06:00
damencho
9fa4b02673 Reports pinned participants back to the library. 2016-01-12 15:11:24 -06:00
isymchych
0262917aa6 implementation of "start muted" 2016-01-12 15:51:43 +02:00
damencho
3fd68fa0fd Renames all active speaker references to be called dominant speaker. 2016-01-11 18:14:01 -06:00
damencho
f2c5e7da41 Removes unused code. 2016-01-11 17:34:02 -06:00
damencho
8249aea796 Call mucJoined of video layout when the actual joining occurs, as the local id is needed when the presence for the email is received/processed and avatar is set. 2016-01-11 17:14:56 -06:00
George Politis
dc07fd733f Removes the local SSRC replacement hack and fixes video muting/unmuting when simulcast is enabled. 2016-01-11 15:51:55 -06:00
George Politis
8ec90ea675 Bumps the sdp-simulcast version. 2016-01-11 15:05:56 -06:00
yanas
d6a1192a0f Fixes issue with avatar not being centered. 2016-01-11 14:58:07 -06:00
yanas
bbb144f1bd Fixes issue with conference starting before the UI is ready + enableWelcomePage config support. 2016-01-11 14:26:04 -06:00
hristoterezov
632b56b069 Fixes audio mute issue 2016-01-06 17:25:53 -06:00
hristoterezov
00e606663d Updates lib-jitsi-meet.js 2016-01-06 17:02:08 -06:00
hristoterezov
29a85b797a Fixes audio / video mutes 2016-01-06 16:39:13 -06:00
damencho
8aad75d9fa Sets local avatar after local video id is set on joined (VideoLayout.mucJoined()). 2016-01-05 17:23:24 -06:00
damencho
01a9d47959 Fixes setting custom avatar based on the email and reverts the functionality to set custom avatar links to replace the default gravatars. 2016-01-05 17:22:29 -06:00
damencho
1702105b06 Adds utility methods used by torture. 2016-01-05 16:20:02 -06:00
hristoterezov
a56d462dae Fixes the format of the data in connection quality module 2016-01-04 17:16:58 -06:00
hristoterezov
54f2364f18 Updates the library 2016-01-04 16:23:18 -06:00
hristoterezov
95b23f994c Fixes issues with unloading the page 2016-01-04 14:55:43 -06:00
hristoterezov
3168c86f77 Fixes mute participant functionality 2015-12-31 16:02:03 -06:00
hristoterezov
c8c6a6d583 Implements recording 2015-12-31 14:38:43 -06:00
hristoterezov
ce43ce4cd8 Remove unused files 2015-12-30 16:36:46 -06:00
hristoterezov
97697ed9f0 Fixes JS errors in UI.js 2015-12-30 14:57:28 -06:00
hristoterezov
9b7ddec703 Merge pull request #441 from isymchych/jitsi-meet-new
refactoring of Etherpad and Prezi
2015-12-30 13:52:30 -06:00
isymchych
335cc6ca6f cleanup desktopsharing events 2015-12-30 15:28:56 +02:00
isymchych
c36001f861 removed xmpp and RTC modules 2015-12-30 14:34:10 +02:00
isymchych
6ee6b6e9e5 fixes after rebase 2015-12-30 14:14:56 +02:00
isymchych
b375b14696 abstract out remoteVideos management 2015-12-30 13:12:01 +02:00
isymchych
3400925f99 on-the-fly auth improvements 2015-12-30 13:12:01 +02:00
isymchych
a10f9437f1 Integration of statistics module 2015-12-30 13:12:01 +02:00
isymchych
0fd0f5b633 refactoring of Etherpad and Prezi 2015-12-30 13:12:01 +02:00
hristoterezov
e494c3028d Adds SIP calls support 2015-12-29 17:52:24 -06:00
hristoterezov
3ec04d5a95 Implements desktop sharing. 2015-12-29 16:30:50 -06:00
paweldomas
ca8a147ea6 JWT token is now passed as BOSH URL parameter. 2015-12-23 14:58:15 +01:00
hristoterezov
6e007a03af Merge pull request #433 from isymchych/jitsi-meet-new
Integration of UI module with lib-jitsi-meet
2015-12-22 16:56:47 -06:00
paweldomas
9d60af1a9d New JWT token impl that does not require token verification in Jicofo and uses anonymous authentication method(token goes as BOSH query param). Adds 'allow_empty_token" config option. 2015-12-22 19:51:43 +01:00
isymchych
ebaa657678 finished "on the fly" auth 2015-12-21 15:02:07 +02:00
isymchych
035e20eceb allow to kick users 2015-12-21 14:30:54 +02:00
isymchych
f56eb3440a properly update toolbar if auth enabled 2015-12-21 13:27:36 +02:00
isymchych
3a00837107 better error handling while establishing connection 2015-12-18 19:54:15 +02:00
isymchych
0ec8ab69a0 properly update nickname 2015-12-18 17:26:31 +02:00
damencho
baf31aa9f3 Adds logging for results of mungeLocalVideoSSRC. 2015-12-17 16:22:07 -06:00
isymchych
58d1c76ab0 handle external auth; xmpp auth tbd 2015-12-17 18:05:03 +02:00
isymchych
28e5bf4bec add "authentication required" dialog 2015-12-17 17:31:56 +02:00
isymchych
ec2be349df refactor authentication module 2015-12-17 17:31:56 +02:00
isymchych
fbe5ef7ee6 fix issue with nickname input in chat 2015-12-17 17:31:56 +02:00
isymchych
e666ed70f7 use proper message timestamp 2015-12-17 17:31:56 +02:00
isymchych
4f91ac01fd refactoring 2015-12-17 17:31:56 +02:00
isymchych
2af591f6d9 updated library 2015-12-17 17:31:56 +02:00
isymchych
36874c395a remove user from VideoLayout 2015-12-17 17:31:56 +02:00
isymchych
6ded050b51 do not use RTC/xmpp in UI module 2015-12-17 17:31:56 +02:00
isymchych
cb522eadd8 code cleanup 2015-12-17 17:31:56 +02:00
isymchych
de9d991f98 do not use xmpp module in side_panels module 2015-12-17 17:31:56 +02:00
isymchych
437a8a6ef0 refactor ToolbarToggler 2015-12-17 17:31:56 +02:00
isymchych
e23dd62d86 refactor BottomToolbar 2015-12-17 17:31:56 +02:00
isymchych
cf578b7732 do not use xmpp module in Toolbar 2015-12-17 17:31:56 +02:00
isymchych
7cc682d5a4 move random stuff out of Toolbar 2015-12-17 17:31:56 +02:00
isymchych
eeb390cd9d handle DTMF_SUPPORT_CHANGED event 2015-12-17 17:31:56 +02:00
isymchych
fc207ccf34 extract room locking out of Toolbar 2015-12-17 17:31:56 +02:00
isymchych
5846a25fc3 remove Prezi and Etherpad dependencies from Toolbar 2015-12-17 17:31:56 +02:00
isymchych
fbcd2d2320 use JitsiParticipant to handle user roles 2015-12-17 17:31:56 +02:00
isymchych
0460e7da29 add local media streams to UI 2015-12-17 17:31:56 +02:00
isymchych
6a3704d826 replace resourceIds with ids in AudioLevels 2015-12-17 17:31:56 +02:00
isymchych
586988f327 properly generate room name 2015-12-17 17:31:56 +02:00
isymchych
fc76aa5293 handle incoming messages 2015-12-17 17:31:56 +02:00
isymchych
ff6ec2ec6b use babel 2015-12-17 17:31:56 +02:00
isymchych
1690be3e5b add missing module dependency 2015-12-17 17:31:56 +02:00
damencho
034ed200f3 Displays correct resolution coming from FF. 2015-12-16 12:46:32 -06:00
damencho
589380c7b3 Displays correct resolution coming from FF. 2015-12-16 12:45:13 -06:00
damencho
97ebcebdbe Revert "Fixes a problem with receiving presence for start muted video before creating the stream element, which will end up that the muted video element will hide the avatar."
This reverts commit 303287f7a6.
2015-12-15 16:55:25 -06:00
paweldomas
9734da3083 Configures Jicofo when jitsi-meet-tokens package is installed 2015-12-15 11:46:58 -06:00
Boris Grozev
2b2a34175f Adds a missing require. 2015-12-14 13:43:05 -06:00
Boris Grozev
e06ec616a6 Changes enableThirdParty requests to disableThirdParty requests, in
order to not change existing behaviour (without changes to config.js).
2015-12-14 13:39:57 -06:00
Jesse Bickel
2b06ca9df7 Shrink the avatar on contact list to <=30px. 2015-12-14 13:39:47 -06:00
Jesse Bickel
fd9485b7e5 Use gravatar when enabled. 2015-12-14 13:34:13 -06:00
Jesse Bickel
46a5c909c8 Only load 3rd party JavaScript when config.enableThirdPartyRequests is true. 2015-12-14 13:26:27 -06:00
damencho
303287f7a6 Fixes a problem with receiving presence for start muted video before creating the stream element, which will end up that the muted video element will hide the avatar. 2015-12-11 14:18:16 -06:00
damencho
067de62a6d Fixes long line. 2015-12-11 14:18:05 -06:00
paweldomas
e0e0baf87e Makes sure that we keep local video SSRC as a "recvonly" when muted. 2015-12-09 23:30:53 -06:00
damencho
75a822be66 Removes second audio track for fake FF devices. 2015-12-08 19:00:21 -06:00
damencho
08107ca95b Fixes retrieving correct local ssrc in FF. Fixes tests that were checking for audio levels. 2015-12-08 19:00:21 -06:00
Boris Grozev
a2c41392dd Uses a single avatar URL, allows to override gravatar with a custom URL for avatars in interface_config.js. 2015-12-08 17:34:40 -06:00
Boris Grozev
a647400cb8 Merge branch 'third-party-requests' 2015-12-08 22:53:43 +00:00
Boris Grozev
f42684d789 Changes enableThirdParty requests to disableThirdParty requests, in
order to not change existing behaviour (without changes to config.js).
2015-12-08 22:52:12 +00:00
paweldomas
1e3ef532aa Adds 'enforcedBridge' property used to make Jicofo use specific bridge and ignore what BridgeSelector module says. 2015-12-08 15:30:46 -06:00
paweldomas
3406802aa8 Uses JWT for token generation in prosody plugin. 2015-12-08 15:30:46 -06:00
Jesse Bickel
c2c3d0fd87 Shrink the avatar on contact list to <=30px. 2015-12-07 15:52:11 -06:00
Jesse Bickel
895bb3fd60 Use gravatar when enabled. 2015-12-07 14:41:35 -06:00
Jesse Bickel
3f42f8bf67 Only load 3rd party JavaScript when config.enableThirdPartyRequests is true. 2015-12-04 13:03:10 -06:00
damencho
5f6bba435c Fixes Uncaught TypeError: mediaStream.detachEvent on stopping desktop sharing. 2015-12-04 11:30:11 -06:00
damencho
09a509400f Fixes showing prezi button. 2015-12-04 10:38:42 -06:00
hristoterezov
98f0de258b Merge pull request #421 from isymchych/use-API
Use JS API in jitsi-meet
2015-12-03 16:21:03 -06:00
isymchych
91fbf1e274 added editorconfig 2015-12-03 15:11:25 +02:00
isymchych
09aa9482c0 do not use members module 2015-12-03 15:11:01 +02:00
damencho
1c19f977ad Converts ssltcp candidate to tcp one on FF. 2015-12-02 17:15:55 -06:00
damencho
d7317a94bb Converts ssltcp candidate to tcp one on FF. 2015-12-02 16:35:45 -06:00
isymchych
272cfea493 share user email through commands 2015-12-02 17:24:57 +02:00
isymchych
941cd13193 do not use xmpp in connectionquality module 2015-12-02 15:05:29 +02:00
George Politis
3ca288d74d Adds comment. 2015-12-01 13:27:01 -06:00
George Politis
72c7812376 Revert "Sets up simulcast for 2 layers."
This reverts commit b2993d8cf3.
2015-12-01 13:26:24 -06:00
George Politis
d42415959f Adds comment. 2015-12-01 13:25:20 -06:00
George Politis
b678671607 Revert "Sets up simulcast for 2 layers."
This reverts commit b2993d8cf3.
2015-12-01 13:24:15 -06:00
isymchych
8226914348 load library from index.html 2015-12-01 18:55:54 +02:00
isymchych
8002dcbe66 update lib 2015-12-01 15:44:50 +02:00
isymchych
fe77846b89 do not use xmpp in settings menu 2015-12-01 15:41:58 +02:00
isymchych
c50151d85d do not use NicknameHandler 2015-12-01 14:53:01 +02:00
isymchych
4152106a06 listen to CONNECTION_INTERRUPTED and CONNECTION_RESTORED events 2015-12-01 12:05:55 +02:00
isymchych
c21c9ce1b8 do not use xmpp module in AudioLevels 2015-12-01 11:12:40 +02:00
isymchych
4ef57ceada do not use XMPP or RTC modules in UI 2015-11-30 17:24:42 +02:00
isymchych
59f98205c7 use JS API; UI module refactoring 2015-11-30 13:54:54 +02:00
paweldomas
0a7cea26b3 Exposes methods for obtaining stream SSRCs and audio levels. 2015-11-25 20:09:24 -06:00
paweldomas
286225e81e Removes unused code used to inject local SSRCs. 2015-11-25 20:09:12 -06:00
bgrozev
b2a3866fe4 Fixes a typo (reported by Emil Ivov) 2015-11-25 15:46:41 -06:00
damencho
c5b3677e71 Updates sdp-interop and sdp-transform versions, thanks to virtuacoplenny. 2015-11-24 13:10:29 -06:00
damencho
6b621654ab Adds speaker indicator and no longer use the display name for that purpose. 2015-11-23 17:30:24 -06:00
George Politis
c3f9226ec8 Updates the supported browser list and closes #372.
- Adds Safari and IE in the supported browser list.
- Adds version numbers for the supported browsers.
2015-11-23 15:56:35 -06:00
hristoterezov
d060db476f Merge branch 'isymchych-bug/large-video-on-safari' 2015-11-20 11:21:14 -06:00
hristoterezov
2e7e7d2dd8 Merge branch 'bug/large-video-on-safari' of git://github.com/isymchych/jitsi-meet 2015-11-20 11:06:40 -06:00
isymchych
1d59283518 fixed switching to large video from FF on safari 2015-11-20 14:05:37 +02:00
hristoterezov
de311b1372 Updates gitignore 2015-11-19 16:21:10 -06:00
isymchych
19d9c0be50 fixed switching to large video from FF on safari 2015-11-19 14:32:07 +02:00
yanas
236c4bb37c Adds a method in callstats in order to check if it's enabled. 2015-11-17 16:39:40 -06:00
isymchych
72c39a0162 accumulate erorrs unitl connected to callstats 2015-11-17 16:39:40 -06:00
damencho
94b54279f2 Fixes wrong handler name, which causes adding multiple local video tags in the local video. 2015-11-17 14:27:38 -06:00
George Politis
9f1e953e8a Bumps sdp-simulcast@0.1.2. 2015-11-17 18:16:19 +00:00
George Politis
5d571e696f Sets up simulcast for 2 layers. 2015-11-17 18:16:19 +00:00
George Politis
ce397d9e74 Fixes issue in ssrc-group SDP parsing.
How did this even work before?
2015-11-17 18:15:24 +00:00
damencho
b64f3a5913 Adds method to obtain remote video type. 2015-11-16 18:17:18 -06:00
yanas
7ea675159e Disables feedback functionality if callstats isn't available. 2015-11-16 18:06:47 -06:00
damencho
0ae702922c Makes the room parameter lower case. 2015-11-16 16:50:15 -06:00
damencho
f9d1fd13df Fixes an issue where lastN event, includes in the logic local resource and detects it as removed from lastN and schedules update of large video. If we receive this event for newly joined participant and we have pinned the local video, the event triggers update of large video which displays the wrong participant, not the pinned local video. 2015-11-16 13:33:29 -06:00
damencho
74c420a609 Adds config option for auto enable desktop sharing when opening an url. 2015-11-13 16:18:22 -06:00
yanas
26e2fd6ef0 Fixes desktop streaming layout. 2015-11-13 11:04:49 -06:00
damencho
4b62f7f0ac Adds shortcut to toggle desktop sharing. 2015-11-12 16:57:00 -06:00
damencho
fbb5f9b6c1 Merge pull request #361 from bickelj/master
Use member.isFocus to decide whether a given member is the focus user
2015-11-12 10:37:35 -06:00
damencho
e460f0c8fa Fixes lastN video change. Resulting 'Uncaught TypeError: stream.getOriginalStream is not a function', problem detected by torture (3 participants and the last one receives last-n changed event on joining and screenshot shows: it is missing one of the participants and logs contain this error). 2015-11-10 16:40:34 -06:00
damencho
dc2a60edbb Fixes long lines. 2015-11-10 16:40:25 -06:00
yanas
071fbfbd0d Merge pull request #399 from isymchych/callstats-error-reporting
Callstats error reporting. Ivan is going to publish another PR about earlier failures that would apply on top of this one.
2015-11-10 13:39:23 -06:00
Ingo Bauersachs
819f1414d6 Add Swedish to active languages 2015-11-10 09:38:59 +01:00
damencho
1bb5188ac8 Simplifies the check for installed nginx, fixes purge when nginx was not used. 2015-11-09 16:26:13 -06:00
damencho
b6cb424720 Fixes ff logo width. 2015-11-09 13:30:13 -06:00
damencho
6a30e9178c Updates firefox logo in unsupported page. 2015-11-09 13:12:05 -06:00
damencho
f005606428 Reverts messing with css files. 2015-11-09 12:36:01 -06:00
damencho
8f6fe2a5b3 Revert "Reorder css files in alphabet order."
This reverts commit 88fa2ae8b3.
2015-11-09 11:48:35 -06:00
damencho
7cebc563db Use all css file. 2015-11-09 11:39:15 -06:00
damencho
840dbbeef1 Adds missing unsupported_browser.css. 2015-11-09 11:38:57 -06:00
damencho
88fa2ae8b3 Reorder css files in alphabet order. 2015-11-09 11:38:25 -06:00
damencho
b6f9cf93d5 Updates dev build instructions. 2015-11-09 09:38:42 -06:00
ibauersachs
ea7283aa52 Commit from translate.jitsi.org by user ibauersachs.: 175 of 180 strings translated (0 fuzzy). 2015-11-09 13:01:12 +00:00
ibauersachs
76f889bcdd Commit from translate.jitsi.org by user ibauersachs.: 180 of 180 strings translated (0 fuzzy). 2015-11-09 13:00:59 +00:00
paweldomas
cfcf6fbc67 Merge branch 'multiple-tracks' 2015-11-06 16:27:14 -06:00
Boris Grozev
4009fed35d Moves the roomname generator to util, reuses a function. 2015-11-06 16:21:21 -06:00
paweldomas
27fc4636b7 Adjustments to make lip-sync work. Stream merging is now done by Jicofo. 2015-11-06 16:18:33 -06:00
Boris Grozev
fb6367d687 Wraps at 80 chars. 2015-11-06 16:05:22 -06:00
Boris Grozev
5542642933 Exposes functions in RandomUtils. 2015-11-06 15:45:34 -06:00
Boris Grozev
005cc4b27a Simplifies code. 2015-11-06 15:30:41 -06:00
yanas
a2c37fa3f6 Fixes some warnings. 2015-11-06 15:02:42 -06:00
isymchych
9f2b3aa011 rename callStatsUID to callStatsUserName 2015-11-06 14:58:07 -06:00
isymchych
c89c9e78ff move username generator to utils 2015-11-06 14:56:12 -06:00
isymchych
0a71c2e1d3 Generate random username for callstats 2015-11-06 14:49:32 -06:00
yanas
03018a2ead Fixing documentation warnings. 2015-11-06 11:48:00 -06:00
paweldomas
333cd6f25f Converts constants in RandomUtil to hex. 2015-11-05 14:14:52 -06:00
isymchych
05b3df0560 added jsdocs 2015-11-05 20:30:30 +02:00
isymchych
5be8c33054 report webrtc errors to callstats 2015-11-05 20:21:34 +02:00
bgrozev
a64627aa47 Clarifies supported systems 2015-11-05 11:58:13 -06:00
yanas
73b1d3c7c2 Adds a feedback button and dialog. 2015-11-05 11:28:01 -06:00
Boris Grozev
2117aefacc Removes unused code. 2015-11-05 11:01:19 -06:00
yanas
a3264ce6b7 Merge pull request #396 from isymchych/fix-username-xss
Escape html from username.
2015-11-05 10:06:05 -06:00
damencho
374763c325 Fixes mute check, prevents disabling the menu when the remote participant is muted. 2015-11-04 17:23:49 -06:00
paweldomas
73317c920a Merge branch 'master' into multiple-tracks 2015-11-04 15:09:51 -06:00
isymchych
fdc2ecd86f escape html from username 2015-11-04 17:01:11 +02:00
damencho
5446c513f5 Adds room name parameter to the bosh connection. 2015-11-03 14:32:41 -06:00
paweldomas
b1f617502e Integrates token authentication. 2015-11-03 13:21:52 -06:00
Boris Grozev
a5e15025f8 Implements switching streams on firefox by using RTPSender.replaceTrack(). Fixes bugs with switching between camera and screen sharing. 2015-11-03 11:27:48 -06:00
paweldomas
7ff7545570 Reload Prosody after successful tokens install. 2015-11-03 11:14:01 -06:00
paweldomas
ca89b59638 Fixes for jitsi-meet-tokens Debian package. 2015-11-03 11:11:54 -06:00
damencho
67b35f0f1e Uses inactive callback if available instead of deprecated onended one. 2015-11-02 16:42:32 -06:00
damencho
249e032ad6 Uses stopping tracks and use MediaStream.stop method only if defined. Based on previous code and inspired by PR #390. 2015-11-02 16:42:32 -06:00
damencho
fa138eae43 Replaces deprecated ended call with active check for media streams. 2015-11-02 16:42:32 -06:00
paweldomas
9406669aae Fix for jitsi-meet-tokens 2015-11-02 15:28:19 -06:00
paweldomas
531b81cce3 Adds Prosody plugin for token authentication. 2015-11-02 15:28:18 -06:00
damencho
b08308e5e4 Fixes isMuted check. 2015-11-02 10:48:09 -06:00
damencho
74227e182a Makes sure we use stream.ended in one place. 2015-10-30 17:57:25 -05:00
damencho
8cebbbb347 Stops the MediaStream using the utility method in RTC. 2015-10-30 17:57:25 -05:00
damencho
1ba0a182f6 Makes sure we add/remove all onended events for media streams in one central place. 2015-10-30 17:57:25 -05:00
damencho
11e1197901 Uses one method from RTC to stop media streams. 2015-10-30 17:57:25 -05:00
Boris Grozev
932af962b2 Adds an option to advertise our SSRCs in presence to the MUC (as well as
Jingle) for backward compatibility with jirecon. Partially reverts
a1b0677442
2015-10-29 16:50:33 -05:00
Boris Grozev
e0522f6977 Simplifies code. 2015-10-29 16:30:36 -05:00
Boris Grozev
9111797913 Removes a tangle of spaghetti. 2015-10-29 14:30:30 -05:00
Boris Grozev
a2ad7b8f53 Mutes video elements. 2015-10-28 12:05:42 -05:00
paweldomas
7abe02d756 Merge audio and video on the receiver's side. 2015-10-28 12:01:21 -05:00
Boris Grozev
cd1e761699 Creates multiple (Jitsi-Meet) MediaStreams if the RTCMediaStream object
contains both audio and video tracks.
2015-10-28 11:30:48 -05:00
damencho
14fe5d09d1 Adds ssl stronger settings to default nginx config. 2015-10-26 12:47:34 -05:00
bgrozev
83339382ab s/jessie/Wheezy/ 2015-10-21 09:53:51 -05:00
bgrozev
28d63ec2c1 Adds a note for running on Debian jessie. 2015-10-21 09:52:42 -05:00
bgrozev
30c601e054 Removes words from the roomname generator. 2015-10-21 09:46:54 -05:00
Boris Grozev
23ff99db6e Implements choosing from a list of possible BOSH addresses. 2015-10-20 10:44:41 -05:00
Boris Grozev
554808549e Fixes a bug reported by George Politis. 2015-10-19 15:59:24 -05:00
Boris Grozev
657a3fb2e1 Removes comments (fixes warnings). 2015-10-19 15:59:16 -05:00
bgrozev
bbbe1fe5c7 Merge pull request #374 from spellauge/authdomain2
authdomain2
2015-10-14 11:25:19 -05:00
Yana Stamcheva
b2f94783fa Loads css before js, attempting to fix an issue with incorrect video initial size. 2015-10-13 16:07:27 -05:00
damencho
4ed5fa2813 Adds version param to all resources. 2015-10-13 11:47:55 -05:00
Boris Grozev
ae793726ca Allows the URLProcessor to replace a property even if its type changes. 2015-10-12 17:46:58 -05:00
Spellauge
277f340063 authdomain2 2015-10-12 17:38:35 +02:00
bgrozev
0e66552a7f Clarifies documentation
Add a note about the need to forward ports, as suggested by @joudinet on github.
2015-10-09 12:39:00 -05:00
damencho
a755f4dd56 Removes unused dependencies. 2015-10-07 13:36:48 -05:00
damencho
a6f8c53947 Removes unused files from deb package. 2015-10-07 12:00:08 -05:00
Boris Grozev
cf8950110f Adds additional logs, including timestamps relative to the initial
request.
2015-10-06 16:57:14 -05:00
Boris Grozev
f4da678465 Fixes the bootstrap version to 3.1.1, because using the current (3.3.5)
causes UI problems (tooltips not dissapearing).
2015-10-06 16:14:46 -05:00
Boris Grozev
1cb7ea3e05 Fixes the source package. 2015-10-06 15:29:26 -05:00
Boris Grozev
3a66283f46 Fixes the css file path included in the debian package. 2015-10-06 15:21:44 -05:00
Boris Grozev
d0b254ca15 Merges css files. 2015-10-06 15:19:01 -05:00
Boris Grozev
0ed2b55960 Updates font-awesome to version 4.4.0 and includes it in the repositoyry. 2015-10-06 15:19:01 -05:00
Boris Grozev
6c2c4d4aca Removes the script that bumps versions, this is now done when packaging. 2015-10-06 15:19:01 -05:00
yanas
9a5d2012d3 Adds jsdoc to previous commit 2015-10-06 15:02:46 -05:00
Yana Stamcheva
8a678286f7 Makes video screen fit configurable. 2015-10-06 14:37:18 -05:00
Boris Grozev
e0ba0c8085 Remove commented-out script tags from index.html. 2015-10-06 14:04:11 -05:00
Boris Grozev
4964ec2a83 Do not include app.js in the source package. 2015-10-06 14:03:12 -05:00
damencho
cc7d8b8a0d Removes unused minification. 2015-10-06 11:22:42 -05:00
damencho
a49505f25d Merge remote-tracking branch 'origin/master' 2015-10-06 11:20:11 -05:00
George Politis
dbd8d30d56 Merge pull request #366 from pstros/npm-deps-work
Use npm to manage external dependencies. Closes #346.
2015-10-06 11:07:06 -05:00
Devin Wilson
a35a4fa46a Remove dependency sources from repo 2015-10-05 13:52:58 -06:00
Devin Wilson
b1760fad12 Pull deps from npm 2015-10-05 13:51:38 -06:00
Emil Ivov
097c008a63 add display name to stats debug info 2015-10-04 16:13:28 -05:00
bgrozev
9e4b4bc540 Merge pull request #365 from marclaporte/patch-1
Fix a typo
2015-10-01 23:53:57 -05:00
Marc Laporte
220fe7e993 Fix a typo 2015-10-01 22:27:32 -04:00
Boris Grozev
0bbae86f68 Fixes a bug with prematurely removed remote videos on firefox. 2015-10-01 17:56:45 -05:00
Boris Grozev
ff2b7ca921 Removes unused parameters, adds documentation. 2015-10-01 17:56:45 -05:00
Boris Grozev
ebdd91df4e Removes the sid property from MediaStream (how did we end up having a
Jingle session ID in MediaStream and passing it around in the UI?)
2015-10-01 17:56:45 -05:00
Boris Grozev
4934779187 Simplifies code, removes unused code. 2015-10-01 17:56:45 -05:00
damencho
df0563d8d5 Updates the license put in debian package. 2015-10-01 15:12:34 -05:00
jitsi-pootle
2e778c4832 New files added from translate.jitsi.org based on templates 2015-10-01 18:53:07 +00:00
damencho
f626c5fbc0 Adds null check for the connection when checking whether we have joined a muc. 2015-09-29 11:55:39 -05:00
damencho
ababa0fadc Changes some logging levels. 2015-09-28 17:48:41 -05:00
damencho
54b9379577 Fixes storing display name in local members list, avoid dominant speaker to delete it. 2015-09-25 17:38:28 -05:00
Jesse Bickel
806cacb755 Use member.isFocus to decide whether a given member is the conference focus user. 2015-09-25 08:49:19 -05:00
damencho
fd954580b7 Fixes for FF: failing avatar tests and problem when last participant leaves the owner video does not switch to local video. 2015-09-23 13:50:28 -05:00
George Politis
13d6245684 Updates the sdp-interop version. 2015-09-23 09:42:17 -05:00
Lyubomir Marinov
c992222c70 Removes duplication. Allows automated functional testing to access the WebRTC data channels. 2015-09-22 18:51:24 -05:00
Boris Grozev
506d0722bd Removes hard-coded constants and uses the events API in the statistics
module.
2015-09-21 11:29:23 -05:00
Boris Grozev
62d3b749bb Adds config options to filter out TCP or UDP candidates (for the purpose
of forcing one or the other in automated tests).
2015-09-21 11:28:55 -05:00
Emil Ivov
8725b80793 Moves original contribution note
Addressing readability concerns raised by @fippo
2015-09-19 12:23:58 -05:00
Emil Ivov
a429800544 Moves original contribution note
Addressing readability concerns raised by @fippo
2015-09-19 12:23:54 -05:00
Boris Grozev
2702fa0175 Uses source maps to the actual source files (i.e. modules/), removes the separate debug targets, uglify before deploy. 2015-09-17 16:40:02 -05:00
paweldomas
260b610725 Fixes issue with avatar not being displayed when user is in the lastN set, but has video muted. 2015-09-17 19:04:56 +02:00
hristoterezov
a7cd8bab11 Merge branch 'gerges-issue/client-analytics' 2015-09-16 17:45:58 -05:00
hristoterezov
39c5ef2f5a Fixes jshint 2015-09-16 17:44:53 -05:00
hristoterezov
b59f8d3da6 Merge branch 'issue/client-analytics' of https://github.com/gerges/jitsi-meet into gerges-issue/client-analytics
Conflicts:
	modules/UI/toolbars/BottomToolbar.js
2015-09-16 17:42:51 -05:00
George Politis
5d1aeaa1c2 Merge pull request #358 from gpolitis/master
Uglifyjs, browserify and jshint should be locally installed (as opposed to globally)
2015-09-16 11:06:36 -05:00
bgrozev
9c4b69a1ba Merge pull request #357 from jitsi/fix-connect
Tries to fix connecting after XMPP authentication is requested.
2015-09-16 00:35:49 -05:00
George Politis
5e363b515b Uses uglifyjs from the local installation. 2015-09-15 20:27:59 -05:00
George Politis
1bb6e72855 Adds jshint as a dev dependency and uses the local installtion. 2015-09-15 20:27:48 -05:00
George Politis
e3adafa44e Makes browserify a dev dependency. 2015-09-15 20:24:31 -05:00
Lyubomir Marinov
2740041a82 Defines the path to uglifyjs as a variable in the fashion of the path to browserify. 2015-09-15 14:18:34 -05:00
Boris Grozev
c7b6cb5b94 Updates the sdp-interop version. 2015-09-15 09:16:03 -05:00
damencho
69758a3297 Uglify to use relative files. 2015-09-14 17:30:27 -05:00
Boris Grozev
cd1f56fa8f Recovers removed source files. 2015-09-14 17:21:21 -05:00
damencho
34b5ce996c Fixes map locations. 2015-09-14 16:35:13 -05:00
Boris Grozev
745417be18 Tries to fix connecting after XMPP authentication is requested. 2015-09-14 16:06:58 -05:00
Boris Grozev
9ee24d7eab Minifies our libraries. 2015-09-14 15:50:13 -05:00
Boris Grozev
5b1f7b1204 Minimizes app.bundle.js by default. 2015-09-14 15:42:48 -05:00
George Politis
b1825a3d1e Merge pull request #354 from marclaporte/patch-3
Firefox & Jitsi Meet are now working together
2015-09-14 13:54:39 -05:00
George Politis
e46efdb666 Merge pull request #356 from mksh/master
Use valid SPDX license identifier for Jitsi-Meet NPM package description
2015-09-14 13:43:44 -05:00
mksh
9138ed692e Use valid SPDX license identifier for Jitsi-Meet to avoid warnings during installing npm dependencies 2015-09-14 18:08:24 +03:00
Boris Grozev
fdf73a9b4e Fixes jshint warnings. 2015-09-14 09:26:24 -05:00
Boris Grozev
dff4666bc6 Merge branch 'master' into lint 2015-09-14 09:26:16 -05:00
Boris Grozev
5ac3304956 Fixes a typo reported by Hamid Yaseen. Closes #283. 2015-09-11 17:20:24 -05:00
Boris Grozev
711d4ab634 Updates sdp-interop to 0.1.8 (fixes issues when 2 or more endpoints in a conference are running on firefox). 2015-09-11 16:32:12 -05:00
hristoterezov
694fe83fc9 Merge branch 'gerges-issue/toolbar-config' 2015-09-11 15:42:36 -05:00
hristoterezov
b010b3267d Fixes the name for the recording button in interface_config.js 2015-09-11 15:41:33 -05:00
hristoterezov
161673cecb Merge branch 'issue/toolbar-config' of https://github.com/gerges/jitsi-meet into gerges-issue/toolbar-config
Conflicts:
	index.html
	libs/app.bundle.js
2015-09-11 14:49:20 -05:00
Boris Grozev
6bab3b2c86 Moves precommit-hook to devDependencies. 2015-09-11 10:52:53 -05:00
Boris Grozev
2dbd80c048 Adds a source-package and uglify targets to the makefile. 2015-09-10 23:13:04 -05:00
Boris Grozev
bd58e6c799 Enables the jshint maximum line length check (80 chars) globally, and only overrides it in certain files. 2015-09-10 22:28:16 -05:00
Boris Grozev
a4c844f169 Adds precommit-hook as an npm dependency. Automatically runs jshint before a commit. 2015-09-10 22:27:18 -05:00
Boris Grozev
27c297c034 Fixes or ignores (explicidly, as much as possible) jshint warnings. 2015-09-10 22:27:09 -05:00
Boris Grozev
09eaa0d303 Fix comparison warnings. 2015-09-10 22:26:55 -05:00
Boris Grozev
b0795e5db9 Removes libs/app.bundle.js from the repository. Pre-built versions
are available at https://download.jitsi.org/jitsi-meet/
2015-09-10 13:37:26 -05:00
damencho
5a254ba949 Uses jvb config file from the new location. Fixes a problem where reconfiguring can break package installation due to missing jvb config file. 2015-09-09 15:15:23 -05:00
Boris Grozev
68421465a7 Removes misleading documentation. Formatting fixes. 2015-09-09 14:09:58 -05:00
Marc Laporte
e7d308382f Firefox & Jitsi Meet are now working together
https://hacks.mozilla.org/2015/06/firefox-multistream-and-renegotiation-for-jitsi-videobridge/

Thank you George Politis! (and anyone else involved)
2015-09-08 00:01:00 -04:00
ibauersachs
e13af70717 Commit from translate.jitsi.org by user ibauersachs.: 175 of 175 strings translated (0 fuzzy). 2015-09-07 13:04:09 +00:00
paweldomas
b9b64242a5 Will close install Temasys plugin popup only when cancel or close button is clicked. 2015-09-07 10:22:38 +02:00
Boris Grozev
f69e7ace6d Uses the new name of the chrome extension id field. 2015-09-04 11:52:16 -05:00
Boris Grozev
b2d838ba1c Fixes mirroring on firefox. 2015-09-04 10:27:55 -05:00
ibauersachs
bf28c7ffd9 Commit from translate.jitsi.org by user ibauersachs.: 175 of 175 strings translated (0 fuzzy). 2015-09-04 12:42:07 +00:00
jitsi-pootle
241baad4d0 New files added from translate.jitsi.org based on templates 2015-09-04 12:28:15 +00:00
Ingo Bauersachs
2f9f5e0800 Add Slovak 2015-09-04 14:24:50 +02:00
Boris Grozev
995b3be6e7 Implements screen sharing for firefox, using a jidesha extension.
Renames some fields in config.js.
2015-09-03 10:00:36 -05:00
Boris Grozev
e5184358c2 Separates the logic for obtaining a screen capture from the logic
for switching between camera and screen.
2015-09-02 17:30:38 -05:00
Boris Grozev
f7ba684cf6 Enables the screen capture on firefox. 2015-09-02 17:30:38 -05:00
Boris Grozev
c0a51fedd0 Moves includes to the top of the file. 2015-09-02 17:30:38 -05:00
Boris Grozev
dc2b63fc60 Switches the order of the parameters of desktopsharing.addListener to match the rest of the code. Renames variables. 2015-09-02 17:30:38 -05:00
Boris Grozev
82c45a2e38 Adds some docs. 2015-09-02 17:30:38 -05:00
damencho
6b94d3fe47 Stores info from last presence received for participant and dispatch it if any on creating remote streams to reflect video muted state. Race condition detected by tests where we miss presence info cause stream was not created when we receive presence packet. 2015-09-02 16:05:00 -05:00
Issac Gerges
2c573d76ea Add analytics for bottom toolbar events 2015-09-02 12:16:50 -05:00
Issac Gerges
5734d5ad80 Add analytics for toolbar items 2015-09-02 12:16:50 -05:00
Issac Gerges
92a6b765a2 Add pluggable analytics framework 2015-09-02 12:16:44 -05:00
Issac Gerges
0cda79352f Fix spelling mistake in openLinkDialog 2015-09-02 12:08:04 -05:00
Issac Gerges
aef07ec11b Merge remote-tracking branch 'origin/master' into issue/toolbar-config 2015-09-02 11:08:01 -05:00
paweldomas
59b26fdf07 Uses SDPUtil filter special characters method through xmpp interface instead of importing it directly. 2015-09-02 13:56:04 +02:00
damencho
74c531aed6 Uses port definition rather then wild card address when configuring authbind. 2015-09-01 14:25:11 -05:00
Boris Grozev
47bb9439db Don't treat 0 as false (avoid a warning when the receivedPackets or
sentPackets stat is 0, and possibly fixes misinterpreting a remove
stream as a local).
2015-09-01 11:22:36 -05:00
Issac Gerges
bcccc58b2c Allow for a list of enabled buttons to be passed as part of interfaceConfig 2015-08-28 16:34:07 -05:00
paweldomas
ff199a4d78 Updates app.bundle.js 2015-08-28 17:07:02 +02:00
Paweł Domas
aebfa33383 Merge pull request #349 from mksh/master
Some fixes in dynamic config retrieval
2015-08-28 16:50:26 +02:00
mksh
aa21e13780 Fixed configuration callback request data serialization; switched to jQuery for ajax call 2015-08-28 12:51:35 +03:00
paweldomas
8956002de5 Updates app.bundle.js 2015-08-28 11:44:19 +02:00
paweldomas
51c23ae133 Re-use current connection's domain as ping destination instead of accessing config.hosts.domain directly. 2015-08-28 11:38:14 +02:00
paweldomas
60d0279e08 Will use XEP-0199 ping for keep-alive only if it is supported by the server. 2015-08-28 11:38:08 +02:00
damencho
8a22060aa8 Enables ping module when configuring prosody. 2015-08-27 16:03:46 -05:00
Boris Grozev
6cd4bb8651 Removes the protocol from the callstats.io conferenceID. 2015-08-27 15:24:48 -05:00
damencho
138785b466 Removes strophe debian package dependency in order to use the available version from source. 2015-08-26 16:50:23 -05:00
Boris Grozev
741b9adc1e Fixes typos and removes a translation key. 2015-08-25 11:40:59 -05:00
paweldomas
e88cf8735d Updates app.bundle.js 2015-08-25 14:25:28 +02:00
paweldomas
ffb77f197a Fixes video thumbnail flickering issue in Safari. 2015-08-25 14:21:22 +02:00
paweldomas
f559bd1ba4 CONNECTION_INTERRUPTED event will now be generated if we've ever been in stable state(we can go into "unstable" state after muting video and connection problems screen will not be displayed). 2015-08-25 14:21:15 +02:00
paweldomas
9a77ddc54c Reacts to consecutive ping failures by closing the connection. 2015-08-25 14:21:04 +02:00
paweldomas
2d4a5412c0 Meet pings Prosody 2015-08-25 14:20:57 +02:00
paweldomas
a2b43843b7 Updates app.bundle.js 2015-08-24 12:00:40 +02:00
paweldomas
2f03a0a7fe Fixes broken last-N 2015-08-24 11:53:13 +02:00
paweldomas
4c2f0d3600 Removed duplicated code for adding video thumbnail's hover handler. 2015-08-24 11:53:12 +02:00
paweldomas
a8a0945d73 Moves method for selecting thumbnail's video element from videolayout to SmallVideo. Fixes issue with muted audio in IE after switching between thumbnails. 2015-08-24 11:53:11 +02:00
paweldomas
a7048fba06 Implements HTTP POST query for fetching app configuration. 2015-08-24 11:53:10 +02:00
Boris Grozev
7b35dd89bb Updates the external api docs. 2015-08-20 15:00:56 -05:00
Boris Grozev
3561204bb5 Allows to overwrite config and interfaceConfig options through the
external API.
2015-08-20 14:57:05 -05:00
ibauersachs
ee50d07dc3 Commit from translate.jitsi.org by user ibauersachs.: 172 of 173 strings translated (0 fuzzy). 2015-08-19 19:58:21 +00:00
ibauersachs
9ec4bc91fc Commit from translate.jitsi.org by user ibauersachs.: 173 of 173 strings translated (0 fuzzy). 2015-08-19 19:58:06 +00:00
Ingo Bauersachs
88071e5258 Add Slovenian (sl) 2015-08-19 21:54:00 +02:00
paweldomas
e79d476d89 Updates app.bundle.js 2015-08-19 18:27:09 +02:00
paweldomas
0fe4999beb Use fadeTo instead of fadeIn/fadeOut to avoid having display: none on large video which causes issues when Temasys plugin is used. 2015-08-19 18:23:18 +02:00
paweldomas
ae96b9f365 Fixes issue in IE where click events on local video thumbnail are captured by local audio object created by Temasys plugin on stream attach. 2015-08-19 18:23:08 +02:00
paweldomas
922d0bd512 New adapter.js for Temasys plugin. 2015-08-19 18:22:07 +02:00
paweldomas
9a7bc4ebab Fixes issue with returning from shared document view. Calls show() before fadeOut() on large video to avoid situation when we end up with black screen and are unable to select new video. Updates app.bundle.js. 2015-08-19 10:55:35 +02:00
damencho
2081757ba1 Enables stats in FF. 2015-08-18 16:42:47 -05:00
jitsi-pootle
e9c9fc5e69 New files added from translate.jitsi.org based on templates 2015-08-18 12:50:42 +00:00
paweldomas
562761196d Updates app.bundle.js 2015-08-18 13:27:29 +02:00
paweldomas
420514b921 Temasys adapter.js ver 0.12.0 with fix for setInterval included 2015-08-18 13:22:17 +02:00
paweldomas
eb63b24a9a Fixes fadeIn/fadeOut large video transitions in Safari. Enables animation on video resize when switching between camera and screen video. 2015-08-18 13:19:54 +02:00
paweldomas
c8bbded994 Removes accidentally committed debug message. 2015-08-18 13:19:44 +02:00
damencho
2a2702c13a Adds params for enabling fake devices on firefox. 2015-08-17 17:05:03 -05:00
Boris Grozev
5fc868ee96 Updates app.bundle.js. 2015-08-17 16:17:47 -05:00
Boris Grozev
502eab7278 Only update the "start muted" settings on precense from a moderator. 2015-08-17 16:17:15 -05:00
Boris Grozev
332aafbe20 Documents some of the XMPP events. Renames some of them. 2015-08-17 16:17:03 -05:00
Boris Grozev
d5258e6197 Remove a double variable declaration. 2015-08-17 16:17:01 -05:00
Boris Grozev
9cc9e6132c Add RTCBrowserType.isAndroid(). 2015-08-17 16:16:34 -05:00
hristoterezov
f60c1d9751 Removes the minimum width and height of the external API iframe in "film strip only" mode. 2015-08-17 13:46:26 -05:00
Boris Grozev
5d32318d93 Updates app.bundle.js. 2015-08-14 10:49:13 -05:00
Boris Grozev
fee8482bae Updates sdp-transform to 1.4.1. 2015-08-14 10:48:21 -05:00
paweldomas
f2b5cdbfb8 Updates app.bundle.js. 2015-08-14 17:06:50 +02:00
paweldomas
60afe2d202 Fixes issue with display name event not being fired on Safari/IE 2015-08-14 17:04:30 +02:00
paweldomas
18f03e296b Fixes broken input fields in Safari. 2015-08-14 17:03:58 +02:00
paweldomas
5cd9db1b6a Missing semicolon... 2015-08-14 17:02:19 +02:00
bgrozev
f83404a99e Merge pull request #341 from pstros/fix-comment
Change the comment to fix npm install
2015-08-13 16:00:56 -05:00
Devin Wilson
7c1ba9242b Change the comment to fix npm install 2015-08-13 08:31:50 -06:00
ibauersachs
bfcc587047 Commit from translate.jitsi.org by user ibauersachs.: 172 of 172 strings translated (0 fuzzy). 2015-08-13 07:35:17 +00:00
Boris Grozev
e90d8f5531 Updates app.bundle.js. 2015-08-12 21:54:15 +02:00
Boris Grozev
59033aab28 Adds what will hopefully be treated as a comment by all npm versions to package.json. 2015-08-12 21:52:49 +02:00
Boris Grozev
7f1eb617c3 Uses npm packeges for socket.io and jsSHA. 2015-08-12 21:50:42 +02:00
hristoterezov
fd7e8c9162 Merge pull request #338 from gerges/issue/toolbar-refactor
Refactors toolbar
2015-08-12 13:55:50 -05:00
Issac Gerges
51e886142b Ensure hangup button selector is specific enough to apply red color and custom size 2015-08-12 13:36:24 -05:00
Issac Gerges
dcc206b2b4 Update non-container toolbar items to be set to inline-block when shown 2015-08-12 13:06:55 -05:00
Issac Gerges
da75e17ff5 Merge remote-tracking branch 'origin/master' into issue/toolbar-refactor 2015-08-12 13:05:20 -05:00
paweldomas
8fea9b76ee Updates app.bundle.js 2015-08-12 14:23:43 +02:00
paweldomas
cb024be2d6 Fixes locking at WaitForPluginReady with Temasys plugin install detection. 2015-08-12 14:21:08 +02:00
paweldomas
4c4e99c51a Updates Temasys adapter.screenshare.js. Browser restart is no longer required after plugin install. 2015-08-12 14:20:51 +02:00
paweldomas
4b8bc398dd Fixes issue with black video when new stream element is inserted after the old one. 2015-08-12 14:20:44 +02:00
paweldomas
466e7dcc91 Fixes crash in LocalSSRCReplacement when null localDescription is passed. 2015-08-12 14:20:37 +02:00
Issac Gerges
de30ce0f5c Merge remote-tracking branch 'origin/master' into issue/toolbar-refactor 2015-08-11 13:30:08 -05:00
Issac Gerges
fc6f5717cb Refactor toolbar to add separators via css and remove unneeded containers 2015-08-11 13:24:53 -05:00
paweldomas
b680ecd2ff Renames getLargeVideoJid to getLargeVideoResource and updates app.bundle.js. 2015-08-11 13:12:55 +02:00
Boris Grozev
2bea2eec74 Updates app.bundle.js. 2015-08-10 16:54:51 -05:00
Boris Grozev
f52b1380ee Continues to separate JingleSessionPC. 2015-08-10 16:38:35 -05:00
Boris Grozev
baf720c553 Starts to abstract JingleSession. 2015-08-10 15:58:50 -05:00
Boris Grozev
deaff6af5b Executes a local (git-ignored) script on "make deploy". 2015-08-10 13:25:21 -05:00
Boris Grozev
6ca1e131af Renames JingleSession to JingleSessionPC. 2015-08-10 13:22:05 -05:00
Boris Grozev
57b9aeb38c Inlines a method for clarity/simplicity. 2015-08-10 13:14:12 -05:00
Boris Grozev
cc20a4d776 Removes an unused variable. 2015-08-10 13:02:39 -05:00
Boris Grozev
fd404b8465 Supports setting interfaceConfig options via URL params. Renames config.filmStripOnly to interfaceConfig.filmStripOnly. 2015-08-10 12:59:12 -05:00
damencho
cc29df6376 Adds params for enabling rec on entering the conference. 2015-08-07 10:31:48 -05:00
paweldomas
44136e8a55 Updates app.bundle.js. 2015-08-07 12:59:43 +02:00
paweldomas
fb875423a9 Fixes SSRC=1 issue. Renames VideoSSRCHack to LocalSSRCReplacement. 2015-08-07 12:58:12 +02:00
paweldomas
ab4c29eddc Fixes video mute in Firefox. Disables VideoSSRCHack for Firefox by default. 2015-08-07 12:58:03 +02:00
paweldomas
95e964a089 Fixes bugs in VideoSSRCHack. Additional log messages. 2015-08-07 12:57:56 +02:00
paweldomas
c288aa6e84 Fixes issue with toggling video mute in FF caused by the fact that it has no 'onended' callback handling implemented. 2015-08-07 12:57:48 +02:00
paweldomas
e5d03d1d11 Fixes GUM failure with the latest FF nightly plus cleanup. 2015-08-07 12:57:43 +02:00
hristoterezov
59147f059d Adds a parameter to API constructor that enables film strip only mode. 2015-08-06 19:01:21 -05:00
hristoterezov
7793d65a99 Renames config.minimized to config.filmStripOnly . 2015-08-06 18:59:51 -05:00
hristoterezov
b77791f4b2 Implements minimized mode - only the thumbnails are visible. 2015-08-06 18:34:40 -05:00
damencho
4092d67853 Updates use of recording states, add some information texts and notifications. 2015-08-05 22:18:45 -05:00
paweldomas
2ea6be9b2c Updates app.bundle.js. 2015-08-05 14:12:10 +02:00
paweldomas
74e7507a73 Re-uses SSRC of the first video stream created for any streams created in future. Does video mute and switching to the screen stream without 'source-add'/'source-remove' signaling. Moves video type signaling from Jingle to MUC presence. 2015-08-05 14:10:08 +02:00
bgrozev
9a31fa3d63 Fixes a bug reported by Pawel Domas. 2015-08-04 09:26:16 -05:00
Дамян Минков
fd44cfa7a0 Typo. 2015-08-03 17:18:32 -05:00
yanas
ab570d63fa Fixes this reference. 2015-08-03 14:08:42 -05:00
Boris Grozev
b4983b2566 Merge branch 'rename-mute-to-toggle' 2015-08-03 11:46:55 -05:00
bgrozev
fdb470d22f Merge pull request #330 from jitsi/remove-rtcp-mux-from-config
Removes the useBundle and useRtcpMux options from config.js. These are
2015-08-03 11:32:43 -05:00
bgrozev
c163a22415 Merge pull request #331 from jitsi/enable-noice-reduction
Re-enables video noise reduction (removes a workaround for M37).
2015-08-03 11:32:38 -05:00
bgrozev
1dea41d3d4 Merge pull request #328 from jitsi/verify-full-jid-for-jingle
Verify full (and not bare) JID of the Jingle sender, since everyone i…
2015-08-03 11:32:32 -05:00
yanas
9d321df49e Adds javadoc for previous commit. 2015-08-03 11:21:56 -05:00
yanas
d92d8e8299 Some additional error handling. 2015-08-03 11:00:16 -05:00
bgrozev
6b48bf0d84 Merge pull request #299 from marclaporte/patch-3
Minor rewording, fixing typos, and improving grammar
2015-08-03 10:48:36 -05:00
bgrozev
de82a8e32b Merge pull request #310 from marclaporte/patch-4
fix typo
2015-08-03 10:46:49 -05:00
bgrozev
fe4661078e Update a license mention in README.md 2015-08-03 10:40:20 -05:00
bgrozev
46554f75a2 Merge pull request #313 from marclaporte/patch-6
fix typo and minor rewording
2015-08-03 10:39:27 -05:00
Boris Grozev
dbd68d2daa Updates app.bundle.js. 2015-07-31 15:26:03 -05:00
Boris Grozev
67a52e6f72 Cleanup and formatting fixes in the UI module. 2015-07-31 14:45:40 -05:00
Boris Grozev
2c790f86ad More formatting fixes. 2015-07-31 14:28:23 -05:00
Boris Grozev
fd5a739f3c Minor formatting fixes, avoid using a global variable. 2015-07-31 14:25:48 -05:00
Boris Grozev
35e46a2cfa Fix a typo. 2015-07-31 14:23:48 -05:00
Boris Grozev
24f9a1c8d1 Abstract browser type checks. 2015-07-31 14:23:36 -05:00
Boris Grozev
71229bdba9 Minor formatting fixes. 2015-07-31 14:23:27 -05:00
Boris Grozev
84a8d00234 Renames functions for the sake of clarity. 2015-07-31 14:22:42 -05:00
Boris Grozev
ee95e99f57 Cleanup: removes an unused function. 2015-07-31 14:22:32 -05:00
Boris Grozev
be6d7af377 Cleanup: fixes to style, typos and documentation. 2015-07-31 14:22:20 -05:00
paweldomas
b8548757b4 Updates app.bundle.js 2015-07-31 15:51:45 +02:00
paweldomas
df932bb89f Fixes typo in variable name(and a crash on undefined). 2015-07-31 15:50:02 +02:00
paweldomas
50e67a0658 Prevents from duplicating existing SSRCs with 'source-add' in remote description. 2015-07-31 15:49:53 +02:00
damencho
3289f6f68e Updates nginx detection during configuration. 2015-07-30 14:59:31 -05:00
damencho
a701821698 Fixes updates on distributions that are missing openjdk 8. 2015-07-30 14:36:44 -05:00
bgrozev
5588bcd167 Updates another call to setMute(). 2015-07-30 14:24:44 -05:00
bgrozev
a7058747ac Updates a call to setMute(). 2015-07-30 10:51:50 -05:00
paweldomas
5017fed28e Updates app.bundle.js. 2015-07-30 14:23:33 +02:00
paweldomas
8469a282c1 Fixes inconsistent local video muted status. 2015-07-30 14:21:32 +02:00
paweldomas
2ffe178456 Fixes issue with missing avatar for Jigasi user. Fixes issue with avatar not being displayed when user has no video. Removed duplicated logic for checking video muted status(removed from LargeVideo which exists in SmallVideo). 2015-07-30 14:21:31 +02:00
paweldomas
349f196664 "wait for remote video" loop no longer exists so no need to set 'removed' flag on video. 2015-07-30 14:21:31 +02:00
paweldomas
f2bd76ac93 Fixes issue with video thumbnail not being removed for users without camera and mic. 2015-07-30 14:21:30 +02:00
hristoterezov
baee96734c Moves LargeVideo html dependancies in LargeVideo.js 2015-07-29 14:39:09 -05:00
Boris Grozev
4cac7ac97f Re-enables video noise reduction (removes a workaround for M37). 2015-07-29 11:28:58 -05:00
Boris Grozev
46a17948d0 Renames the external API commands from "mute{Audio,Video}" to "toggle{Audio,Video}" since what they do is "toggle". 2015-07-29 11:28:37 -05:00
Boris Grozev
79ac1e800f Verify full (and not bare) JID of the Jingle sender, since everyone in the MUC has the same bare JID. 2015-07-29 11:27:12 -05:00
Boris Grozev
b0c81985d4 Removes the useBundle and useRtcpMux options from config.js. These are
now fully supported by jitsi-videobridge and all browsers which we
support (and if we need to enable them conditionally because of browser
compatibility in the future, we should do it based on run-time browser
detection.)
2015-07-29 11:26:50 -05:00
damencho
f8b7d048b0 Updates meet default installation. Removes nginx dependency and adds openjdk-8 in order to activate multiplexing inside jvb and use its jetty to serve meet. Updates will not touch current configuration which will continue using nginx. 2015-07-27 16:07:22 -05:00
paweldomas
dc19620edc Updates app.bundle 2015-07-23 11:25:39 +02:00
paweldomas
4aa6fbc4b9 Switches to the last visible video correctly when current speaker leaves the conference. 2015-07-23 11:24:13 +02:00
hristoterezov
03902de511 Merge pull request #323 from pstros/remove-ui-refs-from-xmpp-upstream
Remove UI refs from xmpp and RTC
2015-07-22 18:19:15 -05:00
Devin Wilson
d44aed2c11 Remove duplicate handler 2015-07-22 13:38:28 -06:00
Devin Wilson
9bbf17e541 Remove UI references from RTC 2015-07-22 13:37:34 -06:00
Devin Wilson
156b218bfc Remove UI references from xmpp-related modules
Conflicts:
	modules/xmpp/JingleSession.js
	service/xmpp/XMPPEvents.js
2015-07-22 13:37:34 -06:00
hristoterezov
ca5a1001a1 Fixes issue with parsing "extrernal" hash parameter. 2015-07-22 13:26:07 -05:00
paweldomas
1010a56899 Updates app.bundle.js. 2015-07-22 14:00:34 +02:00
paweldomas
0902cbb164 Fixes problems with Temasys plugin support in Safari. 2015-07-22 13:58:51 +02:00
paweldomas
9b4ee7c0c5 Fixes video switching issue. 'oldSmallVideo' field is no longer used as it is might be overwritten before fadeOut 'complete' callback of #largeVideo is called(and we miss UI update on it). 2015-07-22 13:58:39 +02:00
Boris Grozev
2545441def Updates app.bundle.js 2015-07-21 17:11:29 -05:00
Boris Grozev
9206b470ef Re-orders a=ssrc lines before calling SRD (fixes SRD failures when rtx/FID groups are in use). 2015-07-21 16:56:48 -05:00
Boris Grozev
cb7ff545b6 Abstracts unified and plan B checks. 2015-07-21 16:56:48 -05:00
bgrozev
c149b22ac2 Updates the license in package.json 2015-07-21 13:57:31 -05:00
paweldomas
2d522f735e Updates app.bundle 2015-07-21 10:17:59 +02:00
paweldomas
bc935eb5dc Fixes broken video in FF 2015-07-21 10:16:18 +02:00
paweldomas
c3548eb866 Fixes issues with invalid avatars and problems with switching between videos. 2015-07-20 19:32:04 +02:00
hristoterezov
a66459e206 Changes the conference id for callstats API. 2015-07-17 14:45:30 -05:00
Devin Wilson
829d8dab16 Fix CallStats require and initialize API commands and keyboard shortcuts in init method 2015-07-17 09:57:59 -06:00
Boris Grozev
072905b7cd Updates app.bundle.js. 2015-07-15 17:31:09 -05:00
Boris Grozev
7e1c7d19d6 Advertises RFC4588 support for browsers that support it. 2015-07-15 16:47:36 -05:00
hristoterezov
a3886cc56c Focuses the enter display name field. 2015-07-15 13:31:39 -05:00
paweldomas
b22ddea71c Updates app.bundle 2015-07-15 14:55:30 +02:00
paweldomas
b5135c455e Updates strophe.js to 1.2.2 2015-07-15 14:45:08 +02:00
paweldomas
7776bc92a4 Undefined method... 2015-07-15 14:44:16 +02:00
paweldomas
420bbe136c Fixes call to undefined method(which fixes crash on lastN switch and when clicking contact on the contactlist). 2015-07-15 14:01:36 +02:00
paweldomas
2b103288c2 Removes old hack 2015-07-15 12:16:04 +02:00
paweldomas
17f245df5e Fixes local video thumbnail being replaced with an avatar when lastN enabled. 2015-07-15 12:14:34 +02:00
paweldomas
61f4674a28 Fixes direct access to 'src' attribute of 'video' element. 2015-07-15 12:12:07 +02:00
paweldomas
879fb9a590 Adds getters for peer video selectors and simplifies the code a little bit. 2015-07-15 12:11:58 +02:00
paweldomas
a1b0677442 Moves SSRC owner signaling from MUC presence to Jingle. 2015-07-14 15:35:13 +02:00
paweldomas
d74a356a40 Removes extra separator from the toolbar when desktopsharing is not available. 2015-07-14 15:09:55 +02:00
Boris Grozev
609029bc93 Updates app.bundle.js 2015-07-10 22:40:23 +02:00
Boris Grozev
f29fc0f8e7 Fix building on a case-sensitive file system. 2015-07-10 22:39:09 +02:00
Boris Grozev
d430074ed8 Remove a superfluous var declaration. 2015-07-10 22:38:27 +02:00
paweldomas
ae759fab5b Adds IE support through Temasys WebRTC plugin. 2015-07-10 11:57:20 +02:00
ibauersachs
cd6928d770 Commit from translate.jitsi.org by user ibauersachs.: 168 of 168 strings translated (0 fuzzy). 2015-07-09 21:47:06 +00:00
ibauersachs
94f2ace120 Commit from translate.jitsi.org by user ibauersachs.: 167 of 167 strings translated (0 fuzzy). 2015-07-09 21:42:09 +00:00
paweldomas
6ec7be09f2 Fixes issue with switching to the screen stream before conference starts(when we're still alone in the room). 2015-07-09 15:04:08 +02:00
paweldomas
5c136f1da6 Updates app.bundle.js 2015-07-06 12:50:43 +02:00
paweldomas
9268da65c2 Removes 'wait for remote video' hack 2015-07-06 12:24:59 +02:00
paweldomas
3fc6da1ed5 Fixes issue with invalid number of conference participants displayed on the contact list indicator. 2015-07-06 12:24:40 +02:00
Marc Laporte
c1226d8c07 fix typo and minor rewording 2015-07-04 18:21:27 -04:00
hristoterezov
62a731e244 Fixes typo in translation module interface. 2015-07-03 12:34:05 +03:00
hristoterezov
47b6355d66 Implements functionality that forces the user to enter display name. 2015-07-02 17:04:37 +03:00
hristoterezov
1e0bf42203 Removes unused methods from VideoLayout. 2015-07-01 11:14:21 +03:00
hristoterezov
6235ff163e Fixes audio mute. 2015-06-30 14:34:11 +03:00
hristoterezov
f11c3b94ed Moves some methods from avatar to videolayout. 2015-06-29 17:24:21 +03:00
Marc Laporte
dd8371f49c fix typo 2015-06-28 09:47:13 -04:00
hristoterezov
506312ac95 Integrates callstats.io API. 2015-06-26 15:32:40 +03:00
Damian Minkov
239f271caf Handles chat message timestamps according to XEP-0091 and updates app.bundle.js. 2015-06-23 16:28:46 +03:00
Zalmoxisus
7a54537bee Fixes chat messages timestamp according to XEP-0203. Fixes #305. 2015-06-23 16:14:06 +03:00
hristoterezov
6a492d96c2 Refactors VideoLayout.js. 2015-06-23 11:00:46 +03:00
paweldomas
38b180ad81 Adds scrollbar to the contact list. 2015-06-19 15:45:39 +02:00
Emil Ivov
c8c0c8b1ab Update README.md 2015-06-19 00:53:22 +02:00
Emil Ivov
2b692f5a0a Setting new distribution license 2015-06-18 22:36:31 +02:00
Emil Ivov
502aeca132 Adding original MIT license 2015-06-18 22:36:17 +02:00
George Politis
288fbff677 Update LICENSE 2015-06-18 19:07:32 +02:00
George Politis
bdca07be17 Updates app.bundle.js 2015-06-18 19:01:04 +02:00
George Politis
5f48e4cf9d Revert "Updates the license headers."
This reverts commit 93648f361b.
2015-06-18 18:59:41 +02:00
Emil Ivov
bff9648abc Update README.md 2015-06-18 18:57:58 +02:00
Emil Ivov
7874e09a7e Update README.md 2015-06-18 18:25:21 +02:00
George Politis
311df7ec7f Updates app.bundle.js 2015-06-18 16:27:36 +02:00
George Politis
93648f361b Updates the license headers. 2015-06-18 16:17:09 +02:00
Emil Ivov
8380a7bb9d Update LICENSE 2015-06-18 13:18:23 +02:00
paweldomas
a6c8d0787a Does not reload the page after Chrome desktop sharing extension is installed. 2015-06-17 10:11:30 +02:00
paweldomas
3f9b220ee9 The name of shared Etherpad document is now generated and advertised by Jicofo user. 2015-06-15 12:07:31 +02:00
hristoterezov
15db9ca7e4 Fixes issue with the download logs button. 2015-06-11 17:03:41 +03:00
Damian Minkov
224dff7481 Updates patch. 2015-06-11 11:56:08 +03:00
Damian Minkov
643b2024c0 Reloads wrong service on remove jitsi-meet-prosody. 2015-06-11 11:55:01 +03:00
George Politis
f378d43e31 Updates app.bundle.js. 2015-06-10 13:39:11 +02:00
George Politis
23f1dc174e Refactors simulcast support. 2015-06-10 13:35:05 +02:00
Marc Laporte
0c3802183d Minor rewording, fixing typos, and improving grammar 2015-06-03 12:52:52 -04:00
paweldomas
b038d276c9 Fixes problem with resetting focusedVideoInfo when participant leaves the room. Fixes error when display name is processed after participant has left. 2015-06-02 17:25:10 +02:00
Boris Grozev
797036e888 Updates app.bundle.js. 2015-06-02 16:09:53 +03:00
Boris Grozev
a426b65969 Advertises DTLS support in disco#info. 2015-06-02 16:09:40 +03:00
paweldomas
1d57cb9dae Fixes calls to updateLargeVideo, so that it is called with user resource jid. 2015-06-02 10:05:42 +02:00
Boris Grozev
be64bd883c Fail gracefully when not running in a git environment. 2015-06-01 18:06:37 +03:00
Damian Minkov
497c60375c Updates manual install instructions. 2015-06-01 15:01:31 +03:00
hristoterezov
7f616fc823 Changes start muted labels. 2015-06-01 10:11:12 +03:00
hristoterezov
8a4c341512 Implements default language config property and comments to config.js 2015-05-29 17:09:44 +03:00
bgrozev
c65343b2c5 Fix influxdb instructions. 2015-05-29 15:26:37 +03:00
hristoterezov
d0efa6a77b Adds French in available languages. 2015-05-29 09:46:49 +03:00
hristoterezov
01deadf078 Moves the sound notification code to be played when the participant joins / leaves the room instead of receiving add / remove stream event. 2015-05-28 14:34:40 +03:00
George Politis
6eaa3cd45d Updates app.bundle.js 2015-05-28 11:46:40 +02:00
gpolitis
b0d2a79873 Require FF 40 or above for a good experience. 2015-05-28 11:45:10 +02:00
gpolitis
d94f001f25 A recent JDK and Ant is required to compile JICOFO. 2015-05-27 20:56:10 +02:00
gpolitis
afb85e2fd9 These are Debian instructions really. 2015-05-27 20:49:26 +02:00
gpolitis
fffb5801c5 Makes some nginx directives optional. 2015-05-27 16:56:30 +02:00
gpolitis
d81cd20ee6 Removes otalk modules from the installation procedure. 2015-05-27 16:52:16 +02:00
gpolitis
3e7a9228bc No turn server is necessary with Jitsi Videobridge. 2015-05-27 16:22:16 +02:00
hristoterezov
835e199135 Fixes issue with not removed ssrcs after the participant left the room. 2015-05-27 11:47:06 +03:00
hristoterezov
1d660e1883 Removes join / leave notifications if the participant start audio muted. 2015-05-26 14:18:45 +03:00
hristoterezov
5746261961 Implements the functionality to update config.js parameters via the URL. 2015-05-25 17:42:59 +03:00
hristo
cbeae8eb30 Commit from translate.jitsi.org by user hristo.: 158 of 159 strings translated (0 fuzzy). 2015-05-25 13:12:58 +00:00
George Politis
95b2752d2a Updates libs/app.bundle.js 2015-05-21 10:32:55 +02:00
George Politis
e3da472e7a Adds special handling of recvonly remote streams. 2015-05-21 10:32:00 +02:00
George Politis
43f60ca336 Updates app.bundle.js 2015-05-20 16:27:39 +02:00
George Politis
118a61c416 Disables stats logging in FF. 2015-05-20 16:27:10 +02:00
George Politis
bf99a129bd Depend on sdp-interop@0.1.4 2015-05-20 16:20:31 +02:00
George Politis
fb6ad8cffd Updates app.bundle.js and restores latest sdp-interop. 2015-05-20 15:55:30 +02:00
hristoterezov
21fef57bc4 Adds config property that disables hiding of toolbar. 2015-05-20 15:10:09 +03:00
George Politis
777422c87d Update libs/app.bundle.js. 2015-05-20 14:03:43 +02:00
George Politis
ee6fd63c25 Depend on sdp-interop@0.1.3 2015-05-20 14:03:13 +02:00
George Politis
b9f00b71b2 Fixes conference disposal in FF. 2015-05-20 10:45:00 +02:00
hristoterezov
099e3340bc Implements start muted feature. 2015-05-19 18:03:01 +03:00
George Politis
172c2d3d71 Updates app.bundle.js. 2015-05-18 19:08:20 +02:00
George Politis
854c8e5f2f Removes obsolete/unused variable. 2015-05-18 19:07:56 +02:00
George Politis
b2cff193a9 Updates app.bundle.js. 2015-05-18 19:03:27 +02:00
George Politis
ad1772178d Notifies the focus about newly allocated channel SSRCs on add/remove source. 2015-05-18 19:00:12 +02:00
George Politis
0959b3d5b8 Updates app.bundle.js 2015-05-15 15:43:56 +02:00
George Politis
36f91f7f1e Disables RTP stats when running on FF. 2015-05-15 15:36:29 +02:00
George Politis
2c9d0606c3 Attempts to fix #258 2015-05-15 15:32:01 +02:00
George Politis
1ce22fb8c9 Depend on sdp-interop@0.1.2, sdp-transform@1.4.0 2015-05-15 13:08:04 +02:00
George Politis
e0cba855a6 Implements fault tolerant connect (closes #268). 2015-04-22 23:11:25 +02:00
paweldomas
8af3a65d37 Displays error dialog when BOSH connection fails. 2015-04-22 16:14:16 +02:00
hristoterezov
667f67376e Fixes the issue with black large video. 2015-04-22 15:53:01 +03:00
George Politis
ce7b6be024 Bumps app.bundle.js version. 2015-04-22 14:30:24 +02:00
George Politis
57cd2647f3 Fixes a JS error in the invite prompt when there's no room url. 2015-04-22 14:26:48 +02:00
hristoterezov
efcfe99707 Improves the notification that informs the user if started the conference audio/video muted. 2015-04-22 13:27:14 +03:00
hristoterezov
cc1ad1bc13 Implement the functionality that allows users to start the conversation muted. 2015-04-22 12:31:08 +03:00
Paweł Domas
29f06829e7 Merge pull request #272 from mkeesey/master
Fix stream end/start race condition
2015-04-16 07:54:23 +02:00
Mike Keesey
0fdf5e0102 Fix stream end/start race condition
We need to queue attempts to call modifySources to prevent errors in
setLocalDescription, et al. We need to let the asynchronous function
flow in modifySources finish before we kick off another set.
2015-04-15 08:46:27 -06:00
hristoterezov
5b7083f5f7 Fixes JS error when downloading logs. 2015-04-15 11:17:01 +03:00
Boris Grozev
adb1c572ed Rebuilds app.bundle.js. 2015-04-12 14:26:58 +02:00
Boris Grozev
5d17cd0bcc Merge branch 'dtmf' 2015-04-12 14:24:33 +02:00
Boris Grozev
134d89a3d6 Fix a problem with accessing peerconnection, use duration and pause in the API. 2015-04-12 14:23:54 +02:00
Boris Grozev
0efcbdcd37 Adds a MemberList module and (currently disabled) code to show the dialpad button. 2015-04-12 14:18:24 +02:00
hristoterezov
878713a15d Fixes typo for the user id node in the presence. 2015-04-09 16:57:32 +03:00
hristoterezov
e01713f6f8 Fixes remove video element functionality in UI to remove only the correct video instead of all. 2015-04-09 14:02:33 +03:00
paweldomas
b6155c04ad Modifies "authentication required" dialog. 2015-04-08 14:34:10 +02:00
Boris Grozev
8075d0a0fd Adds a (hidden) dialpad button to the toolbar. 2015-04-08 12:51:29 +02:00
Boris Grozev
029851fe3f Avoid unnecessary jquery calls. 2015-04-08 12:49:49 +02:00
Boris Grozev
886fb2ac43 Fix typos and rename event names for purposes of clarity. 2015-04-08 12:30:48 +02:00
Boris Grozev
99b1a51df0 Fix a typo. 2015-04-08 10:43:43 +02:00
Boris Grozev
795ec24246 Adds a module for sending DTMF tones. 2015-04-07 18:02:52 +02:00
Boris Grozev
ecf9c6fc6b Adds instructions for adding an icon (thanks @hristoterezov). 2015-04-07 17:38:30 +02:00
Boris Grozev
68bc819b89 Adds the dial pad icon. 2015-04-07 17:09:28 +02:00
George Politis
80c5779de9 Adds an SDP transform module. 2015-04-03 13:18:09 +02:00
paweldomas
d175dfdef7 Prevents from sending invalid presence packets, before MUC jid is defined. 2015-04-01 21:12:08 +02:00
hristo
93c13f5a11 Commit from translate.jitsi.org by user hristo.: 156 of 159 strings translated (0 fuzzy). 2015-04-01 13:13:01 +00:00
hristo
ff8b880948 Commit from translate.jitsi.org by user hristo.: 140 of 159 strings translated (0 fuzzy). 2015-04-01 12:39:44 +00:00
hristo
5b550c8a5b Commit from translate.jitsi.org by user hristo.: 113 of 159 strings translated (0 fuzzy). 2015-03-31 17:02:39 +00:00
hristo
ce7d3c5c81 Commit from translate.jitsi.org by user hristo.: 91 of 159 strings translated (0 fuzzy). 2015-03-31 15:10:41 +00:00
jitsi-pootle
c99350308c New files added from translate.jitsi.org based on templates 2015-03-31 11:35:10 +00:00
George Politis
e98c8ada6a Nukes the enableFirefoxSupport config param. 2015-03-31 13:02:59 +02:00
George Politis
ce8aa961ea Lowers FF requirement to v38. 2015-03-31 12:33:04 +02:00
paweldomas
fbd08ba3a6 Adds empty SSI templates to avoid 404. 2015-03-31 11:17:26 +02:00
Paweł Domas
61594cb877 Merge pull request #259 from jitsi/plugin_ssi_includes
Adds additional SSI include tags.
2015-03-31 08:38:01 +02:00
hristoterezov
520e655100 Fixes issue with video mute indicator. 2015-03-30 17:19:35 +03:00
paweldomas
58d1697b00 Adds additional SSI include tags. 2015-03-30 16:00:23 +02:00
hristoterezov
f902b99287 Adds documentation for the translation. 2015-03-30 16:11:16 +03:00
hristoterezov
d25a9b0e41 Fixes issue with desktop sharing when the user click Cancel on the popup window. 2015-03-27 16:23:48 +02:00
hristoterezov
0e0f7d7ccb Fixes issue with available devices icons 2015-03-27 15:56:17 +02:00
hristoterezov
58cc21d417 Changes the implementation to show availability of video and sound devices. 2015-03-27 11:36:39 +02:00
paweldomas
8ac44491d0 Fixes input field focus in call SIP number dialog. 2015-03-26 14:16:20 +01:00
Damian Minkov
a093b455b3 Fixes debian packaging checking wrong template. 2015-03-26 13:19:50 +02:00
George Politis
58494d45db Brings back goog-remb signaling. 2015-03-26 11:29:40 +01:00
paweldomas
f98621173f Fixes uid, email and displayName advertisement in MUC presence. 2015-03-25 12:39:22 +01:00
hristoterezov
dbcfc92dc4 Changes the implementation to allow users without audio and video to join the conferences. Fixes issue with switching off desktop sharing for audio only users. 2015-03-24 17:43:33 +02:00
ibauersachs
b9bd1d599b Commit from translate.jitsi.org by user ibauersachs.: 159 of 159 strings translated (0 fuzzy). 2015-03-24 15:35:05 +00:00
ibauersachs
99b0be91ed Commit from translate.jitsi.org by user ibauersachs.: 159 of 159 strings translated (0 fuzzy). 2015-03-24 13:50:48 +00:00
Ingo Bauersachs
f2ae29d8e4 Add Italian 2015-03-24 14:47:56 +01:00
jitsi-pootle
4c3d415a07 New files added from translate.jitsi.org based on templates 2015-03-24 13:21:29 +00:00
Ingo Bauersachs
7b65798758 Use SSL for the Jitsi homepage link 2015-03-24 10:36:27 +01:00
hristoterezov
c1c5a305c6 Removes the comment from the English translation json. 2015-03-24 11:17:51 +02:00
hristo
291211c029 Commit from translate.jitsi.org by user hristo.: 13 of 149 strings translated (0 fuzzy). 2015-03-23 16:40:26 +00:00
hristoterezov
a3a9e8d951 Adds comment about not changing or creating other language files manually. 2015-03-23 18:35:44 +02:00
hristoterezov
3a0ee11ccd Turns off the camera when video is muted on https connection. 2015-03-23 18:12:24 +02:00
George Politis
2568b07075 enables REMB signaling in the rembson room. 2015-03-23 10:17:02 +01:00
Boris Grozev
e5fa02a1d4 Automates bumping js file versions. Experimental, please revert Makefile
if it causes problems.
2015-03-21 20:04:12 -07:00
Damian Minkov
fb5550bc38 Fixes debian package watch file. 2015-03-21 16:48:53 +02:00
Damian Minkov
bc5565251c Removes some links when reconfiguring. 2015-03-21 14:18:11 +02:00
Damian Minkov
4f548ce748 Adds description to the patch. 2015-03-21 14:18:11 +02:00
Damian Minkov
0faeb450c0 Drops use of Pre-Depends. 2015-03-21 14:18:11 +02:00
George Politis
e12ffd7a24 Bumps app.bundle.js version. 2015-03-19 20:02:19 +01:00
George Politis
d4c78617a7 Updates app.bundle.js with fix from previous commit. 2015-03-19 19:30:18 +01:00
hristoterezov
db2296953d Merge pull request #233 from odotom/odotom-patch-2-2
Update RTC.js
2015-03-19 16:57:17 +02:00
paweldomas
cd19c0e9e3 Chrome no longer allows to trigger install from extension msg response callback, so we have to check if extension exists before user clicks "share desktop" button(on startup). Fixes jshint warnings. 2015-03-18 20:28:18 +01:00
hristoterezov
44e558e5a0 Fixes video mute when the user is alone in the room. 2015-03-18 18:41:41 +02:00
hristoterezov
0da2547360 Fixes the size of the desktop streaming video for remote peer. 2015-03-17 18:46:08 +02:00
paweldomas
f3274ea42e Fixes broken translation after i18next-client update to 1.8.0. 2015-03-17 09:25:26 +01:00
paweldomas
0848283f6d Fixes broken Shibboleth authentication. 2015-03-17 08:50:04 +01:00
paweldomas
6e99286bd0 Updates app.bundle.js. 2015-03-13 15:09:50 +01:00
paweldomas
588c2d9e4b XMPP authentication improvements. Makes it possible to authenticate during the conference. 2015-03-13 15:08:05 +01:00
paweldomas
7c201573fb No need to manually focus Prezi URL input. 2015-03-13 15:07:53 +01:00
paweldomas
581ffec5ed Fixes issues after jquery-impromptu update. 2015-03-13 15:07:43 +01:00
paweldomas
c296940fd4 Updates jquery-impromptu in order to fix issues with modal dialogs. 2015-03-13 15:07:31 +01:00
paweldomas
f48633fa1d Removes unused connection settings form. 2015-03-13 15:07:17 +01:00
George Politis
66a53c7dc0 Redirects to unsupported browser page for FF < 39. 2015-03-13 10:19:54 +01:00
bgrozev
09f53c6b21 Update influxdb.md 2015-03-13 10:01:16 +01:00
ibauersachs
b3a17040e5 Commit from translate.jitsi.org by user ibauersachs.: 11 of 149 strings translated (0 fuzzy). 2015-03-12 21:25:22 +00:00
ibauersachs
774a7b41e4 Commit from translate.jitsi.org by user ibauersachs.: 149 of 149 strings translated (0 fuzzy). 2015-03-12 21:24:32 +00:00
ibauersachs
062e671290 Commit from translate.jitsi.org by user ibauersachs.: 148 of 148 strings translated (0 fuzzy). 2015-03-12 20:47:21 +00:00
paweldomas
90d979b69d Makes it possible to display notification message above the toolbar. 2015-03-12 17:56:28 +01:00
George Politis
9d50084b98 Doesn't fail when removeStream is called on FF. 2015-03-12 17:00:40 +01:00
George Politis
e1d71a41f7 Adds FF in the list of supported browsers. Enables it by default. 2015-03-12 16:33:27 +01:00
George Politis
e781eb6423 Partially reverts "Fixes translation issues (deb68dd)" and restores sdp-interop changes. 2015-03-12 16:17:22 +01:00
hristo
15f4f03ba3 Commit from translate.jitsi.org by user hristo.: 11 of 149 strings translated (0 fuzzy). 2015-03-11 17:50:42 +00:00
hristoterezov
4f9b6f7180 Changes the format of email text in the language resource files. 2015-03-11 18:54:43 +02:00
hristoterezov
b36ec5fd01 Moves supported browser list from the email message to the JS 2015-03-11 10:53:39 +02:00
ibauersachs
ac95ea03fe Commit from translate.jitsi.org by user ibauersachs.: 148 of 148 strings translated (0 fuzzy). 2015-03-11 08:51:16 +00:00
hristoterezov
ae535fcb7d Replaces %0D%0A with \n in the email template text. 2015-03-11 10:29:21 +02:00
hristoterezov
957cc6afc1 Merge branch 'master' of github.com:jitsi/jitsi-meet 2015-03-10 17:25:44 +02:00
hristoterezov
16fdd59617 Adds turkish language. 2015-03-10 17:24:27 +02:00
George Politis
fabf8f42c6 Updates .gitignore. 2015-03-10 15:50:26 +01:00
ibauersachs
c98a56dc37 Commit from translate.jitsi.org by user ibauersachs.: 135 of 135 strings translated (0 fuzzy). 2015-03-10 10:10:08 +00:00
hristoterezov
deb68dd420 Fixes translation issues 2015-03-10 11:38:09 +02:00
Boris Grozev
0fd1a7fa08 Removes embedded html as per Ingo's suggestion. 2015-03-09 19:14:11 +01:00
Boris Grozev
c6ff8aa5dd Tries to improve readibility... 2015-03-09 18:44:42 +01:00
Boris Grozev
06f025e92a Fix formatting. 2015-03-09 18:29:47 +01:00
Boris Grozev
f14329f2cd Adds instructions to enable logging. 2015-03-09 18:27:56 +01:00
Boris Grozev
53e525597a Add .swp files to .gitignore. 2015-03-09 18:27:55 +01:00
George Politis
54b3cbcf94 Reverts config.js 2015-03-09 17:58:11 +01:00
George Politis
2852740e71 Updates the Makefile. It calls npm update before building the project. 2015-03-09 17:41:17 +01:00
George Politis
5322ba086b Reverts previous change of the Makefile. 2015-03-09 17:39:16 +01:00
hristoterezov
d2f95f3c81 Fixes some translation issues. 2015-03-09 17:50:13 +02:00
George Politis
3747251821 Adds dependency to specific commit for sdp-interop. 2015-03-09 16:21:53 +01:00
George Politis
159ba82167 Updates app.bundle.js with latest sdp-interop module that offers support for ssrc-groups. 2015-03-09 15:25:47 +01:00
George Politis
e34a8e6b60 Updates app.bundle.js with latest sdp-interop module. 2015-03-09 11:11:25 +01:00
jitsi-pootle
17a6e360a2 New files added from translate.jitsi.org based on templates 2015-03-09 08:16:17 +00:00
George Politis
b690f5d4a1 Updates app.bundle.js. 2015-03-05 20:25:50 +01:00
Damian Minkov
30f3168bf7 Adds watch file for the deb. 2015-03-05 19:23:55 +02:00
Damian Minkov
115f2e4663 Updates the patch for debian src package. 2015-03-05 19:23:29 +02:00
Damian Minkov
fa15a75928 Updates missing-source location. 2015-03-05 18:01:27 +02:00
Damian Minkov
4db75446f3 Do not edit /etc/nginx/nginx.conf file directly. 2015-03-05 17:52:05 +02:00
George Politis
d9f7b8b6cc Adds a comment about how FF handles the video.src attribute. 2015-03-05 11:26:44 +01:00
George Politis
05bbfda5bb Adds support for FF/multistream. 2015-03-04 21:33:06 +01:00
paweldomas
e465b3ed90 Removes unnecessary error dialog when desktop sharing is started before the conference. 2015-03-04 13:58:07 +01:00
hristoterezov
1825f47ef2 Adds translation support for placeholder attributes. 2015-03-04 12:59:52 +02:00
ibauersachs
169d613ac4 Commit from translate.jitsi.org by user ibauersachs.: 135 of 135 strings translated (0 fuzzy). 2015-03-04 09:37:19 +00:00
Ingo Bauersachs
3dac5eeff5 Fix punctuation spacing 2015-03-04 10:27:44 +01:00
hristoterezov
f79651f806 Merge branch 'translation' 2015-03-04 11:06:02 +02:00
hristoterezov
6048d0a325 Fixes the html attributes for translation options. 2015-02-27 20:05:32 +02:00
hristoterezov
6f12446c99 Fixes translation of plurals. 2015-02-27 19:58:05 +02:00
hristoterezov
af682f8727 Changes the configuration of translation module to retrieve the resources synchronous. Removes the default values. 2015-02-26 17:35:35 +02:00
paweldomas
9123923818 Displays reservation system error if one is returned by the focus. 2015-02-26 14:59:01 +01:00
Boris Grozev
aee7a8e1bd Fix a bug with stats accumulating. Fix a typo. 2015-02-26 10:12:06 +01:00
paweldomas
5b44edb3cc Handles graceful-shutdown focus error response. 2015-02-25 16:55:22 +01:00
Boris Grozev
806d4ea443 Filters some statistics from the logs. Increases the interval for logged statistics. 2015-02-25 11:38:04 +01:00
hristoterezov
1e35ca5e4d Removes the firefox issue link. 2015-02-25 12:06:32 +02:00
hristoterezov
d4f00d76ab Removes webrtcrequired.html. 2015-02-25 11:07:33 +02:00
hristoterezov
37282e63b3 Fixes the references with chromeonly page. 2015-02-24 18:24:39 +02:00
hristoterezov
4b218499ae Redesigns the supported browsers page. 2015-02-24 18:08:24 +02:00
hristoterezov
f16a1cdf44 Changes the implementation to store the language in local storage. Adds new languages. 2015-02-24 12:49:46 +02:00
hristoterezov
702f02568d Fixes issue with the buttons in the message handler. 2015-02-24 10:57:41 +02:00
paweldomas
b6808d87bc Updates app.bundle.js. 2015-02-23 16:15:42 +01:00
paweldomas
8042bd2aa6 Handles MUC destroyed event. 2015-02-23 16:13:38 +01:00
paweldomas
053b2d5af2 Fixes logout confirmation dialog. 2015-02-23 16:13:26 +01:00
Ingo Bauersachs
222164333b Fix some typos and punctuation spacing. 2015-02-23 13:35:16 +01:00
ibauersachs
db50810e4b Commit from translate.jitsi.org by user ibauersachs.: 130 of 130 strings translated (0 fuzzy). 2015-02-23 12:33:29 +00:00
hristo
720851dcb9 Commit from translate.jitsi.org by user hristo.: 3 of 130 strings translated (0 fuzzy). 2015-02-23 11:44:51 +00:00
jitsi-pootle
d7203b8b1a New files added from translate.jitsi.org based on templates 2015-02-23 11:42:53 +00:00
jitsi-pootle
204ca29ed7 New files added from translate.jitsi.org based on templates 2015-02-23 11:42:33 +00:00
hristoterezov
fdada53a4a Fixes issue with the recording. 2015-02-23 12:06:42 +02:00
hristoterezov
81eb3754a0 Fixes "focus not available" notifications. 2015-02-23 11:20:35 +02:00
hristoterezov
d260f1db61 Removes unused package.son files. 2015-02-20 18:21:58 +02:00
hristoterezov
74f078f166 Adds multi language support for message handlers. 2015-02-20 18:17:46 +02:00
paweldomas
e16cee4187 Delete old session ID and retry on 'session-invalid' response. Updates app.bundle.js. 2015-02-19 13:56:04 +01:00
paweldomas
a904e35c67 Adds auto-sign in feature and login/logout toolbar menu. 2015-02-19 13:49:51 +01:00
paweldomas
b87cd9f842 Moves Settings module out from the UI. 2015-02-19 13:49:41 +01:00
paweldomas
fed34e7671 Fixes PreziPlayer crash when invalid message is received. 2015-02-19 13:49:41 +01:00
George Politis
ed57f72117 Adds extra logging. 2015-02-19 13:27:44 +01:00
hristoterezov
4d39d4ccc3 Fixes issue with selected user resource jid variable. 2015-02-19 11:23:55 +02:00
hristoterezov
79cdd94833 Adds multi language support for notifications. 2015-02-13 18:28:35 +02:00
hristoterezov
e0645b41d3 Moves some function calls in UI service 2015-02-13 11:31:25 +02:00
hristoterezov
aa7f0c8a0b Merge branch 'master' of github.com:jitsi/jitsi-meet 2015-02-12 16:44:24 +02:00
hristoterezov
2362770cce Changes getUserMedia implementation to try lower resolution if the configured one is not supported. 2015-02-12 16:42:08 +02:00
Damian Minkov
8334036cf4 Moves admins definition as it seems on some distributions after latest lua updates, causes trouble for prosody. 2015-02-12 15:39:56 +02:00
Damian Minkov
eec513e9e3 Adds admins line after muc component. 2015-02-12 13:50:21 +02:00
hristoterezov
f2a7a43ba7 Fixes audio level performance issue on avatar. 2015-02-11 18:29:20 +02:00
Thomas Odorfer
9e6e23ce97 Update RTC.js
fix for screensharing screen ratio and local mirror effect - forgotten parameter videoType in RTC.js in jitsi-meet commit 6c4a5bd tag 340
2015-02-11 14:28:26 +01:00
hristoterezov
61bbbaf6eb Adds gitattributes file that marks the generated files as binary files. 2015-02-09 15:50:49 +02:00
hristoterezov
3519a6ec7b Fixes the generated file. 2015-02-09 15:03:23 +02:00
hristoterezov
d21f994eee Removes rtp stats option and adds options for disabling/enabling stats and audio levels. 2015-02-09 14:51:25 +02:00
hristoterezov
b32acf0dfb Fixes the multi language support for the debian package. 2015-02-09 12:24:11 +02:00
hristoterezov
71a56e13d9 Fixes some issues with the tests 2015-02-09 12:21:23 +02:00
hristoterezov
0f6d0a0439 Adds methods required by torture 2015-02-09 10:12:55 +02:00
hristoterezov
3032ea7684 Implements basic multi language support. 2015-02-06 17:46:50 +02:00
hristoterezov
04cfbafc33 Fixes issue with recording. 2015-02-06 15:43:40 +02:00
hristoterezov
57fcee676a Fixes issues with accessing modules not from APP object. 2015-02-06 14:54:19 +02:00
hristoterezov
2f5d090ca5 Merge pull request #227 from odotom/odotom-patch-1
Fixes typos.
2015-02-03 15:42:30 +02:00
bgrozev
8d796f328b Update README.md
Clarify that the detailed instructions are for a 'manual' installation.
2015-02-03 12:45:01 +02:00
hristoterezov
ffb1d6ea17 Generates app bundle file 2015-02-02 20:00:45 +02:00
hristoterezov
4447e5dac6 Merge pull request #229 from schleussinger/master
Corrected Scope - fixes runtime JS error and  Chrome Ext desktop sharing for me
2015-02-02 19:47:59 +02:00
schleussinger
dbed14db5e Fix correct Scope - this fixes JS error and Chrome Ext desktop sharing for me 2015-02-01 13:14:18 +01:00
Thomas Odorfer
254103e21f Update UI.js
fix typo UI.getCredentials
2015-01-31 22:14:53 +01:00
Thomas Odorfer
d0b39e1c97 Update app.js
app.js: fix getCredentials - return object instead of function reference
2015-01-31 22:11:02 +01:00
hristoterezov
4bb555e4b2 Fixes authentication issues. 2015-01-29 11:43:40 +02:00
hristoterezov
8d0ee3ded9 Updates generated file. 2015-01-29 11:27:02 +02:00
hristoterezov
98d1ca8505 Fixes authentication issues. 2015-01-29 11:09:09 +02:00
hristoterezov
e766bad4ce Merge branch 'master' of https://github.com/Zalmoxisus/jitsi-meet
Conflicts:
	libs/modules/RTC.bundle.js
	libs/modules/simulcast.bundle.js
2015-01-28 18:06:09 +02:00
hristoterezov
9eb2873cfa Removes the bundles for every module and add bundle for the whole application. 2015-01-28 16:35:22 +02:00
hristoterezov
c7e2331284 Removes document bind events between modules. 2015-01-27 14:03:26 +02:00
hristoterezov
02ca5e5732 Merge branch 'master' of github.com:jitsi/jitsi-meet 2015-01-27 11:56:43 +02:00
hristoterezov
bc2d72638b Add events for data chanel. 2015-01-27 11:56:22 +02:00
Zalmoxisus
40de181959 Fixes audio-only (when GUM fails) 2015-01-26 19:54:26 +02:00
bgrozev
70bc071cb8 Merge pull request #220 from Zalmoxisus/master
Fixes some typos that cause errors
2015-01-26 09:29:59 -06:00
Zalmoxisus
567ac23c2c Fixes some typos that cause errors 2015-01-26 16:24:26 +02:00
hristoterezov
af50bd5b94 Resolves some module dependancies by replaces them with events. 2015-01-24 16:28:02 +02:00
hristoterezov
899f0ee83d Removes UI dependancies in the xmpp module. 2015-01-23 17:36:17 +02:00
hristoterezov
29b3ea07e0 Removes util.js. Fixes prezi. 2015-01-23 14:01:44 +02:00
hristoterezov
c0a316c7df Creates keyboard shortcuts module. 2015-01-22 18:26:05 +02:00
hristoterezov
f624833f1f Merge branch 'master' of github.com:jitsi/jitsi-meet 2015-01-22 18:02:56 +02:00
hristoterezov
4c661ffca6 Removes nickname global variable. 2015-01-22 18:02:37 +02:00
Boris Grozev
0819f23049 Adds instructings for building. 2015-01-22 17:52:28 +02:00
Boris Grozev
1e9a463245 Fix a typo. 2015-01-22 17:39:40 +02:00
Boris Grozev
447d8f5677 Makes the default make target execute "deploy" and "clean". 2015-01-22 17:36:12 +02:00
fo
d2453b1f1f Changed capitalisation in require statements. 2015-01-22 16:56:23 +02:00
Boris Grozev
9460138cc3 Fix pako reference. 2015-01-21 17:35:23 +02:00
Boris Grozev
0063461858 Uses pako from npm. 2015-01-21 17:13:22 +02:00
hristoterezov
248d7a3173 Moves ssrc2jid global variable to the xmpp module. 2015-01-21 13:55:20 +02:00
hristoterezov
51277270fe Fixes issues with the recording. 2015-01-20 18:12:32 +02:00
hristoterezov
394738394d Fixes NPE when creating non anonymous room 2015-01-20 18:07:03 +02:00
hristoterezov
6c4a5bd2bc Removes some global variables. Fixes recording. 2015-01-20 17:56:00 +02:00
hristoterezov
6347730dc7 Fixes some issues related to xmpp module creation. 2015-01-19 18:54:41 +02:00
hristoterezov
3da8e39745 Merges app.js and generates bundles. 2015-01-19 12:03:14 +02:00
hristoterezov
f4acf97b00 Merge branch 'master' of github.com:jitsi/jitsi-meet
Conflicts:
	app.js
	libs/strophe/strophe.jingle.js
	modules/xmpp/moderator.js
	muc.js
2015-01-19 12:00:30 +02:00
hristoterezov
e4e66a03d7 Creates initial version of xmpp module. 2015-01-19 11:20:00 +02:00
paweldomas
ed78c0053c Makes it possible to append URL parameters after room name. Adds ?login=true to enforce authenticated domain when anonymous domain is used. This allows to get moderator permissions after room has been created. 2015-01-16 13:22:02 +01:00
paweldomas
398fd18b8e Advertises dtls/sctp support in capabilities. 2015-01-16 12:35:31 +01:00
paweldomas
d3003d4fcd Adjusts anonymous domain functionality to work with Jicofo. 2015-01-14 17:59:50 +01:00
hristoterezov
ee94eca733 Creates desktop sharing module. 2015-01-13 15:11:05 +02:00
hristoterezov
0696fb2c5a Fixes issue with video mute. 2015-01-13 11:33:45 +02:00
hristoterezov
e6fbb0934e Removes local streams from the connection object. 2015-01-12 15:23:29 +02:00
hristoterezov
faaf24d3c4 Creates simulcast module 2015-01-09 17:32:35 +02:00
hristoterezov
fcf785f32c Removes unused files. 2015-01-09 16:18:03 +02:00
hristoterezov
0508628871 Creates API module. 2015-01-09 15:39:32 +02:00
hristoterezov
27502d3fa8 Removes some dependancies from functions in app.js. 2015-01-09 14:19:48 +02:00
hristoterezov
1057ff36cd Moves some functions from app.js 2015-01-09 13:35:48 +02:00
paweldomas
8d5e50c0ca Moves 'callSipButtonClicked' method to Toolbar.js in order to fix 'sharedKey' undefined error. 2015-01-09 11:19:42 +01:00
hristoterezov
8db602c8bd Fixes make file 2015-01-09 11:49:45 +02:00
paweldomas
06494cf821 Fixes undefined 'messageHandler' error. 2015-01-09 08:56:30 +01:00
hristoterezov
0fe6a55700 Fixes issue with connection quality module name. 2015-01-08 14:33:06 +02:00
hristoterezov
e20274c2f7 Creates connection quality module. 2015-01-08 14:11:53 +02:00
paweldomas
b77106f61a Includes room secret in SIP gateway request if password is required to join the room. 2015-01-07 16:58:41 +01:00
hristoterezov
4d25b139cc Fixes some issues caused by the merge. 2015-01-07 17:47:48 +02:00
hristoterezov
6ce48a5b7b Merge branch 'master' of github.com:jitsi/jitsi-meet
Conflicts:
	app.js
	index.html
	libs/colibri/colibri.focus.js
	libs/modules/statistics.bundle.js
	moderator.js
	modules/UI/videolayout/VideoLayout.js
	muc.js
2015-01-07 17:14:10 +02:00
hristoterezov
69b0e2ad32 Creates UI module. 2015-01-07 16:54:03 +02:00
paweldomas
cd0c9393d8 Makes "authentication required" dialog persistent. Joins the room if someone else authenticates first and creates the conference for us. 2015-01-07 12:28:49 +01:00
paweldomas
2494444ca4 Fixes issue with remote video menu not displayed on role upgrade. 2015-01-07 12:28:40 +01:00
paweldomas
c76b78eb46 Improves SIP gateway auto configuration by getting feedback from the focus. 2015-01-05 16:45:45 +01:00
paweldomas
78fcc8b72c Sends SIP gateway requests through the focus component. 2015-01-05 16:45:45 +01:00
hristoterezov
652412cd4f Fixes issue with local audio levels. 2015-01-05 17:08:49 +02:00
Damian Minkov
78801aa9e5 Fixes deb package. 2015-01-05 16:58:55 +02:00
Damian Minkov
cd266f60d7 Fixes building deb packages. 2015-01-05 16:41:38 +02:00
paweldomas
459891e647 Bumps js versions, updates bundles. 2015-01-05 13:14:27 +01:00
paweldomas
6cc8b63104 Does not flood with missing "Jid for SSRC" warnings for outdated stats(removed streams). 2015-01-05 13:07:59 +01:00
paweldomas
1aed7e6237 Fixes NPE. 2015-01-05 13:07:50 +01:00
paweldomas
087c26d494 Fixes issue with switching desktop stream. 2015-01-05 13:07:40 +01:00
paweldomas
4fb7001b00 Converts 'constraints' to local variable in order to fix desktop sharing issues(audio constraints were retained in global var and get desktop stream failed). 2015-01-05 13:07:28 +01:00
paweldomas
f1cb3af345 Increases default size of authentication popup. 2015-01-05 13:07:18 +01:00
Boris Grozev
427dc093cc Do not log presence changes to the console. 2014-12-30 19:57:43 +02:00
Boris Grozev
87f8b91a96 Implements recording through a jirecon instance. 2014-12-30 19:57:43 +02:00
paweldomas
fdcae01d21 Configures the room as non-anonymous. 2014-12-29 17:55:48 +01:00
George Politis
f95d5f36bb Moves add/remove source element creation in strophe.jingle.sdp.js. 2014-12-29 11:55:33 +01:00
George Politis
1938280e27 Narrows the gap between strophe.jingle and our code. 2014-12-26 12:46:23 +01:00
George Politis
dc5d5f8436 Nukes colibri.*.js and restores original file structure of strophe.jingle. 2014-12-26 10:40:06 +01:00
hristoterezov
efc161dacd Fixes issue with obtaining audio/video permissions when simulcast is disabled. 2014-12-23 16:24:56 +02:00
George Politis
2ee5a92ef0 Adds comment to modules/RTC/MediaStream.js 2014-12-22 15:08:49 +01:00
hristoterezov
4a991f7187 Adds package.json files for our browserify modules. 2014-12-22 15:46:24 +02:00
Paweł Domas
91358476a1 Update manual-install.md
Adds jicofo install instructions.
2014-12-22 13:05:20 +01:00
hristoterezov
ec5e0f09ea Moves require to top for the RTC module. 2014-12-22 11:03:21 +02:00
hristoterezov
a1da42ff00 Fixes the filename in require call of data channels file. 2014-12-19 17:49:22 +02:00
hristoterezov
5b34a66cb6 Implements RTC module. 2014-12-19 15:59:08 +02:00
bgrozev
996b1791d5 Merge pull request #205 from Zalmoxisus/master
Prevent XSS injection using 'nick' tag on presence
2014-12-18 18:24:44 +02:00
bgrozev
3b0fcad39b Merge pull request #208 from Zalmoxisus/master
Fixes chat messages
2014-12-18 18:24:23 +02:00
Paweł Domas
484b80965c Update quick-install.md
Adds 'jicofo' package to Deinstall section.
2014-12-18 09:32:30 +01:00
hristoterezov
c6d8e34779 Implements statistics module. 2014-12-17 18:21:25 +02:00
Damian Minkov
7bacd957bd Updates invitation email. 2014-12-17 14:45:22 +02:00
Boris Grozev
e830ced554 Removes the troubleshooting section. 2014-12-17 11:35:10 +02:00
Boris Grozev
2041b54a07 Removes the add-apt-repository way of adding a repository. 2014-12-17 11:34:16 +02:00
Boris Grozev
3473f1c20c s/OpenSource/open-source/. 2014-12-17 11:33:16 +02:00
Boris Grozev
10adea1691 Moves INSTALL.md to doc/manual-install. Links to both installation documents from README.md. 2014-12-17 11:32:42 +02:00
Damian Minkov
b3a4b8a1cf Fixes configuring prosody which can break also jicofo configuration, the missing domain will fail later creating admin account for jicofo. 2014-12-17 09:40:45 +02:00
Mihail Diordiev
60e7482df1 Fixes chat messages
Fixes issue #177 and also show new lines
2014-12-08 00:41:05 +02:00
Zalmoxisus
7b0be8e953 Prevent XSS injection using 'nick' on presence
Also allows special characters in displayName. Fixes issue #182.
2014-12-03 22:44:03 +02:00
270 changed files with 29874 additions and 49464 deletions

10
.editorconfig Normal file
View File

@@ -0,0 +1,10 @@
# http://editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
max_line_length = 80
trim_trailing_whitespace = true

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
*.bundle.js -text -diff
lib-jitsi-meet.js -text -diff

10
.gitignore vendored
View File

@@ -1 +1,11 @@
node_modules
*.swp
.idea/
*.iml
.*.tmp
deploy-local.sh
libs/
all.css
*css.map
unsupported_browser.css
.remote-sync.json

View File

@@ -1,6 +1,4 @@
node_modules
libs
replacement.js
prezi.js
muc.js
app.js
debian
analytics.js

View File

@@ -1,4 +1,5 @@
{
// Refer to http://jshint.com/docs/options/ for an exhaustive list of options
"asi": false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
"expr": true, // true: Tolerate `ExpressionStatement` as Programs
"loopfunc": true, // true: Tolerate functions being defined in loops
@@ -12,5 +13,8 @@
"indent": 4, // {int} Number of spaces to use for indentation
"latedef": true, // true: Require variables/functions to be defined before being used
"newcap": true, // true: Require capitalization of all constructor functions e.g. `new F()`
"maxlen": 80 // {int} Max number of characters per line
}
"maxlen": 80, // {int} Max number of characters per line
"latedef": false, //This option prohibits the use of a variable before it was defined
"laxbreak": true, //Ignore line breaks around "=", "==", "&&", etc.
"esnext": true //support ES2015
}

228
LICENSE
View File

@@ -1,21 +1,219 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Note:
This project was originally contributed to the community under the MIT license and with the following notice:
The MIT License (MIT)
Copyright (c) 2013 ESTOS GmbH
Copyright (c) 2013 ESTOS GmbH
Copyright (c) 2013 BlueJimp SARL
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

77
Makefile Normal file
View File

@@ -0,0 +1,77 @@
NPM = npm
BROWSERIFY = ./node_modules/.bin/browserify
NODE_SASS = ./node_modules/.bin/node-sass
UGLIFYJS = ./node_modules/.bin/uglifyjs
EXORCIST = ./node_modules/.bin/exorcist
CLEANCSS = ./node_modules/.bin/cleancss
STYLES_MAIN = css/main.scss
STYLES_UNSUPPORTED_BROWSER = css/unsupported_browser.scss
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
all: update-deps compile compile-iframe-api uglify uglify-iframe-api 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
# the problem appears on linux and not on macosx
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
clean:
rm -f $(OUTPUT_DIR)/app.bundle.* $(OUTPUT_DIR)/external_api.*
deploy: deploy-init deploy-appbundle deploy-lib-jitsi-meet deploy-css deploy-local
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)
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)
deploy-css:
$(NODE_SASS) css/unsupported_browser.scss css/unsupported_browser.css ; \
$(NODE_SASS) $(STYLES_MAIN) $(STYLES_BUNDLE) && \
$(CLEANCSS) $(STYLES_BUNDLE) > $(STYLES_DESTINATION) ; \
rm $(STYLES_BUNDLE)
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 && \
cp css/all.css source_package/jitsi-meet/css && \
cp css/unsupported_browser.css source_package/jitsi-meet/css && \
(cd source_package ; tar cjf ../jitsi-meet.tar.bz2 jitsi-meet) && \
rm -rf source_package

View File

@@ -1,22 +1,83 @@
Jitsi Meet - Secure, Simple and Scalable Video Conferences
Jitsi Meet - Secure, Simple and Scalable Video Conferences
====
Jitsi Meet is an OpenSource (MIT) WebRTC JavaScript application that uses [Jitsi Videobridge](https://jitsi.org/videobridge) to provide high quality, scalable video conferences. You can see [Jitsi Meet in action](http://youtu.be/7vFUVClsNh0) here at the 482 session of the VoIP Users Conference.
Jitsi Meet is an open-source (Apache) WebRTC JavaScript application that uses [Jitsi Videobridge](https://jitsi.org/videobridge) to provide high quality, scalable video conferences. You can see [Jitsi Meet in action](http://youtu.be/7vFUVClsNh0) here at the session #482 of the VoIP Users Conference.
You can also try it out yourself at https://meet.jit.si .
Jitsi Meet allows for very efficient collaboration. It allows users to stream their desktop or only some windows. It also supports shared document editing with Etherpad and remote presentations with Prezi.
Jitsi Meet allows for very efficient collaboration. It allows users to stream their desktop or only some windows. It also supports shared document editing with Etherpad.
## Install
## Installation
Installing Jitsi Meet is quite a simple experience even though it requires installing a few other components first, such as Jitsi Videobridge, a web server such as Nginx and an XMPP one like Prosody.
Installing Jitsi Meet is quite a simple experience. For Debian-based systems, we recommend following the [quick-install](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md) document, which uses the package system.
You can find information on how to deploy Jitsi Meet in the [installation instructions](https://jitsi.org/meet/deploy)
For other systems, or if you wish to install all components manually, see the [detailed manual installation instructions](https://github.com/jitsi/jitsi-meet/blob/master/doc/manual-install.md).
You may also find it helpful to have a look at our sample [config files](https://github.com/jitsi/jitsi-meet/tree/master/doc/example-config-files/)
## Building the sources
Jitsi Meet uses [Browserify](http://browserify.org). If you want to make changes in the code you need to [install Browserify](http://browserify.org/#install). Browserify requires [nodejs](http://nodejs.org).
On Debian/Ubuntu systems, the required packages can be installed with:
```
sudo apt-get install npm nodejs-legacy
cd jitsi-meet
npm install
```
To build the Jitsi Meet application, just type
```
make
```
## Working with the library sources(lib-jitsi-meet).
By default the library is build from its git repository sources. The default dependency path in package.json is :
```json
"lib-jitsi-meet": "jitsi/lib-jitsi-meet",
```
To work with local copy you must change the path to:
```json
"lib-jitsi-meet": "file:///Users/name/local-lib-jitsi-meet-copy",
```
To make the project you must force it to take the sources as 'npm update' will not do it.
```
npm install lib-jitsi-meet --force && make
```
Or if you are making only changes to the library:
```
npm install lib-jitsi-meet --force && make deploy-lib-jitsi-meet
```
Alternative way is to use [npm link](https://docs.npmjs.com/cli/link).
It allows to link `lib-jitsi-meet` dependency to local source in few steps:
```bash
cd lib-jitsi-meet
# create global symlink for lib-jitsi-meet package
npm link
cd ../jitsi-meet
# create symlink from the local node_modules folder to the global lib-jitsi-meet symlink
npm link lib-jitsi-meet
```
So now after changes in local `lib-jitsi-meet` repository you can rebuild it with `npm run install` and your `jitsi-meet` repository will use that modified library.
Note: when using node version 4.x, the make file of jitsi-meet do npm update which will delete the link, no longer the case with version 6.x.
If you do not want to use local repository anymore you should run
```bash
cd jitsi-meet
npm unlink lib-jitsi-meet
npm install
```
## Discuss
Please use the [Jitsi dev mailing list](http://lists.jitsi.org/pipermail/dev/) to discuss feature requests before opening an issue on github.
Please use the [Jitsi dev mailing list](http://lists.jitsi.org/pipermail/dev/) to discuss feature requests before opening an issue on Github.
## Acknowledgements
Jitsi Meet started out as a sample conferencing application using Jitsi Videobridge. It was originally developed by Philipp Hancke who then contributed it to the community where development continues with joint forces!
Jitsi Meet started out as a sample conferencing application using Jitsi Videobridge. It was originally developed by then ESTOS' developer Philipp Hancke who then contributed it to the community where development continues with joint forces!

View File

@@ -1,8 +1,23 @@
/**
* Google Analytics
*/
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-319188-14', 'jit.si');
ga('send', 'pageview');
(function (ctx) {
function Analytics() {
/**
* Google Analytics
*/
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-319188-14', 'jit.si');
ga('send', 'pageview');
}
Analytics.prototype.sendEvent = function (action, data, label, browserName) {
// empty label if missing value for it and add the value,
// the value should be integer or null
var value = Math.round(parseFloat(data));
ga('send', 'event', 'jit.si',
action + '.' + browserName, label ? label : "", value ? value : null);
};
ctx.Analytics = Analytics;
}(window));

View File

@@ -1,202 +0,0 @@
/**
* Implements API class that communicates with external api class
* and provides interface to access Jitsi Meet features by external
* applications that embed Jitsi Meet
*/
var APIConnector = (function () {
function APIConnector() { }
/**
* List of the available commands.
* @type {{
* displayName: inputDisplayNameHandler,
* muteAudio: toggleAudio,
* muteVideo: toggleVideo,
* filmStrip: toggleFilmStrip
* }}
*/
var commands =
{
displayName: VideoLayout.inputDisplayNameHandler,
muteAudio: toggleAudio,
muteVideo: toggleVideo,
toggleFilmStrip: BottomToolbar.toggleFilmStrip,
toggleChat: BottomToolbar.toggleChat,
toggleContactList: BottomToolbar.toggleContactList
};
/**
* Maps the supported events and their status
* (true it the event is enabled and false if it is disabled)
* @type {{
* incomingMessage: boolean,
* outgoingMessage: boolean,
* displayNameChange: boolean,
* participantJoined: boolean,
* participantLeft: boolean
* }}
*/
var events =
{
incomingMessage: false,
outgoingMessage:false,
displayNameChange: false,
participantJoined: false,
participantLeft: false
};
/**
* Check whether the API should be enabled or not.
* @returns {boolean}
*/
APIConnector.isEnabled = function () {
var hash = location.hash;
if(hash && hash.indexOf("external") > -1 && window.postMessage)
return true;
return false;
};
/**
* Initializes the APIConnector. Setups message event listeners that will
* receive information from external applications that embed Jitsi Meet.
* It also sends a message to the external application that APIConnector
* is initialized.
*/
APIConnector.init = function () {
if (window.addEventListener)
{
window.addEventListener('message',
APIConnector.processMessage, false);
}
else
{
window.attachEvent('onmessage', APIConnector.processMessage);
}
APIConnector.sendMessage({type: "system", loaded: true});
};
/**
* Sends message to the external application.
* @param object
*/
APIConnector.sendMessage = function (object) {
window.parent.postMessage(JSON.stringify(object), "*");
};
/**
* Processes a message event from the external application
* @param event the message event
*/
APIConnector.processMessage = function(event)
{
var message;
try {
message = JSON.parse(event.data);
} catch (e) {}
if(!message.type)
return;
switch (message.type)
{
case "command":
APIConnector.processCommand(message);
break;
case "event":
APIConnector.processEvent(message);
break;
default:
console.error("Unknown type of the message");
return;
}
};
/**
* Processes commands from external applicaiton.
* @param message the object with the command
*/
APIConnector.processCommand = function (message)
{
if(message.action != "execute")
{
console.error("Unknown action of the message");
return;
}
for(var key in message)
{
if(commands[key])
commands[key].apply(null, message[key]);
}
};
/**
* Processes events objects from external applications
* @param event the event
*/
APIConnector.processEvent = function (event) {
if(!event.action)
{
console.error("Event with no action is received.");
return;
}
switch(event.action)
{
case "add":
for(var i = 0; i < event.events.length; i++)
{
events[event.events[i]] = true;
}
break;
case "remove":
for(var i = 0; i < event.events.length; i++)
{
events[event.events[i]] = false;
}
break;
default:
console.error("Unknown action for event.");
}
};
/**
* Checks whether the event is enabled ot not.
* @param name the name of the event.
* @returns {*}
*/
APIConnector.isEventEnabled = function (name) {
return events[name];
};
/**
* Sends event object to the external application that has been subscribed
* for that event.
* @param name the name event
* @param object data associated with the event
*/
APIConnector.triggerEvent = function (name, object) {
APIConnector.sendMessage({
type: "event", action: "result", event: name, result: object});
};
/**
* Removes the listeners.
*/
APIConnector.dispose = function () {
if(window.removeEventListener)
{
window.removeEventListener("message",
APIConnector.processMessage, false);
}
else
{
window.detachEvent('onmessage', APIConnector.processMessage);
}
};
return APIConnector;
})();

1955
app.js

File diff suppressed because it is too large Load Diff

View File

@@ -1,260 +0,0 @@
/**
* The audio Levels plugin.
*/
var AudioLevels = (function(my) {
var audioLevelCanvasCache = {};
my.LOCAL_LEVEL = 'local';
/**
* Updates the audio level canvas for the given peerJid. If the canvas
* didn't exist we create it.
*/
my.updateAudioLevelCanvas = function (peerJid) {
var resourceJid = null;
var videoSpanId = null;
if (!peerJid)
videoSpanId = 'localVideoContainer';
else {
resourceJid = Strophe.getResourceFromJid(peerJid);
videoSpanId = 'participant_' + resourceJid;
}
var videoSpan = document.getElementById(videoSpanId);
if (!videoSpan) {
if (resourceJid)
console.error("No video element for jid", resourceJid);
else
console.error("No video element for local video.");
return;
}
var audioLevelCanvas = $('#' + videoSpanId + '>canvas');
var videoSpaceWidth = $('#remoteVideos').width();
var thumbnailSize = VideoLayout.calculateThumbnailSize(videoSpaceWidth);
var thumbnailWidth = thumbnailSize[0];
var thumbnailHeight = thumbnailSize[1];
if (!audioLevelCanvas || audioLevelCanvas.length === 0) {
audioLevelCanvas = document.createElement('canvas');
audioLevelCanvas.className = "audiolevel";
audioLevelCanvas.style.bottom = "-" + interfaceConfig.CANVAS_EXTRA/2 + "px";
audioLevelCanvas.style.left = "-" + interfaceConfig.CANVAS_EXTRA/2 + "px";
resizeAudioLevelCanvas( audioLevelCanvas,
thumbnailWidth,
thumbnailHeight);
videoSpan.appendChild(audioLevelCanvas);
} else {
audioLevelCanvas = audioLevelCanvas.get(0);
resizeAudioLevelCanvas( audioLevelCanvas,
thumbnailWidth,
thumbnailHeight);
}
};
/**
* Updates the audio level UI for the given resourceJid.
*
* @param resourceJid the resource jid indicating the video element for
* which we draw the audio level
* @param audioLevel the newAudio level to render
*/
my.updateAudioLevel = function (resourceJid, audioLevel) {
drawAudioLevelCanvas(resourceJid, audioLevel);
var videoSpanId = getVideoSpanId(resourceJid);
var audioLevelCanvas = $('#' + videoSpanId + '>canvas').get(0);
if (!audioLevelCanvas)
return;
var drawContext = audioLevelCanvas.getContext('2d');
var canvasCache = audioLevelCanvasCache[resourceJid];
drawContext.clearRect (0, 0,
audioLevelCanvas.width, audioLevelCanvas.height);
drawContext.drawImage(canvasCache, 0, 0);
if(resourceJid === AudioLevels.LOCAL_LEVEL) {
if(!connection.emuc.myroomjid) {
return;
}
resourceJid = Strophe.getResourceFromJid(connection.emuc.myroomjid);
}
if(resourceJid === VideoLayout.getLargeVideoState().userResourceJid) {
AudioLevels.updateActiveSpeakerAudioLevel(audioLevel);
}
};
my.updateActiveSpeakerAudioLevel = function(audioLevel) {
var drawContext = $('#activeSpeakerAudioLevel')[0].getContext('2d');
var r = interfaceConfig.ACTIVE_SPEAKER_AVATAR_SIZE / 2;
var center = (interfaceConfig.ACTIVE_SPEAKER_AVATAR_SIZE + r) / 2;
// Save the previous state of the context.
drawContext.save();
drawContext.clearRect(0, 0, 300, 300);
// Draw a circle.
drawContext.arc(center, center, r, 0, 2 * Math.PI);
// Add a shadow around the circle
drawContext.shadowColor = interfaceConfig.SHADOW_COLOR;
drawContext.shadowBlur = getShadowLevel(audioLevel);
drawContext.shadowOffsetX = 0;
drawContext.shadowOffsetY = 0;
// Fill the shape.
drawContext.fill();
drawContext.save();
drawContext.restore();
drawContext.arc(center, center, r, 0, 2 * Math.PI);
drawContext.clip();
drawContext.clearRect(0, 0, 277, 200);
// Restore the previous context state.
drawContext.restore();
};
/**
* Resizes the given audio level canvas to match the given thumbnail size.
*/
function resizeAudioLevelCanvas(audioLevelCanvas,
thumbnailWidth,
thumbnailHeight) {
audioLevelCanvas.width = thumbnailWidth + interfaceConfig.CANVAS_EXTRA;
audioLevelCanvas.height = thumbnailHeight + interfaceConfig.CANVAS_EXTRA;
}
/**
* Draws the audio level canvas into the cached canvas object.
*
* @param resourceJid the resource jid indicating the video element for
* which we draw the audio level
* @param audioLevel the newAudio level to render
*/
function drawAudioLevelCanvas(resourceJid, audioLevel) {
if (!audioLevelCanvasCache[resourceJid]) {
var videoSpanId = getVideoSpanId(resourceJid);
var audioLevelCanvasOrig = $('#' + videoSpanId + '>canvas').get(0);
/*
* FIXME Testing has shown that audioLevelCanvasOrig may not exist.
* In such a case, the method CanvasUtil.cloneCanvas may throw an
* error. Since audio levels are frequently updated, the errors have
* been observed to pile into the console, strain the CPU.
*/
if (audioLevelCanvasOrig)
{
audioLevelCanvasCache[resourceJid]
= CanvasUtil.cloneCanvas(audioLevelCanvasOrig);
}
}
var canvas = audioLevelCanvasCache[resourceJid];
if (!canvas)
return;
var drawContext = canvas.getContext('2d');
drawContext.clearRect(0, 0, canvas.width, canvas.height);
var shadowLevel = getShadowLevel(audioLevel);
if (shadowLevel > 0)
// drawContext, x, y, w, h, r, shadowColor, shadowLevel
CanvasUtil.drawRoundRectGlow( drawContext,
interfaceConfig.CANVAS_EXTRA/2, interfaceConfig.CANVAS_EXTRA/2,
canvas.width - interfaceConfig.CANVAS_EXTRA,
canvas.height - interfaceConfig.CANVAS_EXTRA,
interfaceConfig.CANVAS_RADIUS,
interfaceConfig.SHADOW_COLOR,
shadowLevel);
}
/**
* Returns the shadow/glow level for the given audio level.
*
* @param audioLevel the audio level from which we determine the shadow
* level
*/
function getShadowLevel (audioLevel) {
var shadowLevel = 0;
if (audioLevel <= 0.3) {
shadowLevel = Math.round(interfaceConfig.CANVAS_EXTRA/2*(audioLevel/0.3));
}
else if (audioLevel <= 0.6) {
shadowLevel = Math.round(interfaceConfig.CANVAS_EXTRA/2*((audioLevel - 0.3) / 0.3));
}
else {
shadowLevel = Math.round(interfaceConfig.CANVAS_EXTRA/2*((audioLevel - 0.6) / 0.4));
}
return shadowLevel;
}
/**
* Returns the video span id corresponding to the given resourceJid or local
* user.
*/
function getVideoSpanId(resourceJid) {
var videoSpanId = null;
if (resourceJid === AudioLevels.LOCAL_LEVEL
|| (connection.emuc.myroomjid && resourceJid
=== Strophe.getResourceFromJid(connection.emuc.myroomjid)))
videoSpanId = 'localVideoContainer';
else
videoSpanId = 'participant_' + resourceJid;
return videoSpanId;
}
/**
* Indicates that the remote video has been resized.
*/
$(document).bind('remotevideo.resized', function (event, width, height) {
var resized = false;
$('#remoteVideos>span>canvas').each(function() {
var canvas = $(this).get(0);
if (canvas.width !== width + interfaceConfig.CANVAS_EXTRA) {
canvas.width = width + interfaceConfig.CANVAS_EXTRA;
resized = true;
}
if (canvas.heigh !== height + interfaceConfig.CANVAS_EXTRA) {
canvas.height = height + interfaceConfig.CANVAS_EXTRA;
resized = true;
}
});
if (resized)
Object.keys(audioLevelCanvasCache).forEach(function (resourceJid) {
audioLevelCanvasCache[resourceJid].width
= width + interfaceConfig.CANVAS_EXTRA;
audioLevelCanvasCache[resourceJid].height
= height + interfaceConfig.CANVAS_EXTRA;
});
});
return my;
})(AudioLevels || {});

148
avatar.js
View File

@@ -1,148 +0,0 @@
var Avatar = (function(my) {
var users = {};
var activeSpeakerJid;
/**
* Sets the user's avatar in the settings menu(if local user), contact list
* and thumbnail
* @param jid jid of the user
* @param id email or userID to be used as a hash
*/
my.setUserAvatar = function(jid, id) {
if(id) {
if(users[jid] === id) {
return;
}
users[jid] = id;
}
var thumbUrl = getGravatarUrl(users[jid] || jid, 100);
var contactListUrl = getGravatarUrl(users[jid] || jid);
var resourceJid = Strophe.getResourceFromJid(jid);
var thumbnail = $('#participant_' + resourceJid);
var avatar = $('#avatar_' + resourceJid);
// set the avatar in the settings menu if it is local user and get the
// local video container
if(jid === connection.emuc.myroomjid) {
$('#avatar').get(0).src = thumbUrl;
thumbnail = $('#localVideoContainer');
}
// set the avatar in the contact list
var contact = $('#' + resourceJid + '>img');
if(contact && contact.length > 0) {
contact.get(0).src = contactListUrl;
}
// set the avatar in the thumbnail
if(avatar && avatar.length > 0) {
avatar[0].src = thumbUrl;
} else {
if (thumbnail && thumbnail.length > 0) {
avatar = document.createElement('img');
avatar.id = 'avatar_' + resourceJid;
avatar.className = 'userAvatar';
avatar.src = thumbUrl;
thumbnail.append(avatar);
}
}
//if the user is the current active speaker - update the active speaker
// avatar
if(jid === activeSpeakerJid) {
Avatar.updateActiveSpeakerAvatarSrc(jid);
}
};
/**
* Hides or shows the user's avatar
* @param jid jid of the user
* @param show whether we should show the avatar or not
* video because there is no dominant speaker and no focused speaker
*/
my.showUserAvatar = function(jid, show) {
if(users[jid]) {
var resourceJid = Strophe.getResourceFromJid(jid);
var video = $('#participant_' + resourceJid + '>video');
var avatar = $('#avatar_' + resourceJid);
if(jid === connection.emuc.myroomjid) {
video = $('#localVideoWrapper>video');
}
if(show === undefined || show === null) {
show = isUserMuted(jid);
}
//if the user is the currently focused, the dominant speaker or if
//there is no focused and no dominant speaker and the large video is
//currently shown
if (activeSpeakerJid === jid && VideoLayout.isLargeVideoOnTop()) {
setVisibility($("#largeVideo"), !show);
setVisibility($('#activeSpeaker'), show);
setVisibility(avatar, false);
setVisibility(video, false);
} else {
if (video && video.length > 0) {
setVisibility(video, !show);
setVisibility(avatar, show);
}
}
}
};
/**
* Updates the src of the active speaker avatar
* @param jid of the current active speaker
*/
my.updateActiveSpeakerAvatarSrc = function(jid) {
if(!jid) {
jid = connection.emuc.findJidFromResource(
VideoLayout.getLargeVideoState().userResourceJid);
}
var avatar = $("#activeSpeakerAvatar")[0];
var url = getGravatarUrl(users[jid],
interfaceConfig.ACTIVE_SPEAKER_AVATAR_SIZE);
if(jid === activeSpeakerJid && avatar.src === url) {
return;
}
activeSpeakerJid = jid;
var isMuted = isUserMuted(jid);
if(jid && isMuted !== null) {
avatar.src = url;
setVisibility($("#largeVideo"), !isMuted);
Avatar.showUserAvatar(jid, isMuted);
}
};
function setVisibility(selector, show) {
if (selector && selector.length > 0) {
selector.css("visibility", show ? "visible" : "hidden");
}
}
function isUserMuted(jid) {
// XXX(gp) we may want to rename this method to something like
// isUserStreaming, for example.
if (jid && jid != connection.emuc.myroomjid) {
var resource = Strophe.getResourceFromJid(jid);
if (!VideoLayout.isInLastN(resource)) {
return true;
}
}
if (!mediaStreams[jid] || !mediaStreams[jid][MediaStream.VIDEO_TYPE]) {
return null;
}
return mediaStreams[jid][MediaStream.VIDEO_TYPE].muted;
}
function getGravatarUrl(id, size) {
if(id === connection.emuc.myroomjid || !id) {
id = SettingsMenu.getUID();
}
return 'https://www.gravatar.com/avatar/' +
MD5.hexdigest(id.trim().toLowerCase()) +
"?d=wavatar&size=" + (size || "30");
}
return my;
}(Avatar || {}));

0
base.html Normal file
View File

View File

@@ -1,22 +0,0 @@
var BottomToolbar = (function (my) {
my.toggleChat = function() {
PanelToggler.toggleChat();
};
my.toggleContactList = function() {
PanelToggler.toggleContactList();
};
my.toggleFilmStrip = function() {
var filmstrip = $("#remoteVideos");
filmstrip.toggleClass("hidden");
};
$(document).bind("remotevideo.resized", function (event, width, height) {
var bottom = (height - $('#bottomToolbar').outerHeight())/2 + 18;
$('#bottomToolbar').css({bottom: bottom + 'px'});
});
return my;
}(BottomToolbar || {}));

343
chat.js
View File

@@ -1,343 +0,0 @@
/* global $, Util, connection, nickname:true, getVideoSize, getVideoPosition, showToolbar, processReplacements */
/**
* Chat related user interface.
*/
var Chat = (function (my) {
var notificationInterval = false;
var unreadMessages = 0;
/**
* Initializes chat related interface.
*/
my.init = function () {
var storedDisplayName = window.localStorage.displayname;
if (storedDisplayName) {
nickname = storedDisplayName;
Chat.setChatConversationMode(true);
}
$('#nickinput').keydown(function (event) {
if (event.keyCode === 13) {
event.preventDefault();
var val = Util.escapeHtml(this.value);
this.value = '';
if (!nickname) {
nickname = val;
window.localStorage.displayname = nickname;
connection.emuc.addDisplayNameToPresence(nickname);
connection.emuc.sendPresence();
Chat.setChatConversationMode(true);
return;
}
}
});
$('#usermsg').keydown(function (event) {
if (event.keyCode === 13) {
event.preventDefault();
var value = this.value;
$('#usermsg').val('').trigger('autosize.resize');
this.focus();
var command = new CommandsProcessor(value);
if(command.isCommand())
{
command.processCommand();
}
else
{
var message = Util.escapeHtml(value);
connection.emuc.sendMessage(message, nickname);
}
}
});
var onTextAreaResize = function () {
resizeChatConversation();
Chat.scrollChatToBottom();
};
$('#usermsg').autosize({callback: onTextAreaResize});
$("#chatspace").bind("shown",
function () {
unreadMessages = 0;
setVisualNotification(false);
});
addSmileys();
};
/**
* Appends the given message to the chat conversation.
*/
my.updateChatConversation = function (from, displayName, message) {
var divClassName = '';
if (connection.emuc.myroomjid === from) {
divClassName = "localuser";
}
else {
divClassName = "remoteuser";
if (!Chat.isVisible()) {
unreadMessages++;
Util.playSoundNotification('chatNotification');
setVisualNotification(true);
}
}
//replace links and smileys
var escMessage = Util.escapeHtml(message);
var escDisplayName = Util.escapeHtml(displayName);
message = processReplacements(escMessage);
var messageContainer =
'<div class="chatmessage">'+
'<img src="../images/chatArrow.svg" class="chatArrow">' +
'<div class="username ' + divClassName +'">' + escDisplayName + '</div>' +
'<div class="timestamp">' + getCurrentTime() + '</div>' +
'<div class="usermessage">' + message + '</div>' +
'</div>';
$('#chatconversation').append(messageContainer);
$('#chatconversation').animate(
{ scrollTop: $('#chatconversation')[0].scrollHeight}, 1000);
};
/**
* Appends error message to the conversation
* @param errorMessage the received error message.
* @param originalText the original message.
*/
my.chatAddError = function(errorMessage, originalText)
{
errorMessage = Util.escapeHtml(errorMessage);
originalText = Util.escapeHtml(originalText);
$('#chatconversation').append('<div class="errorMessage"><b>Error: </b>'
+ 'Your message' + (originalText? (' \"'+ originalText + '\"') : "")
+ ' was not sent.' + (errorMessage? (' Reason: ' + errorMessage) : '')
+ '</div>');
$('#chatconversation').animate(
{ scrollTop: $('#chatconversation')[0].scrollHeight}, 1000);
};
/**
* Sets the subject to the UI
* @param subject the subject
*/
my.chatSetSubject = function(subject)
{
if(subject)
subject = subject.trim();
$('#subject').html(linkify(Util.escapeHtml(subject)));
if(subject == "")
{
$("#subject").css({display: "none"});
}
else
{
$("#subject").css({display: "block"});
}
};
/**
* Sets the chat conversation mode.
*/
my.setChatConversationMode = function (isConversationMode) {
if (isConversationMode) {
$('#nickname').css({visibility: 'hidden'});
$('#chatconversation').css({visibility: 'visible'});
$('#usermsg').css({visibility: 'visible'});
$('#smileysarea').css({visibility: 'visible'});
$('#usermsg').focus();
}
};
/**
* Resizes the chat area.
*/
my.resizeChat = function () {
var chatSize = PanelToggler.getPanelSize();
$('#chatspace').width(chatSize[0]);
$('#chatspace').height(chatSize[1]);
resizeChatConversation();
};
/**
* Indicates if the chat is currently visible.
*/
my.isVisible = function () {
return $('#chatspace').is(":visible");
};
/**
* Shows and hides the window with the smileys
*/
my.toggleSmileys = function() {
var smileys = $('#smileysContainer');
if(!smileys.is(':visible')) {
smileys.show("slide", { direction: "down", duration: 300});
} else {
smileys.hide("slide", { direction: "down", duration: 300});
}
$('#usermsg').focus();
};
/**
* Scrolls chat to the bottom.
*/
my.scrollChatToBottom = function() {
setTimeout(function () {
$('#chatconversation').scrollTop(
$('#chatconversation')[0].scrollHeight);
}, 5);
};
/**
* Adds the smileys container to the chat
*/
function addSmileys() {
var smileysContainer = document.createElement('div');
smileysContainer.id = 'smileysContainer';
function addClickFunction(smiley, number) {
smiley.onclick = function addSmileyToMessage() {
var usermsg = $('#usermsg');
var message = usermsg.val();
message += smileys['smiley' + number];
usermsg.val(message);
usermsg.get(0).setSelectionRange(message.length, message.length);
Chat.toggleSmileys();
usermsg.focus();
};
}
for(var i = 1; i <= 21; i++) {
var smileyContainer = document.createElement('div');
smileyContainer.id = 'smiley' + i;
smileyContainer.className = 'smileyContainer';
var smiley = document.createElement('img');
smiley.src = 'images/smileys/smiley' + i + '.svg';
smiley.className = 'smiley';
addClickFunction(smiley, i);
smileyContainer.appendChild(smiley);
smileysContainer.appendChild(smileyContainer);
}
$("#chatspace").append(smileysContainer);
}
/**
* Resizes the chat conversation.
*/
function resizeChatConversation() {
var msgareaHeight = $('#usermsg').outerHeight();
var chatspace = $('#chatspace');
var width = chatspace.width();
var chat = $('#chatconversation');
var smileys = $('#smileysarea');
smileys.height(msgareaHeight);
$("#smileys").css('bottom', (msgareaHeight - 26) / 2);
$('#smileysContainer').css('bottom', msgareaHeight);
chat.width(width - 10);
chat.height(window.innerHeight - 15 - msgareaHeight);
}
/**
* Shows/hides a visual notification, indicating that a message has arrived.
*/
function setVisualNotification(show) {
var unreadMsgElement = document.getElementById('unreadMessages');
var unreadMsgBottomElement = document.getElementById('bottomUnreadMessages');
var glower = $('#chatButton');
var bottomGlower = $('#chatBottomButton');
if (unreadMessages) {
unreadMsgElement.innerHTML = unreadMessages.toString();
unreadMsgBottomElement.innerHTML = unreadMessages.toString();
ToolbarToggler.dockToolbar(true);
var chatButtonElement
= document.getElementById('chatButton').parentNode;
var leftIndent = (Util.getTextWidth(chatButtonElement) -
Util.getTextWidth(unreadMsgElement)) / 2;
var topIndent = (Util.getTextHeight(chatButtonElement) -
Util.getTextHeight(unreadMsgElement)) / 2 - 3;
unreadMsgElement.setAttribute(
'style',
'top:' + topIndent +
'; left:' + leftIndent + ';');
var chatBottomButtonElement
= document.getElementById('chatBottomButton').parentNode;
var bottomLeftIndent = (Util.getTextWidth(chatBottomButtonElement) -
Util.getTextWidth(unreadMsgBottomElement)) / 2;
var bottomTopIndent = (Util.getTextHeight(chatBottomButtonElement) -
Util.getTextHeight(unreadMsgBottomElement)) / 2 - 2;
unreadMsgBottomElement.setAttribute(
'style',
'top:' + bottomTopIndent +
'; left:' + bottomLeftIndent + ';');
if (!glower.hasClass('icon-chat-simple')) {
glower.removeClass('icon-chat');
glower.addClass('icon-chat-simple');
}
}
else {
unreadMsgElement.innerHTML = '';
unreadMsgBottomElement.innerHTML = '';
glower.removeClass('icon-chat-simple');
glower.addClass('icon-chat');
}
if (show && !notificationInterval) {
notificationInterval = window.setInterval(function () {
glower.toggleClass('active');
bottomGlower.toggleClass('active glowing');
}, 800);
}
else if (!show && notificationInterval) {
window.clearInterval(notificationInterval);
notificationInterval = false;
glower.removeClass('active');
bottomGlower.removeClass('glowing');
bottomGlower.addClass('active');
}
}
/**
* Returns the current time in the format it is shown to the user
* @returns {string}
*/
function getCurrentTime() {
var now = new Date();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
if(hour.toString().length === 1) {
hour = '0'+hour;
}
if(minute.toString().length === 1) {
minute = '0'+minute;
}
if(second.toString().length === 1) {
second = '0'+second;
}
return hour+':'+minute+':'+second;
}
return my;
}(Chat || {}));

View File

@@ -1,20 +0,0 @@
<html>
<head>
<title>Jitsi Meet: Unsupported Browser</title>
<link rel="stylesheet" type="text/css" media="screen" href="css/chromeonly.css" />
</head>
<body>
<!-- wrap starts here -->
<div id="wrap">
<a href="http://google.com/chrome"><div id="left"></div></a>
<div id="middle"></div>
<div id="text">
<p>This application is currently only supported by <a href="http://google.com/chrome">Chrome</a>, <a href="http://www.chromium.org/">Chromium</a> and <a href="http://www.opera.com">Opera</a></p>
<p><a href="http://google.com/chrome">Download Chrome</a></p>
<p class="firefox">We are hoping that <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=977864">multistream support</a> for Firefox would not be long so that we could all use this application with our favorite browser.</p>
</div>
<!-- wrap ends here -->
</div>
</body>
</html>

View File

@@ -1,98 +0,0 @@
/**
* Handles commands received via chat messages.
*/
var CommandsProcessor = (function()
{
/**
* Constructs new CommandProccessor instance from a message.
* @param message the message
* @constructor
*/
function CommandsPrototype(message)
{
/**
* Extracts the command from the message.
* @param message the received message
* @returns {string} the command
*/
function getCommand(message)
{
if(message)
{
for(var command in commands)
{
if(message.indexOf("/" + command) == 0)
return command;
}
}
return "";
};
var command = getCommand(message);
/**
* Returns the name of the command.
* @returns {String} the command
*/
this.getCommand = function()
{
return command;
}
var messageArgument = message.substr(command.length + 2);
/**
* Returns the arguments of the command.
* @returns {string}
*/
this.getArgument = function()
{
return messageArgument;
}
}
/**
* Checks whether this instance is valid command or not.
* @returns {boolean}
*/
CommandsPrototype.prototype.isCommand = function()
{
if(this.getCommand())
return true;
return false;
}
/**
* Processes the command.
*/
CommandsPrototype.prototype.processCommand = function()
{
if(!this.isCommand())
return;
commands[this.getCommand()](this.getArgument());
}
/**
* Processes the data for topic command.
* @param commandArguments the arguments of the topic command.
*/
var processTopic = function(commandArguments)
{
var topic = Util.escapeHtml(commandArguments);
connection.emuc.setSubject(topic);
}
/**
* List with supported commands. The keys are the names of the commands and
* the value is the function that processes the message.
* @type {{String: function}}
*/
var commands = {
"topic" : processTopic
};
return CommandsPrototype;
})();

1650
conference.js Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,14 @@
/* jshint -W101 */
var config = {
// configLocation: './config.json', // see ./modules/HttpConfigFetch.js
hosts: {
domain: 'jitsi-meet.example.com',
//anonymousdomain: 'guest.example.com',
//authdomain: 'jitsi-meet.example.com', // defaults to <domain>
muc: 'conference.jitsi-meet.example.com', // FIXME: use XEP-0030
bridge: 'jitsi-videobridge.jitsi-meet.example.com', // FIXME: use XEP-0030
//jirecon: 'jirecon.jitsi-meet.example.com',
//call_control: 'callcontrol.jitsi-meet.example.com',
//focus: 'focus.jitsi-meet.example.com' - defaults to 'focus.jitsi-meet.example.com'
//focus: 'focus.jitsi-meet.example.com', // defaults to 'focus.jitsi-meet.example.com'
},
// getroomnode: function (path) { return 'someprefixpossiblybasedonpath'; },
// useStunTurn: true, // use XEP-0215 to fetch STUN and TURN server
@@ -15,21 +18,60 @@ var config = {
clientNode: 'http://jitsi.org/jitsimeet', // The name of client node advertised in XEP-0115 'c' stanza
//focusUserJid: 'focus@auth.jitsi-meet.example.com', // The real JID of focus participant - can be overridden here
//defaultSipNumber: '', // Default SIP number
desktopSharing: 'ext', // Desktop sharing method. Can be set to 'ext', 'webrtc' or false to disable.
chromeExtensionId: 'diibjkoicjeejcmhdnailmkgecihlobk', // Id of desktop streamer Chrome extension
desktopSharingSources: ['screen', 'window'],
minChromeExtVersion: '0.1', // Required version of Chrome extension
enableRtpStats: true, // Enables RTP stats processing
// Desktop sharing method. Can be set to 'ext', 'webrtc' or false to disable.
desktopSharingChromeMethod: 'ext',
// The ID of the jidesha extension for Chrome.
desktopSharingChromeExtId: 'diibjkoicjeejcmhdnailmkgecihlobk',
// The media sources to use when using screen sharing with the Chrome
// extension.
desktopSharingChromeSources: ['screen', 'window'],
// Required version of Chrome extension
desktopSharingChromeMinExtVersion: '0.1',
// The ID of the jidesha extension for Firefox. If null, we assume that no
// extension is required.
desktopSharingFirefoxExtId: null,
// Whether desktop sharing should be disabled on Firefox.
desktopSharingFirefoxDisabled: true,
// The maximum version of Firefox which requires a jidesha extension.
// Example: if set to 41, we will require the extension for Firefox versions
// up to and including 41. On Firefox 42 and higher, we will run without the
// extension.
// If set to -1, an extension will be required for all versions of Firefox.
desktopSharingFirefoxMaxVersionExtRequired: -1,
// The URL to the Firefox extension for desktop sharing.
desktopSharingFirefoxExtensionURL: null,
// Disables ICE/UDP by filtering out local and remote UDP candidates in signalling.
webrtcIceUdpDisable: false,
// Disables ICE/TCP by filtering out local and remote TCP candidates in signalling.
webrtcIceTcpDisable: false,
openSctp: true, // Toggle to enable/disable SCTP channels
disableStats: false,
disableAudioLevels: false,
channelLastN: -1, // The default value of the channel attribute last-n.
adaptiveLastN: false,
adaptiveSimulcast: false,
useRtcpMux: true,
useBundle: true,
//disableAdaptiveSimulcast: false,
enableRecording: false,
enableWelcomePage: true,
enableSimulcast: false,
enableFirefoxSupport: false, //firefox support is still experimental, only one-to-one conferences with chrome focus
// will work when simulcast, bundle, mux, lastN and SCTP are disabled.
logStats: false // Enable logging of PeerConnection stats via the focus
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.
// startAudioMuted: 10, // every participant after the Nth will start audio muted
// startVideoMuted: 10, // every participant after the Nth will start video muted
// defaultLanguage: "en",
// To enable sending statistics to callstats.io you should provide Applicaiton ID and Secret.
// callStatsID: "", // Application ID for callstats.io API
// callStatsSecret: "", // Secret for callstats.io API
/*noticeMessage: 'Service update is scheduled for 16th March 2015. ' +
'During that time service will not be available. ' +
'Apologise for inconvenience.',*/
disableThirdPartyRequests: false,
minHDHeight: 540,
// If true - all users without token will be considered guests and all users
// with token will be considered non-guests. Only guests will be allowed to
// edit their profile.
enableUserRolesBasedOnToken: false
};

138
connection.js Normal file
View File

@@ -0,0 +1,138 @@
/* global APP, JitsiMeetJS, config */
import AuthHandler from './modules/UI/authentication/AuthHandler';
const ConnectionEvents = JitsiMeetJS.events.connection;
const ConnectionErrors = JitsiMeetJS.errors.connection;
/**
* Checks if we have data to use attach instead of connect. If we have the data
* executes attach otherwise check if we have to wait for the data. If we have
* to wait for the attach data we are setting handler to APP.connect.handler
* which is going to be called when the attach data is received otherwise
* executes connect.
*
* @param {string} [id] user id
* @param {string} [password] password
* @param {string} [roomName] the name of the conference.
*/
function checkForAttachParametersAndConnect(id, password, connection) {
if(window.XMPPAttachInfo){
APP.connect.status = "connecting";
// When connection optimization is not deployed or enabled the default
// value will be window.XMPPAttachInfo.status = "error"
// If the connection optimization is deployed and enabled and there is
// a failure the value will be window.XMPPAttachInfo.status = "error"
if(window.XMPPAttachInfo.status === "error") {
connection.connect({id, password});
return;
}
var attachOptions = window.XMPPAttachInfo.data;
if(attachOptions) {
connection.attach(attachOptions);
delete window.XMPPAttachInfo.data;
} else {
connection.connect({id, password});
}
} else {
APP.connect.status = "ready";
APP.connect.handler = checkForAttachParametersAndConnect.bind(null,
id, password, connection);
}
}
/**
* Try to open connection using provided credentials.
* @param {string} [id]
* @param {string} [password]
* @param {string} [roomName]
* @returns {Promise<JitsiConnection>} connection if
* everything is ok, else error.
*/
function connect(id, password, roomName) {
let connectionConfig = Object.assign({}, config);
connectionConfig.bosh += '?room=' + roomName;
let connection
= new JitsiMeetJS.JitsiConnection(null, config.token, connectionConfig);
return new Promise(function (resolve, reject) {
connection.addEventListener(
ConnectionEvents.CONNECTION_ESTABLISHED, handleConnectionEstablished
);
connection.addEventListener(
ConnectionEvents.CONNECTION_FAILED, handleConnectionFailed
);
function unsubscribe() {
connection.removeEventListener(
ConnectionEvents.CONNECTION_ESTABLISHED,
handleConnectionEstablished
);
connection.removeEventListener(
ConnectionEvents.CONNECTION_FAILED,
handleConnectionFailed
);
}
function handleConnectionEstablished() {
unsubscribe();
resolve(connection);
}
function handleConnectionFailed(err) {
unsubscribe();
console.error("CONNECTION FAILED:", err);
reject(err);
}
checkForAttachParametersAndConnect(id, password, connection);
});
}
/**
* Open JitsiConnection using provided credentials.
* If retry option is true it will show auth dialog on PASSWORD_REQUIRED error.
*
* @param {object} options
* @param {string} [options.id]
* @param {string} [options.password]
* @param {string} [options.roomName]
* @param {boolean} [retry] if we should show auth dialog
* on PASSWORD_REQUIRED error.
*
* @returns {Promise<JitsiConnection>}
*/
export function openConnection({id, password, retry, roomName}) {
let usernameOverride
= window.localStorage.getItem("xmpp_username_override");
let passwordOverride
= window.localStorage.getItem("xmpp_password_override");
if (usernameOverride && usernameOverride.length > 0) {
id = usernameOverride;
}
if (passwordOverride && passwordOverride.length > 0) {
password = passwordOverride;
}
return connect(id, password, roomName).catch(function (err) {
if (!retry) {
throw err;
}
if (err === ConnectionErrors.PASSWORD_REQUIRED) {
// do not retry if token is not valid
if (config.token) {
throw err;
} else {
return AuthHandler.requestAuth(roomName, connect);
}
} else {
throw err;
}
});
}

View File

@@ -0,0 +1,75 @@
/* global config, getRoomName, getConfigParamsFromUrl */
/* global createConnectionExternally */
/**
* Implements extrnal connect using createConnectionExtenally function defined
* in external_connect.js for Jitsi Meet. Parses the room name and token from
* the url and executes createConnectionExtenally.
*
* NOTE: If you are using lib-jitsi-meet without Jitsi Meet you should use this
* file as reference only because the implementation is Jitsi Meet specific.
*
* NOTE: For optimal results this file should be included right after
* exrnal_connect.js.
*/
/**
* Executes createConnectionExternally function.
*/
(function () {
var hashParams = getConfigParamsFromUrl("hash", true);
var searchParams = getConfigParamsFromUrl("search", true);
//Url params have higher proirity than config params
var url = config.externalConnectUrl;
if(hashParams.hasOwnProperty('config.externalConnectUrl'))
url = hashParams["config.externalConnectUrl"];
/**
* Check if connect from connection.js was executed and executes the handler
* that is going to finish the connect work.
*/
function checkForConnectHandlerAndConnect() {
if(window.APP && window.APP.connect.status === "ready") {
window.APP.connect.handler();
}
}
function error_callback(error){
if(error) //error=undefined if external connect is disabled.
console.warn(error);
// Sets that global variable to be used later by connect method in
// connection.js
window.XMPPAttachInfo = {
status: "error"
};
checkForConnectHandlerAndConnect();
}
if(!url || !window.createConnectionExternally) {
error_callback();
return;
}
var room_name = getRoomName();
if(!room_name) {
error_callback();
return;
}
url += "?room=" + room_name;
var token = hashParams["config.token"] || config.token ||
searchParams.jwt;
if(token)
url += "&token=" + token;
createConnectionExternally(url, function(connectionInfo) {
// Sets that global variable to be used later by connect method in
// connection.js
window.XMPPAttachInfo = {
status: "success",
data: connectionInfo
};
checkForConnectHandlerAndConnect();
}, error_callback);
})();

View File

@@ -1,127 +0,0 @@
var ConnectionQuality = (function () {
/**
* Constructs new ConnectionQuality object
* @constructor
*/
function ConnectionQuality() {
}
/**
* local stats
* @type {{}}
*/
var stats = {};
/**
* remote stats
* @type {{}}
*/
var remoteStats = {};
/**
* Interval for sending statistics to other participants
* @type {null}
*/
var sendIntervalId = null;
/**
* Updates the local statistics
* @param data new statistics
*/
ConnectionQuality.updateLocalStats = function (data) {
stats = data;
VideoLayout.updateLocalConnectionStats(100 - stats.packetLoss.total,stats);
if(sendIntervalId == null)
{
startSendingStats();
}
};
/**
* Start statistics sending.
*/
function startSendingStats() {
sendStats();
sendIntervalId = setInterval(sendStats, 10000);
}
/**
* Sends statistics to other participants
*/
function sendStats() {
connection.emuc.addConnectionInfoToPresence(convertToMUCStats(stats));
connection.emuc.sendPresence();
}
/**
* Converts statistics to format for sending through XMPP
* @param stats the statistics
* @returns {{bitrate_donwload: *, bitrate_uplpoad: *, packetLoss_total: *, packetLoss_download: *, packetLoss_upload: *}}
*/
function convertToMUCStats(stats) {
return {
"bitrate_download": stats.bitrate.download,
"bitrate_upload": stats.bitrate.upload,
"packetLoss_total": stats.packetLoss.total,
"packetLoss_download": stats.packetLoss.download,
"packetLoss_upload": stats.packetLoss.upload
};
}
/**
* Converts statitistics to format used by VideoLayout
* @param stats
* @returns {{bitrate: {download: *, upload: *}, packetLoss: {total: *, download: *, upload: *}}}
*/
function parseMUCStats(stats) {
return {
bitrate: {
download: stats.bitrate_download,
upload: stats.bitrate_upload
},
packetLoss: {
total: stats.packetLoss_total,
download: stats.packetLoss_download,
upload: stats.packetLoss_upload
}
};
}
/**
* Updates remote statistics
* @param jid the jid associated with the statistics
* @param data the statistics
*/
ConnectionQuality.updateRemoteStats = function (jid, data) {
if(data == null || data.packetLoss_total == null)
{
VideoLayout.updateConnectionStats(jid, null, null);
return;
}
remoteStats[jid] = parseMUCStats(data);
VideoLayout.updateConnectionStats(jid, 100 - data.packetLoss_total,remoteStats[jid]);
};
/**
* Stops statistics sending.
*/
ConnectionQuality.stopSendingStats = function () {
clearInterval(sendIntervalId);
sendIntervalId = null;
//notify UI about stopping statistics gathering
VideoLayout.onStatsStop();
};
/**
* Returns the local statistics.
*/
ConnectionQuality.getStats = function () {
return stats;
}
return ConnectionQuality;
})();

View File

@@ -1,186 +0,0 @@
/**
* Contact list.
*/
var ContactList = (function (my) {
var numberOfContacts = 0;
var notificationInterval;
/**
* Indicates if the chat is currently visible.
*
* @return <tt>true</tt> if the chat is currently visible, <tt>false</tt> -
* otherwise
*/
my.isVisible = function () {
return $('#contactlist').is(":visible");
};
/**
* Adds a contact for the given peerJid if such doesn't yet exist.
*
* @param peerJid the peerJid corresponding to the contact
* @param id the user's email or userId used to get the user's avatar
*/
my.ensureAddContact = function(peerJid, id) {
var resourceJid = Strophe.getResourceFromJid(peerJid);
var contact = $('#contactlist>ul>li[id="' + resourceJid + '"]');
if (!contact || contact.length <= 0)
ContactList.addContact(peerJid,id);
};
/**
* Adds a contact for the given peer jid.
*
* @param peerJid the jid of the contact to add
* @param id the email or userId of the user
*/
my.addContact = function(peerJid, id) {
var resourceJid = Strophe.getResourceFromJid(peerJid);
var contactlist = $('#contactlist>ul');
var newContact = document.createElement('li');
// XXX(gp) contact click event handling is now in videolayout.js. Is the
// following statement (newContact.id = resourceJid) still relevant?
newContact.id = resourceJid;
newContact.className = "clickable";
newContact.onclick = function(event) {
if(event.currentTarget.className === "clickable") {
$(ContactList).trigger('contactclicked', [peerJid]);
}
};
newContact.appendChild(createAvatar(id));
newContact.appendChild(createDisplayNameParagraph("Participant"));
var clElement = contactlist.get(0);
if (resourceJid === Strophe.getResourceFromJid(connection.emuc.myroomjid)
&& $('#contactlist>ul .title')[0].nextSibling.nextSibling)
{
clElement.insertBefore(newContact,
$('#contactlist>ul .title')[0].nextSibling.nextSibling);
}
else {
clElement.appendChild(newContact);
}
updateNumberOfParticipants(1);
};
/**
* Removes a contact for the given peer jid.
*
* @param peerJid the peerJid corresponding to the contact to remove
*/
my.removeContact = function(peerJid) {
var resourceJid = Strophe.getResourceFromJid(peerJid);
var contact = $('#contactlist>ul>li[id="' + resourceJid + '"]');
if (contact && contact.length > 0) {
var contactlist = $('#contactlist>ul');
contactlist.get(0).removeChild(contact.get(0));
updateNumberOfParticipants(-1);
}
};
my.setVisualNotification = function(show, stopGlowingIn) {
var glower = $('#contactListButton');
function stopGlowing() {
window.clearInterval(notificationInterval);
notificationInterval = false;
glower.removeClass('glowing');
if(!ContactList.isVisible()) {
glower.removeClass('active');
}
}
if (show && !notificationInterval) {
notificationInterval = window.setInterval(function () {
glower.toggleClass('active glowing');
}, 800);
}
else if (!show && notificationInterval) {
stopGlowing();
}
if(stopGlowingIn) {
setTimeout(stopGlowing, stopGlowingIn);
}
};
/**
* Updates the number of participants in the contact list button and sets
* the glow
* @param delta indicates whether a new user has joined (1) or someone has
* left(-1)
*/
function updateNumberOfParticipants(delta) {
//when the user is alone we don't show the number of participants
if(numberOfContacts === 0) {
$("#numberOfParticipants").text('');
numberOfContacts += delta;
} else if(numberOfContacts !== 0 && !ContactList.isVisible()) {
ContactList.setVisualNotification(true);
numberOfContacts += delta;
$("#numberOfParticipants").text(numberOfContacts);
}
}
/**
* Creates the avatar element.
*
* @return the newly created avatar element
*/
function createAvatar(id) {
var avatar = document.createElement('img');
avatar.className = "icon-avatar avatar";
avatar.src = "https://www.gravatar.com/avatar/" + id + "?d=wavatar&size=30";
return avatar;
}
/**
* Creates the display name paragraph.
*
* @param displayName the display name to set
*/
function createDisplayNameParagraph(displayName) {
var p = document.createElement('p');
p.innerText = displayName;
return p;
}
/**
* Indicates that the display name has changed.
*/
$(document).bind( 'displaynamechanged',
function (event, peerJid, displayName) {
if (peerJid === 'localVideoContainer')
peerJid = connection.emuc.myroomjid;
var resourceJid = Strophe.getResourceFromJid(peerJid);
var contactName = $('#contactlist #' + resourceJid + '>p');
if (contactName && displayName && displayName.length > 0)
contactName.text(displayName);
});
my.setClickable = function(resourceJid, isClickable) {
var contact = $('#contactlist>ul>li[id="' + resourceJid + '"]');
if(isClickable) {
contact.addClass('clickable');
} else {
contact.removeClass('clickable');
}
};
return my;
}(ContactList || {}));

BIN
css/.DS_Store vendored Normal file

Binary file not shown.

178
css/_base.scss Normal file
View File

@@ -0,0 +1,178 @@
* {
-webkit-user-select: none;
user-select: none;
}
html, body{
margin:0px;
height:100%;
color: $defaultColor;
font-size: 12px;
font-weight: 400;
background: #000000;
overflow: hidden;
}
html, body, input, textarea, keygen, select, button {
font-family: $baseFontFamily !important;
}
#nowebrtc {
display:none;
}
.no-fa-video-camera, .fa-microphone-slash {
color: #636363;
}
input[type='text'], input[type='password'], textarea {
-webkit-user-select: text;
user-select: text;
display: inline-block;
padding: 5px;
color: $defaultDarkColor;
border-radius: $borderRadius;
line-height: 32px;
height: 32px;
text-align: left;
border:1px solid $inputBorderColor;
outline: none; /* removes the default outline */
resize: none; /* prevents the user-resizing, adjust to taste */
}
textarea {
overflow: hidden;
word-wrap: break-word;
resize: horizontal;
}
button.no-icon {
padding: 0 1em;
}
button, input, select, textarea {
margin: 0;
vertical-align: baseline;
color: $defaultDarkColor;
background: $inputLightBackground;
font-size: 12px;
border: none;
box-shadow: none;
outline: none;
}
button, select, input[type="button"],
input[type="reset"], input[type="submit"] {
height: 32px;
line-height: 32px;
padding-left: 4px;
padding-right: 4px;
cursor: pointer;
}
button {
color: #FFF;
background-color: $buttonBackground !important;
border-radius: $borderRadius;
}
button,
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;
top: 15;
width: 186px;
height: 74px;
background-size: contain;
background-repeat: no-repeat;
z-index: 2;
}
.leftwatermark {
display: none;
left: $defaultToolbarSize;
margin-left: 10px;
background-image: url($defaultWatermarkLink);
background-position: center left;
}
.rightwatermark {
display: none;
right: 15;
background-position: center right;
}
.poweredby {
display: none;
position: absolute;
left: 25;
bottom: 7;
font-size: 11pt;
color: rgba(255,255,255,.50);
text-decoration: none;
z-index: 100;
}
.connected {
color: #21B9FC;
font-size: 12px;
}
.lastN, .disconnected {
color: #a3a3a3;
font-size: 12px;
}
/**
* Hides an element.
*/
.hide {
display: none !important;
}
/**
* Shows an element.
*/
.show {
display: block !important;
}
/**
* Shows an inline element.
*/
.show-inline {
display: inline-block !important;
}
/**
* Shows a flex element.
*/
.show-flex {
display: -webkit-box !important;
display: -moz-box !important;
display: -ms-flexbox !important;
display: -webkit-flex !important;
display: flex !important;
}

View File

@@ -1,9 +1,4 @@
#chatspace {
background-color: black;
border-left: 1px solid #424242;
}
#chatspace * {
#chat_container * {
-webkit-user-select: text;
user-select: text;
}
@@ -21,6 +16,26 @@
overflow-y: scroll;
overflow-x: hidden;
word-wrap: break-word;
a:link {
color: rgb(184, 184, 184);
}
a:visited {
color: white;
}
a:hover {
color: rgb(213, 213, 213);
}
a:active {
color: black;
}
}
#chat_container.is-conversation-mode #chatconversation {
visibility: visible;
}
.localuser {
@@ -61,6 +76,10 @@
box-shadow: none;
}
#chat_container.is-conversation-mode #usermsg {
visibility: visible;
}
#nickname {
position: absolute;
text-align: center;
@@ -72,6 +91,10 @@
width: 95%;
}
#chat_container.is-conversation-mode #nickname {
visibility: hidden;
}
#nickinput {
margin-top: 20px;
font-size: 14px;
@@ -84,30 +107,21 @@
#unreadMessages {
font-size: 8px;
position: absolute;
left: 46%;
top: 27%
}
#bottomUnreadMessages {
top: 5px;
left: 10px;
position: absolute;
font-size: 8px;
}
#chatspace .username {
#chat_container .username {
float: left;
padding-left: 5px;
font-weight: bold;
}
#chatspace .timestamp {
#chat_container .timestamp {
float: right;
padding-right: 5px;
font-size: 11px;
}
#chatspace .usermessage {
#chat_container .usermessage {
padding-top: 20px;
padding-left: 5px;
}
@@ -168,6 +182,10 @@
visibility: hidden;
}
#chat_container.is-conversation-mode #smileysarea {
visibility: visible;
}
#smileysContainer {
display: none;
position: absolute;
@@ -220,20 +238,4 @@
#usermsg::-webkit-scrollbar-track-piece {
background: #3a3a3a;
}
a:link {
color: rgb(184, 184, 184);
}
a:visited {
color: white;
}
a:hover {
color: rgb(213, 213, 213);
}
a:active {
color: black;
}

53
css/_contact_list.scss Normal file
View File

@@ -0,0 +1,53 @@
#contacts_container {
cursor: default;
> ul#contacts {
position: absolute;
top: 31px;
bottom: 0px;
width: 100%;
margin: 0px;
padding: 0px;
overflow-y: scroll;
overflow-x: hidden;
}
.clickable {
cursor: pointer;
}
}
#contacts {
>li {
list-style-type: none;
text-align: left;
white-space: nowrap;
color: #FFF;
font-size: 10pt;
padding: 7px 10px;
margin: 2px;
&:hover,
&:active {
background: $toolbarSelectBackground;
}
> p {
display: inline-block;
vertical-align: middle;
margin: 0px;
}
}
}
.avatar {
padding: 0px;
margin-right: 10px;
vertical-align: middle;
font-size: 22pt;
border-radius: 20px;
max-height: 30px;
max-width: 30px;
}

View File

@@ -0,0 +1,31 @@
.settingsContent {
display: flex;
display: -webkit-flex;
#localVideoPreview {
width: 50%;
align-self: baseline;
}
.deviceSelection {
display: flex;
display: -webkit-flex;
-webkit-flex: 1;
flex: 1;
flex-direction: column;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: left;
margin-left: 10px;
.device {
display: flex;
margin-bottom: 5px;
select {
flex: 1;
margin_right: 5px;
}
}
}
}

107
css/_feedback.scss Normal file
View File

@@ -0,0 +1,107 @@
@-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;
}
}
}

2026
css/_font-awesome.scss Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -24,99 +24,105 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-contactList:before {
content: "\e615";
.icon-feedback:before {
content: "\e91d";
}
.icon-toggle-filmstrip:before {
content: "\e91c";
}
.icon-avatar:before {
content: "\e616";
content: "\e901";
}
.icon-callRetro:before {
content: "\e611";
.icon-autorenew:before {
content: "\e903";
}
.icon-callModern:before {
content: "\e612";
}
.icon-recDisable:before {
content: "\e613";
}
.icon-recEnable:before {
content: "\e614";
}
.icon-authenticate:before {
content: "\e1ae";
}
.icon-kick1:before {
content: "\e60f";
}
.icon-kick:before {
content: "\e610";
}
.icon-share-desktop:before {
content: "\e602";
}
.icon-chat-simple:before {
content: "\e606";
}
.icon-full-screen:before {
content: "\e60d";
}
.icon-exit-full-screen:before {
content: "\e60e";
}
.icon-prezi:before {
content: "\e60c";
}
.icon-link:before {
content: "\e600";
.icon-hangup:before {
content: "\e905";
}
.icon-chat:before {
content: "\e601";
content: "\e906";
}
.icon-presentation:before {
content: "\e603";
.icon-download:before {
content: "\e902";
}
.icon-security:before {
content: "\e604";
.icon-edit:before {
content: "\e907";
}
.icon-share-doc:before {
content: "\e605";
content: "\e908";
}
.icon-telephone:before {
content: "\e611";
content: "\e909";
}
.icon-kick:before {
content: "\e904";
}
.icon-full-screen:before {
content: "\e90b";
}
.icon-exit-full-screen:before {
content: "\e90c";
}
.icon-star-full:before {
content: "\e90a";
}
.icon-security:before {
content: "\e90d";
}
.icon-security-locked:before {
content: "\e607";
content: "\e90e";
}
.icon-camera:before {
content: "\e608";
}
.icon-camera-disabled:before {
content: "\e609";
}
.icon-mic-disabled:before {
content: "\e60a";
.icon-reload:before {
content: "\e90f";
}
.icon-microphone:before {
content: "\e60b";
content: "\e910";
}
.icon-hangup:before {
content: "\e617";
.icon-mic-empty:before {
content: "\e911";
}
.icon-reload:before {
content: "\e618";
.icon-mic-disabled:before {
content: "\e912";
}
.icon-filmstrip:before {
content: "\e619";
.icon-contactList:before {
content: "\e91b";
}
.icon-connection:before {
line-height: normal;
content: "\e61a";
.icon-link:before {
content: "\e913";
}
.icon-shared-video:before {
content: "\e914";
}
.icon-settings:before {
content: "\e61b";
content: "\e915";
}
.icon-star:before {
content: "\e916";
}
.icon-share-desktop:before {
content: "\e917";
}
.icon-camera:before {
content: "\e918";
}
.icon-camera-disabled:before {
content: "\e919";
}
.icon-volume:before {
content: "\e91a";
}
.icon-connection-lost:before {
content: "\e900";
}
.icon-connection:before {
content: "\e61a";
}
.icon-recDisable:before {
content: "\e613";
}
.icon-recEnable:before {
content: "\e614";
}
.icon-presentation:before {
content: "\e603";
}

View File

@@ -71,7 +71,7 @@
height: 35px;
width: 100px;
position: absolute;
bottom: -35;
bottom: -35px;
}
.jitsipopover_green
@@ -86,12 +86,12 @@
.jitsipopover_blue
{
color: #06a5df;
color: #21B9FC;
}
.jitsipopover_showmore
{
background-color: #06a5df;
background-color: #21B9FC;
color: #ffffff;
cursor: pointer;
border-radius: 3px;
@@ -99,5 +99,7 @@
width: 90px;
height: 16px;
padding-top: 4px;
padding-left: 10px;
padding-right: 10px;
margin: 15px auto 0px auto;
}

View File

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

View File

@@ -0,0 +1,206 @@
@charset "UTF-8";
/*!
* jQuery contextMenu - Plugin for simple contextMenu handling
*
* Version: v2.1.1
*
* Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)
* Web: http://swisnl.github.io/jQuery-contextMenu/
*
* Copyright (c) 2011-2016 SWIS BV and contributors
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
* Date: 2016-02-28T09:53:18.890Z
*/
@font-face {
font-family: "context-menu-icons";
font-style: normal;
font-weight: normal;
src: url("font/context-menu-icons.eot?2qmzf");
src: url("font/context-menu-icons.eot?2qmzf#iefix") format("embedded-opentype"), url("font/context-menu-icons.woff2?2qmzf") format("woff2"), url("font/context-menu-icons.woff?2qmzf") format("woff"), url("font/context-menu-icons.ttf?2qmzf") format("truetype");
}
.context-menu-icon:before {
position: absolute;
top: 50%;
left: 0;
width: 28px;
font-family: "context-menu-icons";
font-size: 16px;
font-style: normal;
font-weight: normal;
line-height: 1;
color: #2980b9;
text-align: center;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.context-menu-icon-add:before {
content: "";
}
.context-menu-icon-copy:before {
content: "";
}
.context-menu-icon-cut:before {
content: "";
}
.context-menu-icon-delete:before {
content: "";
}
.context-menu-icon-edit:before {
content: "";
}
.context-menu-icon-paste:before {
content: "";
}
.context-menu-icon-quit:before {
content: "";
}
.context-menu-icon.context-menu-hover:before {
color: #fff;
}
.context-menu-list {
position: absolute;
display: inline-block;
min-width: 180px;
max-width: 360px;
padding: 4px 0;
margin: 5px;
font-family: inherit;
font-size: inherit;
list-style-type: none;
background: #fff;
border: 1px solid #bebebe;
border-radius: 3px;
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
}
.context-menu-item {
position: relative;
padding: 3px 28px;
color: #2f2f2f;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: #fff;
}
.context-menu-separator {
padding: 0;
margin: 5px 0;
border-bottom: 1px solid #e6e6e6;
}
.context-menu-item > label > input,
.context-menu-item > label > textarea {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.context-menu-item.context-menu-hover {
color: #fff;
cursor: pointer;
background-color: #2980b9;
}
.context-menu-item.context-menu-disabled {
color: #626262;
background-color: #fff;
}
.context-menu-item.context-menu-disabled {
color: #626262;
}
.context-menu-input.context-menu-hover,
.context-menu-item.context-menu-disabled.context-menu-hover {
cursor: default;
background-color: #eee;
}
.context-menu-submenu:after {
position: absolute;
top: 50%;
right: 8px;
z-index: 1;
width: 0;
height: 0;
content: '';
border-color: transparent transparent transparent #2f2f2f;
border-style: solid;
border-width: 4px 0 4px 4px;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
}
/**
* Inputs
*/
.context-menu-item.context-menu-input {
padding: 5px 10px;
}
/* vertically align inside labels */
.context-menu-input > label > * {
vertical-align: top;
}
/* position checkboxes and radios as icons */
.context-menu-input > label > input[type="checkbox"],
.context-menu-input > label > input[type="radio"] {
position: relative;
top: 3px;
}
.context-menu-input > label,
.context-menu-input > label > input[type="text"],
.context-menu-input > label > textarea,
.context-menu-input > label > select {
display: block;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.context-menu-input > label > textarea {
height: 100px;
}
.context-menu-item > .context-menu-list {
top: 5px;
/* re-positioned by js */
right: -5px;
display: none;
}
.context-menu-item.context-menu-visible > .context-menu-list {
display: block;
}
.context-menu-accesskey {
text-decoration: underline;
}

View File

@@ -0,0 +1,25 @@
#keyboard-shortcuts {
display: none;
position: absolute;
bottom: 20px;
left: $defaultToolbarSize;
overflow: hidden;
padding: 20px;
margin-left: 10px;
z-index: 10;
border-radius: $borderRadius;
background-attachment: scroll;
background-size: auto auto;
color: rgba(255, 255, 255, .8);
background-color: rgba(0, 0, 0, .8);
}
#keyboard-shortcuts .item-action {
color: #209EFF;
font-size: 14pt;
padding-right: 5px;
}
#keyboard-shortcuts-list {
list-style-type: none;
}

76
css/_login_menu.scss Normal file
View File

@@ -0,0 +1,76 @@
/*Initialize*/
ul.loginmenu {
font-family: $baseFontFamily;
line-height: normal;
display:none;
position: absolute;
margin: 0;
padding: 5px;
padding-bottom: 7px;
top: 45px;
left: -5px;
background-color: rgba(0,0,0,0.9);
border: 1px solid rgba(256, 256, 256, 0.2);
border-radius:8px;
}
ul.loginmenu li {
list-style-type: none;
padding: 7px;
color: #fff;
font-size: 11pt;
cursor: default;
white-space: pre;
}
ul.loginmenu:after {
content: url('../images/dropdownPointer.png');
display: block;
position: absolute;
top: -7px;
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;
}
.loginmenuPadding {
width: 50px;
height: 30px;
position: absolute;
top: -30px;
left: 0px;
}
.loginmenu.extendedToolbarPopup {
left: 55px;
top: 0px;
}
ul.loginmenu.extendedToolbarPopup:after {
content: url('../images/leftDropdownPointer.png');
display: block;
position: absolute;
top: 18px;
left: -7px;
}

52
css/_mixins.scss Normal file
View File

@@ -0,0 +1,52 @@
/**
* Animation mixin.
*/
@mixin animation($animate...) {
$max: length($animate);
$animations: '';
@for $i from 1 through $max {
$animations: #{$animations + nth($animate, $i)};
@if $i < $max {
$animations: #{$animations + ", "};
}
}
-webkit-animation: $animations;
-moz-animation: $animations;
-o-animation: $animations;
animation: $animations;
}
/**
* Keyframes mixin.
*/
@mixin keyframes($animationName) {
@-webkit-keyframes #{$animationName} {
@content;
}
@-moz-keyframes #{$animationName} {
@content;
}
@-o-keyframes #{$animationName} {
@content;
}
@keyframes #{$animationName} {
@content;
}
}
@mixin 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;
}

View File

@@ -26,4 +26,9 @@
button.jqidefaultbutton #inviteLinkRef {
color: #2c8ad2;
}
#inviteLinkRef {
-webkit-user-select: text;
user-select: text;
}

11
css/_notice.scss Normal file
View File

@@ -0,0 +1,11 @@
#notice {
position: relative;
z-index: 3;
margin-top: 6px;
}
#noticeText {
background-color: #000000;
color: white;
padding: 3px;
border-radius: 5px;
}

View File

@@ -2,7 +2,7 @@
position: absolute;
top: 0;
left: 0;
z-index: 1010;
z-index: 1015;
display: none;
max-width: 300px;
min-width: 100px;
@@ -121,4 +121,4 @@
border-right-width: 0;
border-left-color: #ffffff;
bottom: -10px;
}
}

View File

@@ -1,27 +1,10 @@
/*Initialize*/
ul.popupmenu {
display:none;
position: absolute;
padding:10px;
padding: 0px 10px 0px 10px;
margin: 0;
bottom: 0;
margin-bottom: 35px;
padding-bottom: 10px;
padding-top: 10px;
right: 10px;
left: -5px;
width: 100px;
background-color: rgba(0,0,0,0.9);
border: 1px solid rgba(256, 256, 256, 0.2);
border-radius:8px;
}
ul.popupmenu:after {
content: url('../images/popupPointer.png');
display: block;
position: absolute;
bottom: -8px;
left: 11px;
height: auto;
}
ul.popupmenu li {
@@ -31,16 +14,18 @@ ul.popupmenu li {
ul.popupmenu li:hover {
background-color: rgba(256, 256, 256, .2);
border-radius:6px;
border-radius:3px;
}
/*Link Appearance*/
ul.popupmenu li a {
display: block;
text-decoration: none;
color: #fff;
padding: 5px;
display: inline-block;
font-size: 9pt;
width: 100%;
cursor: hand;
}
ul.popupmenu li a i.icon-kick {
@@ -54,6 +39,15 @@ ul.popupmenu li a span {
text-align: center;
}
ul.popupmenu li a div {
display: inline-block;
line-height: 25px;
}
ul.popupmenu li a i {
line-height: 25px;
}
span.remotevideomenu:hover ul.popupmenu, ul.popupmenu:hover {
display:block !important;
}
@@ -61,12 +55,4 @@ span.remotevideomenu:hover ul.popupmenu, ul.popupmenu:hover {
a.disabled {
color: gray !important;
pointer-events: none;
}
.popupmenuPadding {
height: 35px;
width: 100px;
position: absolute;
bottom: -35;
left: 0px;
}

4
css/_recording.scss Normal file
View File

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

View File

@@ -0,0 +1,114 @@
/**
* 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

@@ -19,32 +19,42 @@
.toast-message label {
color: #ffffff;
}
.toast-message .nickname {
font-weight: bold;
}
.toast-message a:hover {
color: #cccccc;
text-decoration: none;
}
.toast-close-button {
position: relative;
right: -0.3em;
top: -0.3em;
float: right;
font-size: 20px;
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);
}
.toast-close-button:hover,
.toast-close-button:focus {
color: #000000;
color: #ffffff;
text-decoration: none;
cursor: pointer;
opacity: 0.4;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
filter: alpha(opacity=40);
opacity: 1;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
filter: alpha(opacity=100);
}
/*Additional properties for button version
iOS requires the button element instead of an anchor tag.
@@ -84,7 +94,7 @@ button.toast-close-button {
}
#toast-container {
position: fixed;
z-index: 999999;
z-index: 1012;
/*overrides*/
}
@@ -95,7 +105,7 @@ button.toast-close-button {
}
#toast-container > div {
margin: 0 0 6px;
padding: 15px 15px 15px 50px;
padding: 15px 15px 15px 15px;
width: 300px;
-moz-border-radius: 3px 3px 3px 3px;
-webkit-border-radius: 3px 3px 3px 3px;
@@ -119,21 +129,17 @@ button.toast-close-button {
filter: alpha(opacity=100);
cursor: pointer;
}
#toast-container > .toast-info {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
}
#toast-container > .toast-error {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
}
#toast-container > .toast-success {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
}
#toast-container > .toast-warning {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
#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: 96%;
width: 100%;
margin: auto;
}
.toast {
@@ -154,7 +160,7 @@ button.toast-close-button {
/*Responsive Design*/
@media all and (max-width: 240px) {
#toast-container > div {
padding: 8px 8px 8px 50px;
padding: 8px 8px 8px 8px;
width: 11em;
}
#toast-container .toast-close-button {
@@ -164,7 +170,7 @@ button.toast-close-button {
}
@media all and (min-width: 241px) and (max-width: 480px) {
#toast-container > div {
padding: 8px 8px 8px 50px;
padding: 8px 8px 8px 8px;
width: 18em;
}
#toast-container .toast-close-button {
@@ -174,7 +180,33 @@ button.toast-close-button {
}
@media all and (min-width: 481px) and (max-width: 768px) {
#toast-container > div {
padding: 15px 15px 15px 50px;
padding: 15px 15px 15px 15px;
width: 25em;
}
}
#toast-container.notification-bottom-right {
bottom: 140px;
right: 5px;
}
#toast-container.notification-bottom-right-center {
right: 205px;
}
#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;
}

236
css/_toolbars.scss Normal file
View File

@@ -0,0 +1,236 @@
.toolbar {
background-color: rgba(0,0,0,0.5);
position: relative;
z-index: $toolbarZ;
height: 100%;
pointer-events: auto;
}
#mainToolbarContainer{
display: block;
position: absolute;
text-align: center;
top:0;
left:0;
right:0;
z-index: $toolbarZ;
pointer-events: none;
min-height: 100px;
transform: translateY(-100%);
-webkit-transform: translateY(-100%);
}
#subject {
position: relative;
z-index: 3;
width: auto;
padding: 5px;
margin-left: 40%;
margin-right: 40%;
text-align: center;
background: linear-gradient(to bottom, rgba(255,255,255,.85) , rgba(255,255,255,.35));
box-shadow: 0 0 2px #000000, 0 0 10px #000000;
border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
}
#mainToolbar {
height: $defaultToolbarSize;
display: inline-block;
position: relative;
top: 30px;
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;
}
}
#extendedToolbar {
display: flex;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
width: $defaultToolbarSize;
height: 100%;
top: 0px;
left: 0px;
padding-top: 10px;
flex-direction: column;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: center;
transform: translateX(-100%);
-webkit-transform: translateX(-100%);
}
#toolbar_button_hangup {
color: #BF2117;
font-size: $hangupFontSize !important;
}
#toolbar_button_etherpad {
display: none;
}
#numberOfParticipants {
position: absolute;
top: 5px;
line-height: 13px;
font-weight: bold;
font-size: 11px;
}
#mainToolbar a.button:last-child::after {
content: none;
}
.button {
display: inline-block;
position: relative;
color: #FFFFFF;
top:0px;
width: 50px;
height: 50px;
cursor: pointer;
text-align: center;
z-index: 1;
font-size: $toolbarFontSize !important;
line-height: 50px !important;
vertical-align: middle;
}
.button[disabled] {
opacity: 0.5;
}
.button.unclickable {
cursor: default;
}
a.button.unclickable:hover,
a.button.unclickable:active,
a.button.unclickable.selected{
cursor: default;
background: none;
}
a.button:hover,
a.button:active,
a.button.selected {
cursor: pointer;
// sum opacity with background layer should give us 0.8
background: $toolbarSelectBackground;
}
a.button>#avatar {
width: 30px;
border-radius: 50%;
padding-top: 10px;
padding-bottom: 10px;
}
#feedbackButton {
margin-top: auto;
}
/**
* START of slide in animation for extended toolbar.
*/
@include keyframes(slideInX) {
0% { transform: translateX(-100%); }
100% { transform: translateX(0%); }
}
.slideInX {
@include animation('slideInX .5s forwards');
}
@include keyframes(slideOutX) {
0% { transform: translateX(0%); }
100% { transform: translateX(-100%); }
}
.slideOutX {
@include animation('slideOutX .5s forwards');
}
@include keyframes(slideInExtX) {
0% { transform: translateX(-500%); }
100% { transform: translateX(0%); }
}
.slideInExtX {
@include animation('slideInExtX .5s forwards');
}
@include keyframes(slideOutExtX) {
0% { transform: translateX(0%); }
100% { transform: translateX(-500%); }
}
.slideOutExtX {
@include animation('slideOutExtX .5s forwards');
}
/**
* END of slide out animation for extended toolbar.
*/
/**
* START of slide in / out animation for main toolbar.
*/
@include keyframes(slideInY) {
100% { transform: translateY(0%); }
}
.slideInY {
@include animation('slideInY .5s forwards');
}
@include keyframes(slideOutY) {
0% { transform: translateY(0%); }
100% { transform: translateY(-100%); }
}
.slideOutY {
@include animation('slideOutY .5s forwards');
}
/**
* END of slide in / out animation for main toolbar.
*/
/**
* START of slide in animation for extended toolbar panel.
*/
@include keyframes(slideInExt) {
from { width: 0px; }
to { width: 200px; } // TO FIX: Make this value a percentage.
}
.slideInExt {
@include animation("slideInExt .5s forwards");
}
@include keyframes(slideOutExt) {
from { width: 200px; } // TO FIX: Make this value a percentage.
to { width: 0px; }
}
.slideOutExt {
@include animation("slideOutExt .5s forwards");
}
/**
* END of slide in animation for extended toolbar panel.
*/

42
css/_variables.scss Normal file
View File

@@ -0,0 +1,42 @@
/**
<<<<<<< HEAD
* Style variables
*/
$baseFontFamily: 'open_sanslight', 'Helvetica Neue', Helvetica, Arial, sans-serif;
$toolbarFontSize: 1.9em;
$hangupFontSize: 2em;
/**
* Size variables.
*/
$defaultToolbarSize: 50px;
/**
* Color variables.
*/
$defaultColor: #F1F1F1;
$defaultSemiDarkColor: #ACACAC;
$defaultDarkColor: #4F4F4F;
$defaultBackground: #474747;
$toolbarSelectBackground: rgba(0, 0, 0, .6);
$inputBackground: rgba(132, 132, 132, .5);
$inputSemiBackground: rgba(132, 132, 132, .8);
$inputLightBackground: #EBEBEB;
$inputBorderColor: #EBEBEB;
$buttonBackground: #44A5FF;
/**
* Misc.
*/
$borderRadius: 4px;
$defaultWatermarkLink: '../images/watermark.png';
/**
* Z-indexes. TODO: Replace this by a function.
*/
$toolbarZ: 900;
$overlayZ: 800;
$rateStarDefault: #ccc;
$rateStarActivity: #f6c342;
$rateStarLabelColor: #333;

View File

@@ -8,7 +8,15 @@
}
#remoteVideos {
display:block;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-end;
position:absolute;
text-align:right;
height:196px;
@@ -21,6 +29,7 @@
z-index: 5;
transition: bottom 2s;
overflow: visible !important;
font-size: 0pt; /*!!!Removes the gap between the local video container and the remote videos.*/
}
#remotevideos.hidden {
@@ -29,60 +38,52 @@
.videocontainer {
position: relative;
margin-left: auto;
margin-right: auto;
text-align: center;
}
#remoteVideos .videocontainer {
display: inline-block;
display: none;
background-color: black;
background-size: contain;
border-radius:8px;
border: 2px solid #212425;
margin-right: 3px;
border-radius:1px;
border: 1px solid #212425;
}
#remoteVideos .videocontainer:hover,
#remoteVideos .videocontainer.videoContainerFocused {
width: 100%;
height: 100%;
content:"";
cursor: pointer;
cursor: hand;
/* transform:scale(1.08, 1.08);
-webkit-transform:scale(1.08, 1.08); */
transition-duration: 0.5s;
-webkit-transition-duration: 0.5s;
-webkit-animation-name: greyPulse;
-webkit-animation-duration: 2s;
-webkit-animation-iteration-count: 1;
overflow: visible !important;
}
#remoteVideos .videocontainer:hover {
-webkit-box-shadow: inset 0 0 10px #FFFFFF, 0 0 10px #FFFFFF;
border: 2px solid #FFFFFF;
border: 1px solid #c1c1c1;
}
#remoteVideos .videocontainer.videoContainerFocused {
-webkit-box-shadow: inset 0 0 28px #006d91;
border: 2px solid #006d91;
box-shadow: inset 0 0 28px #006d91;
border: 1px solid #006d91;
}
#remoteVideos .videocontainer.videoContainerFocused:hover {
-webkit-box-shadow: inset 0 0 5px #FFFFFF, 0 0 10px #FFFFFF, inset 0 0 60px #006d91;
border: 2px solid #FFFFFF;
box-shadow: inset 0 0 5px #c1c1c1, 0 0 10px #c1c1c1, inset 0 0 60px #006d91;
border: 1px solid #c1c1c1;
}
#localVideoWrapper {
display:inline-block;
-webkit-mask-box-image: url(../images/videomask.svg);
border-radius:0px !important;
border: 0px !important;
}
#remoteVideos .videocontainer>video {
border-radius:4px;
/* With TemasysWebRTC plugin <object/> element is used
instead of <video/> */
#remoteVideos .videocontainer>video,
#remoteVideos .videocontainer>object {
cursor: hand;
border-radius:1px;
object-fit: cover;
overflow: hidden;
}
.flipVideoX {
@@ -92,26 +93,37 @@
-o-transform: scale(-1, 1);
}
#localVideoWrapper>video {
border-radius:0px !important;
#localVideoWrapper>video,
#localVideoWrapper>object {
cursor: hand;
border-radius:1px !important;
object-fit: cover;
}
#largeVideo,
#largeVideoWrapper,
#largeVideoContainer {
overflow: hidden;
text-align: center;
}
#largeVideo
#largeVideo,
#largeVideoWrapper
{
object-fit: cover;
}
#presentation,
#sharedVideo,
#etherpad,
#localVideoWrapper>video,
#localVideoWrapper>object,
#localVideoWrapper,
.videocontainer>video {
#largeVideoWrapper,
#largeVideoWrapper>video,
#largeVideoWrapper>object,
.videocontainer>video,
.videocontainer>object {
position: absolute;
left: 0;
top: 0;
@@ -129,13 +141,8 @@
z-index: 0;
}
#etherpadButton {
display: none;
}
#remoteVideos .videocontainer>span.focusindicator,
#remoteVideos .videocontainer>span.remotevideomenu {
display: inline-block;
#remoteVideos .videocontainer>div.remotevideomenu {
position: absolute;
color: #FFFFFF;
top: 0;
@@ -149,14 +156,12 @@
text-align: center;
}
#remoteVideos .nick {
display: none; /* enable when you want nicks to be shown */
position: absolute;
left: 0px;
bottom: -20px;
z-index: 0;
width: 100%;
font-size: 10pt;
#remoteVideos .videocontainer>span.focusindicator {
display: inline-block;
}
#remoteVideos .videocontainer>div.remotevideomenu {
display: block;
}
.videocontainer>span.displayname,
@@ -176,7 +181,7 @@
overflow: hidden;
white-space: nowrap;
z-index: 2;
border-radius:20px;
border-radius:3px;
}
.videocontainer>span.status {
@@ -195,7 +200,7 @@
overflow: hidden;
white-space: nowrap;
z-index: 2;
border-radius:20px;
border-radius:3px;
}
.connectionindicator
@@ -310,6 +315,27 @@
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;
position: absolute;
color: #FFFFFF;
font-size: 11pt;
border: 0px;
}
#indicatoricon {
padding-top: 5px;
}
#reloadPresentation {
display: none;
position: absolute;
@@ -327,70 +353,28 @@
z-index: 20; /*The reload button should appear on top of the header!*/
}
#header{
display:none;
position:absolute;
text-align:center;
top:0;
left:0;
right:0;
z-index:10;
pointer-events: none;
}
#toolbar {
display:inline-block;
position:relative;
margin-top:5px;
margin-left:auto;
margin-right:auto;
padding-left:2px;
padding-right:2px;
height:38px;
width:auto;
background-color: rgba(0,0,0,0.8);
border: 1px solid rgba(256, 256, 256, 0.2);
border-radius: 6px;
pointer-events: auto;
}
#subject {
position: relative;
z-index: 3;
width: auto;
padding: 5px;
margin-left: 40%;
margin-right: 40%;
text-align: center;
background: linear-gradient(to bottom, rgba(255,255,255,.85) , rgba(255,255,255,.35));
-webkit-box-shadow: 0 0 2px #000000, 0 0 10px #000000;
border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
display: none;
}
.audiolevel {
display: inline-block;
position: absolute;
z-index: 0;
border-radius:10px;
border-radius:1px;
pointer-events: none;
}
#activeSpeaker {
#dominantSpeaker {
visibility: hidden;
width: 150px;
height: 150px;
width: 300px;
height: 300px;
margin: auto;
overflow: hidden;
position: relative;
}
#activeSpeakerAudioLevel {
#dominantSpeakerAudioLevel {
position: absolute;
top: 0px;
left: 0px;
z-index: 1;
z-index: 2;
visibility: inherit;
}
@@ -398,20 +382,122 @@
display:none !important;
}
#activeSpeakerAvatar {
width: 100px;
height: 100px;
top: 25px;
#dominantSpeakerAvatar {
width: 200px;
height: 200px;
top: 50px;
margin: auto;
position: relative;
border-radius: 50px;
z-index: 2;
border-radius: 100px;
z-index: 3;
visibility: inherit;
background-color: #000000;
}
.userAvatar {
height: 100%;
position: absolute;
left: 35px;
border-radius: 200px;
left: 0;
border-radius: 2px;
}
.sharedVideoAvatar {
height: 100%;
width: 100%;
object-fit: cover;
}
.noMic {
position: absolute;
border-radius: 8px;
z-index: 1;
width: 100%;
height: 100%;
background-image: url("../images/noMic.png");
background-color: #000;
background-repeat: no-repeat;
background-position: center;
}
.noVideo {
position: absolute;
border-radius: 8px;
z-index: 1;
width: 100%;
height: 100%;
background-image: url("../images/noVideo.png");
background-color: #000;
background-repeat: no-repeat;
background-position: center;
}
.videoMessageFilter {
-webkit-filter: grayscale(.5) opacity(0.8);
filter: grayscale(.5) opacity(0.8);
}
.videoProblemFilter {
-webkit-filter: blur(10px) grayscale(.5) opacity(0.8);
filter: blur(10px) grayscale(.5) opacity(0.8);
}
#videoConnectionMessage {
display: none;
position: absolute;
width: 100%;
top:50%;
z-index: 1011;
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);
}
#videoResolutionLabel {
display: none;
position: absolute;
top: 5px;
right: 5px;
background: rgba(0,0,0,.5);
padding: 10px;
color: rgba(255,255,255,.5);
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 {
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);
}
.hidden {
}

View File

@@ -1,4 +1,3 @@
#disable_welcome {
display:none;
}
@@ -21,7 +20,6 @@
-moz-user-select: none;
background-repeat: no-repeat;
font-weight: 500;
font-family: Helvetica;
font-size: 16px;
color: #acacac;
z-index: 2;
@@ -35,18 +33,17 @@
-moz-user-select: none;
background-repeat: no-repeat;
font-weight: 500;
font-family: Helvetica;
font-size: 16px;
color: #acacac;
z-index: 2;
}
#enter_room_form {
border-radius: 10px;
border-radius: 1px;
background-color: #FFFFFF;
border: none;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
-moz-border-radius: 1px;
-webkit-border-radius: 1px;
-webkit-appearance: none;
height: 55px;
box-shadow: none;
@@ -56,21 +53,22 @@
#domain_name
{
float: left;
padding: 20px 0px 10px 20px;
height: 55px;
line-height: 55px;
font-size: 18px;
font-weight: 500;
font-family: Helvetica;
padding-left: 20px;
color: $defaultDarkColor;
}
#enter_room_field {
font-size: 15px;
padding: 15px 0px 10px 10px;
border: none;
-webkit-appearance: none;
width: 228px;
height: 55px;
line-height: 55px;
font-weight: 500;
font-family: Helvetica;
box-shadow: none;
float: left;
background-color: #FFFFFF;
@@ -81,15 +79,14 @@
#enter_room_button {
width: 73px;
height: 45px;
background-color: #16a8fe;
moz-border-radius: 10px;
-webkit-border-radius: 10px;
background-color: #21B9FC;
moz-border-radius: 1px;
-webkit-border-radius: 1px;
color: #ffffff;
font-weight: 600;
border: none;
margin-top: 5px;
font-size: 19px;
font-family: Helvetica;
padding-top: 6px;
outline: none;
float:left;
@@ -136,7 +133,6 @@
width: 885px;
height: 100px;
color: #ffffff;
font-family: Helvetica;
font-size: 24px;
text-align: center;
margin: 0px auto 0px auto;
@@ -171,7 +167,6 @@
background-repeat: no-repeat;
width: 169px;
height: 169px;
font-family: Helvetica;
color: #ffffff;
font-size: 22px;
/*font-weight: bold;*/
@@ -183,7 +178,6 @@
.feature_description
{
width: 190px;
font-family: Helvetica;
color: #ffffff;
font-size: 16px;
padding-top: 30px;
@@ -194,9 +188,9 @@
#reload_roomname
{
width: 30px;
height: 19px;
color: #acacac;
margin-top: 22px;
font-size: 1.9em;
line-height: 55px;
z-index: 3;
float: left;
cursor: pointer;

View File

@@ -1,54 +0,0 @@
body {
width:100%;
height:100%;
background-color: white;
color: #424242;
font-family:'YanoneKaffeesatzLight',Verdana,Tahoma,Arial;
margin:0;
padding:0;
}
#wrap{
display: block;
position: absolute;
width:900px;
height: 262px;
overflow:hidden;
text-align: center;
margin: auto;
top: 0; left: 0; bottom: 0; right: 0;
}
#left{
display:inline-block;
background-image:url(../images/chromelogo.png);
background-repeat:no-repeat;
width:246px;
height:262px;
float: left;
}
.firefox{
font-size: 11pt;
color: #c8c8c8;
}
#middle{
display:inline-block;
background-image:url(../images/chromepointer.png);
background-repeat:no-repeat;
width:53px;
height:262px;
float: left;
}
#text{
display:inline-block;
font-size: 18pt;
width: 560px;
vertical-align:middle;
padding-top: 30px;
}
a {
color: #087dba;
text-decoration:none;
}

View File

@@ -1,42 +0,0 @@
#contactlist {
background-color: black;
cursor: default;
}
#contactlist>ul {
margin: 0px;
padding: 0px;
}
#contactlist>ul>li {
list-style-type: none;
text-align: left;
color: #FFF;
font-size: 10pt;
padding: 7px 10px;
margin: 2px;
}
#contactlist>ul>li>p {
display: inline-block;
vertical-align: middle;
margin: 0px;
}
#contactlist>ul>li.title {
color: #00ccff;
font-size: 11pt;
border-bottom: 1px solid #676767;
}
.avatar {
padding: 0px;
margin-right: 10px;
vertical-align: middle;
font-size: 22pt;
border-radius: 20px;
}
#contactlist .clickable {
cursor: pointer;
}

View File

@@ -1,361 +0,0 @@
* {
-webkit-user-select: none;
user-select: none;
}
html, body{
margin:0px;
height:100%;
color: #424242;
font-family:'Helvetica Neue', Helvetica, sans-serif;
font-weight: 400;
background: #000000;
overflow-x: hidden;
}
.right-panel {
display:none;
position:absolute;
float: right;
top: 0px;
bottom: 0px;
right: 0px;
width: 20%;
max-width: 200px;
overflow: hidden;
/* background-color:#dfebf1;*/
background-color:#FFFFFF;
border-left:1px solid #424242;
z-index: 5;
}
#settings {
display:none;
}
#nowebrtc {
display:none;
}
.toolbar_span {
display: inline-block;
position: relative;
}
.button {
display: inline-block;
position: relative;
color: #FFFFFF;
top: 0px;
padding: 10px 0px;
width: 38px;
cursor: pointer;
font-size: 11pt;
text-align: center;
text-shadow: 0px 1px 0px rgba(255,255,255,.3), 0px -1px 0px rgba(0,0,0,.6);
z-index: 1;
}
.toolbar_span>span {
display: inline-block;
position: absolute;
font-size: 7pt;
color: #ffffff;
text-align:center;
cursor: pointer;
}
#chatButton, #chatBottomButton, #contactListButton, #numberOfParticipants {
-webkit-transition: all .5s ease-in-out;
-moz-transition: all .5s ease-in-out;
transition: all .5s ease-in-out;
}
/*#ffde00*/
#chatButton.active, #contactListButton.glowing, #chatBottomButton.glowing {
-webkit-text-shadow: -1px 0 10px #00ccff,
0 1px 10px #00ccff,
1px 0 10px #00ccff,
0 -1px 10px #00ccff;
-moz-text-shadow: 1px 0 10px #00ccff,
0 1px 10px #00ccff,
1px 0 10px #00ccff,
0 -1px 10px #00ccff;
text-shadow: -1px 0 10px #00ccff,
0 1px 10px #00ccff,
1px 0 10px #00ccff,
0 -1px 10px #00ccff;
}
#numberOfParticipants {
position: absolute;
top: 0px;
right: -1;
color: white;
width: 13px;
height: 13px;
line-height: 13px;
font-weight: bold;
border-radius: 2px;
font-size: 11px;
text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
}
#contactListButton.active #numberOfParticipants {
color: #00ccff;
}
#recordButton {
-webkit-transition: all .5s ease-in-out;
-moz-transition: all .5s ease-in-out;
transition: all .5s ease-in-out;
}
/*#ffde00*/
#recordButton.active {
-webkit-text-shadow: -1px 0 10px #00ccff,
0 1px 10px #00ccff,
1px 0 10px #00ccff,
0 -1px 10px #00ccff;
-moz-text-shadow: 1px 0 10px #00ccff,
0 1px 10px #00ccff,
1px 0 10px #00ccff,
0 -1px 10px #00ccff;
text-shadow: -1px 0 10px #00ccff,
0 1px 10px #00ccff,
1px 0 10px #00ccff,
0 -1px 10px #00ccff;
}
a.button:hover,
a.bottomToolbarButton:hover {
top: 0px;
cursor: pointer;
background: rgba(255, 255, 255, 0.1);
border-radius: 6px;
background-clip: padding-box;
-webkit-border-radius: 6px;
-webkit-background-clip: padding-box;
}
.no-fa-video-camera, .fa-microphone-slash {
color: #636363;
}
.header_button_separator {
display: inline-block;
position:relative;
top: 5;
width: 1px;
height: 20px;
background: #373737;
}
.bottom_button_separator {
display: inline-block;
position: relative;
left: 5;
width: 20px;
height: 1px;
background: #373737;
}
input[type='text'], input[type='password'], textarea {
display: inline-block;
font-size: 14px;
padding: 5px;
background: #f3f3f3;
border-radius: 3px;
font-weight: 100;
line-height: 20px;
height: 40px;
color: #333;
text-align: left;
border:1px solid #ACD8F0;
outline: none; /* removes the default outline */
resize: none; /* prevents the user-resizing, adjust to taste */
}
input[type='text'], input[type='password'], textarea:focus {
box-shadow: inset 0 0 3px 2px #ACD8F0; /* provides a more style-able
replacement to the outline */
}
textarea {
overflow: hidden;
word-wrap: break-word;
resize: horizontal;
}
button.no-icon {
padding: 0 1em;
}
button {
border: none;
height: 35px;
padding: 0 1em 0 2em;
position: relative;
border-radius: 3px;
font-weight: bold;
color: #fff;
line-height: 35px;
background: #2c8ad2;
}
button, input, select, textarea {
margin: 0;
vertical-align: baseline;
}
button, input[type="button"], input[type="reset"], input[type="submit"] {
cursor: pointer;
-webkit-appearance: button;
}
form {
display: block;
}
#downloadlog {
position: absolute;
bottom: 5;
left: 5;
overflow: visible;
z-index: 100;
color: rgba(255,255,255,.50);
}
#bottomToolbar {
display:block;
position: absolute;
right: 0;
margin-right: 5px;
bottom: 40px;
width: 29px;
border-radius: 6px;
color: #FFF;
border: 1px solid rgba(256, 256, 256, 0.2);
background: rgba(0,0,0,0.8);
z-index: 6; /*+1 from #remoteVideos*/
}
.bottomToolbarButton {
display: inline-block;
position: relative;
color: #FFFFFF;
top: 0;
padding-top: 6px;
margin: 2px;
width: 25px;
height: 20px;
cursor: pointer;
font-size: 10pt;
text-align: center;
text-shadow: 0px 1px 0px rgba(255,255,255,.3), 0px -1px 0px rgba(0,0,0,.7);
z-index: 1;
}
.active {
color: #00ccff;
}
.bottomToolbar_span>span {
display: inline-block;
position: absolute;
font-size: 7pt;
color: #ffffff;
text-align: center;
cursor: pointer;
}
.glow
{
text-shadow: 0px 0px 30px #06a5df, 0px 0px 10px #06a5df, 0px 0px 5px #06a5df,0px 0px 3px #06a5df;
}
.watermark {
display: block;
position: absolute;
top: 15;
width: 186px;
height: 74px;
background-size: contain;
background-repeat: no-repeat;
z-index: 2;
}
.leftwatermark {
display: none;
left: 15;
background-image:url(../images/watermark.png);
background-position: center left;
}
.rightwatermark {
display: none;
right: 15;
background-position: center right;
}
.poweredby {
display: none;
position: absolute;
left: 25;
bottom: 7;
font-size: 11pt;
color: rgba(255,255,255,.50);
text-decoration: none;
z-index: 100;
}
#toast-container.notification-bottom-right {
bottom: 120px;
right: 5px;
}
#toast-container.notification-bottom-right-center {
right: 205px;
}
#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;
}
.connected {
color: forestgreen;
font-size: 12px;
}
.disconnected {
color: darkred;
font-size: 12px;
}
.lastN {
color: #a3a3a3;
font-size: 12px;
}
.toast-close-button:hover,
.toast-close-button:focus {
color: #ffffff;
opacity: 1;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
filter: alpha(opacity=100);
}
.toast-message .nickname {
font-weight: bold;
}

45
css/main.scss Normal file
View File

@@ -0,0 +1,45 @@
/* Variables BEGIN */
@import 'variables';
/* Variables END */
/* Mixins BEGIN */
@import "mixins";
/* Mixins END */
/* Fonts BEGIN */
@import 'font';
@import 'font-awesome';
/* Fonts END */
/* Modules BEGIN */
@import 'toastr';
@import 'base';
@import 'overlay/overlay';
@import 'videolayout_default';
@import 'jquery-impromptu';
@import 'modaldialog';
@import 'notice';
@import 'popup_menu';
@import 'recording';
@import 'login_menu';
@import 'popover';
@import 'jitsi_popover';
@import 'contact_list';
@import 'chat';
@import 'ringing/ringing';
@import 'welcome_page';
@import 'toolbars';
@import 'side_toolbar_container';
@import 'device_settings_dialog';
@import 'feedback';
@import 'jquery.contextMenu';
@import 'keyboard-shortcuts';
/* Modules END */

48
css/overlay/_overlay.scss Normal file
View File

@@ -0,0 +1,48 @@
.overlay {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: $overlayZ;
background: #21B9FC; /* Old browsers */
opacity: 0.75;
display: block;
}
.overlay_transparent {
background: rgba(22, 185, 252, .9);
}
.overlay_container {
width: 100%;
height: 100%;
position: fixed;
z-index: $overlayZ;
}
.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;
}

36
css/ringing/_ringing.scss Normal file
View File

@@ -0,0 +1,36 @@
.ringing {
display: block;
left: 0;
top: 0;
width: 100%;
height: 100%;
position: fixed;
z-index: $overlayZ;
background: linear-gradient(transparent, #000);
opacity: 0.8;
&__content {
position: absolute;
width: 400px;
height: 250px;
left: 50%;
top: 50%;
margin-left: -200px;
margin-top: -125px;
font-weight: 400;
font-size: 14px;
text-align: center;
}
&__avatar {
width: 100px;
height: 100px;
border-radius: 50%;
}
&__caller-info {
.mention {
color: #333;
}
}
}

View File

@@ -1,45 +0,0 @@
#settingsmenu {
background: black;
color: #00ccff;
}
#settingsmenu input {
margin-top: 10px;
margin-left: 10%;
width: 80%;
font-size: 14px;
background: #3a3a3a;
border: none;
box-shadow: none;
color: #a7a7a7;
}
#settingsmenu .arrow-up {
width: 0;
height: 0;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-bottom: 5px solid #3a3a3a;
position: relative;
top: 10px;
margin-left: auto;
margin-right: auto;
}
#settingsmenu button {
width: 36%;
left: 32%;
padding: 0;
margin-top: 10px;
}
#settingsmenu #avatar {
width: 24%;
left: 38%;
border-radius: 25px;
position: relative;
}
#settingsmenu .icon-settings {
padding: 34px;
}

View File

@@ -0,0 +1,138 @@
@import 'variables';
body {
width:100%;
height:100%;
background-color: white;
color: #424242;
font-family: $baseFontFamily;
font-size: 28px;
margin:0;
padding:0;
}
#wrap{
display: block;
position: absolute;
width:500px;
height: 565px;
overflow:hidden;
text-align: center;
margin: auto;
top: 0; left: 0; bottom: 0; right: 0;
}
.firefox{
font-size: 11pt;
color: #c8c8c8;
width: 468px;
text-align: center;
margin: 30px auto 0px auto;
padding-left: 15px;
}
#text{
display:inline-block;
font-size: 28px;
/* width: 568px; */
vertical-align:middle;
padding-top: 25px;
}
a {
color: #087dba;
text-decoration:none;
}
.browser {
width: 138px;
height: 163px;
margin-top: 5px;
background-color: #e8e8e8;
border: 1px solid #cfcfcf;
border-radius: 10px;
}
.browser_wrapper
{
width: 138px;
/* height: 188px; */
vertical-align: middle;
color: #929391;
font-size: 20px;
float: left;
margin-left: 15px;
margin-top: 5px;
}
.browser_text
{
height: 2em;
}
.supported_browsers
{
margin: 0px auto 0px auto;
/* width: 660px; */
}
.clear
{
clear: both;
}
.button
{
background-color: #62c82a;
border: 1px solid #3c8117;
border-radius: 10px;
color: #FFFFFF;
font-size: 12px;
text-align: center;
width: 115px;
height: 26px;
padding-top: 13px;
margin: 15px auto 0px auto;
}
.logo
{
margin: 20px auto 0px auto;
}
#chrome_logo
{
width: 78px;
height: 78px;
background-image: url('../images/chrome.png');
}
#chromium_logo
{
width: 77px;
height: 78px;
background-image: url('../images/chromium.png');
}
#firefox_logo
{
width: 86px;
height: 80px;
background-image: url('../images/firefox.png');
}
#opera_logo
{
width: 73px;
height: 78px;
background-image: url('../images/opera.png');
}
#safari_logo
{
width: 78px;
height: 79px;
background-image: url('../images/safari.png');
}
#ie_logo
{
width: 80px;
height: 78px;
background-image: url('../images/ie.png');
}

View File

@@ -1,180 +0,0 @@
/* global connection, Strophe, updateLargeVideo, focusedVideoSrc*/
// cache datachannels to avoid garbage collection
// https://code.google.com/p/chromium/issues/detail?id=405545
var _dataChannels = [];
/**
* Callback triggered by PeerConnection when new data channel is opened
* on the bridge.
* @param event the event info object.
*/
function onDataChannel(event)
{
var dataChannel = event.channel;
dataChannel.onopen = function ()
{
console.info("Data channel opened by the Videobridge!", dataChannel);
// Code sample for sending string and/or binary data
// Sends String message to the bridge
//dataChannel.send("Hello bridge!");
// Sends 12 bytes binary message to the bridge
//dataChannel.send(new ArrayBuffer(12));
// when the data channel becomes available, tell the bridge about video
// selections so that it can do adaptive simulcast,
var userJid = VideoLayout.getLargeVideoState().userJid;
// we want the notification to trigger even if userJid is undefined,
// or null.
onSelectedEndpointChanged(userJid);
};
dataChannel.onerror = function (error)
{
console.error("Data Channel Error:", error, dataChannel);
};
dataChannel.onmessage = function (event)
{
var data = event.data;
// JSON
var obj;
try
{
obj = JSON.parse(data);
}
catch (e)
{
console.error(
"Failed to parse data channel message as JSON: ",
data,
dataChannel);
}
if (('undefined' !== typeof(obj)) && (null !== obj))
{
var colibriClass = obj.colibriClass;
if ("DominantSpeakerEndpointChangeEvent" === colibriClass)
{
// Endpoint ID from the Videobridge.
var dominantSpeakerEndpoint = obj.dominantSpeakerEndpoint;
console.info(
"Data channel new dominant speaker event: ",
dominantSpeakerEndpoint);
$(document).trigger(
'dominantspeakerchanged',
[dominantSpeakerEndpoint]);
}
else if ("InLastNChangeEvent" === colibriClass)
{
var oldValue = obj.oldValue;
var newValue = obj.newValue;
// Make sure that oldValue and newValue are of type boolean.
var type;
if ((type = typeof oldValue) !== 'boolean') {
if (type === 'string') {
oldValue = (oldValue == "true");
} else {
oldValue = new Boolean(oldValue).valueOf();
}
}
if ((type = typeof newValue) !== 'boolean') {
if (type === 'string') {
newValue = (newValue == "true");
} else {
newValue = new Boolean(newValue).valueOf();
}
}
$(document).trigger('inlastnchanged', [oldValue, newValue]);
}
else if ("LastNEndpointsChangeEvent" === colibriClass)
{
// The new/latest list of last-n endpoint IDs.
var lastNEndpoints = obj.lastNEndpoints;
// The list of endpoint IDs which are entering the list of
// last-n at this time i.e. were not in the old list of last-n
// endpoint IDs.
var endpointsEnteringLastN = obj.endpointsEnteringLastN;
var stream = obj.stream;
console.log(
"Data channel new last-n event: ",
lastNEndpoints, endpointsEnteringLastN, obj);
$(document).trigger(
'lastnchanged',
[lastNEndpoints, endpointsEnteringLastN, stream]);
}
else if ("SimulcastLayersChangedEvent" === colibriClass)
{
$(document).trigger(
'simulcastlayerschanged',
[obj.endpointSimulcastLayers]);
}
else if ("SimulcastLayersChangingEvent" === colibriClass)
{
$(document).trigger(
'simulcastlayerschanging',
[obj.endpointSimulcastLayers]);
}
else if ("StartSimulcastLayerEvent" === colibriClass)
{
$(document).trigger('startsimulcastlayer', obj.simulcastLayer);
}
else if ("StopSimulcastLayerEvent" === colibriClass)
{
$(document).trigger('stopsimulcastlayer', obj.simulcastLayer);
}
else
{
console.debug("Data channel JSON-formatted message: ", obj);
}
}
};
dataChannel.onclose = function ()
{
console.info("The Data Channel closed", dataChannel);
var idx = _dataChannels.indexOf(dataChannel);
if (idx > -1)
_dataChannels = _dataChannels.splice(idx, 1);
};
_dataChannels.push(dataChannel);
}
/**
* Binds "ondatachannel" event listener to given PeerConnection instance.
* @param peerConnection WebRTC peer connection instance.
*/
function bindDataChannelListener(peerConnection)
{
peerConnection.ondatachannel = onDataChannel;
// Sample code for opening new data channel from Jitsi Meet to the bridge.
// Although it's not a requirement to open separate channels from both bridge
// and peer as single channel can be used for sending and receiving data.
// So either channel opened by the bridge or the one opened here is enough
// for communication with the bridge.
/*
var dataChannelOptions = { reliable: true };
var dataChannel
= peerConnection.createDataChannel("myChannel", dataChannelOptions);
// Can be used only when is in open state
dataChannel.onopen = function ()
{
dataChannel.send("My channel !!!");
};
dataChannel.onmessage = function (event)
{
var msgData = event.data;
console.info("Got My Data Channel Message:", msgData, dataChannel);
};
*/
}

23
debian/control vendored
View File

@@ -3,33 +3,38 @@ Section: net
Priority: extra
Maintainer: Jitsi Team <dev@jitsi.org>
Uploaders: Emil Ivov <emcho@jitsi.org>, Damian Minkov <damencho@jitsi.org>
Build-Depends: debhelper (>= 8.0.0), libjs-strophe (>= 1.1.3), yui-compressor,
libjs-jquery, libjs-jquery-ui
Build-Depends: debhelper (>= 8.0.0)
Standards-Version: 3.9.6
Homepage: https://jitsi.org/meet
Package: jitsi-meet
Architecture: all
Pre-Depends: jitsi-videobridge
Depends: ${misc:Depends}, nginx, jitsi-meet-prosody, libjs-strophe (>= 1.1.3),
libjs-jquery, libjs-jquery-ui
Depends: ${misc:Depends}, jitsi-videobridge, jitsi-meet-prosody,
openjdk-8-jre-headless | nginx
Description: WebRTC JavaScript video conferences
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi
Videobridge to provide high quality, scalable video conferences.
.
It is a web interface to Jitsi Videobridge for audio and video
forwarding and relaying, configured to work with nginx
forwarding and relaying, configured to work with jetty instance
running embedded into Jitsi Videobridge
Package: jitsi-meet-prosody
Architecture: all
Pre-Depends: openssl, prosody | prosody-trunk, jitsi-videobridge
Depends: ${misc:Depends}, jicofo
Depends: ${misc:Depends}, openssl, prosody | prosody-trunk, jitsi-videobridge, jicofo
Description: Prosody configuration for Jitsi Meet
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi
Videobridge to provide high quality, scalable video conferences.
.
It is a web interface to Jitsi Videobridge for audio and video
forwarding and relaying, configured to work with nginx
forwarding and relaying, configured to work with jetty instance
running embedded into Jitsi Videobridge
.
This package contains configuration for Prosody to be used with
Jitsi Meet.
Package: jitsi-meet-tokens
Architecture: all
Depends: ${misc:Depends}, prosody-trunk (>= 1nightly607), libssl-dev, luarocks, jitsi-meet-prosody
Description: Prosody token authentication plugin for Jitsi Meet

13
debian/copyright vendored
View File

@@ -4,10 +4,17 @@ Upstream-Contact: Emil Ivov <emcho@jitsi.org>
Source: https://github.com/jitsi/jitsi-meet
Files: *
Copyright: 2013-2014 Jitsi
License: MIT
Copyright: 2015 Atlassian Pty Ltd
License: Apache-2.0
License: MIT
License: Apache-2.0
On Debian systems, the full text of the Apache
License version 2 can be found in the file
'/usr/share/common-licenses/Apache-2.0'.
Note:
This project was originally contributed to the community under the MIT license
and with the following notice:
.
The MIT License (MIT)
.
Copyright (c) 2013 ESTOS GmbH

View File

@@ -28,6 +28,15 @@ case "$1" in
# loading debconf
. /usr/share/debconf/confmodule
# detect dpkg-reconfigure, just delete old links
db_get jitsi-meet-prosody/jvb-hostname
JVB_HOSTNAME_OLD=$RET
if [ -n "$RET" ] && [ ! "$JVB_HOSTNAME_OLD" = "$JVB_HOSTNAME" ] ; then
rm -f /etc/prosody/conf.d/$JVB_HOSTNAME_OLD.cfg.lua
rm -f /etc/prosody/certs/$JVB_HOSTNAME_OLD.key
rm -f /etc/prosody/certs/$JVB_HOSTNAME_OLD.crt
fi
# stores the hostname so we will reuse it later, like in purge
db_set jitsi-meet-prosody/jvb-hostname $JVB_HOSTNAME
@@ -52,12 +61,17 @@ case "$1" in
ln -s $PROSODY_HOST_CONFIG /etc/prosody/conf.d/$JVB_HOSTNAME.cfg.lua
fi
PROSODY_CREATE_JICOFO_USER="true"
# on some distributions main prosody config doesn't include configs
# from conf.d folder enable it as this where we put our config by default
if ! grep -q "Include \"conf\.d\/\*\.cfg.lua\"" $PROSODY_CONFIG_OLD; then
echo -e "\nInclude \"conf.d/*.cfg.lua\"" >> $PROSODY_CONFIG_OLD
fi
fi
# UPGRADE to server side focus check if focus is configured
if [ -f $PROSODY_HOST_CONFIG ] && ! grep -q "VirtualHost \"auth.$JVB_HOSTNAME\"" $PROSODY_HOST_CONFIG; then
echo -e "\nVirtualHost \"auth.$JVB_HOSTNAME\"" >> $PROSODY_HOST_CONFIG
echo -e " authentication = \"internal_plain\"\n" >> $PROSODY_HOST_CONFIG
echo -e "admins = { \"$JICOFO_AUTH_USER@auth.$JVB_HOSTNAME\" }\n" >> $PROSODY_HOST_CONFIG
sed -i "s/Component \"conference.$JVB_HOSTNAME\" \"muc\"/Component \"conference.$JVB_HOSTNAME\" \"muc\"\nadmins = { \"$JICOFO_AUTH_USER@auth.$JVB_HOSTNAME\" }\n/g" $PROSODY_HOST_CONFIG
echo -e "Component \"focus.$JVB_HOSTNAME\"" >> $PROSODY_HOST_CONFIG
echo -e " component_secret=\"$JICOFO_SECRET\"\n" >> $PROSODY_HOST_CONFIG
PROSODY_CREATE_JICOFO_USER="true"

View File

@@ -25,7 +25,7 @@ set -e
case "$1" in
remove)
if [ -x "/etc/init.d/prosody" ]; then
invoke-rc.d nginx reload
invoke-rc.d prosody reload
fi
;;

View File

@@ -1,5 +1,4 @@
Template: jitsi-meet-prosody/jvb-hostname
Type: string
Default: ${default-key}
_Description: The hostname of the current installation:
The value for the hostname that is set in Jitsi Videobridge installation.

View File

@@ -0,0 +1,7 @@
Token authentication plugin for Jitsi Meet
----------------------------
Jitsi Meet is a WebRTC video conferencing application. This package contains
Prosody plugin which enables token authentication in Jitsi Meet installation.
-- Pawel Domas <pawel.domas@jitsi.org> Mon, 2 Nov 2015 14:45:00 -0600

10
debian/jitsi-meet-tokens.config vendored Normal file
View File

@@ -0,0 +1,10 @@
#!/bin/sh -e
# Source debconf library.
. /usr/share/debconf/confmodule
db_input critical jitsi-meet-tokens/appid || true
db_go
db_input critical jitsi-meet-tokens/appsecret || true
db_go

0
debian/jitsi-meet-tokens.docs vendored Normal file
View File

1
debian/jitsi-meet-tokens.install vendored Normal file
View File

@@ -0,0 +1 @@
prosody-plugins/ /usr/share/jitsi-meet/

105
debian/jitsi-meet-tokens.postinst vendored Normal file
View File

@@ -0,0 +1,105 @@
#!/bin/bash
# postinst script for jitsi-meet-tokens
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
# <new-version>
# * <postinst> `abort-remove'
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
case "$1" in
configure)
if [ -f "/etc/jitsi/videobridge/config" ] ; then
. /etc/jitsi/videobridge/config
fi
if [ -f "/etc/jitsi/jicofo/config" ] ; then
. /etc/jitsi/jicofo/config
fi
# loading debconf
. /usr/share/debconf/confmodule
db_get jitsi-meet-tokens/appid
if [ "$RET" = "false" ] ; then
echo "Application ID is mandatory"
exit 1
fi
APP_ID=$RET
db_get jitsi-meet-tokens/appsecret
if [ "$RET" = "false" ] ; then
echo "Application secret is mandatory"
fi
APP_SECRET=$RET
# We can adjust Prosody config only if there is Jvb or Jicofo domain configured
PROSODY_HOST_CONFIG="/etc/prosody/conf.avail/$JVB_HOSTNAME.cfg.lua"
if [ ! -f "$PROSODY_HOST_CONFIG" ] ; then
PROSODY_HOST_CONFIG="/etc/prosody/conf.avail/$JICOFO_HOSTNAME.cfg.lua"
fi
# Store config filename for purge
db_set jitsi-meet-prosody/prosody_config $PROSODY_HOST_CONFIG
db_stop
if [ -f "$PROSODY_HOST_CONFIG" ] ; then
if grep -q "plugin_paths" "$PROSODY_HOST_CONFIG"; then
# enable tokens in prosody host config
sed -i 's/--plugin_paths/plugin_paths/g' $PROSODY_HOST_CONFIG
sed -i 's/authentication = "anonymous"/authentication = "token"/g' $PROSODY_HOST_CONFIG
sed -i 's/ --allow_unencrypted_plain_auth/ allow_unencrypted_plain_auth/g' $PROSODY_HOST_CONFIG
sed -i "s/ --app_id=\"example_app_id\"/ app_id=\"$APP_ID\"/g" $PROSODY_HOST_CONFIG
sed -i "s/ --app_secret=\"example_app_secret\"/ app_secret=\"$APP_SECRET\"/g" $PROSODY_HOST_CONFIG
sed -i 's/ --modules_enabled = { "token_verification" }/ modules_enabled = { "token_verification" }/g' $PROSODY_HOST_CONFIG
# Install luajwt
if ! luarocks install luajwtjitsi; then
echo "Failed to install luajwtjitsi - try installing it manually"
fi
if [ -x "/etc/init.d/prosody" ]; then
invoke-rc.d prosody restart
fi
echo "This package requires BOSH Prosody module to be patched !"
echo "Use the following command, after this package has been installed and"
echo "after every prosody-trunk upgrade:"
echo "sudo patch -N /usr/lib/prosody/modules/mod_bosh.lua /usr/share/jitsi-meet/prosody-plugins/mod_bosh.lua.patch"
else
echo "Failed apply auto-config to $PROSODY_HOST_CONFIG which most likely comes from not supported version of jitsi-meet"
fi
else
echo "Prosody config not found at $PROSODY_HOST_CONFIG - unable to auto-configure token authentication"
fi
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0

73
debian/jitsi-meet-tokens.postrm vendored Normal file
View File

@@ -0,0 +1,73 @@
#!/bin/sh
# postrm script for jitsi-meet-tokens
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postrm> `remove'
# * <postrm> `purge'
# * <old-postrm> `upgrade' <new-version>
# * <new-postrm> `failed-upgrade' <old-version>
# * <new-postrm> `abort-install'
# * <new-postrm> `abort-install' <old-version>
# * <new-postrm> `abort-upgrade' <old-version>
# * <disappearer's-postrm> `disappear' <overwriter>
# <overwriter-version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
# Load debconf
. /usr/share/debconf/confmodule
case "$1" in
remove)
db_get jitsi-meet-prosody/prosody_config
PROSODY_HOST_CONFIG=$RET
if [ -f "$PROSODY_HOST_CONFIG" ] ; then
db_get jitsi-meet-tokens/appid
APP_ID=$RET
db_get jitsi-meet-tokens/appsecret
APP_SECRET=$RET
# Revert prosody config
sed -i 's/plugin_paths/--plugin_paths/g' $PROSODY_HOST_CONFIG
sed -i 's/authentication = "token"/authentication = "anonymous"/g' $PROSODY_HOST_CONFIG
sed -i "s/ app_id=\"$APP_ID\"/ --app_id=\"example_app_id\"/g" $PROSODY_HOST_CONFIG
sed -i "s/ app_secret=\"$APP_SECRET\"/ --app_secret=\"example_app_secret\"/g" $PROSODY_HOST_CONFIG
sed -i 's/ modules_enabled = { "token_verification" }/ --modules_enabled = { "token_verification" }/g' $PROSODY_HOST_CONFIG
if [ -x "/etc/init.d/prosody" ]; then
invoke-rc.d prosody restart
fi
fi
db_stop
;;
purge)
;;
upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
;;
*)
echo "postrm called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
db_stop
exit 0

14
debian/jitsi-meet-tokens.templates vendored Normal file
View File

@@ -0,0 +1,14 @@
Template: jitsi-meet-tokens/appid
Type: string
_Description: The application ID to be used by token authentication plugin:
Application ID:
Template: jitsi-meet-tokens/appsecret
Type: password
_Description: The application secret to be used by token authentication plugin:
Application secret:
Template: jitsi-meet-prosody/prosody_config
Type: string
_Description: The location of Jitsi Meet Prosody config file
Jitsi-meet Prosody config file location:

View File

@@ -3,7 +3,10 @@
*.html /usr/share/jitsi-meet/
*.ico /usr/share/jitsi-meet/
libs /usr/share/jitsi-meet/
css /usr/share/jitsi-meet/
css/all.css /usr/share/jitsi-meet/css/
css/unsupported_browser.css /usr/share/jitsi-meet/css/
sounds /usr/share/jitsi-meet/
fonts /usr/share/jitsi-meet/
images /usr/share/jitsi-meet/
images /usr/share/jitsi-meet/
lang /usr/share/jitsi-meet/
connection_optimization /usr/share/jitsi-meet/

View File

@@ -1,3 +0,0 @@
usr/share/javascript/strophe/strophe.min.js usr/share/jitsi-meet/libs/strophe/strophe.min.js
usr/share/javascript/jquery/jquery.min.js usr/share/jitsi-meet/libs/jquery.min.js
usr/share/javascript/jquery-ui/jquery-ui.min.js usr/share/jitsi-meet/libs/jquery-ui.min.js

View File

@@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
# postinst script for jitsi-meet
#
# see: dh_installdeb(1)
@@ -20,63 +20,168 @@ set -e
case "$1" in
configure)
. /etc/jitsi/videobridge/config
JVB_ETC_CONFIG="/etc/jitsi/videobridge/config"
. $JVB_ETC_CONFIG
# loading debconf
. /usr/share/debconf/confmodule
# detect dpkg-reconfigure
RECONFIGURING="false"
db_get jitsi-meet/jvb-hostname
JVB_HOSTNAME_OLD=$RET
if [ -n "$RET" ] && [ ! "$JVB_HOSTNAME_OLD" = "$JVB_HOSTNAME" ] ; then
RECONFIGURING="true"
rm -f /etc/jitsi/meet/$JVB_HOSTNAME_OLD-config.js
fi
JVB_SERVE="false"
db_get jitsi-meet/jvb-serve
if [ -n "$RET" ] && [ "$RET" = "true" ] ; then
JVB_SERVE="true"
fi
# stores the hostname so we will reuse it later, like in purge
db_set jitsi-meet/jvb-hostname $JVB_HOSTNAME
# nginx conf
if [ ! -f /etc/nginx/sites-available/$JVB_HOSTNAME.conf ]; then
cp /usr/share/doc/jitsi-meet/jitsi-meet.example /etc/nginx/sites-available/$JVB_HOSTNAME.conf
if [ ! -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf ]; then
ln -s /etc/nginx/sites-available/$JVB_HOSTNAME.conf /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
fi
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" /etc/nginx/sites-available/$JVB_HOSTNAME.conf
fi
if grep "# server_names_hash_bucket_size 64" /etc/nginx/nginx.conf > /dev/null; then
sed -i "s/#\ server_names_hash_bucket_size\ 64/\ server_names_hash_bucket_size\ 64/" /etc/nginx/nginx.conf
NGINX_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'nginx' 2>/dev/null | awk '{print $3}' || true)"
if [ "$NGINX_INSTALL_CHECK" = "installed" ] || [ "$NGINX_INSTALL_CHECK" = "unpacked" ] ; then
FORCE_NGINX="true"
fi
# SSL for nginx
db_get jitsi-meet/cert-choice
CERT_CHOICE="$RET"
if [ "$CERT_CHOICE" = 'A certificate is available and the files are uploaded on the server' ]; then
db_set jitsi-meet/cert-path-key "/etc/ssl/$JVB_HOSTNAME.key"
db_input critical jitsi-meet/cert-path-key || true
db_go
db_get jitsi-meet/cert-path-key
CERT_KEY="$RET"
db_set jitsi-meet/cert-path-crt "/etc/ssl/$JVB_HOSTNAME.crt"
db_input critical jitsi-meet/cert-path-crt || true
db_go
db_get jitsi-meet/cert-path-crt
CERT_CRT="$RET"
# replace self-signed certificate paths with user provided ones
CERT_KEY_ESC=$(echo $CERT_KEY | sed 's/\./\\\./g')
CERT_KEY_ESC=$(echo $CERT_KEY_ESC | sed 's/\//\\\//g')
sed -i "s/ssl_certificate_key\ \/var\/lib\/prosody\/.*key/ssl_certificate_key\ $CERT_KEY_ESC/g" \
/etc/nginx/sites-available/$JVB_HOSTNAME.conf
CERT_CRT_ESC=$(echo $CERT_CRT | sed 's/\./\\\./g')
CERT_CRT_ESC=$(echo $CERT_CRT_ESC | sed 's/\//\\\//g')
sed -i "s/ssl_certificate\ \/var\/lib\/prosody\/.*crt/ssl_certificate\ $CERT_CRT_ESC/g" \
/etc/nginx/sites-available/$JVB_HOSTNAME.conf
fi
UPLOADED_CERT_CHOICE="A certificate is available and the files are uploaded on the server"
# jitsi meet
JITSI_MEET_CONFIG="/etc/jitsi/meet/$JVB_HOSTNAME-config.js"
if [ ! -f $JITSI_MEET_CONFIG ]; then
if [ ! -f $JITSI_MEET_CONFIG ] ; then
cp /usr/share/doc/jitsi-meet/config.js $JITSI_MEET_CONFIG
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" $JITSI_MEET_CONFIG
fi
# this is new install let's configure jvb to serve meet
if [[ -z $FORCE_NGINX && ( -z $JVB_HOSTNAME_OLD || "$JVB_SERVE" = "true" ) ]] ; then
JVB_CONFIG="/etc/jitsi/videobridge/sip-communicator.properties"
# this is a reconfigure, lets just delete old links
if [ "$RECONFIGURING" = "true" ] ; then
rm -f $JVB_CONFIG
fi
# we will write to the file if missing create it
if [ ! -f $JVB_CONFIG ] ; then
touch $JVB_CONFIG
fi
# configure jvb
echo "AUTHBIND=yes" >> $JVB_ETC_CONFIG
sed -i "s/JVB_OPTS=.*/JVB_OPTS=--apis=rest,xmpp/g" $JVB_ETC_CONFIG
echo "org.jitsi.videobridge.rest.jetty.host=::" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.port=443" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.ProxyServlet.hostHeader=$JVB_HOSTNAME" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.ProxyServlet.pathSpec=/http-bind" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.ProxyServlet.proxyTo=http://localhost:5280/http-bind" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.ResourceHandler.resourceBase=/usr/share/jitsi-meet" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.ResourceHandler.alias./config.js=/etc/jitsi/meet/$JVB_HOSTNAME-config.js" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.ResourceHandler.alias./interface_config.js=/usr/share/jitsi-meet/interface_config.js" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.RewriteHandler.regex=^/([a-zA-Z0-9]+)$" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.RewriteHandler.replacement=/" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.SSIResourceHandler.paths=/" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.tls.port=443" >> $JVB_CONFIG
echo "org.jitsi.videobridge.TCP_HARVESTER_PORT=443" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.sslContextFactory.keyStorePath=/etc/jitsi/videobridge/$JVB_HOSTNAME.jks" >> $JVB_CONFIG
echo "org.jitsi.videobridge.rest.jetty.sslContextFactory.keyStorePassword=changeit" >> $JVB_CONFIG
# configure authbind to allow jvb to bind to privileged ports
OWNER=$(stat -c '%U' /usr/share/jitsi-videobridge)
GROUP=$(stat -c '%G' /usr/share/jitsi-videobridge)
JVB_UID="`id -u $OWNER`"
if [ ! -f "/etc/authbind/byport/443" ] ; then
if [ ! -d "/etc/authbind/byport" ] ; then
mkdir -p /etc/authbind/byport
chmod 755 /etc/authbind
chmod 755 /etc/authbind/byport
fi
touch /etc/authbind/byport/443
chown $OWNER /etc/authbind/byport/443
chmod 755 /etc/authbind/byport/443
fi
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
# create jks from uploaded certs
openssl pkcs12 -export \
-in /etc/ssl/$JVB_HOSTNAME.crt \
-inkey /etc/ssl/$JVB_HOSTNAME.key \
-passout pass:changeit > /etc/jitsi/videobridge/$JVB_HOSTNAME.p12
keytool -importkeystore \
-srckeystore /etc/jitsi/videobridge/$JVB_HOSTNAME.p12 \
-destkeystore /etc/jitsi/videobridge/$JVB_HOSTNAME.jks \
-srcstoretype pkcs12 \
-noprompt -storepass changeit -srcstorepass changeit
else
# create jks from self-signed certs
openssl pkcs12 -export \
-in /var/lib/prosody/$JVB_HOSTNAME.crt \
-inkey /var/lib/prosody/$JVB_HOSTNAME.key \
-passout pass:changeit > /etc/jitsi/videobridge/$JVB_HOSTNAME.p12
keytool -importkeystore \
-srckeystore /etc/jitsi/videobridge/$JVB_HOSTNAME.p12 \
-destkeystore /etc/jitsi/videobridge/$JVB_HOSTNAME.jks \
-srcstoretype pkcs12 \
-noprompt -storepass changeit -srcstorepass changeit
fi
db_set jitsi-meet/jvb-serve "true"
invoke-rc.d jitsi-videobridge restart
elif [[ "$FORCE_NGINX" = "true" || ( -n $JVB_HOSTNAME_OLD && "$JVB_SERVE" = "false" ) ]] ; then
# this is a reconfigure, lets just delete old links
if [ "$RECONFIGURING" = "true" ] ; then
rm -f /etc/nginx/sites-enabled/$JVB_HOSTNAME_OLD.conf
rm -f /etc/jitsi/meet/$JVB_HOSTNAME_OLD-config.js
fi
# nginx conf
if [ ! -f /etc/nginx/sites-available/$JVB_HOSTNAME.conf ] ; then
cp /usr/share/doc/jitsi-meet/jitsi-meet.example /etc/nginx/sites-available/$JVB_HOSTNAME.conf
if [ ! -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf ] ; then
ln -s /etc/nginx/sites-available/$JVB_HOSTNAME.conf /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
fi
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" /etc/nginx/sites-available/$JVB_HOSTNAME.conf
fi
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
db_set jitsi-meet/cert-path-key "/etc/ssl/$JVB_HOSTNAME.key"
db_input critical jitsi-meet/cert-path-key || true
db_go
db_get jitsi-meet/cert-path-key
CERT_KEY="$RET"
db_set jitsi-meet/cert-path-crt "/etc/ssl/$JVB_HOSTNAME.crt"
db_input critical jitsi-meet/cert-path-crt || true
db_go
db_get jitsi-meet/cert-path-crt
CERT_CRT="$RET"
# replace self-signed certificate paths with user provided ones
CERT_KEY_ESC=$(echo $CERT_KEY | sed 's/\./\\\./g')
CERT_KEY_ESC=$(echo $CERT_KEY_ESC | sed 's/\//\\\//g')
sed -i "s/ssl_certificate_key\ \/var\/lib\/prosody\/.*key/ssl_certificate_key\ $CERT_KEY_ESC/g" \
/etc/nginx/sites-available/$JVB_HOSTNAME.conf
CERT_CRT_ESC=$(echo $CERT_CRT | sed 's/\./\\\./g')
CERT_CRT_ESC=$(echo $CERT_CRT_ESC | sed 's/\//\\\//g')
sed -i "s/ssl_certificate\ \/var\/lib\/prosody\/.*crt/ssl_certificate\ $CERT_CRT_ESC/g" \
/etc/nginx/sites-available/$JVB_HOSTNAME.conf
fi
invoke-rc.d nginx reload
fi
# and we're done with debconf
db_stop
invoke-rc.d nginx reload
;;
abort-upgrade|abort-remove|abort-deconfigure)

View File

@@ -35,6 +35,8 @@ case "$1" in
rm -f /etc/jitsi/meet/$JVB_HOSTNAME-config.js
rm -f /etc/nginx/sites-available/$JVB_HOSTNAME.conf
rm -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
rm -f /etc/jitsi/videobridge/$JVB_HOSTNAME.jks
rm -f /etc/jitsi/videobridge/$JVB_HOSTNAME.p12
fi
;;
upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)

View File

@@ -10,20 +10,23 @@ _Description: SSL certificate for the Jitsi Meet instance
Template: jitsi-meet/cert-path-key
Type: string
Default: ${default-key}
_Description: Full local server path to the SSL key file:
The full path to the SSL key file on the server.
If it has not been uploaded, now is a good time to do so.
Template: jitsi-meet/cert-path-crt
Type: string
Default: ${default-crt}
_Description: Full local server path to the SSL certificate file:
The full path to the SSL certificate file on the server.
If you haven't uploaded it, now is a good time to upload it in another console.
Template: jitsi-meet/jvb-hostname
Type: string
Default: ${default-key}
_Description: The hostname of the current installation:
The value for the hostname that is set in Jitsi Videobridge installation.
Template: jitsi-meet/jvb-serve
Type: boolean
Default: false
_Description: for internal use
for internal use.

View File

@@ -1,22 +1,22 @@
Description: Update the used js files for jquery to generic ones, to be able to use local system installed version (through symlinks).
Index: jitsi-meet/index.html
===================================================================
--- jitsi-meet.orig/index.html
+++ jitsi-meet/index.html
@@ -9,7 +9,7 @@
<meta itemprop="name" content="Jitsi Meet"/>
@@ -10,14 +10,14 @@
<meta itemprop="description" content="Join a WebRTC video conference powered by the Jitsi Videobridge"/>
<meta itemprop="image" content="/images/jitsilogo.png"/>
<script src="https://api.callstats.io/static/callstats.min.js"></script>
- <script src="libs/jquery-2.1.1.min.js"></script>
+ <script src="libs/jquery.min.js"></script>
<script src="config.js?v=5"></script><!-- adapt to your needs, i.e. set hosts and bosh path -->
<script src="simulcast.js?v=5"></script><!-- simulcast handling -->
<script src="libs/strophe/strophe.jingle.adapter.js?v=2"></script><!-- strophe.jingle bundles -->
@@ -24,7 +24,7 @@
<script src="libs/strophe/strophe.util.js"></script>
<script src="libs/colibri/colibri.focus.js?v=10"></script><!-- colibri focus implementation -->
<script src="libs/colibri/colibri.session.js?v=1"></script>
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsSHA/1.5.0/sha.js"></script>
<script src="config.js?v=11"></script><!-- adapt to your needs, i.e. set hosts and bosh path -->
<script src="libs/strophe/strophe.min.js?v=2"></script>
<script src="libs/strophe/strophe.disco.min.js?v=1"></script>
<script src="libs/strophe/strophe.caps.jsonly.min.js?v=1"></script>
- <script src="libs/jquery-ui.js"></script>
+ <script src="libs/jquery-ui.min.js"></script>
<script src="libs/rayo.js?v=1"></script>
<script src="libs/tooltip.js?v=1"></script><!-- bootstrap tooltip lib -->
<script src="libs/popover.js?v=1"></script><!-- bootstrap tooltip lib -->
<script src="libs/toastr.js?v=1"></script><!-- notifications lib -->

View File

@@ -1,202 +0,0 @@
/*
* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
* in FIPS PUB 180-1
* Version 2.1a Copyright Paul Johnston 2000 - 2002.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for details.
*/
/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}
/*
* Perform a simple self-test to see if the VM is working
*/
function sha1_vm_test()
{
return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}
/*
* Calculate the SHA-1 of an array of big-endian words, and a bit length
*/
function core_sha1(x, len)
{
/* append padding */
x[len >> 5] |= 0x80 << (24 - len % 32);
x[((len + 64 >> 9) << 4) + 15] = len;
var w = Array(80);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;
for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
var olde = e;
for(var j = 0; j < 80; j++)
{
if(j < 16) w[j] = x[i + j];
else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
safe_add(safe_add(e, w[j]), sha1_kt(j)));
e = d;
d = c;
c = rol(b, 30);
b = a;
a = t;
}
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
e = safe_add(e, olde);
}
return Array(a, b, c, d, e);
}
/*
* Perform the appropriate triplet combination function for the current
* iteration
*/
function sha1_ft(t, b, c, d)
{
if(t < 20) return (b & c) | ((~b) & d);
if(t < 40) return b ^ c ^ d;
if(t < 60) return (b & c) | (b & d) | (c & d);
return b ^ c ^ d;
}
/*
* Determine the appropriate additive constant for the current iteration
*/
function sha1_kt(t)
{
return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
(t < 60) ? -1894007588 : -899497514;
}
/*
* Calculate the HMAC-SHA1 of a key and some data
*/
function core_hmac_sha1(key, data)
{
var bkey = str2binb(key);
if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);
var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
return core_sha1(opad.concat(hash), 512 + 160);
}
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}
/*
* Convert an 8-bit or 16-bit string to an array of big-endian words
* In 8-bit function, characters >255 have their hi-byte silently ignored.
*/
function str2binb(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
return bin;
}
/*
* Convert an array of big-endian words to a string
*/
function binb2str(bin)
{
var str = "";
var mask = (1 << chrsz) - 1;
for(var i = 0; i < bin.length * 32; i += chrsz)
str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
return str;
}
/*
* Convert an array of big-endian words to a hex string.
*/
function binb2hex(binarray)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
}
return str;
}
/*
* Convert an array of big-endian words to a base-64 string
*/
function binb2b64(binarray)
{
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for(var i = 0; i < binarray.length * 4; i += 3)
{
var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16)
| (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
| ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
for(var j = 0; j < 4; j++)
{
if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
}
}
return str;
}

View File

@@ -1,240 +0,0 @@
/**
* Entity Capabilities (XEP-0115)
*
* Depends on disco plugin.
*
* See: http://xmpp.org/extensions/xep-0115.html
*
* Authors:
* - Michael Weibel <michael.weibel@gmail.com>
*
* Copyright:
* - Michael Weibel <michael.weibel@gmail.com>
*/
Strophe.addConnectionPlugin('caps', {
/** Constant: HASH
* Hash used
*
* Currently only sha-1 is supported.
*/
HASH: 'sha-1',
/** Variable: node
* Client which is being used.
*
* Can be overwritten as soon as Strophe has been initialized.
*/
node: 'http://strophe.im/strophejs/',
/** PrivateVariable: _ver
* Own generated version string
*/
_ver: '',
/** PrivateVariable: _connection
* Strophe connection
*/
_connection: null,
/** PrivateVariable: _knownCapabilities
* A hashtable containing version-strings and their capabilities, serialized
* as string.
*
* TODO: Maybe those caps shouldn't be serialized.
*/
_knownCapabilities: {},
/** PrivateVariable: _jidVerIndex
* A hashtable containing jids and their versions for better lookup of capabilities.
*/
_jidVerIndex: {},
/** Function: init
* Initialize plugin:
* - Add caps namespace
* - Add caps feature to disco plugin
* - Add handler for caps stanzas
*
* Parameters:
* (Strophe.Connection) conn - Strophe connection
*/
init: function(conn) {
this._connection = conn;
Strophe.addNamespace('CAPS', 'http://jabber.org/protocol/caps');
if (!this._connection.disco) {
throw "Caps plugin requires the disco plugin to be installed.";
}
this._connection.disco.addFeature(Strophe.NS.CAPS);
this._connection.addHandler(this._delegateCapabilities.bind(this), Strophe.NS.CAPS);
},
/** Function: generateCapsAttrs
* Returns the attributes for generating the "c"-stanza containing the own version
*
* Returns:
* (Object) - attributes
*/
generateCapsAttrs: function() {
return {
'xmlns': Strophe.NS.CAPS,
'hash': this.HASH,
'node': this.node,
'ver': this.generateVer()
};
},
/** Function: generateVer
* Returns the base64 encoded version string (encoded itself with sha1)
*
* Returns:
* (String) - version
*/
generateVer: function() {
if (this._ver !== "") {
return this._ver;
}
var ver = "",
identities = this._connection.disco._identities.sort(this._sortIdentities),
identitiesLen = identities.length,
features = this._connection.disco._features.sort(),
featuresLen = features.length;
for(var i = 0; i < identitiesLen; i++) {
var curIdent = identities[i];
ver += curIdent.category + "/" + curIdent.type + "/" + curIdent.lang + "/" + curIdent.name + "<";
}
for(var i = 0; i < featuresLen; i++) {
ver += features[i] + '<';
}
this._ver = b64_sha1(ver);
return this._ver;
},
/** Function: getCapabilitiesByJid
* Returns serialized capabilities of a jid (if available).
* Otherwise null.
*
* Parameters:
* (String) jid - Jabber id
*
* Returns:
* (String|null) - capabilities, serialized; or null when not available.
*/
getCapabilitiesByJid: function(jid) {
if (this._jidVerIndex[jid]) {
return this._knownCapabilities[this._jidVerIndex[jid]];
}
return null;
},
/** PrivateFunction: _delegateCapabilities
* Checks if the version has already been saved.
* If yes: do nothing.
* If no: Request capabilities
*
* Parameters:
* (Strophe.Builder) stanza - Stanza
*
* Returns:
* (Boolean)
*/
_delegateCapabilities: function(stanza) {
var from = stanza.getAttribute('from'),
c = stanza.querySelector('c'),
ver = c.getAttribute('ver'),
node = c.getAttribute('node');
if (!this._knownCapabilities[ver]) {
return this._requestCapabilities(from, node, ver);
} else {
this._jidVerIndex[from] = ver;
}
if (!this._jidVerIndex[from] || !this._jidVerIndex[from] !== ver) {
this._jidVerIndex[from] = ver;
}
return true;
},
/** PrivateFunction: _requestCapabilities
* Requests capabilities from the one which sent the caps-info stanza.
* This is done using disco info.
*
* Additionally, it registers a handler for handling the reply.
*
* Parameters:
* (String) to - Destination jid
* (String) node - Node attribute of the caps-stanza
* (String) ver - Version of the caps-stanza
*
* Returns:
* (Boolean) - true
*/
_requestCapabilities: function(to, node, ver) {
if (to !== this._connection.jid) {
var id = this._connection.disco.info(to, node + '#' + ver);
this._connection.addHandler(this._handleDiscoInfoReply.bind(this), Strophe.NS.DISCO_INFO, 'iq', 'result', id, to);
}
return true;
},
/** PrivateFunction: _handleDiscoInfoReply
* Parses the disco info reply and adds the version & it's capabilities to the _knownCapabilities variable.
* Additionally, it adds the jid & the version to the _jidVerIndex variable for a better lookup.
*
* Parameters:
* (Strophe.Builder) stanza - Disco info stanza
*
* Returns:
* (Boolean) - false, to automatically remove the handler.
*/
_handleDiscoInfoReply: function(stanza) {
var query = stanza.querySelector('query'),
node = query.getAttribute('node').split('#'),
ver = node[1],
from = stanza.getAttribute('from');
if (!this._knownCapabilities[ver]) {
var childNodes = query.childNodes,
childNodesLen = childNodes.length;
this._knownCapabilities[ver] = [];
for(var i = 0; i < childNodesLen; i++) {
var node = childNodes[i];
this._knownCapabilities[ver].push({name: node.nodeName, attributes: node.attributes});
}
this._jidVerIndex[from] = ver;
} else if (!this._jidVerIndex[from] || !this._jidVerIndex[from] !== ver) {
this._jidVerIndex[from] = ver;
}
return false;
},
/** PrivateFunction: _sortIdentities
* Sorts two identities according the sorting requirements in XEP-0115.
*
* Parameters:
* (Object) a - Identity a
* (Object) b - Identity b
*
* Returns:
* (Integer) - 1, 0 or -1; according to which one's greater.
*/
_sortIdentities: function(a, b) {
if (a.category > b.category) {
return 1;
}
if (a.category < b.category) {
return -1;
}
if (a.type > b.type) {
return 1;
}
if (a.type < b.type) {
return -1;
}
if (a.lang > b.lang) {
return 1;
}
if (a.lang < b.lang) {
return -1;
}
return 0;
}
});

View File

@@ -1,232 +0,0 @@
/*
Copyright 2010, François de Metz <francois@2metz.fr>
*/
/**
* Disco Strophe Plugin
* Implement http://xmpp.org/extensions/xep-0030.html
* TODO: manage node hierarchies, and node on info request
*/
Strophe.addConnectionPlugin('disco',
{
_connection: null,
_identities : [],
_features : [],
_items : [],
/** Function: init
* Plugin init
*
* Parameters:
* (Strophe.Connection) conn - Strophe connection
*/
init: function(conn)
{
this._connection = conn;
this._identities = [];
this._features = [];
this._items = [];
// disco info
conn.addHandler(this._onDiscoInfo.bind(this), Strophe.NS.DISCO_INFO, 'iq', 'get', null, null);
// disco items
conn.addHandler(this._onDiscoItems.bind(this), Strophe.NS.DISCO_ITEMS, 'iq', 'get', null, null);
},
/** Function: addIdentity
* See http://xmpp.org/registrar/disco-categories.html
* Parameters:
* (String) category - category of identity (like client, automation, etc ...)
* (String) type - type of identity (like pc, web, bot , etc ...)
* (String) name - name of identity in natural language
* (String) lang - lang of name parameter
*
* Returns:
* Boolean
*/
addIdentity: function(category, type, name, lang)
{
for (var i=0; i<this._identities.length; i++)
{
if (this._identities[i].category == category &&
this._identities[i].type == type &&
this._identities[i].name == name &&
this._identities[i].lang == lang)
{
return false;
}
}
this._identities.push({category: category, type: type, name: name, lang: lang});
return true;
},
/** Function: addFeature
*
* Parameters:
* (String) var_name - feature name (like jabber:iq:version)
*
* Returns:
* boolean
*/
addFeature: function(var_name)
{
for (var i=0; i<this._features.length; i++)
{
if (this._features[i] == var_name)
return false;
}
this._features.push(var_name);
return true;
},
/** Function: removeFeature
*
* Parameters:
* (String) var_name - feature name (like jabber:iq:version)
*
* Returns:
* boolean
*/
removeFeature: function(var_name)
{
for (var i=0; i<this._features.length; i++)
{
if (this._features[i] === var_name){
this._features.splice(i,1)
return true;
}
}
return false;
},
/** Function: addItem
*
* Parameters:
* (String) jid
* (String) name
* (String) node
* (Function) call_back
*
* Returns:
* boolean
*/
addItem: function(jid, name, node, call_back)
{
if (node && !call_back)
return false;
this._items.push({jid: jid, name: name, node: node, call_back: call_back});
return true;
},
/** Function: info
* Info query
*
* Parameters:
* (Function) call_back
* (String) jid
* (String) node
*/
info: function(jid, node, success, error, timeout)
{
var attrs = {xmlns: Strophe.NS.DISCO_INFO};
if (node)
attrs.node = node;
var info = $iq({from:this._connection.jid,
to:jid, type:'get'}).c('query', attrs);
this._connection.sendIQ(info, success, error, timeout);
},
/** Function: items
* Items query
*
* Parameters:
* (Function) call_back
* (String) jid
* (String) node
*/
items: function(jid, node, success, error, timeout)
{
var attrs = {xmlns: Strophe.NS.DISCO_ITEMS};
if (node)
attrs.node = node;
var items = $iq({from:this._connection.jid,
to:jid, type:'get'}).c('query', attrs);
this._connection.sendIQ(items, success, error, timeout);
},
/** PrivateFunction: _buildIQResult
*/
_buildIQResult: function(stanza, query_attrs)
{
var id = stanza.getAttribute('id');
var from = stanza.getAttribute('from');
var iqresult = $iq({type: 'result', id: id});
if (from !== null) {
iqresult.attrs({to: from});
}
return iqresult.c('query', query_attrs);
},
/** PrivateFunction: _onDiscoInfo
* Called when receive info request
*/
_onDiscoInfo: function(stanza)
{
var node = stanza.getElementsByTagName('query')[0].getAttribute('node');
var attrs = {xmlns: Strophe.NS.DISCO_INFO};
if (node)
{
attrs.node = node;
}
var iqresult = this._buildIQResult(stanza, attrs);
for (var i=0; i<this._identities.length; i++)
{
var attrs = {category: this._identities[i].category,
type : this._identities[i].type};
if (this._identities[i].name)
attrs.name = this._identities[i].name;
if (this._identities[i].lang)
attrs['xml:lang'] = this._identities[i].lang;
iqresult.c('identity', attrs).up();
}
for (var i=0; i<this._features.length; i++)
{
iqresult.c('feature', {'var':this._features[i]}).up();
}
this._connection.send(iqresult.tree());
return true;
},
/** PrivateFunction: _onDiscoItems
* Called when receive items request
*/
_onDiscoItems: function(stanza)
{
var query_attrs = {xmlns: Strophe.NS.DISCO_ITEMS};
var node = stanza.getElementsByTagName('query')[0].getAttribute('node');
if (node)
{
query_attrs.node = node;
var items = [];
for (var i = 0; i < this._items.length; i++)
{
if (this._items[i].node == node)
{
items = this._items[i].call_back(stanza);
break;
}
}
}
else
{
var items = this._items;
}
var iqresult = this._buildIQResult(stanza, query_attrs);
for (var i = 0; i < items.length; i++)
{
var attrs = {jid: items[i].jid};
if (items[i].name)
attrs.name = items[i].name;
if (items[i].node)
attrs.node = items[i].node;
iqresult.c('item', attrs).up();
}
this._connection.send(iqresult.tree());
return true;
}
});

View File

@@ -1,7 +1,3 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
@@ -74,7 +70,6 @@ msgid ""
"uploaded it, now is a good time to upload it in another console."
msgstr ""
#. Type: string
#. Description
#: ../jitsi-meet.templates:4001
@@ -87,3 +82,17 @@ msgstr ""
msgid ""
"The value for the hostname that is set in Jitsi Videobridge installation."
msgstr ""
#. Type: string
#. Description
#: ../jitsi-meet.templates:5001
msgid "for internal use"
msgstr ""
#. Type: string
#. Description
#: ../jitsi-meet.templates:5001
msgid ""
"Jitsi Videobridge installation can use its internal jetty to serve static meet pages."
msgstr ""

16
debian/rules vendored
View File

@@ -1,10 +1,4 @@
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
@@ -12,11 +6,9 @@
%:
dh $@
# we skip making Makefile exists for updating browserify modules when developing
override_dh_auto_build:
override_dh_install:
dh_installdirs
dh_install -X/config.js
yui-compressor -o debian/jitsi-meet/usr/share/jitsi-meet/libs/strophe/strophe.caps.jsonly.min.js \
debian/patches/missing-source/libs/strophe/strophe.caps.jsonly.js
yui-compressor -o debian/jitsi-meet/usr/share/jitsi-meet/libs/strophe/strophe.disco.min.js \
debian/patches/missing-source/libs/strophe/sha1.js \
debian/patches/missing-source/libs/strophe/strophe.disco.js
dh_install -X/config.js -X/package.json

2
debian/watch vendored Normal file
View File

@@ -0,0 +1,2 @@
version=3
opts="uversionmangle=s/^/1.0./" https://github.com/jitsi/jitsi-meet/releases/ /jitsi/jitsi-meet/archive/(\S+)\.tar\.gz

View File

@@ -1,317 +0,0 @@
/* global $, alert, changeLocalVideo, chrome, config, connection, getConferenceHandler, getUserMediaWithConstraints, VideoLayout */
/**
* Indicates that desktop stream is currently in use(for toggle purpose).
* @type {boolean}
*/
var isUsingScreenStream = false;
/**
* Indicates that switch stream operation is in progress and prevent from triggering new events.
* @type {boolean}
*/
var switchInProgress = false;
/**
* Method used to get screen sharing stream.
*
* @type {function (stream_callback, failure_callback}
*/
var obtainDesktopStream = null;
/**
* Flag used to cache desktop sharing enabled state. Do not use directly as it can be <tt>null</tt>.
* @type {null|boolean}
*/
var _desktopSharingEnabled = null;
/**
* Method obtains desktop stream from WebRTC 'screen' source.
* Flag 'chrome://flags/#enable-usermedia-screen-capture' must be enabled.
*/
function obtainWebRTCScreen(streamCallback, failCallback) {
getUserMediaWithConstraints(
['screen'],
streamCallback,
failCallback
);
}
/**
* Constructs inline install URL for Chrome desktop streaming extension.
* The 'chromeExtensionId' must be defined in config.js.
* @returns {string}
*/
function getWebStoreInstallUrl()
{
return "https://chrome.google.com/webstore/detail/" + config.chromeExtensionId;
}
/**
* Checks whether extension update is required.
* @param minVersion minimal required version
* @param extVersion current extension version
* @returns {boolean}
*/
function isUpdateRequired(minVersion, extVersion)
{
try
{
var s1 = minVersion.split('.');
var s2 = extVersion.split('.');
var len = Math.max(s1.length, s2.length);
for (var i = 0; i < len; i++)
{
var n1 = 0,
n2 = 0;
if (i < s1.length)
n1 = parseInt(s1[i]);
if (i < s2.length)
n2 = parseInt(s2[i]);
if (isNaN(n1) || isNaN(n2))
{
return true;
}
else if (n1 !== n2)
{
return n1 > n2;
}
}
// will happen if boths version has identical numbers in
// their components (even if one of them is longer, has more components)
return false;
}
catch (e)
{
console.error("Failed to parse extension version", e);
messageHandler.showError('Error',
'Error when trying to detect desktopsharing extension.');
return true;
}
}
function checkExtInstalled(isInstalledCallback) {
if (!chrome.runtime) {
// No API, so no extension for sure
isInstalledCallback(false);
return;
}
chrome.runtime.sendMessage(
config.chromeExtensionId,
{ getVersion: true },
function (response) {
if (!response || !response.version) {
// Communication failure - assume that no endpoint exists
console.warn("Extension not installed?: " + chrome.runtime.lastError);
isInstalledCallback(false);
} else {
// Check installed extension version
var extVersion = response.version;
console.log('Extension version is: ' + extVersion);
var updateRequired = isUpdateRequired(config.minChromeExtVersion, extVersion);
if (updateRequired) {
alert(
'Jitsi Desktop Streamer requires update. ' +
'Changes will take effect after next Chrome restart.');
}
isInstalledCallback(!updateRequired);
}
}
);
}
function doGetStreamFromExtension(streamCallback, failCallback) {
// Sends 'getStream' msg to the extension. Extension id must be defined in the config.
chrome.runtime.sendMessage(
config.chromeExtensionId,
{ getStream: true, sources: config.desktopSharingSources },
function (response) {
if (!response) {
failCallback(chrome.runtime.lastError);
return;
}
console.log("Response from extension: " + response);
if (response.streamId) {
getUserMediaWithConstraints(
['desktop'],
function (stream) {
streamCallback(stream);
},
failCallback,
null, null, null,
response.streamId);
} else {
failCallback("Extension failed to get the stream");
}
}
);
}
/**
* Asks Chrome extension to call chooseDesktopMedia and gets chrome 'desktop' stream for returned stream token.
*/
function obtainScreenFromExtension(streamCallback, failCallback) {
checkExtInstalled(
function (isInstalled) {
if (isInstalled) {
doGetStreamFromExtension(streamCallback, failCallback);
} else {
chrome.webstore.install(
getWebStoreInstallUrl(),
function (arg) {
console.log("Extension installed successfully", arg);
// We need to reload the page in order to get the access to chrome.runtime
window.location.reload(false);
},
function (arg) {
console.log("Failed to install the extension", arg);
failCallback(arg);
messageHandler.showError('Error',
'Failed to install desktop sharing extension');
}
);
}
}
);
}
/**
* @returns {boolean} <tt>true</tt> if desktop sharing feature is available and enabled.
*/
function isDesktopSharingEnabled() {
if (_desktopSharingEnabled === null) {
if (obtainDesktopStream === obtainScreenFromExtension) {
// Parse chrome version
var userAgent = navigator.userAgent.toLowerCase();
// We can assume that user agent is chrome, because it's enforced when 'ext' streaming method is set
var ver = parseInt(userAgent.match(/chrome\/(\d+)\./)[1], 10);
console.log("Chrome version" + userAgent, ver);
_desktopSharingEnabled = ver >= 34;
} else {
_desktopSharingEnabled = obtainDesktopStream === obtainWebRTCScreen;
}
}
return _desktopSharingEnabled;
}
function showDesktopSharingButton() {
if (isDesktopSharingEnabled()) {
$('#desktopsharing').css({display: "inline"});
} else {
$('#desktopsharing').css({display: "none"});
}
}
/**
* Call this method to toggle desktop sharing feature.
* @param method pass "ext" to use chrome extension for desktop capture(chrome extension required),
* pass "webrtc" to use WebRTC "screen" desktop source('chrome://flags/#enable-usermedia-screen-capture'
* must be enabled), pass any other string or nothing in order to disable this feature completely.
*/
function setDesktopSharing(method) {
// Check if we are running chrome
if (!navigator.webkitGetUserMedia) {
obtainDesktopStream = null;
console.info("Desktop sharing disabled");
} else if (method == "ext") {
obtainDesktopStream = obtainScreenFromExtension;
console.info("Using Chrome extension for desktop sharing");
} else if (method == "webrtc") {
obtainDesktopStream = obtainWebRTCScreen;
console.info("Using Chrome WebRTC for desktop sharing");
}
// Reset enabled cache
_desktopSharingEnabled = null;
showDesktopSharingButton();
}
/**
* Initializes <link rel=chrome-webstore-item /> with extension id set in config.js to support inline installs.
* Host site must be selected as main website of published extension.
*/
function initInlineInstalls()
{
$("link[rel=chrome-webstore-item]").attr("href", getWebStoreInstallUrl());
}
function getSwitchStreamFailed(error) {
console.error("Failed to obtain the stream to switch to", error);
switchInProgress = false;
}
function streamSwitchDone() {
//window.setTimeout(
// function () {
switchInProgress = false;
Toolbar.changeDesktopSharingButtonState(isUsingScreenStream);
// }, 100
//);
}
function newStreamCreated(stream) {
var oldStream = connection.jingle.localVideo;
connection.jingle.localVideo = stream;
VideoLayout.changeLocalVideo(stream, !isUsingScreenStream);
var conferenceHandler = getConferenceHandler();
if (conferenceHandler) {
// FIXME: will block switchInProgress on true value in case of exception
conferenceHandler.switchStreams(stream, oldStream, streamSwitchDone);
} else {
// We are done immediately
console.error("No conference handler");
messageHandler.showError('Error',
'Unable to switch video stream.');
streamSwitchDone();
}
}
/*
* Toggles screen sharing.
*/
function toggleScreenSharing() {
if (switchInProgress || !obtainDesktopStream) {
console.warn("Switch in progress or no method defined");
return;
}
switchInProgress = true;
if (!isUsingScreenStream)
{
// Switch to desktop stream
obtainDesktopStream(
function (stream) {
// We now use screen stream
isUsingScreenStream = true;
// Hook 'ended' event to restore camera when screen stream stops
stream.addEventListener('ended',
function (e) {
if (!switchInProgress && isUsingScreenStream) {
toggleScreenSharing();
}
}
);
newStreamCreated(stream);
},
getSwitchStreamFailed);
} else {
// Disable screen stream
getUserMediaWithConstraints(
['video'],
function (stream) {
// We are now using camera stream
isUsingScreenStream = false;
newStreamCreated(stream);
},
getSwitchStreamFailed, config.resolution || '360'
);
}
}

12
doc/adding-an-icon.md Normal file
View File

@@ -0,0 +1,12 @@
### Adding an icon to the font file (e.g. for the floating menu)
1. Go to https://icomoon.io/app/
2. Go to "Manage Projects" from the menu on the top left.
3. Use "Import project" and select <code>fonts/selection.json</code> from Jitsi Meet.
4. Import icons (e.g. svg files) using the "import items" button.
5. Go to "generate font" and make sure the identifiers for the new icons are correct.
6. Download the result in a zip file using the "download" button.
7. Copy <code>selection.json</code> and <code>fonts/jitsi.*</code> from the zip file to <code>fonts/</code> in Jitsi Meet
8. Copy the class for the new icon from <code>style.css</code> in the zip file to <code>css/font.css</code> in Jitsi Meet (do *not* copy the whole file)
Sample commit: https://github.com/jitsi/jitsi-meet/commit/68bc819b89aec12364fcf07b81efa83a1900eed6

View File

@@ -20,42 +20,49 @@ The next step for embedding Jitsi Meet is to create the Jitsi Meet API object
var height = 700;
var api = new JitsiMeetExternalAPI(domain, room, width, height);
</script>
```
```
You can paste that lines in your html code where you want to be placed the Jitsi Meet conference
or you can specify the parent HTML element for the Jitsi Meet conference in the JitsiMeetExternalAPI
constructor.
```javascript
var api = new JitsiMeetExternalAPI(domain, room, width, height, htmlElement);
```
```
If you don't specify room the user will enter in new conference with random room name.
You can overwrite options set in config.js and interface_config.js. For example, to enable the film-strip-only interface mode and disable simulcast, you can use:
```javascript
var configOverwrite = {enableSimulcast: false};
var interfaceConfigOverwrite = {filmStripOnly: true};
var api = new JitsiMeetExternalAPI(domain, room, width, height, htmlElement, true, configOverwrite, interfaceConfigOverwrite);
```
Controlling embedded Jitsi Meet Conference
=========
You can control the embedded Jitsi Meet conference using the JitsiMeetExternalAPI object.
You can send command to Jitsi Meet conference using ```executeCommand```.
You can send command to Jitsi Meet conference using ```executeCommand```.
```
api.executeCommand(command, arguments)
```
The ```command``` parameter is String object with the name of the command.
The ```arguments``` parameter is array with the arguments required by the command.
The ```arguments``` parameter is array with the arguments required by the command.
If no arguments are required by the command this parameter can be omitted or you can pass empty array.
Currently we support the following commands:
* **displayName** - sets the display name of the local participant. This command requires one argument -
* **displayName** - sets the display name of the local participant. This command requires one argument -
the new display name to be set
```
api.executeCommand('displayName', ['New Nickname']);
```
* **muteAudio** - mutes / unmutes the audio for the local participant. No arguments are required.
* **toggleAudio** - mutes / unmutes the audio for the local participant. No arguments are required.
```
api.executeCommand('muteAudio', [])
api.executeCommand('toggleAudio', [])
```
* **muteVideo** - mutes / unmutes the video for the local participant. No arguments are required.
* **toggleVideo** - mutes / unmutes the video for the local participant. No arguments are required.
```
api.executeCommand('muteVideo', [])
api.executeCommand('toggleVideo', [])
```
* **toggleFilmStrip** - hides / shows the film strip. No arguments are required.
```
@@ -70,7 +77,12 @@ api.executeCommand('toggleChat', [])
api.executeCommand('toggleContactList', [])
```
You can also execute multiple commands using the method ```executeCommands```.
* **toggleShareScreen** - starts / stops the screen sharing. No arguments are required.
```
api.executeCommand('toggleShareScreen', [])
```
You can also execute multiple commands using the method ```executeCommands```.
```
api.executeCommands(commands)
```
@@ -78,7 +90,7 @@ The ```commands``` parameter is object with keys the names of the commands and v
commands.
```
api.executeCommands({displayName: ['nickname'], muteAudio: []});
api.executeCommands({displayName: ['nickname'], toggleAudio: []});
```
You can add event listeners to the embedded Jitsi Meet using ```addEventListener``` method.
@@ -129,9 +141,23 @@ The listener will receive object with the following structure:
jid: jid //the jid of the participant
}
```
* **video-conference-joined** - event notifications fired when the local user has joined the video conference.
The listener will receive object with the following structure:
```
{
roomName: room //the room name of the conference
}
```
* **video-conference-left** - event notifications fired when the local user has left the video conference.
The listener will receive object with the following structure:
```
{
roomName: room //the room name of the conference
}
```
You can also add multiple event listeners by using ```addEventListeners```.
This method requires one argument of type Object. The object argument must
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.
```
@@ -166,4 +192,4 @@ You can remove the embedded Jitsi Meet Conference with the following code:
api.dispose()
```
It is a good practice to remove the conference before the page is unloaded.
It is a good practice to remove the conference before the page is unloaded.

View File

@@ -1,6 +1,13 @@
-- Plugins path gets uncommented during jitsi-meet-tokens package install - that's where token plugin is located
--plugin_paths = { "/usr/share/jitsi-meet/prosody-plugins/" }
VirtualHost "jitmeet.example.com"
-- enabled = false -- Remove this line to enable this host
authentication = "anonymous"
-- Properties below are modified by jitsi-meet-tokens package config
-- and authentication above is switched to "token"
--app_id="example_app_id"
--app_secret="example_app_secret"
-- Assign this host a certificate for TLS, otherwise it would use the one
-- set in the global section (if any).
-- Note that old-style SSL on port 5223 only supports one certificate, and will always
@@ -13,17 +20,18 @@ VirtualHost "jitmeet.example.com"
modules_enabled = {
"bosh";
"pubsub";
"ping"; -- Enable mod_ping
}
Component "conference.jitmeet.example.com" "muc"
--modules_enabled = { "token_verification" }
admins = { "focusUser@auth.jitmeet.example.com" }
Component "jitsi-videobridge.jitmeet.example.com"
component_secret = "jitmeetSecret"
VirtualHost "auth.jitmeet.example.com"
authentication = "internal_plain"
admins = { "focusUser@auth.jitmeet.example.com" }
authentication = "internal_plain"
Component "focus.jitmeet.example.com"
component_secret = "focusSecret"

View File

@@ -1,3 +1,5 @@
server_names_hash_bucket_size 64;
server {
listen 80;
server_name jitsi-meet.example.com;
@@ -7,6 +9,12 @@ server {
listen 443 ssl;
server_name jitsi-meet.example.com;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED";
add_header Strict-Transport-Security "max-age=31536000";
ssl_certificate /var/lib/prosody/jitsi-meet.example.com.crt;
ssl_certificate_key /var/lib/prosody/jitsi-meet.example.com.key;
@@ -17,7 +25,7 @@ server {
alias /etc/jitsi/meet/jitsi-meet.example.com-config.js;
}
location ~ ^/([a-zA-Z0-9]+)$ {
location ~ ^/([a-zA-Z0-9=\?]+)$ {
rewrite ^/(.*)$ / break;
}
@@ -25,6 +33,11 @@ server {
ssi on;
}
# Backward compatibility
location ~ /external_api.* {
root /usr/share/jitsi-meet/libs;
}
# BOSH
location /http-bind {
proxy_pass http://localhost:5280/http-bind;

View File

@@ -6,7 +6,7 @@ server {
root /srv/jitsi.example.com;
index index.html;
location ~ ^/([a-zA-Z0-9]+)$ {
location ~ ^/([a-zA-Z0-9=\?]+)$ {
rewrite ^/(.*)$ / break;
}
@@ -23,7 +23,7 @@ server {
# xmpp websockets
location /xmpp-websocket {
proxy_pass http://localhost:5280;
proxy_pass http://localhost:5280/xmpp-websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

29
doc/influxdb.md Normal file
View File

@@ -0,0 +1,29 @@
# Overview
Jitsi Meet supports logging to an [InfluxDB](http://influxdb.com/) database.
# Configuration
The following needs to be done to enable this functionality.
## Install InfluxDB
The details are outside the scope of the document, see http://influxdb.com/download/ .
## Create an InfluxDB database
Use the InfluxDB admin interface (running on port 8083) and create a database. In this example we name it <code>jitsi_database</code>
## Enable logging for Jitsi Videobridge
Add the following properties to <code>/usr/share/jitsi-videobridge/.sip-communicator/sip-communicator.properties</code>.
- org.jitsi.videobridge.log.INFLUX_DB_ENABLED=true
- org.jitsi.videobridge.log.INFLUX_URL_BASE=http://influxdb.example.com:8086
- org.jitsi.videobridge.log.INFLUX_DATABASE=jitsi_database
- org.jitsi.videobridge.log.INFLUX_USER=user
- org.jitsi.videobridge.log.INFLUX_PASS=pass
## Enable logging for Jicofo
Add the same properties as above to <code>/usr/share/jicofo/.sip-communicator/sip-communicator.properties</code>.
## Enable logging for Jitsi Meet itself
Change "logStats" to "true" in <code>/etc/jitsi/meet/you-domain.config.js</code> or the <code>config.js</code> file used in your installation.
# User interface
You can explore the database using the [Jiloin](https://github.com/jitsi/jiloin) web interface.

View File

@@ -1,52 +1,54 @@
# Server Installation for Jitsi Meet
This describes configuring a server `jitsi.example.com`. You will need to
This describes configuring a server `jitsi.example.com` running Debian or a Debian Derivative. You will need to
change references to that to match your host, and generate some passwords for
`YOURSECRET1` and `YOURSECRET2`.
`YOURSECRET1`, `YOURSECRET2` and `YOURSECRET3`.
There are also some complete [example config files](https://github.com/jitsi/jitsi-meet/tree/master/doc/example-config-files/) available, mentioned in each section.
## Install prosody and otalk modules
## Install prosody
```sh
apt-get install lsb-release
echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list
wget --no-check-certificate https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
apt-get update
apt-get install prosody-trunk
apt-get install git lua-zlib lua-sec-prosody lua-dbi-sqlite3 liblua5.1-bitop-dev liblua5.1-bitop0
git clone https://github.com/andyet/otalk-server.git
cd otalk-server
cp -r mod* /usr/lib/prosody/modules
apt-get install prosody
```
## Configure prosody
Modify the config file in `/etc/prosody/prosody.cfg.lua` (see also the example config file):
Add config file in `/etc/prosody/conf.avail/jitsi.example.com.cfg.lua` :
- add your domain virtual host section:
- modules to enable/add: compression, bosh, smacks, carbons, mam, lastactivity, offline, pubsub, adhoc, websocket, http_altconnect
- comment out: `c2s_require_encryption = true`, and `s2s_secure_auth = false`
- change `authentication = "internal_hashed"`
- add this:
```
daemonize = true
cross_domain_bosh = true;
storage = {archive2 = "sql2"}
sql = { driver = "SQLite3", database = "prosody.sqlite" }
default_archive_policy = "roster"
```
- configure your domain by editing the example.com virtual host section section:
```
VirtualHost "jitsi.example.com"
authentication = "anonymous"
ssl = {
key = "/var/lib/prosody/jitsi.example.com.key";
certificate = "/var/lib/prosody/jitsi.example.com.crt";
}
authentication = "anonymous"
ssl = {
key = "/var/lib/prosody/jitsi.example.com.key";
certificate = "/var/lib/prosody/jitsi.example.com.crt";
}
modules_enabled = {
"bosh";
"pubsub";
}
```
- add domain with authentication for conference focus user:
```
VirtualHost "auth.jitsi.example.com"
authentication = "internal_plain"
```
- add focus user to server admins:
```
admins = { "focus@auth.jitsi.example.com" }
```
- and finally configure components:
```
Component "conference.jitsi.example.com" "muc"
Component "jitsi-videobridge.jitsi.example.com"
component_secret = "YOURSECRET1"
Component "focus.jitsi.example.com"
component_secret = "YOURSECRET2"
```
Add link for the added configuration
```sh
ln -s /etc/prosody/conf.avail/jitsi.example.com.cfg.lua /etc/prosody/conf.d/jitsi.example.com.cfg.lua
```
Generate certs for the domain:
@@ -54,6 +56,11 @@ Generate certs for the domain:
prosodyctl cert generate jitsi.example.com
```
Create conference focus user:
```sh
prosodyctl register focus auth.jitsi.example.com YOURSECRET3
```
Restart prosody XMPP server with the new config
```sh
prosodyctl restart
@@ -64,39 +71,28 @@ prosodyctl restart
apt-get install nginx
```
Add nginx config for domain in `/etc/nginx/nginx.conf`:
```
tcp_nopush on;
types_hash_max_size 2048;
server_names_hash_bucket_size 64;
```
Add a new file `jitsi.example.com` in `/etc/nginx/sites-available` (see also the example config file):
```
server_names_hash_bucket_size 64;
server {
listen 80;
server_name jitsi.example.com;
# set the root
root /srv/jitsi.example.com;
index index.html;
location ~ ^/([a-zA-Z0-9]+)$ {
location ~ ^/([a-zA-Z0-9=\?]+)$ {
rewrite ^/(.*)$ / break;
}
location / {
ssi on;
}
# BOSH
location /http-bind {
proxy_pass http://localhost:5280/http-bind;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
# xmpp websockets
location /xmpp-websocket {
proxy_pass http://localhost:5280;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
tcp_nodelay on;
}
}
```
@@ -106,12 +102,6 @@ cd /etc/nginx/sites-enabled
ln -s ../sites-available/jitsi.example.com jitsi.example.com
```
## Fix firewall if needed
```sh
ufw allow 80
ufw allow 5222
```
## Install Jitsi Videobridge
```sh
wget https://download.jitsi.org/jitsi-videobridge/linux/jitsi-videobridge-linux-{arch-buildnum}.zip
@@ -123,6 +113,8 @@ Install JRE if missing:
apt-get install default-jre
```
_NOTE: When installing on older Debian releases keep in mind that you need JRE >= 1.7._
In the user home that will be starting Jitsi Videobridge create `.sip-communicator` folder and add the file `sip-communicator.properties` with one line in it:
```
org.jitsi.impl.neomedia.transform.srtp.SRTPCryptoContext.checkReplay=false
@@ -137,6 +129,30 @@ Or autostart it by adding the line in `/etc/rc.local`:
/bin/bash /root/jitsi-videobridge-linux-{arch-buildnum}/jvb.sh --host=localhost --domain=jitsi.example.com --port=5347 --secret=YOURSECRET1 </dev/null >> /var/log/jvb.log 2>&1
```
## Install Jitsi Conference Focus (jicofo)
Install JDK and Ant if missing:
```
apt-get install default-jdk ant
```
_NOTE: When installing on older Debian releases keep in mind that you need JDK >= 1.7._
Clone source from Github repo:
```sh
git clone https://github.com/jitsi/jicofo.git
```
Build distribution package. Replace {os-name} with one of: 'lin', 'lin64', 'macosx', 'win', 'win64'.
```sh
cd jicofo
ant dist.{os-name}
```
Run jicofo:
```sh
cd dist/{os-name}'
./jicofo.sh --domain=jitsi.example.com --secret=YOURSECRET2 --user_domain=auth.jitsi.example.com --user_name=focus --user_password=YOURSECRET3
```
## Deploy Jitsi Meet
Checkout and configure Jitsi Meet:
```sh
@@ -166,56 +182,10 @@ Restart nginx to get the new configuration:
invoke-rc.d nginx restart
```
## Install [Turn server](https://github.com/andyet/otalk-server/tree/master/restund)
```sh
apt-get install make gcc
wget http://creytiv.com/pub/re-0.4.7.tar.gz
tar zxvf re-0.4.7.tar.gz
ln -s re-0.4.7 re
cd re-0.4.7
sudo make install PREFIX=/usr
cd ..
wget http://creytiv.com/pub/restund-0.4.2.tar.gz
wget https://raw.github.com/andyet/otalk-server/master/restund/restund-auth.patch
tar zxvf restund-0.4.2.tar.gz
cd restund-0.4.2/
patch -p1 < ../restund-auth.patch
sudo make install PREFIX=/usr
cp debian/restund.init /etc/init.d/restund
chmod +x /etc/init.d/restund
cd /etc
wget https://raw.github.com/andyet/otalk-server/master/restund/restund.conf
```
Configure addresses and ports as desired, and the password to be configured in prosody:
```
realm jitsi.example.com
# share this with your prosody server
auth_shared YOURSECRET2
# modules
module_path /usr/lib/restund/modules
turn_relay_addr [turn ip address]
```
Configure prosody to use it in `/etc/prosody/prosody.cfg.lua`. Add to your virtual host:
```
turncredentials_secret = "YOURSECRET2";
turncredentials = {
{ type = "turn", host = "turn.address.ip.configured", port = 3478, transport = "tcp" }
}
```
Add turncredentials module in the "modules_enabled" section
Reload prosody if needed
```
prosodyctl restart
```
## Running behind NAT
In case of videobridge being installed on a machine behind NAT, add the following extra lines to the file `~/.sip-communicator/sip-communicator.properties` (in the home of user running the videobridge):
Jitsi-Videobridge can run behind a NAT, provided that all required ports are routed (forwarded) to the machine that it runs on. By default these ports are (TCP/443 or TCP/4443 and UDP 10000-20000).
The following extra lines need to be added the file `~/.sip-communicator/sip-communicator.properties` (in the home directory of the user running the videobridge):
```
org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>
@@ -252,4 +222,4 @@ enableRecording: true
Restart jitsi-videobridge and start a new conference (making sure that the page
is reloaded with the new config.js) -- the organizer of the conference should
now have a "recoriding" button in the floating menu, near the "mute" button.
now have a "recording" button in the floating menu, near the "mute" button.

View File

@@ -1,31 +1,17 @@
# Jitsi Meet quick install
This documents decribes the needed steps for quick Jitsi Meet installation on a Debian based GNU/Linux system.
This document describes the required steps for a quick Jitsi Meet installation on a Debian based GNU/Linux system. Debian 8 (Jessie) or later, and Ubuntu 14.04 or later are supported out-of-the-box.
Debian Wheezy and other older systems may require additional things to be done. Specifically for Wheezy, [libc needs to be updated](http://lists.jitsi.org/pipermail/users/2015-September/010064.html).
N.B.: All commands are supposed to be run by root. If you are logged in as a regular user with sudo rights, please prepend ___sudo___ to each of the commands.
## Basic Jitsi Meet install
### Add the repository
```sh
add-apt-repository 'deb http://download.jitsi.org/nightly/deb unstable/'
wget -qO - https://download.jitsi.org/nightly/deb/unstable/archive.key | apt-key add -
```
add-apt-repository is in the default Ubuntu install and is available for both Ubuntu and Debian, but if it's not present, either install it with
```sh
apt-get -y install software-properties-common
add-apt-repository 'deb http://download.jitsi.org/nightly/deb unstable/'
wget -qO - https://download.jitsi.org/nightly/deb/unstable/archive.key | apt-key add -
```
or add the repository by hand with
```sh
echo 'deb http://download.jitsi.org/nightly/deb unstable/' >> /etc/apt/sources.list
wget -qO - https://download.jitsi.org/nightly/deb/unstable/archive.key | apt-key add -
echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list
wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | apt-key add -
```
### Update the package lists
@@ -40,13 +26,13 @@ apt-get update
apt-get -y install jitsi-meet
```
During the installation you'll be asked to enter the hostname of the Jitsi Meet instance. If you have a FQDN hostname for the instance already set ip in DNS, enter it there. If you don't have a resolvable hostname, you can enter the IP address of the machine (if it is static or doesn't change).
During the installation, you will be asked to enter the hostname of the Jitsi Meet instance. If you have a FQDN hostname for the instance already set up in DNS, enter it there. If you don't have a resolvable hostname, you can enter the IP address of the machine (if it is static or doesn't change).
This hostname (or IP address) will be used for virtualhost configuration inside the Jitsi Meet and also you and your correspondents will be using it to access the web conferences.
This hostname (or IP address) will be used for virtualhost configuration inside the Jitsi Meet and also, you and your correspondents will be using it to access the web conferences.
### Open a conference
Launch a web broswer (Chrome, Chromium or latest Opera) and enter in the URL bar the hostname (or IP address) you used in the previous step.
Launch a web browser (Chrome, Chromium or latest Opera) and enter in the URL bar the hostname (or IP address) you used in the previous step.
Confirm that you trust the self-signed certificate of the newly installed Jitsi Meet.
@@ -62,11 +48,11 @@ apt-get -y install jigasi
or
```sh
wget https://download.jitsi.org/jigasi_1.0-1_amd64.deb
dpkg -i jigasi_1.0-1_amd64.deb
wget https://download.jitsi.org/unstable/jigasi_1.0-107_amd64.deb
dpkg -i jigasi_1.0-107_amd64.deb
```
During the installation you'll be asked to enter your SIP account and password. This account will be used to invite the other SIP participants.
During the installation, you will be asked to enter your SIP account and password. This account will be used to invite the other SIP participants.
### Reload Jitsi Meet
@@ -74,27 +60,17 @@ Launch again a browser with the Jitsi Meet URL and you'll see a telephone icon o
Enjoy!
## Troubleshoot
If the SIP gateway doesn't work on first try, restart it.
## Uninstall
```sh
/etc/init.d/jigasi restart
apt-get purge jigasi jitsi-meet jicofo jitsi-videobridge
```
## Deinstall
```sh
apt-get purge jigasi jitsi-meet jitsi-videobridge
```
Somethimes the following packages will fail to uninstall properly:
Sometimes the following packages will fail to uninstall properly:
- jigasi
- jitsi-videobridge
When this happens, just run the deinstall command a second time and it should be ok.
When this happens, just run the uninstall command a second time and it should be ok.
The reason for failure is that not allways the daemons are stopped right away, there is a timeout before the actual stop. And if the unistall script goes on before the services' stop, there is an error.
The second run of the deinstall command fixes this, as by then the jigasi or jvb daemons are already stopped.
The reason for failure is that sometimes, the uninstall script is faster than the process that stops the daemons. The second run of the uninstall command fixes this, as by then the jigasi or jvb daemons are already stopped.

View File

@@ -1,17 +0,0 @@
/* global Strophe */
Strophe.addConnectionPlugin('logger', {
// logs raw stanzas and makes them available for download as JSON
connection: null,
log: [],
init: function (conn) {
this.connection = conn;
this.connection.rawInput = this.log_incoming.bind(this);
this.connection.rawOutput = this.log_outgoing.bind(this);
},
log_incoming: function (stanza) {
this.log.push([new Date().getTime(), 'incoming', stanza]);
},
log_outgoing: function (stanza) {
this.log.push([new Date().getTime(), 'outgoing', stanza]);
},
});

View File

@@ -1,206 +0,0 @@
/* global $, config, connection, dockToolbar, Moderator, Prezi,
setLargeVideoVisible, ToolbarToggler, Util, VideoLayout */
var Etherpad = (function (my) {
var etherpadName = null;
var etherpadIFrame = null;
var domain = null;
var options = "?showControls=true&showChat=false&showLineNumbers=true&useMonospaceFont=false";
/**
* Initializes the etherpad.
*/
my.init = function (name) {
if (config.etherpad_base && !etherpadName) {
domain = config.etherpad_base;
if (!name) {
// In case we're the focus we generate the name.
etherpadName = Math.random().toString(36).substring(7) +
'_' + (new Date().getTime()).toString();
shareEtherpad();
}
else
etherpadName = name;
enableEtherpadButton();
}
};
/**
* Opens/hides the Etherpad.
*/
my.toggleEtherpad = function (isPresentation) {
if (!etherpadIFrame)
createIFrame();
var largeVideo = null;
if (Prezi.isPresentationVisible())
largeVideo = $('#presentation>iframe');
else
largeVideo = $('#largeVideo');
if ($('#etherpad>iframe').css('visibility') === 'hidden') {
$('#activeSpeaker').css('visibility', 'hidden');
largeVideo.fadeOut(300, function () {
if (Prezi.isPresentationVisible()) {
largeVideo.css({opacity: '0'});
} else {
VideoLayout.setLargeVideoVisible(false);
}
});
$('#etherpad>iframe').fadeIn(300, function () {
document.body.style.background = '#eeeeee';
$('#etherpad>iframe').css({visibility: 'visible'});
$('#etherpad').css({zIndex: 2});
});
}
else if ($('#etherpad>iframe')) {
$('#etherpad>iframe').fadeOut(300, function () {
$('#etherpad>iframe').css({visibility: 'hidden'});
$('#etherpad').css({zIndex: 0});
document.body.style.background = 'black';
});
if (!isPresentation) {
$('#largeVideo').fadeIn(300, function () {
VideoLayout.setLargeVideoVisible(true);
});
}
}
resize();
};
my.isVisible = function() {
var etherpadIframe = $('#etherpad>iframe');
return etherpadIframe && etherpadIframe.is(':visible');
};
/**
* Resizes the etherpad.
*/
function resize() {
if ($('#etherpad>iframe').length) {
var remoteVideos = $('#remoteVideos');
var availableHeight
= window.innerHeight - remoteVideos.outerHeight();
var availableWidth = Util.getAvailableVideoWidth();
$('#etherpad>iframe').width(availableWidth);
$('#etherpad>iframe').height(availableHeight);
}
}
/**
* Shares the Etherpad name with other participants.
*/
function shareEtherpad() {
connection.emuc.addEtherpadToPresence(etherpadName);
connection.emuc.sendPresence();
}
/**
* Creates the Etherpad button and adds it to the toolbar.
*/
function enableEtherpadButton() {
if (!$('#etherpadButton').is(":visible"))
$('#etherpadButton').css({display: 'inline-block'});
}
/**
* Creates the IFrame for the etherpad.
*/
function createIFrame() {
etherpadIFrame = document.createElement('iframe');
etherpadIFrame.src = domain + etherpadName + options;
etherpadIFrame.frameBorder = 0;
etherpadIFrame.scrolling = "no";
etherpadIFrame.width = $('#largeVideoContainer').width() || 640;
etherpadIFrame.height = $('#largeVideoContainer').height() || 480;
etherpadIFrame.setAttribute('style', 'visibility: hidden;');
document.getElementById('etherpad').appendChild(etherpadIFrame);
etherpadIFrame.onload = function() {
document.domain = document.domain;
bubbleIframeMouseMove(etherpadIFrame);
setTimeout(function() {
//the iframes inside of the etherpad are not yet loaded when the etherpad iframe is loaded
var outer = etherpadIFrame.contentDocument.getElementsByName("ace_outer")[0];
bubbleIframeMouseMove(outer);
var inner = outer.contentDocument.getElementsByName("ace_inner")[0];
bubbleIframeMouseMove(inner);
}, 2000);
};
}
function bubbleIframeMouseMove(iframe){
var existingOnMouseMove = iframe.contentWindow.onmousemove;
iframe.contentWindow.onmousemove = function(e){
if(existingOnMouseMove) existingOnMouseMove(e);
var evt = document.createEvent("MouseEvents");
var boundingClientRect = iframe.getBoundingClientRect();
evt.initMouseEvent(
"mousemove",
true, // bubbles
false, // not cancelable
window,
e.detail,
e.screenX,
e.screenY,
e.clientX + boundingClientRect.left,
e.clientY + boundingClientRect.top,
e.ctrlKey,
e.altKey,
e.shiftKey,
e.metaKey,
e.button,
null // no related element
);
iframe.dispatchEvent(evt);
};
}
/**
* On Etherpad added to muc.
*/
$(document).bind('etherpadadded.muc', function (event, jid, etherpadName) {
console.log("Etherpad added", etherpadName);
if (config.etherpad_base && !Moderator.isModerator()) {
Etherpad.init(etherpadName);
}
});
/**
* On focus changed event.
*/
// FIXME: there is no such event as 'focusechanged.muc'
$(document).bind('focusechanged.muc', function (event, focus) {
console.log("Focus changed");
if (config.etherpad_base)
shareEtherpad();
});
/**
* On video selected event.
*/
$(document).bind('video.selected', function (event, isPresentation) {
if (!config.etherpad_base)
return;
if (etherpadIFrame && etherpadIFrame.style.visibility !== 'hidden')
Etherpad.toggleEtherpad(isPresentation);
});
/**
* Resizes the etherpad, when the window is resized.
*/
$(window).resize(function () {
resize();
});
return my;
}(Etherpad || {}));

View File

@@ -1,371 +0,0 @@
/**
* Implements API class that embeds Jitsi Meet in external applications.
*/
var JitsiMeetExternalAPI = (function()
{
/**
* The minimum width for the Jitsi Meet frame
* @type {number}
*/
var MIN_WIDTH = 790;
/**
* The minimum height for the Jitsi Meet frame
* @type {number}
*/
var MIN_HEIGHT = 300;
/**
* Constructs new API instance. Creates iframe element that loads
* Jitsi Meet.
* @param domain the domain name of the server that hosts the conference
* @param room_name the name of the room to join
* @param width width of the iframe
* @param height height of the iframe
* @param parent_node the node that will contain the iframe
* @constructor
*/
function JitsiMeetExternalAPI(domain, room_name, width, height, parent_node)
{
this.parentNode = null;
if(parent_node)
{
this.parentNode = parent_node;
}
else
{
var scriptTag = document.scripts[document.scripts.length - 1];
this.parentNode = scriptTag.parentNode;
}
this.iframeHolder =
this.parentNode.appendChild(document.createElement("div"));
this.iframeHolder.id = "jitsiConference" + JitsiMeetExternalAPI.id;
if(width < MIN_WIDTH)
width = MIN_WIDTH;
if(height < MIN_HEIGHT)
height = MIN_HEIGHT;
this.iframeHolder.style.width = width + "px";
this.iframeHolder.style.height = height + "px";
this.frameName = "jitsiConferenceFrame" + JitsiMeetExternalAPI.id;
this.url = "//" + domain + "/";
if(room_name)
this.url += room_name;
this.url += "#external";
JitsiMeetExternalAPI.id++;
this.frame = document.createElement("iframe");
this.frame.src = this.url;
this.frame.name = this.frameName;
this.frame.id = this.frameName;
this.frame.width = "100%";
this.frame.height = "100%";
this.frame.setAttribute("allowFullScreen","true");
this.frame = this.iframeHolder.appendChild(this.frame);
this.frameLoaded = false;
this.initialCommands = [];
this.eventHandlers = {};
this.initListeners();
}
/**
* Last id of api object
* @type {number}
*/
JitsiMeetExternalAPI.id = 0;
/**
* Sends the passed object to Jitsi Meet
* @param object the object to be sent
*/
JitsiMeetExternalAPI.prototype.sendMessage = function(object)
{
if(this.frameLoaded)
{
this.frame.contentWindow.postMessage(
JSON.stringify(object), this.frame.src);
}
else
{
this.initialCommands.push(object);
}
};
/**
* Executes command. The available commands are:
* displayName - sets the display name of the local participant to the value
* passed in the arguments array.
* muteAudio - mutes / unmutes audio with no arguments
* muteVideo - mutes / unmutes video with no arguments
* filmStrip - hides / shows the film strip with no arguments
* If the command doesn't require any arguments the parameter should be set
* to empty array or it may be omitted.
* @param name the name of the command
* @param arguments array of arguments
*/
JitsiMeetExternalAPI.prototype.executeCommand = function(name,
argumentsList)
{
var argumentsArray = argumentsList;
if(!argumentsArray)
argumentsArray = [];
var object = {type: "command", action: "execute"};
object[name] = argumentsArray;
this.sendMessage(object);
};
/**
* Executes commands. The available commands are:
* displayName - sets the display name of the local participant to the value
* passed in the arguments array.
* muteAudio - mutes / unmutes audio with no arguments
* muteVideo - mutes / unmutes video with no arguments
* filmStrip - hides / shows the film strip with no arguments
* @param object the object with commands to be executed. The keys of the
* object are the commands that will be executed and the values are the
* arguments for the command.
*/
JitsiMeetExternalAPI.prototype.executeCommands = function (object) {
object.type = "command";
object.action = "execute";
this.sendMessage(object);
};
/**
* Adds event listeners to Meet Jitsi. The object key should be the name of the
* event and value - the listener.
* Currently we support the following
* events:
* incomingMessage - receives event notifications about incoming
* messages. The listener will receive object with the following structure:
* {{
* "from": from,//JID of the user that sent the message
* "nick": nick,//the nickname of the user that sent the message
* "message": txt//the text of the message
* }}
* outgoingMessage - receives event notifications about outgoing
* messages. The listener will receive object with the following structure:
* {{
* "message": txt//the text of the message
* }}
* displayNameChanged - receives event notifications about display name
* change. The listener will receive object with the following structure:
* {{
* jid: jid,//the JID of the participant that changed his display name
* displayname: displayName //the new display name
* }}
* participantJoined - receives event notifications about new participant.
* The listener will receive object with the following structure:
* {{
* jid: jid //the jid of the participant
* }}
* participantLeft - receives event notifications about participant that left room.
* The listener will receive object with the following structure:
* {{
* jid: jid //the jid of the participant
* }}
* @param object
*/
JitsiMeetExternalAPI.prototype.addEventListeners
= function (object)
{
var message = {type: "event", action: "add", events: []};
for(var i in object)
{
message.events.push(i);
this.eventHandlers[i] = object[i];
}
this.sendMessage(message);
};
/**
* Adds event listeners to Meet Jitsi. Currently we support the following
* events:
* incomingMessage - receives event notifications about incoming
* messages. The listener will receive object with the following structure:
* {{
* "from": from,//JID of the user that sent the message
* "nick": nick,//the nickname of the user that sent the message
* "message": txt//the text of the message
* }}
* outgoingMessage - receives event notifications about outgoing
* messages. The listener will receive object with the following structure:
* {{
* "message": txt//the text of the message
* }}
* displayNameChanged - receives event notifications about display name
* change. The listener will receive object with the following structure:
* {{
* jid: jid,//the JID of the participant that changed his display name
* displayname: displayName //the new display name
* }}
* participantJoined - receives event notifications about new participant.
* The listener will receive object with the following structure:
* {{
* jid: jid //the jid of the participant
* }}
* participantLeft - receives event notifications about participant that left room.
* The listener will receive object with the following structure:
* {{
* jid: jid //the jid of the participant
* }}
* @param event the name of the event
* @param listener the listener
*/
JitsiMeetExternalAPI.prototype.addEventListener
= function (event, listener)
{
var message = {type: "event", action: "add", events: [event]};
this.eventHandlers[event] = listener;
this.sendMessage(message);
};
/**
* Removes event listener.
* @param event the name of the event.
*/
JitsiMeetExternalAPI.prototype.removeEventListener
= function (event)
{
if(!this.eventHandlers[event])
{
console.error("The event " + event + " is not registered.");
return;
}
var message = {type: "event", action: "remove", events: [event]};
delete this.eventHandlers[event];
this.sendMessage(message);
};
/**
* Removes event listeners.
* @param events array with the names of the events.
*/
JitsiMeetExternalAPI.prototype.removeEventListeners
= function (events)
{
var eventsArray = [];
for(var i = 0; i < events.length; i++)
{
var event = events[i];
if(!this.eventHandlers[event])
{
console.error("The event " + event + " is not registered.");
continue;
}
delete this.eventHandlers[event];
eventsArray.push(event);
}
if(eventsArray.length > 0)
{
this.sendMessage(
{type: "event", action: "remove", events: eventsArray});
}
};
/**
* Processes message events sent from Jitsi Meet
* @param event the event
*/
JitsiMeetExternalAPI.prototype.processMessage = function(event)
{
var message;
try {
message = JSON.parse(event.data);
} catch (e) {}
if(!message.type) {
console.error("Message without type is received.");
return;
}
switch (message.type)
{
case "system":
if(message.loaded)
{
this.onFrameLoaded();
}
break;
case "event":
if(message.action != "result" ||
!message.event || !this.eventHandlers[message.event])
{
console.warn("The received event cannot be parsed.");
return;
}
this.eventHandlers[message.event](message.result);
break;
default :
console.error("Unknown message type.");
return;
}
};
/**
* That method is called when the Jitsi Meet is loaded. Executes saved
* commands that are send before the frame was loaded.
*/
JitsiMeetExternalAPI.prototype.onFrameLoaded = function () {
this.frameLoaded = true;
for (var i = 0; i < this.initialCommands.length; i++)
{
this.sendMessage(this.initialCommands[i]);
}
this.initialCommands = null;
};
/**
* Setups the listener for message events from Jitsi Meet.
*/
JitsiMeetExternalAPI.prototype.initListeners = function () {
var self = this;
this.eventListener = function (event) {
self.processMessage(event);
};
if (window.addEventListener)
{
window.addEventListener('message',
this.eventListener, false);
}
else
{
window.attachEvent('onmessage', this.eventListener);
}
};
/**
* Removes the listeners and removes the Jitsi Meet frame.
*/
JitsiMeetExternalAPI.prototype.dispose = function () {
if (window.removeEventListener)
{
window.removeEventListener('message',
this.eventListener, false);
}
else
{
window.detachEvent('onmessage',
this.eventListener);
}
var frame = document.getElementById(this.frameName);
if(frame)
frame.src = 'about:blank';
var self = this;
window.setTimeout(function () {
self.iframeHolder.removeChild(self.frame);
self.iframeHolder.parentNode.removeChild(self.iframeHolder);
}, 10);
};
return JitsiMeetExternalAPI;
})();

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

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