Comparar commits

..

196 Commits

Autor SHA1 Mensagem Data
Klaus Herberth c2c35b303a build v2.0.0-beta2 2015-04-29 20:07:55 +02:00
Klaus Herberth b9ef5b1a69 prevent false-positive muc service detection 2015-04-29 19:55:26 +02:00
sualko 3e0c752a13 build v2.0.0-beta1 2015-04-29 13:24:32 +02:00
sualko cafbd71c74 fix logout 2015-04-29 12:58:41 +02:00
sualko 423cea6d41 validate room node, fix room renaming 2015-04-29 12:12:04 +02:00
sualko 850febf328 add .wti to .gitignore 2015-04-28 17:19:49 +02:00
sualko 5d1719b92e Merge branch 'develop' 2015-04-28 16:43:10 +02:00
sualko d998e4cacb fix notification request
- prevent double notices
- fix notice function on page reload
2015-04-28 16:41:30 +02:00
sualko eda9ab60de Add offline status (fix #103) 2015-04-28 16:10:30 +02:00
sualko 13a02fa692 using each for emoticons (close #138) 2015-04-28 15:45:56 +02:00
sualko 36c0727828 add username autocomplete (close #143) 2015-04-28 15:38:19 +02:00
Klaus e1ffa79236 Merge pull request #114 from jsxc/muc
XEP-0045 Multi-User Chat
2015-04-28 13:47:28 +02:00
sualko e33e3b4853 Add comments 2015-04-28 13:11:15 +02:00
sualko 62eacdc5ff beautify muc code 2015-04-28 11:07:10 +02:00
sualko 40b5ff344b exception handling, minor fixes
- add translations
- add status messages
- handle message errors
- display subject change
- handle removal from room (ban, kick, ...)
2015-04-27 16:45:07 +02:00
sualko d8ae158d24 querying room info, handle nickname change, several fixes 2015-04-24 15:53:54 +02:00
sualko 5fdb292690 use own avatar placeholder 2015-04-23 17:32:33 +02:00
sualko a0a116901d show and scroll member list 2015-04-23 14:33:11 +02:00
sualko 5a34a0fd2e close a muc room 2015-04-16 18:13:20 +02:00
sualko 5435326fb9 discover muc server support 2015-04-16 15:09:33 +02:00
sualko ff453821bf handle muc error conditions 2015-04-14 16:13:02 +02:00
sualko 03ac47a264 fix nonexisting resource 2015-04-09 15:56:38 +02:00
sualko a17f046a92 muc design + muc leave function 2015-04-09 15:44:41 +02:00
sualko 1b0db86edf add room discovery 2015-04-08 13:42:47 +02:00
sualko 77863d7a27 muc adaptations to sass and i18n 2015-03-31 15:26:18 +02:00
sualko 03435fce9c fix dependencies 2015-03-31 15:15:46 +02:00
sualko f9598604e2 Merge remote-tracking branch 'origin/develop' into muc 2015-03-31 15:08:31 +02:00
sualko edd715b993 fix video calls 2015-03-30 13:28:58 +02:00
sualko a8b777e5b7 fix selection of chat message (fix #129) 2015-03-30 13:28:45 +02:00
sualko 3282285b3c fix login from login box 2015-03-08 13:23:16 +01:00
sualko 564aa7cd8a Show notifications if tab has no focus (close #130) 2015-03-08 10:42:02 +01:00
sualko 81047222c6 Use user avatar for notification icon 2015-03-08 02:02:50 +01:00
sualko 329f55978f add resize handler 2015-03-08 01:09:45 +01:00
sualko 01b14279b3 fix roster item duplicates on relogin 2015-03-08 00:38:40 +01:00
sualko 630bb45eb1 set emoticons inline 2015-03-07 22:45:00 +01:00
sualko 779103ed32 fix video calls 2015-03-07 15:41:04 +01:00
sualko fbd0511a76 Add dev example 2015-03-06 12:52:12 +01:00
sualko da0a7d7b5d fix translations 2015-03-06 12:51:48 +01:00
Klaus da020726ec Merge pull request #136 from jsxc/code-organisation
code organisation
2015-03-06 11:30:43 +01:00
sualko 79f05a0799 move files to src 2015-03-04 11:01:42 +01:00
sualko 2d832d1752 split files into namespaces 2015-03-03 15:26:39 +01:00
sualko 550485c07c update example 2015-03-02 22:01:23 +01:00
sualko 3566972527 convert quotes to apostrophes 2015-03-02 17:28:42 +01:00
sualko ca21753d73 fix get template 2015-03-02 17:28:42 +01:00
sualko 70abb7121c Merge branch 'master_upstream_i18next' of https://github.com/Zauberstuhl/jsxc (#123) into develop 2015-03-02 17:28:03 +01:00
sualko 4e9c802da9 build v1.1.0a 2015-02-25 19:15:41 +01:00
sualko 651c138b97 fix css url path (close #134) 2015-02-25 19:14:50 +01:00
Lukas Matt 318bd7ee7d Updated locales from webtranslateit 2015-02-19 14:07:53 +01:00
Lukas Matt 7929b20516 Replaced jsxc.translate function with i18next 2015-02-19 13:54:13 +01:00
Lukas Matt 20c8d0e2f6 Add grunt merge task and i18n dependency 2015-02-19 13:54:13 +01:00
Lukas Matt 3628cd751a Remove diaspora customization 2015-02-19 13:54:13 +01:00
Lukas Matt 996ae30df8 Fixed i18next fallback lng setting 2015-02-19 13:54:13 +01:00
Lukas Matt 7b32d598e4 Updated i18next translations
* updated german and french locales
2015-02-19 13:54:13 +01:00
Lukas Matt 5edf4c2368 Renamed Greek language file 2015-02-19 13:54:13 +01:00
Lukas Matt 9bec4084d8 Create own replace task for locales
Using regular expression to avoid unintentional replacements
2015-02-19 13:54:13 +01:00
Lukas Matt 700e62c9d4 Updated i18next translations
* new el-GR, fr, nds, pt-BR
* updated de, en, es

Conflicts:
	locales/es.json
2015-02-19 13:54:13 +01:00
Lukas Matt 9fa16fca40 Update i18next initialization with resStore option 2015-02-19 13:54:13 +01:00
Lukas Matt 5f0b2c8a35 Remove old translation from webrtc lib 2015-02-19 13:54:13 +01:00
Lukas Matt f41faaf9af Add merge_data task for locales to grunt build
Conflicts:
	Gruntfile.js
2015-02-19 13:54:13 +01:00
Lukas Matt 3dd2b14e5a Renamed locale files 2015-02-19 13:54:13 +01:00
Lukas Matt 3d2fa05b1f Add I18next global to jshint 2015-02-19 13:54:13 +01:00
Lukas Matt f8888fdbb2 Update .gitignore 2015-02-19 13:54:13 +01:00
Lukas Matt 8e5e90032c Add i18next submodule to repo 2015-02-19 13:54:13 +01:00
Lukas Matt 86df085723 Adjust Gruntfile and add dep and license information
Conflicts:
	Gruntfile.js
2015-02-19 13:54:13 +01:00
Lukas Matt b57ab86b8f Add global variables to jshint exception file 2015-02-19 13:54:13 +01:00
Lukas Matt 79c1a76427 Initial i18n library and set fallback language to en 2015-02-19 13:54:13 +01:00
Lukas Matt 7acca71a45 Replace internal translation with i18next
Conflicts:
	jsxc.lib.js
2015-02-19 13:54:12 +01:00
Lukas Matt 925ff098d0 Remove old translation from jsxc
Conflicts:
	jsxc.lib.js
2015-02-19 13:54:12 +01:00
Lukas Matt 4edcc578aa Add locale files
* german
* english
* spanish
2015-02-19 13:54:12 +01:00
Klaus 153f045b00 Update example.js 2015-02-16 10:19:26 +01:00
sualko ba03261f1e remove css folder 2015-02-08 21:20:58 +01:00
sualko 50fe563e1a build v1.1.0
close #124
2015-02-08 20:06:06 +01:00
sualko 31c9b29521 fix typo 2015-02-08 20:00:21 +01:00
Klaus b1ce729ec9 Update README.md 2015-02-08 19:54:43 +01:00
Klaus ffc3678cb9 Merge pull request #126 from shaggybb/master
Avoid duplicate window list
2015-02-08 19:42:34 +01:00
Iván Rubio 5772868738 Avoid duplicate window list 2015-02-08 19:41:11 +01:00
Iván Rubio 4529f71896 Avoid duplicate window list 2015-02-06 15:01:56 +01:00
sualko 8b53842bcd fix delayed timestamp (fix #125) 2015-02-06 14:52:50 +01:00
sualko 5c2bc52b55 build v1.1.0-beta 2015-02-03 12:04:27 +01:00
sualko e704f4d05a fix timestamp margin 2015-02-03 12:01:16 +01:00
sualko fa3febf0b6 fix example 2015-02-01 22:46:16 +01:00
sualko 2814cfb36e fix otr enable option 2015-02-01 22:11:28 +01:00
sualko 8aa2736e4a fix webrtc icon error (fix #111) 2015-02-01 22:09:40 +01:00
sualko a2b216443a clean up event handler on disconnect 2015-01-31 21:27:52 +01:00
sualko 487e32a7b9 add ajax/prebind login (close #98, close #92) 2015-01-31 21:27:23 +01:00
sualko 2950c747c9 update gruntfile
- rename default task to build
2015-01-29 11:15:47 +01:00
sualko f39cc79dff fix hide offline contacts, add css prefixes 2015-01-29 11:14:18 +01:00
sualko b62eb995d8 Merge branch 'dimaursu-scss' 2015-01-29 10:24:10 +01:00
sualko e45aa41ae8 replace group colors (#122) 2015-01-27 13:25:30 +01:00
sualko ee1d70a1db change color dependency 2015-01-21 18:21:55 +01:00
sualko 66b5ebda32 rename color names (#122)
- fix style issues
- use image-url function
- create jsxc and webrtc module
2015-01-21 16:47:09 +01:00
sualko 08beae250b update example 2015-01-20 11:59:37 +01:00
sualko 3de204d857 revert to core style
- remove grunt-merge-data
- replace color values with var
- revert diaspora stuff
2015-01-20 11:59:16 +01:00
Dumitru Ursu a2fe0b9383 Reorganize colors variables
Fix merge conflict
2015-01-18 19:57:59 +02:00
Dumitru Ursu e655247a01 Add new css task
Fix jsxc conflict
2015-01-18 19:57:54 +02:00
Dumitru Ursu 27eefde3b3 Fix packages conflict
Fix css merge conflict

Fix grunt merge conflict
2015-01-18 19:57:37 +02:00
sualko 708648e414 fix reconnection 2015-01-17 20:42:17 +01:00
sualko 6e9fcf2518 fix timestamp design & update otr 2015-01-17 17:31:49 +01:00
sualko d7316e895a fix backward compatibility 2015-01-16 19:39:54 +01:00
sualko 01c34f46dd handle delayed messages 2015-01-16 19:32:45 +01:00
sualko 65305f3609 Merge branch 'message_timestamp_upstream' of https://github.com/Zauberstuhl/jsxc into Zauberstuhl-message_timestamp_upstream 2015-01-16 17:03:11 +01:00
sualko 2cd5b5764a concat avatar chunks (close #113)
thanks @IllusionPerdu
2015-01-16 17:01:16 +01:00
Lukas Matt a52fe9884b Fixed appending date location 2015-01-14 11:50:50 +01:00
Lukas Matt c95e117857 Move time formatting to extra function
* remove date if it is the same day
2015-01-14 11:50:50 +01:00
Lukas Matt 5f2d4ce7a6 Fixed timestamp convert and tweaked appearance 2015-01-14 11:50:50 +01:00
Lukas Matt d988621b4d Add timestamp to every message
Conflicts:
	jsxc.css
	jsxc.lib.js
2015-01-14 11:50:44 +01:00
sualko 9d40ed8086 fix window, incoming msg 2015-01-13 13:20:21 +01:00
Klaus Herberth 9750a558f2 update example (fix #115) 2015-01-01 23:10:34 +01:00
sualko feb0c634a4 Merge branch 'master' into muc 2014-12-17 13:14:37 +01:00
sualko 89c6e28970 add option to disable otr (close #89)
Set display:none for .jsxc_transfer to remove padlock
2014-12-17 13:09:05 +01:00
Klaus 5224cdf30c Merge pull request #109 from sualko/xep-0280-carbons
XEP-0280 carbons
2014-12-17 12:51:36 +01:00
sualko c85ef77c21 cc enhancements
- ignore forwarded otr messages
- change default otr options
- add forwarded/encrypted class to message
2014-12-17 12:49:19 +01:00
sualko cebcc61496 add user setting for carbons 2014-12-16 13:26:08 +01:00
sualko 7cf71a7c8b add carbons option and handle prosody diso issue 2014-11-18 17:11:18 +01:00
Klaus 4bffcd665c Merge pull request #104 from Zauberstuhl/fix_var_declaration
Fix variable declaration
2014-11-18 12:05:43 +01:00
Lukas Matt 4fb9938049 Variable 'src' was used before it was defined 2014-11-17 23:43:18 +01:00
sualko 419eb17f65 implement xep-0280 and xep-0297 2014-11-14 17:42:34 +01:00
sualko 20cc517457 fix disco response with unknown node name for caps 2014-11-13 14:17:30 +01:00
sualko a30bcffeec Fix offline subscription request (fix #102) 2014-11-13 11:43:32 +01:00
Klaus e1f4d1d811 Merge pull request #100 from Zalmoxisus/master
Show avatar also by EXTVAL (url), not only by BINVAL
2014-11-11 17:04:29 +01:00
Zalmoxisus dea3a30149 Little fix 2014-11-11 15:12:10 +02:00
Zalmoxisus 2c2e13d966 Show avatar also by EXTVAL (url), not only by BINVAL
Many sites have already the user avatar url, and in such case it’s good
to use just url, not to generate and store another blob.
2014-11-11 01:49:46 +02:00
sualko 65c0b7a57a update muc to current interface 2014-11-07 15:06:57 +01:00
sualko 2b6dd690f4 build v1.0.0 2014-11-06 14:16:16 +01:00
Klaus Herberth 292e7646b6 fix duplicates on roster change 2014-11-05 23:16:17 +01:00
Klaus Herberth 9c137be6ae stop propagation 2014-11-05 23:11:22 +01:00
sualko c711167d3f fix own presence color 2014-11-04 15:44:49 +01:00
sualko 4c388212eb add default xmpp priorites to options 2014-11-04 15:41:36 +01:00
sualko b843aa2f03 fix jsxc.options.get 2014-11-04 15:35:36 +01:00
sualko 8d1fba000a update and generate doc 2014-11-04 15:32:23 +01:00
sualko e9f0634d29 remove flash check 2014-11-04 12:54:42 +01:00
sualko a69b70af1e build 1.0.0-beta2 2014-10-31 14:05:12 +01:00
sualko 341db9e625 change position of message trigger 2014-10-31 13:54:45 +01:00
sualko 67d2c12640 preventDefault for dialog and clean otr list 2014-10-31 13:39:14 +01:00
sualko c0fae24dcd change cursor to pointer for some elements 2014-10-31 13:23:41 +01:00
Klaus 05d9aaa01d fix update video icon 2014-10-30 23:02:40 +01:00
sualko 8cd97ec3e1 build 1.0.0-beta1 2014-10-29 14:13:39 +01:00
sualko 58e2fccf95 add new event restoreCompleted.jsxc 2014-10-29 11:48:25 +01:00
sualko 4b541d462a fix emoticon size from #86 2014-10-29 11:15:20 +01:00
Klaus 310ac4e0a6 Merge pull request #86 from Zauberstuhl/rails_assets
In respect of rails assets we should define images in css
2014-10-29 11:12:15 +01:00
sualko 53b44961ea support vcard retrieval from unknown jid 2014-10-29 11:08:58 +01:00
sualko 8271e64cf7 fix vcard on second tab 2014-10-29 10:51:49 +01:00
sualko 27438984e1 disable webrtc on second tab 2014-10-28 16:11:59 +01:00
sualko 0fb7de74ce fix otr enable 2014-10-28 16:10:58 +01:00
sualko 3db02b0560 Add spot to messages and add some translations 2014-10-28 15:30:17 +01:00
sualko e2dfb6bc94 Add email spot 2014-10-24 17:28:21 +02:00
sualko 55dbbdb636 Handle unknown jids 2014-10-24 16:37:25 +02:00
sualko 308ccc1426 Add has-come-online notification 2014-10-24 14:22:36 +02:00
sualko 7f1a011b1b improve notifications
- sync sound and message
- add icon
2014-10-24 13:52:39 +02:00
sualko d102d41f6b detec uri scheme in message 2014-10-23 14:57:03 +02:00
sualko 91def2febc detect xmpp: url in message 2014-10-23 14:47:40 +02:00
sualko 7ea444276b add uri query actions 2014-10-23 12:29:06 +02:00
sualko f810a8a28f fix opened flag 2014-10-23 11:11:20 +02:00
sualko 2acf47a872 add opened flag to toggle list 2014-10-23 00:58:35 +02:00
sualko 906136245a Implement XEP-0147 URI Scheme Query (close #39) 2014-10-21 16:52:50 +02:00
sualko a053753e10 detect email in message 2014-10-20 13:13:22 +02:00
sualko e996296b7f add unread flag to roster and scroll to target window 2014-10-16 13:04:58 +02:00
sualko d4a31dc8fc end all private conversations on logout 2014-10-15 15:49:59 +02:00
sualko c8ca2734e0 handle loadSettings failure 2014-10-15 14:20:32 +02:00
sualko 03e8ae8d1d remove email pattern from contact dialog 2014-10-15 13:17:57 +02:00
sualko d626eb355f improve smp 2014-10-15 13:00:04 +02:00
sualko 862c124366 esc closes window 2014-10-15 11:21:30 +02:00
Lukas Matt 3c2cf893be Adjust css namespace to jsxc 2014-10-14 23:24:36 +02:00
Lukas Matt ac8f014377 In respect of rails assets we should define images in css 2014-10-14 19:28:10 +02:00
sualko d0e16c0a2a fix window toggle in video mode 2014-10-14 17:14:36 +02:00
sualko cb926a1dec fix video icon 2014-10-14 16:56:16 +02:00
sualko 7aac1d6c28 set focus to input on textarea click 2014-10-09 12:58:42 +02:00
sualko 25a982f9c3 request notification permission silent 2014-10-09 12:54:46 +02:00
sualko 76da9c0fd1 improve video window
- add loader
- update video icon on presence
- slide chat
- cancel call on ice failure
- fix info for initiator
- only request available user media (chrome)
2014-10-09 12:33:23 +02:00
sualko a9d167acda Merge branch 'video-window-design' of https://github.com/sualko/jsxc 2014-10-09 08:22:34 +02:00
sualko 32960f39b0 fix non-square avatars (close #68) 2014-10-08 15:22:19 +02:00
sualko 3e1c1ded67 improve login box (close #82) 2014-10-08 15:06:52 +02:00
sualko e19da058f6 vCard: swap top and bottom (close #69) 2014-10-08 14:31:33 +02:00
sualko 80b5a4a350 replace user identifier (fix #78)
from css id to bar jid.
2014-10-08 14:05:40 +02:00
sualko 5c10a738cb Merge branch 'MarcelWaldvogel-language-update' 2014-09-24 13:43:03 +02:00
sualko 855b776ca2 update language vars 2014-09-24 13:38:37 +02:00
sualko 735016e676 Merge branch 'language-update' of git://github.com/MarcelWaldvogel/jsxc into MarcelWaldvogel-language-update 2014-09-24 13:18:51 +02:00
sualko 46897f0e66 handle resource case sensitive 2014-09-24 12:58:36 +02:00
sualko f1918e06cb add disco dtls feature (#65) 2014-09-24 12:28:58 +02:00
Klaus Herberth 3405d0e3c2 move chat window beside video 2014-09-17 11:36:30 +02:00
Marcel Waldvogel c280251e3c Language update
More consistent and user-friendly language (EN, DE) and dialog layout
2014-09-14 12:30:34 +02:00
sualko 0954c245c3 build v1.0.0-alpha1 2014-09-08 14:25:21 +02:00
sualko 1aa44434b3 intercept ff snapshot security error 2014-09-08 14:21:59 +02:00
sualko c1bd08b3e4 minor style change 2014-09-08 06:31:41 -04:00
sualko f298364a37 fix message delivery (close #17)
- Show warning if we receive an encrypted message with unknown instance tag
- Enable ake on received otr error
2014-09-08 10:57:12 +02:00
sualko e061670880 add bouncing effect to notice 2014-09-08 10:29:02 +02:00
sualko 6680283cea minor window scrollbar improvement
- hide unneeded buttons
- update sb after window is closed
2014-09-08 10:05:21 +02:00
Klaus Herberth cb6b1345e0 fix cross-browser visible api
- test type of document.hidden
2014-09-07 11:38:28 +02:00
sualko 09a83236ab add scrollbar to window list 2014-09-05 15:40:03 +02:00
sualko a68bae3288 generate dsa key in background (close #45) 2014-09-04 15:52:39 +02:00
sualko a7f4073f0b fix wrong avatars 2014-09-04 11:11:06 +02:00
sualko 8248854ce7 make chat window resizable
- update jquery.slimscroll.js
- use jquery resizable
2014-09-02 16:16:40 +02:00
sualko 88f225f564 minor webrtc fixes
- fix incoming call window
- add information to chat window
- update strophe.jingle
2014-09-02 14:09:57 +02:00
sualko 8c1ba13449 fix caps node property 2014-09-02 13:18:46 +02:00
sualko eb7cef099b Display more information per user 2014-09-02 13:12:07 +02:00
sualko 8ae8d2f7bf add translation 2014-09-02 11:04:58 +02:00
115 arquivos alterados com 68141 adições e 9384 exclusões
+7
Ver Arquivo
@@ -1 +1,8 @@
node_modules
*.zip
*.zip.sig
bower_components
archives/
css/
dev/
.wti
+3
Ver Arquivo
@@ -4,3 +4,6 @@
[submodule "lib/otr"]
path = lib/otr
url = https://github.com/sualko/otr.git
[submodule "lib/i18next"]
path = lib/i18next
url = https://github.com/i18next/i18next.git
+7 -2
Ver Arquivo
@@ -14,11 +14,15 @@
"multistr": true,
"devel": true,
"globals": {
"t":true,
"i18n":true,
"I18next":true,
"OTR":true,
"DSA":true,
"Worker":true,
"BigInt":true,
"Notification":true,
"$": true,
"jQuery":true,
"Strophe":true,
"localStorage":true,
@@ -29,6 +33,7 @@
"jsxc":true,
"getUserMediaWithConstraints":true,
"setupRTC":true,
"SDPUtil":true
"SDPUtil":true,
"getSelection":true
}
}
}
+63
Ver Arquivo
@@ -1,3 +1,66 @@
v1.1.0a / 2015-02-25
===
- fix css url path
v1.1.0 / 2015-01-08
===
- move from plain css to sass
- show avatar also by EXTVAL (url), not only by BINVAL
- add XEP-0280 (Message Carbons)
- add XEP-0297 (Stanza Forwarding)
- add option to disable otr
- add timestamp to messages
- add ajax/prebind login
- fix offline subscription request
- fix hide offline contacts
- fix error with multiple own resources
- fix avatars with newlines
v1.0.0 / 2014-11-06
===
- add unread flag to roster and scroll to target window
- add XEP-0147 URI Scheme Query support
- add has-come-online notification
- add silent notification request
- add more information in vCard view
- add resizable function to chat window
- add vertical scrollbar to window list
- add call information to chat window
- add concatinated and uglified files
- add translations
- minor video call improvements
- minor style improvements
- generate dsa key complete in background
- update caps node property to jsxc.org
- update strophe.jingle
- update otr
- fix wrong avatars
- fix minor message delivery errors
- fix ff snapshot security error
- fix case sensitive resource handling
- fix non-square avatars
- fix several video issues
- fix messages from unknown (not in roster) jid
- fix vcard retrieval from unknown (not in roster) jid
- fix vcard in second tab
- fix jids with non-word characters (replace user identifier)
- improve video window design
- improve user info
- improve login box
- improve smp user interaction
- improve notifications (sync sound/message, icon)
- minor chat window improvements
- detect email in message
- detect uri scheme in message
- end all private conversations on logout
- remove email pattern from contact dialog
- disable video on second tab
- add/require disco dtls feature for webrtc
- move emoticons to css
- handle loadSettings failure
- change cursor for some elements
- prevent event bubbling for dialog
v0.8.2 / 2014-08-20
===
- fix use of custom username
+195 -16
Ver Arquivo
@@ -1,12 +1,18 @@
/* global module:false */
module.exports = function(grunt) {
var dep = grunt.file.readJSON('dep.json');
var dep_files = dep.map(function(el) {
return '<%= target %>/' + el.file;
});
// Project configuration.
grunt.initConfig({
app: grunt.file.readJSON('package.json'),
meta: {
banner: grunt.file.read('banner.js')
},
target: 'dev',
jshint: {
options: {
jshintrc: '.jshintrc'
@@ -14,18 +20,23 @@ module.exports = function(grunt) {
gruntfile: {
src: 'Gruntfile.js'
},
files: [ 'jsxc.lib.webrtc.js', 'jsxc.lib.js' ]
files: [ 'src/jsxc.lib.*' ]
},
copy: {
main: {
files: [ {
expand: true,
src: [ 'lib/strophe.jingle/*.js', 'lib/otr/build/**', 'lib/otr/lib/dsa-webworker.js', 'lib/otr/lib/sm-webworker.js', 'lib/otr/lib/const.js', 'lib/otr/lib/helpers.js', 'lib/otr/lib/dsa.js', 'lib/otr/vendor/*.js', 'lib/*.js', 'jsxc.lib.js', 'jsxc.lib.webrtc.js', '*.css', 'LICENSE', 'img/**', 'sound/**' ],
dest: 'build/'
src: [ 'lib/i18next/release/i18next-latest.min.js', 'lib/strophe.jingle/*.js', 'lib/otr/build/**', 'lib/otr/lib/dsa-webworker.js', 'lib/otr/lib/sm-webworker.js', 'lib/otr/lib/const.js', 'lib/otr/lib/helpers.js', 'lib/otr/lib/dsa.js', 'lib/otr/vendor/*.js', 'lib/*.js', 'LICENSE', 'img/**', 'sound/**' ],
dest: '<%= target %>/'
}, {
expand: true,
cwd: 'lib/',
src: ['*.css'],
dest: '<%= target %>/css/'
} ]
}
},
clean: [ 'build/' ],
clean: [ '<%= target %>/' ],
usebanner: {
dist: {
options: {
@@ -33,24 +44,95 @@ module.exports = function(grunt) {
banner: '<%= meta.banner %>'
},
files: {
src: [ 'build/*.js' ]
src: [ '<%= target %>/*.js' ]
}
}
},
replace: {
version: {
src: [ 'build/jsxc.lib.js' ],
src: [ '<%= target %>/jsxc.js' ],
overwrite: true,
replacements: [ {
from: '< $ app.version $ >',
to: "<%= app.version %>"
} ]
replacements: [
{
from: '< $ app.version $ >',
to: "<%= app.version %>"
}
]
},
locales: {
src: [ '<%= target %>/lib/translation.js' ],
overwrite: true,
replacements: [
{
from: /^{/g,
to: 'var I18next = {'
},
{
from: /}$/g,
to: '};'
}
]
}
},
merge_data: {
target: {
src: ['locales/*.{json,y{,a}ml}'],
dest: '<%= target %>/lib/translation.js'
}
},
concat: {
dep: {
options: {
banner: '/*!\n' +
' * <%= app.name %> v<%= app.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n' +
' * \n' +
' * This file concatenates all dependencies of <%= app.name %>.\n' +
' * \n' +
' */\n\n',
process: function(src, filepath) {
filepath = filepath.replace(/^[a-z]+\//i, '');
if (filepath === 'lib/otr/build/dep/crypto.js') {
src += ';';
}
var data = dep[dep_files.indexOf(filepath)];
if (data) {
return '/*!\n * Source: ' + filepath + ', license: ' + data.license + ', url: ' + data.url + ' */\n' + src;
} else {
return src;
}
}
},
src: dep_files,
dest: '<%= target %>/lib/jsxc.dep.js'
},
jsxc: {
options: {
banner: '/*! This file is concatenated for the browser. */\n\n'
},
src: ['src/jsxc.intro.js', 'src/jsxc.lib.js', 'src/jsxc.lib.*.js', 'src/jsxc.outro.js'],
dest: '<%= target %>/jsxc.js'
}
},
uglify: {
jsxc: {
options: {
mangle: false,
sourceMap: true,
preserveComments: 'some'
},
files: {
'<%= target %>/lib/jsxc.dep.min.js': ['<%= target %>/lib/jsxc.dep.js'],
'<%= target %>/jsxc.min.js': ['<%= target %>/jsxc.js']
}
}
},
search: {
console: {
files: {
src: ['*.js']
src: [ 'src/*.js' ]
},
options: {
searchString: /console\.log\((?!'[<>]|msg)/g,
@@ -60,18 +142,86 @@ module.exports = function(grunt) {
},
changelog: {
files: {
src: ['CHANGELOG.md']
src: [ 'CHANGELOG.md' ]
},
options: {
searchString: "<%= app.version %>",
logFormat: 'console',
onComplete: function(m) {
if(m.numMatches === 0) {
grunt.fail.fatal("No entry in README.md for current version found.");
if (m.numMatches === 0) {
grunt.fail.fatal("No entry in CHANGELOG.md for current version found.");
}
}
}
}
},
compress: {
main: {
options: {
archive: "archives/jsxc-<%= app.version %>.zip"
},
files: [ {
src: [ '**' ],
expand: true,
dest: 'jsxc/',
cwd: 'build/'
} ]
}
},
dataUri: {
dist: {
src: '<%= target %>/css/*.css',
dest: '<%= target %>/css/',
options: {
target: ['<%= target %>/img/*.*', '<%= target %>/img/**/*.*'],
fixDirLevel: false,
maxBytes: 2048
}
}
},
jsdoc: {
dist: {
src: ['src/jsxc.lib.*'],
dest: 'doc'
}
},
autoprefixer: {
no_dest: {
src: '<%= target %>/css/*.css'
}
},
csslint: {
strict: {
options: {
import: 2
},
src: ['<%= target %>/css/*.css']
},
},
sass: {
options: {
imagePath: '../img'
},
dist: {
files: {
'<%= target %>/css/jsxc.css': 'scss/jsxc.scss',
'<%= target %>/css/jsxc.webrtc.css': 'scss/jsxc.webrtc.scss'
}
}
},
watch: {
locales: {
files: ['locales/*'],
tasks: ['merge_data', 'replace:locales', 'concat:dep']
},
css: {
files: ['scss/*'],
tasks: ['sass', 'autoprefixer']
},
js: {
files: ['src/jsxc.lib.*'],
tasks: ['concat:jsxc']
}
}
});
@@ -79,11 +229,40 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-banner');
grunt.loadNpmTasks('grunt-text-replace');
grunt.loadNpmTasks('grunt-search');
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.loadNpmTasks('grunt-jsdoc');
grunt.loadNpmTasks('grunt-data-uri');
grunt.loadNpmTasks('grunt-merge-data');
grunt.loadNpmTasks('grunt-contrib-csslint');
grunt.loadNpmTasks('grunt-sass');
grunt.loadNpmTasks('grunt-autoprefixer');
grunt.loadNpmTasks('grunt-contrib-watch');
// Default task.
grunt.registerTask('default', [ 'jshint', 'search', 'clean', 'copy', 'usebanner', 'replace' ]);
//Default task
grunt.registerTask('default', [ 'build', 'watch' ]);
grunt.registerTask('build', ['jshint', 'clean', 'sass', 'autoprefixer', 'copy', 'merge_data', 'replace:locales', 'concat']);
grunt.registerTask('build:prerelease', 'Build a new pre-release', function(){
grunt.config.set('target', 'build/');
grunt.task.run([ 'search:console', 'build', 'dataUri', 'usebanner', 'replace:version', 'uglify', 'compress' ]);
});
grunt.registerTask('build:release', 'Build a new release', function(){
grunt.config.set('target', 'build/');
grunt.task.run([ 'search:changelog', 'build:prerelease', 'jsdoc' ]);
});
// Create alpha/beta build @deprecated
grunt.registerTask('pre', [ 'build:prerelease' ]);
// before commit
grunt.registerTask('commit', [ 'jshint', 'search:console' ]);
};
+1 -18
Ver Arquivo
@@ -4,21 +4,4 @@ Real-time chat app. This app requires an external XMPP server (openfire, ejabber
You find a list of features, supported protocols and browsers at the homepage of __[Javascript XMPP Client](http://www.jsxc.org)__.
## Developer notes
Please execute the following commands to get a copy of the code:
```
git clone https://github.com/sualko/jsxc/
git submodule update --init
```
### Libaries
- jQuery (http://jquery.com/)
- Strophe.js (http://strophe.im/strophejs/)
- Strophe.js Plugins (https://github.com/strophe/strophejs-plugins)
- OTR (https://github.com/arlolra/otr)
- strophe.jingle (https://github.com/ESTOS/strophe.jingle)
### Events
coming soon...
If you are looking for install instructions or developer notes, please also checkout our [wiki](https://github.com/jsxc/jsxc/wiki/).
+2 -1
Ver Arquivo
@@ -1,4 +1,4 @@
/**
/*!
* <%= app.name %> v<%= app.version %> - <%= grunt.template.today("yyyy-mm-dd") %>
*
* Copyright (c) <%= grunt.template.today("yyyy") %> <%= app.author %> <br>
@@ -8,4 +8,5 @@
*
* @author <%= app.author %>
* @version <%= app.version %>
* @license MIT
*/
+1049
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+239
Ver Arquivo
@@ -0,0 +1,239 @@
.jsxc_remotevideo, .jsxc_noRemoteVideo {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 9000;
background-color: #999999; }
.jsxc_webrtc {
width: 900px; }
.jsxc_webrtc .jsxc_status {
z-index: 9999;
border-radius: 20px;
display: none;
position: absolute;
top: 30px;
left: 50%;
background-color: rgba(0, 0, 0, 0.5);
color: #fff;
padding: 15px;
font-weight: bold;
text-align: center; }
.jsxc_webrtc .slimScrollDiv {
opacity: 1 !important; }
.jsxc_webrtc li .jsxc_name {
cursor: auto; }
.jsxc_webrtc li .jsxc_name:hover {
color: gray; }
.jsxc_videoContainer {
width: 640px;
height: 480px;
position: relative;
background-color: #999999; }
.jsxc_videoContainer video {
display: none; }
.jsxc_videoContainer .jsxc_noRemoteVideo {
display: none; }
.jsxc_noRemoteVideo p {
position: absolute;
bottom: 0;
left: 0;
text-align: center;
color: #fff;
width: 100%;
z-index: 100; }
.jsxc_noRemoteVideo > div {
width: 200px;
height: 200px;
overflow: hidden;
position: absolute;
top: 50%;
margin-top: -100px;
left: 50%;
margin-left: -100px; }
.jsxc_noRemoteVideo > div > div {
background-color: #4d4d4d; }
.jsxc_noRemoteVideo > div > div:first-child {
width: 50%;
height: 50%;
border-radius: 50%;
position: absolute;
left: 50%;
margin-left: -25%;
top: 10%; }
.jsxc_noRemoteVideo > div > div:last-child {
position: absolute;
bottom: -50%;
width: 100%;
height: 100%;
border-radius: 50%; }
.jsxc_localvideo {
width: 160px;
height: 120px;
position: absolute;
right: 10px;
bottom: 10px;
z-index: 9990;
background-color: #000;
cursor: pointer; }
div:full-screen {
width: 100%;
height: 100%;
background-color: #000; }
div:full-screen.jsxc_localvideo {
border: 1px solid #fff; }
div:-webkit-full-screen {
width: 100%;
height: 100%;
background-color: #000; }
div:-moz-full-screen {
width: 100%;
height: 100%;
background-color: #000; }
div:-ms-fullscreen {
width: 100%;
height: 100%;
background-color: #000; }
div:fullscreen {
width: 100%;
height: 100%;
background-color: #000; }
div:-webkit-full-screen.jsxc_localvideo {
border: 1px solid #fff; }
div:-moz-full-screen.jsxc_localvideo {
border: 1px solid #fff; }
div:-ms-fullscreen.jsxc_localvideo {
border: 1px solid #fff; }
div:fullscreen.jsxc_localvideo {
border: 1px solid #fff; }
div.jsxc_video {
background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMiIKICAgd2lkdGg9IjIwIgogICBoZWlnaHQ9IjIwIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExMCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczgiIC8+CiAgPGcKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMDM3ODg1OTQsMCwwLDAuMDM3ODg1OTQsLTAuNDEzNDA3OTMsLTIuNjMxMDcxNikiPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzkwNiIKICAgICAgIHN0eWxlPSJmaWxsOiM4MDgwODA7c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDM2MS42NTE0OCwzMTMuNTE3NjggMTc3LjE2MDc0LC0xMzEuNzg1MTYgMCwzMDIuMjI5OTkgTCAzNTguOTczMzgsMzUwLjE4NTE3IFogTSAxMC45MTE5MjIsMTgyLjQwNjM0IGwgMzc4LjM3MjY3OCwwIDAsMzAyLjY1NTgyIC0zNzguMzcyNjc4LDAgeiIgLz4KICA8L2c+Cjwvc3ZnPgo=");
background-repeat: no-repeat;
background-position: center center;
background-size: 15px 15px; }
div.jsxc_video:not(.jsxc_disabled):hover {
background-image: url("../img/camera_icon_white.svg"); }
.jsxc_controlbar {
width: 640px; }
.jsxc_controlbar .jsxc_showchat {
float: right; }
.jsxc_multi > div {
display: none; }
.jsxc_snapshotbar {
width: 100%;
display: none; }
.jsxc_snapshotbar img {
height: 50px; }
.jsxc_buttongroup {
display: inline; }
.jsxc_buttongroup button:first-child {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
margin-right: 0; }
.jsxc_buttongroup button:last-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
margin-left: 0; }
.jsxc_chatarea {
position: relative;
float: right;
height: 480px;
width: 250px;
background-color: #999999; }
.jsxc_chatarea .jsxc_settings {
display: none !important; }
.jsxc_chatarea .jsxc_close {
display: none !important; }
.jsxc_chatarea .jsxc_video {
display: none !important; }
.jsxc_chatarea .jsxc_window {
bottom: 0;
box-shadow: none; }
.jsxc_chatarea > ul {
width: 250px;
height: 480px;
list-style: none;
padding: 0; }
.bubblingG {
text-align: center;
width: 129px;
height: 80px;
position: absolute;
top: 40%;
left: 50%;
margin-left: -64px; }
.bubblingG span {
display: inline-block;
vertical-align: middle;
width: 16px;
height: 16px;
margin: 40px auto;
background: #000;
border-radius: 81px;
-webkit-animation: bubblingG 1.3s infinite alternate;
animation: bubblingG 1.3s infinite alternate; }
#bubblingG_1 {
-webkit-animation-delay: 0s;
animation-delay: 0s; }
#bubblingG_2 {
-webkit-animation-delay: 0.39s;
animation-delay: 0.39s; }
#bubblingG_3 {
-webkit-animation-delay: 0.78s;
animation-delay: 0.78s; }
@-webkit-keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color: #000;
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
width: 39px;
height: 39px;
background-color: #fff;
-webkit-transform: translateY(-34px);
transform: translateY(-34px); } }
@keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color: #000;
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
width: 39px;
height: 39px;
background-color: #fff;
-webkit-transform: translateY(-34px);
transform: translateY(-34px); } }
.jsxc_fullscreen.jsxc_localvideo {
border: 1px solid #fff; }
.jsxc_videoSuitable .jsxc_name {
font-style: italic; }
#jsxc_buddylist .jsxc_options .jsxc_video {
background-image: url("../img/camera_icon_white.svg"); }
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
opacity: 0.2; }
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 9.3 KiB

+105
Ver Arquivo
@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="Layer_1"
xml:space="preserve"
height="147.22015"
viewBox="0 0 192.89149 147.21771"
width="192.89587"
version="1.1"
y="0px"
x="0px"
enable-background="new 0 0 176.486 181.437"
inkscape:version="0.91pre2 r"
sodipodi:docname="XMPP_logo.svg"><metadata
id="metadata41"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs39" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="640"
inkscape:window-height="480"
id="namedview37"
showgrid="false"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10"
inkscape:zoom="1.3007054"
inkscape:cx="71.332001"
inkscape:cy="72.501142"
inkscape:window-x="75"
inkscape:window-y="34"
inkscape:window-maximized="0"
inkscape:current-layer="Layer_1" /><linearGradient
id="SVGID_1_"
y2="0.00048828"
gradientUnits="userSpaceOnUse"
x2="-1807.2"
gradientTransform="translate(1925.9953,9.9988343)"
y1="125.86"
x1="-1807.2"><stop
stop-color="#1b3967"
offset=".011"
id="stop4" /><stop
stop-color="#13b5ea"
offset=".467"
id="stop6" /><stop
stop-color="#002b5c"
offset=".9945"
id="stop8" /></linearGradient><path
d="m 146.28531,24.187835 c 0.077,1.313 -1.786,0.968 -1.786,2.293 0,38.551 -44.720002,96.831035 -89.847002,108.190035 l 0,1.182 C 114.60931,130.34287 181.38231,69.052835 182.89231,10.002834 l -36.6,14.189001 z"
id="path10"
style="fill:url(#SVGID_1_)"
inkscape:connector-curvature="0" /><path
d="m 130.22531,27.958835 c 0.077,1.313 0.121,2.633 0.121,3.958 0,38.551 -30.700002,90.497035 -75.827002,101.860035 l 0,1.637 c 59.065002,-3.823 105.810002,-63.023035 105.810002,-109.200035 0,-2.375 -0.125,-4.729 -0.371,-7.056 l -29.73,8.796 z"
id="path12"
inkscape:connector-curvature="0"
style="fill:#e96d1f" /><linearGradient
id="SVGID_2_"
y2="1.279e-13"
gradientUnits="userSpaceOnUse"
x2="-1073.2"
gradientTransform="matrix(-1,0,0,1,-998.20465,9.9988343)"
y1="126.85"
x1="-1073.2"><stop
stop-color="#1b3967"
offset=".011"
id="stop15" /><stop
stop-color="#13b5ea"
offset=".467"
id="stop17" /><stop
stop-color="#002b5c"
offset=".9945"
id="stop19" /></linearGradient><path
d="m 46.594308,24.187835 c -0.077,1.313 1.787,0.968 1.787,2.293 0,38.551 46.558,97.366035 91.688002,108.730035 l 0,1.639 C 80.116308,131.32987 11.509308,69.049835 9.9993079,9.9998343 L 46.598308,24.188835 Z"
id="path21"
style="fill:url(#SVGID_2_)"
inkscape:connector-curvature="0" /><path
d="m 64.726308,28.930835 c -0.076,1.313 -0.12,2.63 -0.12,3.957 0,38.551 30.699,90.497035 75.827002,101.860035 l 0,1.639 C 81.389308,133.59687 34.623308,73.362835 34.623308,27.186835 c 0,-2.375 0.128,-4.729 0.371,-7.056 l 29.73,8.798 z"
id="path23"
inkscape:connector-curvature="0"
style="fill:#a0ce67" /><path
d="m 34.708308,19.581835 7.617,2.722 c -0.041,0.962 -0.066,2.254 -0.066,3.225 0,41.219 37.271,98.204035 87.272002,107.120035 3.245,1.088 7.538,2.077 10.932,2.931 l 0,1.638 C 75.209308,131.65787 29.363308,65.351835 34.703308,19.577835 Z"
id="path25"
inkscape:connector-curvature="0"
style="fill:#439639" /><path
d="m 160.33531,18.758835 -7.833,2.625 c 0.041,0.963 0.191,2.203 0.191,3.173 0,41.219 -37.272,98.205035 -87.274002,107.120035 -3.243,1.089 -7.538,2.077 -10.93,2.932 l 0,1.639 C 122.83331,127.58787 165.66931,64.528835 160.32931,18.757835 Z"
id="path27"
inkscape:connector-curvature="0"
style="fill:#d9541e" /></svg>

Depois

Largura:  |  Altura:  |  Tamanho: 4.5 KiB

+59
Ver Arquivo
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 1000 1000"
preserveAspectRatio="xMinYMin meet"
width="100%"
height="100%"
style="width: 512px; height: 512px;"
id="svg2"
version="1.1"
inkscape:version="0.91+devel r"
sodipodi:docname="group_grey.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="980"
inkscape:window-height="888"
id="namedview6"
showgrid="false"
inkscape:zoom="0.6675088"
inkscape:cx="512.17823"
inkscape:cy="480.21903"
inkscape:window-x="889"
inkscape:window-y="85"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="m 0.94630456,763.0963 c 0,22.21203 9.08673644,33.31804 27.26020844,33.31804 l 112.069747,0 0,-142.35887 c 0,-18.17347 4.54363,-34.83222 13.63088,-49.97627 9.08724,-15.14405 21.70797,-26.75512 37.86216,-34.83326 l 115.09866,-54.52042 c 10.09637,-6.05782 18.17347,-13.12528 24.23129,-21.20238 -12.11564,-18.17347 -22.21202,-39.37586 -30.28912,-63.60715 -8.0771,-24.2313 -12.11564,-49.47223 -12.11564,-75.7228 0,-16.1542 2.01927,-32.3084 6.05782,-48.46259 4.03855,-16.1542 9.08674,-31.29876 15.14456,-45.43368 -20.19275,-14.13493 -41.39513,-21.20239 -63.60715,-21.20239 -38.36622,2.01928 -68.65534,17.66839 -90.86736,46.94736 -22.21201,29.27897 -33.31803,62.09244 -33.31803,98.44042 2.01928,62.59751 24.2313,107.02155 66.63606,133.27212 L 16.092416,596.50615 C 5.9960421,602.56397 0.94785546,612.66034 0.94785546,626.79527 l 0,136.30103 z M 191.76775,796.41434 c -2.01927,42.40476 10.09637,64.61678 36.34695,66.63606 l 542.17524,0 c 12.11565,-4.03855 20.69783,-10.09637 25.74653,-18.17347 5.04869,-8.0771 7.57305,-14.63948 7.57305,-19.68716 l 0,-171.13275 c 0,-18.17347 -7.06746,-30.28912 -21.20238,-36.34694 L 637.01936,545.01619 573.41221,514.72707 c 38.36622,-22.21202 63.60715,-60.57824 75.7228,-115.09865 8.0771,-30.28912 8.0771,-61.58788 0,-93.89627 -10.09637,-36.34695 -28.7744,-67.14115 -56.0341,-92.38259 -27.25969,-25.24145 -59.06352,-38.87182 -95.4115,-40.89109 -36.34694,2.01927 -67.6457,15.64964 -93.89627,40.89109 -26.25057,25.24144 -44.42404,55.02601 -54.52042,89.35368 -12.11564,46.44331 -8.07709,93.89627 12.11565,142.35886 16.1542,30.28912 37.35658,54.52041 63.60715,72.69389 l -57.54932,27.2602 -151.4456,69.66498 c -16.1542,8.0771 -24.2313,21.20238 -24.2313,39.37585 l 0,142.35887 z m 475.53918,-302.8912 c 8.0771,8.0771 18.17347,16.1542 30.28912,24.23129 12.11565,8.0771 23.22166,14.13493 33.31803,18.17348 10.09638,4.03855 23.22166,9.59181 39.37586,16.65979 16.1542,7.06797 28.26984,12.62124 36.34694,16.65979 16.1542,8.0771 28.77493,19.68819 37.86218,34.83326 9.08724,15.14507 13.63088,31.80384 13.63088,49.97627 l 0,142.35887 115.09865,0 c 18.17347,-2.01928 27.26021,-13.12529 27.26021,-33.31803 l 0,-136.30104 c 0,-14.13493 -5.04819,-24.2313 -15.14456,-30.28912 L 815.72517,514.72707 c 42.40477,-30.28912 63.60715,-73.70352 63.60715,-130.24321 0,-38.36622 -12.11565,-72.18881 -36.34694,-101.46778 -24.2313,-29.27897 -53.51078,-43.91896 -87.83845,-43.92 -22.21202,0 -44.42404,7.06747 -66.63606,21.20239 12.11564,30.28912 18.17347,61.58787 18.17347,93.89627 0,50.48187 -13.12529,96.92518 -39.37586,139.32995 z"
id="path4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cscsscccsssccscccscccccssscccccscscccccscccssssssccssccssccscc"
style="fill:#999999;stroke-width:1.55090213;fill-opacity:1" />
</svg>

Depois

Largura:  |  Altura:  |  Tamanho: 4.2 KiB

+58
Ver Arquivo
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 1000 1000"
preserveAspectRatio="xMinYMin meet"
width="100%"
height="100%"
style="width: 512px; height: 512px;"
id="svg2"
version="1.1"
inkscape:version="0.91+devel r"
sodipodi:docname="group_white.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1855"
inkscape:window-height="1056"
id="namedview6"
showgrid="false"
inkscape:zoom="0.6675088"
inkscape:cx="538.39511"
inkscape:cy="480.21903"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<path
d="m 0.94630456,763.0963 c 0,22.21203 9.08673644,33.31804 27.26020844,33.31804 l 112.069747,0 0,-142.35887 c 0,-18.17347 4.54363,-34.83222 13.63088,-49.97627 9.08724,-15.14405 21.70797,-26.75512 37.86216,-34.83326 l 115.09866,-54.52042 c 10.09637,-6.05782 18.17347,-13.12528 24.23129,-21.20238 -12.11564,-18.17347 -22.21202,-39.37586 -30.28912,-63.60715 -8.0771,-24.2313 -12.11564,-49.47223 -12.11564,-75.7228 0,-16.1542 2.01927,-32.3084 6.05782,-48.46259 4.03855,-16.1542 9.08674,-31.29876 15.14456,-45.43368 -20.19275,-14.13493 -41.39513,-21.20239 -63.60715,-21.20239 -38.36622,2.01928 -68.65534,17.66839 -90.86736,46.94736 -22.21201,29.27897 -33.31803,62.09244 -33.31803,98.44042 2.01928,62.59751 24.2313,107.02155 66.63606,133.27212 L 16.092416,596.50615 C 5.9960421,602.56397 0.94785546,612.66034 0.94785546,626.79527 l 0,136.30103 z M 191.76775,796.41434 c -2.01927,42.40476 10.09637,64.61678 36.34695,66.63606 l 542.17524,0 c 12.11565,-4.03855 20.69783,-10.09637 25.74653,-18.17347 5.04869,-8.0771 7.57305,-14.63948 7.57305,-19.68716 l 0,-171.13275 c 0,-18.17347 -7.06746,-30.28912 -21.20238,-36.34694 L 637.01936,545.01619 573.41221,514.72707 c 38.36622,-22.21202 63.60715,-60.57824 75.7228,-115.09865 8.0771,-30.28912 8.0771,-61.58788 0,-93.89627 -10.09637,-36.34695 -28.7744,-67.14115 -56.0341,-92.38259 -27.25969,-25.24145 -59.06352,-38.87182 -95.4115,-40.89109 -36.34694,2.01927 -67.6457,15.64964 -93.89627,40.89109 -26.25057,25.24144 -44.42404,55.02601 -54.52042,89.35368 -12.11564,46.44331 -8.07709,93.89627 12.11565,142.35886 16.1542,30.28912 37.35658,54.52041 63.60715,72.69389 l -57.54932,27.2602 -151.4456,69.66498 c -16.1542,8.0771 -24.2313,21.20238 -24.2313,39.37585 l 0,142.35887 z m 475.53918,-302.8912 c 8.0771,8.0771 18.17347,16.1542 30.28912,24.23129 12.11565,8.0771 23.22166,14.13493 33.31803,18.17348 10.09638,4.03855 23.22166,9.59181 39.37586,16.65979 16.1542,7.06797 28.26984,12.62124 36.34694,16.65979 16.1542,8.0771 28.77493,19.68819 37.86218,34.83326 9.08724,15.14507 13.63088,31.80384 13.63088,49.97627 l 0,142.35887 115.09865,0 c 18.17347,-2.01928 27.26021,-13.12529 27.26021,-33.31803 l 0,-136.30104 c 0,-14.13493 -5.04819,-24.2313 -15.14456,-30.28912 L 815.72517,514.72707 c 42.40477,-30.28912 63.60715,-73.70352 63.60715,-130.24321 0,-38.36622 -12.11565,-72.18881 -36.34694,-101.46778 -24.2313,-29.27897 -53.51078,-43.91896 -87.83845,-43.92 -22.21202,0 -44.42404,7.06747 -66.63606,21.20239 12.11564,30.28912 18.17347,61.58787 18.17347,93.89627 0,50.48187 -13.12529,96.92518 -39.37586,139.32995 z"
id="path4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cscsscccsssccscccscccccssscccccscscccccscccssssssccssccssccscc"
style="fill:#ffffff;stroke-width:1.55090213" />
</svg>

Depois

Largura:  |  Altura:  |  Tamanho: 4.2 KiB

+76
Ver Arquivo
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="15"
height="15"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="resize_gray.svg">
<defs
id="defs4">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3803">
<rect
style="stroke:none"
id="rect3805"
width="16.09375"
height="14.71875"
x="0.84375"
y="1038.1434" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
inkscape:cx="6.9909088"
inkscape:cy="6.5564812"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1865"
inkscape:window-height="1056"
inkscape:window-x="55"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1037.3622)">
<path
style="fill:none;stroke:#bfbfbf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 10.46875,1032.1747 -14.5,14.2813 z m 3.5,1.2501 -17.3125,17.3124 z"
id="path2985"
inkscape:connector-curvature="0"
clip-path="url(#clipPath3803)"
transform="translate(0.8125,0.6875)"
sodipodi:nodetypes="cccccc" />
</g>
</svg>

Depois

Largura:  |  Altura:  |  Tamanho: 2.2 KiB

-978
Ver Arquivo
@@ -1,978 +0,0 @@
.jsxc_online,.jsxc_chat {
border-left: 4px solid #00BFFF !important;
}
.jsxc_away,.jsxc_xa {
border-left: 4px solid orange !important;
}
.jsxc_dnd {
border-left: 4px solid red !important;
}
.jsxc_offline {
border-left: 4px solid #A4A4A4 !important;
}
.jsxc_hidden {
display: none;
}
.jsxc_invalid {
border: 2px solid red !important;
}
p.jsxc_right {
text-align: right;
}
p.jsxc_center {
text-align: center;
}
/*############################
*########## Dialog ##########
*############################*/
#jsxc_dialog {
padding: 10px;
min-width: 300px;
}
#jsxc_dialog p {
margin-bottom: 1em;
}
#jsxc_dialog h3 {
font-size: 120%;
font-weight: bold;
margin-bottom: 10px;
margin-top: 20px;
}
#jsxc_dialog p input {
margin-bottom: 5px;
width: 60%;
outline: none;
}
#jsxc_dialog p input[type="submit"] {
width: auto;
}
#jsxc_dialog p label {
display: block;
width: 30%;
float: left;
padding: 6px 0px;
}
#jsxc_dialog .jsxc_right {
margin-top: 20px;
}
#jsxc_dialog p.jsxc_maxWidth {
max-width: 500px;
}
#jsxc_dialog fieldset {
border: 2px solid #ccc;
}
#jsxc_dialog legend {
padding: 0px 10px;
font-weight: bold;
}
#jsxc_dialog input {
outline: none;
}
#jsxc_dialog input:invalid {
border:1px solid red;
}
#jsxc_dialog .jsxc_fieldset {
width: 280px;
padding: 10px;
border-radius: 3px;
}
#jsxc_dialog .jsxc_fieldset label {
display: inline-block;
width: 100px;
}
#jsxc_dialog .jsxc_fieldset input[type="Number"] {
display: inline-block;
width: 50px;
}
#jsxc_dialog input[readonly] {
background-color: #efefef;
}
/*############################
*########## Overall #########
*############################*/
li .jsxc_name {
overflow: hidden;
height: 30px;
cursor: pointer;
text-overflow: ellipsis;
white-space: nowrap;
}
li .jsxc_name:hover {
color: #FAFAFA;
}
.jsxc_avatar,ul#jsxc_buddylist li:hover .jsxc_avatar {
width: 25px;
height: 25px;
line-height: 25px;
margin-top: 2px;
margin-right: 4px;
background-color: #a3a3a3;
border-radius: 2px;
float: left;
text-align: center;
font-weight: bold;
font-size: 30px;
color: #b1b1b1;
overflow: hidden;
position: relative;
font-family: Arial;
}
.jsxc_avatar img {
display: block;
width: 25px;
height: 25px;
position: absolute;
top: 0px;
left: 0px;
}
/*############################
*########## Roster ##########
*############################*/
div#jsxc_roster {
position: fixed;
top: 0px;
bottom: 0px;
right: 0px;
width: 200px;
overflow: visible;
border-left: 4px solid #A4A4A4;
z-index: 80;
margin-left: 10px;
box-shadow: 0px 0px 7px #000000;
background-color: #383C43;
}
div#jsxc_roster .slimScrollDiv {
left: -4px;
margin-bottom: 30px;
z-index: 40;
}
div#jsxc_roster .jsxc_wait {
position: absolute;
top: 0px;
left: 0px;
bottom: 0px;
width: 160px;
padding: 20px;
background-color: #fff;
z-index: 60;
}
div#jsxc_roster .jsxc_wait img {
padding: 5px;
}
div#jsxc_roster .jsxc_wait h3 {
margin-bottom: 5px;
font-size: 1.13em;
font-weight: bold;
}
/** Input field for alias renaming */
#jsxc_roster input {
position: absolute;
top: 50%;
left: 31px;
width: 157px;
height: 18px;
margin-top: -11px;
padding: 2px;
border: 0px;
background-image: none;
background-color: #fff;
border-radius: 3px;
-moz-box-shadow: inset 0 0 5px #888;
-webkit-box-shadow: inset 0 0 5px #888;
box-shadow: inner 0 0 5px #888;
outline: none;
}
#jsxc_roster .jsxc_expand input {
left: 51px;
width: 137px;
}
div#jsxc_roster p {
color: #939393;
padding: 10px;
}
div#jsxc_roster p a {
color: #b1b1b1;
text-decoration: underline;
}
div#jsxc_roster>.jsxc_bottom {
position: absolute;
left: -4px;
bottom: 0px;
height: 30px;
width: 200px;
border-left: 4px solid #A4A4A4;
border-top: 1px solid #939393;
padding-left: 0px;
background-color: #282323;
color: #939393;
cursor: pointer;
line-height: 30px;
z-index: 50;
}
div#jsxc_roster>.jsxc_bottom>div:hover {
color: #FAFAFA;
}
div#jsxc_roster>.jsxc_bottom>div>span {
cursor: pointer;
}
div#jsxc_roster>.jsxc_bottom ul {
width: 190px;
position: absolute;
bottom: 30px;
left: 0px;
display: none;
border-top: 1px solid #939393;
padding-left: 10px;
background-color: #282323;
margin: 0;
}
div#jsxc_roster>.jsxc_bottom li {
height: 30px;
background-color: #282323;
color: #939393;
cursor: pointer;
width: 180px;
padding-left: 10px;
line-height: 30px;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
div#jsxc_roster>.jsxc_bottom li:hover:not(.jsxc_disabled ) {
color: #fff;
background-color: #3F8FBA;
}
div#jsxc_roster>.jsxc_bottom li.jsxc_disabled {
color: #595959;
cursor: default;
}
div#jsxc_roster>.jsxc_bottom ul li:last-child {
border-bottom: 1px solid #939393;
}
#jsxc_menu,#jsxc_avatar,#jsxc_notice {
height: 30px;
width: 30px;
}
/** own avatar */
#jsxc_avatar {
float: left;
margin: 0px 2px;
width: 25px;
}
#jsxc_menu {
cursor: pointer;
float: right;
text-align: center;
width: 25px;
}
#jsxc_menu>span {
opacity: 0.5;
display: block;
width: 25px;
height: 30px;
background-image: url('img/gear_white.svg');
background-size: 18px 18px;
background-repeat: no-repeat;
background-position: center center;
}
#jsxc_menu:hover>span {
opacity: 1;
}
#jsxc_notice {
float: right;
text-align: center;
line-height: 30px;
}
#jsxc_notice>span:empty {
display: none;
}
#jsxc_notice span {
background-color: #fbc14c;
border-radius: 11px;
color: black;
font-size: 80%;
padding: 2px;
}
#jsxc_presence {
cursor: pointer;
padding-left: 2px;
overflow: hidden;
}
/** List of all buddies inside the roster */
ul#jsxc_buddylist {
list-style: none;
padding: 0px;
margin: 0px;
width: 204px;
}
ul#jsxc_buddylist li {
padding: 0px;
margin: 0px;
height: 30px;
border-bottom: 1px solid #939393;
cursor: pointer;
width: 200px;
position: relative;
color: #939393;
font-family: Arial;
line-height: 30px;
padding-left: 3px;
z-index: 85;
overflow: hidden;
}
ul#jsxc_buddylist .jsxc_name {
padding-right: 30px;
}
ul#jsxc_buddylist li.jsxc_expand {
height: 54px;
}
ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar, ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar img {
width: 48px;
height: 48px;
}
#jsxc_buddylist .jsxc_control {
position:absolute;
width: 30px;
height: 30px;
top: 0px;
right: 0px;
cursor: pointer;
}
#jsxc_buddylist .jsxc_control:after {
content: '▾';
position: absolute;
left: 50%;
top: 15px;
width: 16px;
height: 16px;
line-height: 16px;
text-align: center;
margin-left: -8px;
margin-top: -8px;
border-radius: 8px;
color: #c1c1c1;
background-color: rgba(150, 150, 150, 0.5);
opacity: 0.6;
-webkit-transition: -webkit-transform 0.5s;
transition: transform 0.5s;
}
#jsxc_buddylist .jsxc_control:hover:after {
color: #fff;
opacity: 1.0;
}
#jsxc_buddylist li.jsxc_expand .jsxc_control:after {
/* content: '▴'; */
-ms-transform:rotate(180deg); /* IE 9 */
-webkit-transform:rotate(180deg);
transform:rotate(180deg);
}
#jsxc_buddylist .jsxc_options {
height: 20px;
float: left;
border-radius:2px;
background-color: rgba(150, 150, 150, 0.5);
}
#jsxc_buddylist .jsxc_options > div {
height: 20px;
width: 20px;
float: left;
margin-right:0px 1px;
background-repeat: no-repeat;
background-position: center center;
opacity: 0.6;
cursor: pointer;
}
#jsxc_buddylist .jsxc_options > div:hover {
opacity: 1;
}
#jsxc_buddylist .jsxc_chaticon {
background-image: url('img/speech_balloon_white.svg');
background-size: 15px 15px;
}
#jsxc_buddylist .jsxc_videoicon {
background-image: url('img/camera_icon_white.svg');
background-size: 13px 13px;
}
#jsxc_buddylist .jsxc_vcardicon {
font-size: 15px;
line-height: 20px;
text-align: center;
color: #fff;
font-weight: bold;
font-family: serif;
}
ul#jsxc_buddylist li:hover {
}
ul#jsxc_buddylist .jsxc_oneway {
opacity: 0.7;
}
.jsxc_oneway .jsxc_avatar {
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: grayscale(100%);
}
ul#jsxc_buddylist .jsxc_right {
float:left;
}
ul#jsxc_buddylist .jsxc_right {
float: right;
margin-right: 6px;
}
ul#jsxc_buddylist .jsxc_right div {
font-weight: bold;
text-align: center;
font-size: 13px;
line-height: 20px;
color: #fff;
}
ul#jsxc_buddylist li[data-type!="chat"] .jsxc_right {
display: none;
}
ul#jsxc_buddylist .jsxc_right div:hover {
opacity: 1.0;
}
ul#jsxc_buddylist .jsxc_rename {
}
ul#jsxc_buddylist .jsxc_delete {
}
#jsxc_roster .jsxc_avatar {
position: relative;
cursor: pointer;
}
#jsxc_roster .jsxc_avatar img {
cursor: pointer;
}
div#jsxc_toggleRoster {
width: 14px;
height: 100%;
position: absolute;
left: -14px !important;
top: 0px;
z-index: 110;
background-color: transparent;
cursor: pointer;
}
#jsxc_toggleRoster:hover {
background-color: #a4a4a4;
opacity: 0.5;
}
/*############################
*###### Window List #########
*############################*/
div#jsxc_windowList {
position: fixed;
bottom: 0px;
right: 0px;
width: 100%;
z-index: 50;
}
div#jsxc_windowList>ul {
list-style: none;
padding: 0px;
margin: 0px;
padding-right: 210px;
height: 30px;
overflow: visible;
}
div#jsxc_windowList>ul>li {
padding: 0px;
margin: 0px;
display: block;
float: right;
width: 250px;
background-color: #282323;
height: 30px;
position: relative;
overflow: visible;
margin-right: 5px;
cursor: pointer;
}
div#jsxc_windowList>ul>li.jsxc_min {
width: 200px;
}
/*############################
*######### Window ###########
*############################*/
div.jsxc_bar {
background-color: #282323;
cursor: pointer;
height: 30px;
line-height: 26px;
padding: 2px;
color: #939393;
width: 100%;
box-sizing: border-box;
overflow: hidden;
}
div.jsxc_cycle {
position: absolute;
bottom: 9px;
right: 5px;
height: 12px;
width: 12px;
border-radius: 6px;
}
div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_name {
font-style: italic;
}
div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_cycle {
background-color: orange;
}
/** Contains text area */
div.jsxc_window {
position: absolute;
bottom: 0px;
left: 0px;
right: 0px;
height: auto;
background-color: #A4A4A4;
z-index: 80;
cursor: default;
}
div.jsxc_window .jsxc_emoticons {
height: 30px;
width: 30px;
position: absolute;
top: 240px;
right: 0px;
cursor: pointer;
}
div.jsxc_window .jsxc_emoticons:after {
content: ' ';
background-image: url('img/smiley.png');
background-position: center center;
background-repeat: no-repeat;
height: 30px;
width: 30px;
opacity: 0.3;
position: absolute;
top: 0px;
left: 0px;
}
div.jsxc_window .jsxc_emoticons:hover:after {
opacity: 0.5;
}
div.jsxc_window .jsxc_emoticons ul {
display: none;
position: absolute;
bottom: 33px;
right: 3px;
width: 210px;
background-color: rgba(40, 35, 35, 0.8);
padding: 3px;
border-radius: 3px;
z-index: 200;
}
div.jsxc_window .jsxc_emoticons ul:after {
content: '';
position: absolute;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 6px solid rgba(40, 35, 35, 0.8);
display: block;
width: 0;
z-index: 1;
right: 6px;
bottom: -6px;
}
div.jsxc_window .jsxc_emoticons li {
float: right;
cursor: pointer;
}
div.jsxc_window .jsxc_emoticons img {
cursor: pointer;
border-radius: 3px;
}
div.jsxc_window .jsxc_emoticons img:hover {
background-color: rgba(255, 255, 255, 0.8);
}
/** groups elements, which will be hidden, if the window is minimized. */
.jsxc_window .jsxc_fade {
position: relative;
}
.jsxc_window .jsxc_gradient {
position: absolute;
top: 0px;
left: 0px;
right: 0px;
height: 15px;
z-index: 100;
background: -moz-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(164,
164, 164, 1)), color-stop(100%, rgba(40, 35, 35, 0)));
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* IE10+ */
background: linear-gradient(to bottom, #a4a4a4 0%, rgba(40, 35, 35, 0)
100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4a4a4',
endColorstr='#00282323', GradientType=0); /* IE6-9 */
}
div.jsxc_window .jsxc_avatar {
margin-top: 1px;
}
div.jsxc_window .jsxc_textarea {
width: 100%;
height: 100%;
overflow: hidden;
padding: 3px;
}
div.jsxc_window .slimScrollDiv {
margin: 0px 0px 6px 0px;
}
div.jsxc_chatmessage {
margin: 3px;
padding: 4px;
padding-right: 10px;
max-width: 76%;
word-wrap: break-word;
background-color: #fff;
position: relative;
outline: none;
clear: both;
}
div.jsxc_chatmessage a {
color: blue;
text-decoration: underline;
}
div.jsxc_chatmessage img {
width: 19px;
height: 19px;
}
/** incoming message */
div.jsxc_in {
float: left;
position: relative;
margin-left: 10px;
background: #f1f7fd;
border: solid 1px #a6b8c9;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
div.jsxc_in:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 6px 5px 0;
border-color: transparent #f1f7fd;
display: block;
width: 0;
z-index: 1;
left: -6px;
bottom: 10px;
}
div.jsxc_out.jsxc_received:before {
content: '✓';
position: absolute;
bottom: 2px;
right: 2px;
font-size: 12px;
line-height: 12px;
color: green;
}
/** outgoing message */
div.jsxc_out {
float: right;
position: relative;
margin-right: 10px;
background: #e6ffd1;
border: solid 1px #b4d89f;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
div.jsxc_out:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 0 5px 6px;
border-color: transparent #e6ffd1;
display: block;
width: 0;
z-index: 1;
right: -6px;
bottom: 10px;
}
/** system message */
div.jsxc_sys {
width: auto;
max-width: none;
padding-right: 4px;
box-sizing: border-box;
margin-right: 3px;
border-radius: 3px;
}
.jsxc_window input.jsxc_textinput {
width: 100%;
height: 30px;
margin: 0px;
padding: 3px;
padding-right: 40px;
outline: none;
border-radius: 0px;
box-sizing: border-box;
text-align: right;
}
.jsxc_window ::-webkit-input-placeholder {
color: #000;
opacity: 0.3;
}
.jsxc_window ::-moz-placeholder {
color: #000;
opacity: 0.3;
} /* firefox 19+ */
.jsxc_window :-ms-input-placeholder {
color: rgba(0, 0, 0, 0.4);
} /* ie */
.jsxc_window input:-moz-placeholder {
color: #000;
opacity: 0.3;
}
div.jsxc_window .jsxc_tools {
height: 26px;
float: right;
}
.jsxc_min .jsxc_tools {
display: none;
}
div.jsxc_window .jsxc_tools > div {
width: 17px;
height: 26px;
display: block;
float: left;
color: #939393;
font-family: Arial;
line-height: 26px;
cursor: pointer;
text-align: center;
}
div.jsxc_settings {
background-image: url('img/gear_grey.svg');
background-size: 15px 15px;
background-repeat: no-repeat;
background-position: center center;
overflow: visible;
}
div.jsxc_settings:hover,div.jsxc_settings.hover {
background-image: url('img/gear_white.svg');
}
div.jsxc_settings ul {
list-style: none;
padding: 0px;
margin: 0px;
position: absolute;
top: 30px;
left: 0px;
box-shadow: 0px 5px 5px -5px #000;
z-index: 110;
overflow: visible;
background-color: #282323;
display: none;
}
div.jsxc_settings li {
width: 170px;
margin-left: 20px;
padding-left: 10px;
height: 30px;
line-height: 30px;
text-align: left;
}
div.jsxc_settings li:first-child {
border-top: 1px solid #ccc;
}
div.jsxc_settings li:hover:not(.jsxc_disabled ){
color: #fff;
background-color: #3F8FBA;
}
div.jsxc_settings li.jsxc_disabled {
color: #595959;
cursor: default;
}
div.jsxc_transfer {
background-image: url('img/padlock_open_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 12px 12px;
}
div.jsxc_transfer:hover {
background-image: url('img/padlock_open_white.svg');
}
div.jsxc_transfer.jsxc_fin {
background-image: url('img/padlock_close_grey.svg');
}
div.jsxc_transfer.jsxc_enc {
background-image: url('img/padlock_close_orange.svg');
}
div.jsxc_transfer.jsxc_enc.jsxc_trust {
background-image: url('img/padlock_close_green.svg');
}
.jsxc_window .jsxc_close {
font-size: 20px;
}
.jsxc_window .jsxc_close:hover {
color: #FAFAFA;
}
#colorbox,#cboxWrapper {
outline: none;
}
/*############################
*######### Other ############
*############################*/
ul.jsxc_vCard {
min-width: 400px;
}
ul.jsxc_vCard ul {
margin-left: 20px;
}
ul.jsxc_vCard li {
cursor: default !important;
}
ul.jsxc_vCard strong {
}
img.jsxc_vCard {
float: right;
max-width: 200px;
max-height: 200px;
}
+8153
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+20
Ver Arquivo
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
-173
Ver Arquivo
@@ -1,173 +0,0 @@
.jsxc_videoContainer {
width: 640px;
height: 480px;
position: relative;
}
.jsxc_remotevideo {
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
z-index: 9000;
background-color: grey;
}
.jsxc_localvideo {
width: 160px;
height: 120px;
position: absolute;
right: 10px;
bottom: 10px;
z-index: 9990;
background-color: black;
cursor: pointer;
}
.jsxc_webrtc .jsxc_status {
z-index: 9999;
border-radius: 20px;
display: none;
position: absolute;
top: 30px;
left: 50%;
background-color: lightgrey;
background-color: rgba(0, 0, 0, 0.5);
color: white;
padding: 15px;
font-weight: bold;
text-align: center;
}
div:-moz-full-screen {
width: 100%;
height: 100%;
background-color: black;
}
div:-ms-full-screen {
width: 100%;
height: 100%;
background-color: black;
}
div:-webkit-full-screen {
width: 100%;
height: 100%;
background-color: black;
}
div:fullscreen {
width: 100%;
height: 100%;
background-color: black;
}
div:-moz-full-screen.jsxc_localvideo {
border: 1px solid white;
}
div:-webkit-full-screen.jsxc_localvideo {
border: 1px solid white;
}
div:-ms-full-screen.jsxc_localvideo {
border: 1px solid white;
}
div:fullscreen.jsxc_localvideo {
border: 1px solid white;
}
.jsxc_fullscreen.jsxc_localvideo {
border: 1px solid white;
}
.jsxc_multi>div {
display: none;
}
.jsxc_snapshotbar {
width: 100%;
display: none;
}
.jsxc_snapshotbar img {
height: 50px;
}
.jsxc_buttongroup {
display: inline;
}
.jsxc_buttongroup button:first-child {
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
margin-right: 0px;
}
.jsxc_buttongroup button:last-child {
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
margin-left: 0px;
}
.jsxc_chatarea {
position: relative;
height: 270px;
display: none;
background-color: #A4A4A4;
}
.jsxc_chatarea > ul {
position: absolute;
left: 50%;
top: 0px;
width: 250px;
height: 270px;
list-style: none;
padding: 0px;
margin: 0px 0px 0px -100px;
}
.jsxc_chatarea .jsxc_settings {
display: none;
}
.jsxc_chatarea .jsxc_close {
display: none;
}
.jsxc_chatarea .jsxc_bar {
display: none;
}
.jsxc_chatarea .jsxc_window {
bottom: 0px;
box-shadow: none;
}
.jsxc_videoSuitable .jsxc_name {
font-style: italic;
}
div.jsxc_video {
background-image: url('img/camera_icon_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 15px 15px;
}
div.jsxc_video:not(.jsxc_disabled):hover, #jsxc_buddylist .jsxc_options .jsxc_video {
background-image: url('img/camera_icon_white.svg');
}
div.jsxc_video.jsxc_disabled {
opacity: 0.5;
cursor: default !important;
}
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
opacity: 0.2;
}
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+186 -73
Ver Arquivo
@@ -2,35 +2,81 @@
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*
* Version: 1.0.0
*
* Version: 1.3.3 + pr#94
*
*/
(function($) {
jQuery.fn.extend({
$.fn.extend({
slimScroll: function(options) {
var defaults = {
wheelStep : 20,
// width in pixels of the visible scroll area
width : 'auto',
// height in pixels of the visible scroll area
height : '250px',
// width in pixels of the scrollbar and rail
size : '7px',
// scrollbar color, accepts any hex/color value
color: '#000',
// scrollbar position - left/right
position : 'right',
// distance in pixels between the side edge and the scrollbar
distance : '1px',
// default scroll position on load - top / bottom / $('selector')
start : 'top',
// sets scrollbar opacity
opacity : .4,
// enables always-on mode for the scrollbar
alwaysVisible : false,
disableFadeOut: false,
// check if we should hide the scrollbar when user is hovering over
disableFadeOut : false,
// sets visibility of the rail
railVisible : false,
// sets rail color
railColor : '#333',
railOpacity : '0.2',
// sets rail opacity
railOpacity : .2,
// whether we should use jQuery UI Draggable to enable bar dragging
railDraggable : true,
// defautlt CSS class of the slimscroll rail
railClass : 'slimScrollRail',
// defautlt CSS class of the slimscroll bar
barClass : 'slimScrollBar',
// defautlt CSS class of the slimscroll wrapper
wrapperClass : 'slimScrollDiv',
// check if mousewheel should scroll the window if we reach top/bottom
allowPageScroll : false,
scroll : 0,
touchScrollStep : 200
// scroll amount applied to each mouse wheel step
wheelStep : 20,
// scroll amount applied when user is using gestures
touchScrollStep : 200,
// sets border radius
borderRadius: '7px',
// sets border radius of the rail
railBorderRadius : '7px'
};
var o = $.extend(defaults, options);
@@ -38,7 +84,7 @@
// do it for every element that matches selector
this.each(function(){
var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
barHeight, percentScroll, lastScroll,
divS = '<div></div>',
minBarHeight = 30,
@@ -48,20 +94,33 @@
var me = $(this);
// ensure we are not binding it again
if (me.parent().hasClass('slimScrollDiv'))
{
if (me.parent().hasClass(o.wrapperClass))
{
// start from last bar position
var offset = me.scrollTop();
// find bar and rail
bar = me.parent().find('.slimScrollBar');
rail = me.parent().find('.slimScrollRail');
bar = me.parent().find('.' + o.barClass);
rail = me.parent().find('.' + o.railClass);
getBarHeight();
// check if we should scroll existing instance
if (options)
if ($.isPlainObject(options))
{
// Pass height: auto to an existing slimscroll object to force a resize after contents have changed
if ( 'height' in options && options.height == 'auto' ) {
me.parent().css('height', 'auto');
me.css('height', 'auto');
var height = me.parent().parent().height();
me.parent().css('height', height);
me.css('height', height);
} else if ('height' in options) {
var h = options.height;
me.parent().css('height', h);
me.css('height', h);
}
if ('scrollTo' in options)
{
// jump to a static point
@@ -72,6 +131,14 @@
// jump by value pixels
offset += parseInt(o.scrollBy);
}
else if ('destroy' in options)
{
// remove slimscroll elements
bar.remove();
rail.remove();
me.unwrap();
return;
}
// scroll content by the given offset
scrollContent(offset, false, true);
@@ -79,9 +146,16 @@
return;
}
else if ($.isPlainObject(options))
{
if ('destroy' in options)
{
return;
}
}
// optionally set height to the parent's height
o.height = (o.height == 'auto') ? me.parent().innerHeight() : o.height;
o.height = (o.height == 'auto') ? me.parent().height() : o.height;
// wrap content
var wrapper = $(divS)
@@ -101,7 +175,7 @@
});
// create scrollbar rail
var rail = $(divS)
var rail = $(divS)
.addClass(o.railClass)
.css({
width: o.size,
@@ -109,7 +183,7 @@
position: 'absolute',
top: 0,
display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none',
'border-radius': o.size,
'border-radius': o.railBorderRadius,
background: o.railColor,
opacity: o.railOpacity,
zIndex: 90
@@ -125,10 +199,10 @@
top: 0,
opacity: o.opacity,
display: o.alwaysVisible ? 'block' : 'none',
'border-radius' : o.size,
BorderRadius: o.size,
MozBorderRadius: o.size,
WebkitBorderRadius: o.size,
'border-radius' : o.borderRadius,
BorderRadius: o.borderRadius,
MozBorderRadius: o.borderRadius,
WebkitBorderRadius: o.borderRadius,
zIndex: 99
});
@@ -144,18 +218,31 @@
me.parent().append(bar);
me.parent().append(rail);
// make it draggable
bar.draggable({
axis: 'y',
containment: 'parent',
start: function() { isDragg = true; },
stop: function() { isDragg = false; hideBar(); },
drag: function(e)
{
// scroll content
scrollContent(0, $(this).position().top, false);
}
});
// make it draggable and no longer dependent on the jqueryUI
if (o.railDraggable){
bar.bind("mousedown", function(e) {
var $doc = $(document);
isDragg = true;
t = parseFloat(bar.css('top'));
pageY = e.pageY;
$doc.bind("mousemove.slimscroll", function(e){
currTop = t + e.pageY - pageY;
bar.css('top', currTop);
scrollContent(0, bar.position().top, false);// scroll content
});
$doc.bind("mouseup.slimscroll", function(e) {
isDragg = false;hideBar();
$doc.unbind('.slimscroll');
});
return false;
}).bind("selectstart.slimscroll", function(e){
e.stopPropagation();
e.preventDefault();
return false;
});
}
// on rail over
rail.hover(function(){
@@ -191,18 +278,44 @@
});
me.bind('touchmove', function(e){
// prevent scrolling the page
e.originalEvent.preventDefault();
// prevent scrolling the page if necessary
if(!releaseScroll)
{
e.originalEvent.preventDefault();
}
if (e.originalEvent.touches.length)
{
// see how far user swiped
var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep;
// scroll content
scrollContent(diff, true);
touchDif = e.originalEvent.touches[0].pageY;
}
});
var _onWheel = function(e)
// set up initial height
getBarHeight();
// check start position
if (o.start === 'bottom')
{
// scroll content to bottom
bar.css({ top: me.outerHeight() - bar.outerHeight() });
scrollContent(0, true);
}
else if (o.start !== 'top')
{
// assume jQuery selector
scrollContent($(o.start).position().top, null, true);
// make sure bar stays hidden
if (!o.alwaysVisible) { bar.hide(); }
}
// attach scroll events
attachWheel();
function _onWheel(e)
{
// use mouse wheel only when mouse is over
if (!isOverPanel) { return; }
@@ -213,8 +326,11 @@
if (e.wheelDelta) { delta = -e.wheelDelta/120; }
if (e.detail) { delta = e.detail / 3; }
// scroll content
scrollContent(delta, true);
var target = e.target || e.srcTarget || e.srcElement;
if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {
// scroll content
scrollContent(delta, true);
}
// stop window scroll
if (e.preventDefault && !releaseScroll) { e.preventDefault(); }
@@ -223,16 +339,24 @@
function scrollContent(y, isWheel, isJump)
{
releaseScroll = false;
var delta = y;
var maxTop = me.outerHeight() - bar.outerHeight();
if (isWheel)
{
// move bar with mouse wheel
delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight();
// move bar, make sure it doesn't go out
// move bar, make sure it doesn't go out
delta = Math.min(Math.max(delta, 0), maxTop);
// if scrolling down, make sure a fractional change to the
// scroll position isn't rounded away when the scrollbar's CSS is set
// this flooring of delta would happened automatically when
// bar.css is set below, but we floor here for clarity
delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta);
// scroll the scrollbar
bar.css({ top: delta + 'px' });
}
@@ -245,7 +369,6 @@
{
delta = y;
var offsetTop = delta / me[0].scrollHeight * me.outerHeight();
offsetTop = Math.min(Math.max(offsetTop, 0), maxTop);
bar.css({ top: offsetTop + 'px' });
}
@@ -253,6 +376,9 @@
// scroll content
me.scrollTop(delta);
// fire scrolling event
me.trigger('slimscrolling', ~~delta);
// ensure bar is visible
showBar();
@@ -260,31 +386,29 @@
hideBar();
}
var attachWheel = function()
function attachWheel()
{
if (window.addEventListener)
{
this.addEventListener('DOMMouseScroll', _onWheel, false );
this.addEventListener('mousewheel', _onWheel, false );
}
}
else
{
document.attachEvent("onmousewheel", _onWheel)
}
}
// attach scroll events
attachWheel();
function getBarHeight()
{
// calculate scrollbar height and make sure it is not too small
barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);
bar.css({ height: barHeight + 'px' });
}
// set up initial height
getBarHeight();
// hide scrollbar if content is not long enough
var display = barHeight == me.outerHeight() ? 'none' : 'block';
bar.css({ display: display });
}
function showBar()
{
@@ -293,18 +417,22 @@
clearTimeout(queueHide);
// when bar reached top or bottom
if (percentScroll == ~~ percentScroll)
if (percentScroll == ~~percentScroll)
{
//release wheel
//release wheel
releaseScroll = o.allowPageScroll;
// publish approporiate event
if (lastScroll != percentScroll)
{
var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
me.trigger('slimscroll', msg);
}
}
else
{
releaseScroll = false;
}
lastScroll = percentScroll;
// show only when required
@@ -324,7 +452,7 @@
{
queueHide = setTimeout(function(){
if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg)
{
{
bar.fadeOut('slow');
rail.fadeOut('slow');
}
@@ -332,30 +460,15 @@
}
}
// check start position
if (o.start == 'bottom')
{
// scroll content to bottom
bar.css({ top: me.outerHeight() - bar.outerHeight() });
scrollContent(0, true);
}
else if (typeof o.start == 'object')
{
// scroll content
scrollContent($(o.start).position().top, null, true);
// make sure bar stays hidden
if (!o.alwaysVisible) { bar.hide(); }
}
});
// maintain chainability
return this;
}
});
jQuery.fn.extend({
slimscroll: jQuery.fn.slimScroll
$.fn.extend({
slimscroll: $.fn.slimScroll
});
})(jQuery);
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+54
Ver Arquivo
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+84 -54
Ver Arquivo
@@ -1,7 +1,7 @@
/*!
otr.js v0.2.11 - 2014-03-24
(c) 2014 - Arlo Breault <arlolra@gmail.com>
otr.js v0.2.14 - 2015-01-16
(c) 2015 - Arlo Breault <arlolra@gmail.com>
Freely distributed under the MPL v2.0 license.
This file is concatenated for the browser.
@@ -141,6 +141,17 @@
child.__super__ = parent.prototype
}
// assumes 32-bit
function intCompare(x, y) {
var z = ~(x ^ y)
z &= z >> 16
z &= z >> 8
z &= z >> 4
z &= z >> 2
z &= z >> 1
return z & 1
}
// constant-time string comparison
HLP.compare = function (str1, str2) {
if (str1.length !== str2.length)
@@ -148,7 +159,7 @@
var i = 0, result = 0
for (; i < str1.length; i++)
result |= str1[i].charCodeAt(0) ^ str2[i].charCodeAt(0)
return result === 0
return intCompare(result, 0)
}
HLP.randomExponent = function () {
@@ -1160,7 +1171,7 @@
HLP.debug.call(this.otr, 'success')
if (BigInt.equals(this.their_y, this.our_dh.publicKey))
return this.otr.error('equal keys - we have a problem.', true)
return this.otr.error('equal keys - we have a problem.')
this.otr.our_old_dh = this.our_dh
this.otr.their_priv_pk = this.their_priv_pk
@@ -1267,7 +1278,7 @@
// verify gy is legal 2 <= gy <= N-2
if (!HLP.checkGroup(this.their_y, N_MINUS_2))
return this.otr.error('Illegal g^y.', true)
return this.otr.error('Illegal g^y.')
this.createKeys(this.their_y)
@@ -1303,11 +1314,11 @@
var hash = CryptoJS.SHA256(CryptoJS.enc.Latin1.parse(gxmpi))
if (!HLP.compare(this.hashed, hash.toString(CryptoJS.enc.Latin1)))
return this.otr.error('Hashed g^x does not match.', true)
return this.otr.error('Hashed g^x does not match.')
// verify gx is legal 2 <= g^x <= N-2
if (!HLP.checkGroup(this.their_y, N_MINUS_2))
return this.otr.error('Illegal g^x.', true)
return this.otr.error('Illegal g^x.')
this.createKeys(this.their_y)
@@ -1321,7 +1332,7 @@
, this.m1
, HLP.packCtr(0)
)
if (vsm[0]) return this.otr.error(vsm[0], true)
if (vsm[0]) return this.otr.error(vsm[0])
// store their key
this.their_keyid = vsm[1]
@@ -1363,7 +1374,7 @@
, this.m1_prime
, HLP.packCtr(0)
)
if (vsm[0]) return this.otr.error(vsm[0], true)
if (vsm[0]) return this.otr.error(vsm[0])
// store their key
this.their_keyid = vsm[1]
@@ -1609,10 +1620,12 @@
this.smpstate = CONST.SMPSTATE_EXPECT0
// assume utf8 question
question = CryptoJS.enc.Latin1
.parse(question)
.toString(CryptoJS.enc.Utf8)
if (question) {
// assume utf8 question
question = CryptoJS.enc.Latin1
.parse(question)
.toString(CryptoJS.enc.Utf8)
}
// invoke question
this.trigger('question', [question])
@@ -1920,6 +1933,11 @@
var MAX_INT = Math.pow(2, 53) - 1 // doubles
var MAX_UINT = Math.pow(2, 31) - 1 // bitwise operators
// an internal callback
function OTRCB(cb) {
this.cb = cb
}
// OTR contructor
function OTR(options) {
if (!(this instanceof OTR)) return new OTR(options)
@@ -2090,9 +2108,10 @@
})
})
this.sm.on('send', function (ssid, send) {
if (self.ssid === ssid)
if (self.ssid === ssid) {
send = self.prepareMsg(send)
self.io(send)
}
})
}
@@ -2108,8 +2127,13 @@
;(function send(first) {
if (!first) {
if (!self.outgoing.length) return
var elem = self.outgoing.shift()
var elem = self.outgoing.shift(), cb = null
if (elem.meta instanceof OTRCB) {
cb = elem.meta.cb
elem.meta = null
}
self.trigger('io', [elem.msg, elem.meta])
if (cb) cb()
}
setTimeout(send, first ? 0 : self.send_interval)
}(true))
@@ -2142,7 +2166,7 @@
this.sendenc = HLP.mask(HLP.h1(sendbyte, secbytes), 0, 128) // f16 bytes
this.sendmac = CryptoJS.SHA1(CryptoJS.enc.Latin1.parse(this.sendenc))
this.sendmac = this.sendmac.toString(CryptoJS.enc.Latin1)
this.sendmacused = false
this.rcvenc = HLP.mask(HLP.h1(rcvbyte, secbytes), 0, 128)
this.rcvmac = CryptoJS.SHA1(CryptoJS.enc.Latin1.parse(this.rcvenc))
this.rcvmac = this.rcvmac.toString(CryptoJS.enc.Latin1)
@@ -2161,7 +2185,6 @@
// reveal old mac keys
var self = this
this.sessKeys[1].forEach(function (sk) {
if (sk && sk.sendmacused) self.oldMacKeys.push(sk.sendmac)
if (sk && sk.rcvmacused) self.oldMacKeys.push(sk.rcvmac)
})
@@ -2189,7 +2212,6 @@
// reveal old mac keys
var self = this
this.sessKeys.forEach(function (sk) {
if (sk[1] && sk[1].sendmacused) self.oldMacKeys.push(sk[1].sendmac)
if (sk[1] && sk[1].rcvmacused) self.oldMacKeys.push(sk[1].rcvmac)
})
@@ -2207,12 +2229,12 @@
OTR.prototype.prepareMsg = function (msg, esk) {
if (this.msgstate !== CONST.MSGSTATE_ENCRYPTED || this.their_keyid === 0)
return this.error('Not ready to encrypt.')
return this.notify('Not ready to encrypt.')
var sessKeys = this.sessKeys[1][0]
if (sessKeys.send_counter >= MAX_INT)
return this.error('Should have rekeyed by now.')
return this.notify('Should have rekeyed by now.')
sessKeys.send_counter += 1
@@ -2233,7 +2255,7 @@
send += ctr.substring(0, 8)
if (Math.ceil(msg.length / 8) >= MAX_UINT) // * 16 / 128
return this.error('Message is too long.')
return this.notify('Message is too long.')
var aes = HLP.encryptAes(
CryptoJS.enc.Latin1.parse(msg)
@@ -2245,8 +2267,6 @@
send += HLP.make1Mac(send, sessKeys.sendmac)
send += HLP.packData(this.oldMacKeys.splice(0).join(''))
sessKeys.sendmacused = true
send = HLP.wrapMsg(
send
, this.fragment_size
@@ -2254,7 +2274,7 @@
, this.our_instance_tag
, this.their_instance_tag
)
if (send[0]) return this.error(send[0])
if (send[0]) return this.notify(send[0])
// emit extra symmetric key
if (esk) this.trigger('file', ['send', sessKeys.extra_symkey, esk])
@@ -2275,7 +2295,7 @@
var ign = (msg[0] === '\x01')
if (this.msgstate !== CONST.MSGSTATE_ENCRYPTED || msg.length !== 8) {
if (!ign) this.error('Received an unreadable encrypted message.', true)
if (!ign) this.error('Received an unreadable encrypted message.')
return
}
@@ -2283,12 +2303,12 @@
var their_keyid = this.their_keyid - HLP.readLen(msg[1])
if (our_keyid < 0 || our_keyid > 1) {
if (!ign) this.error('Not of our latest keys.', true)
if (!ign) this.error('Not of our latest keys.')
return
}
if (their_keyid < 0 || their_keyid > 1) {
if (!ign) this.error('Not of your latest keys.', true)
if (!ign) this.error('Not of your latest keys.')
return
}
@@ -2383,16 +2403,17 @@
OTR.prototype.smpSecret = function (secret, question) {
if (this.msgstate !== CONST.MSGSTATE_ENCRYPTED)
return this.error('Must be encrypted for SMP.')
return this.notify('Must be encrypted for SMP.')
if (typeof secret !== 'string' || secret.length < 1)
return this.error('Secret is required.')
return this.notify('Secret is required.')
if (!this.sm) this._smInit()
// utf8 inputs
secret = CryptoJS.enc.Utf8.parse(secret).toString(CryptoJS.enc.Latin1)
question = CryptoJS.enc.Utf8.parse(question).toString(CryptoJS.enc.Latin1)
if (question)
question = CryptoJS.enc.Utf8.parse(question).toString(CryptoJS.enc.Latin1)
this.sm.rcvSecret(secret, question)
}
@@ -2443,7 +2464,7 @@
break
case CONST.MSGSTATE_FINISHED:
this.storedMgs.push({msg: msg, meta: meta})
this.error('Message cannot be sent at this time.')
this.notify('Message cannot be sent at this time.', 'warn')
return
case CONST.MSGSTATE_ENCRYPTED:
msg = this.prepareMsg(msg)
@@ -2455,7 +2476,7 @@
if (msg) this.io(msg, meta)
}
OTR.prototype.receiveMsg = function (msg) {
OTR.prototype.receiveMsg = function (msg, meta) {
// parse type
msg = Parse.parseMsg(this, msg)
@@ -2464,18 +2485,26 @@
switch (msg.cls) {
case 'error':
this.error(msg.msg)
this.notify(msg.msg)
return
case 'ake':
if ( msg.version === CONST.OTR_VERSION_3 &&
this.checkInstanceTags(msg.instance_tags)
) return // ignore
) {
this.notify(
'Received a message intended for a different session.', 'warn')
return // ignore
}
this.ake.handleAKE(msg)
return
case 'data':
if ( msg.version === CONST.OTR_VERSION_3 &&
this.checkInstanceTags(msg.instance_tags)
) return // ignore
) {
this.notify(
'Received a message intended for a different session.', 'warn')
return // ignore
}
msg.msg = this.handleDataMsg(msg)
msg.encrypted = true
break
@@ -2487,7 +2516,7 @@
// check for encrypted
if ( this.REQUIRE_ENCRYPTION ||
this.msgstate !== CONST.MSGSTATE_PLAINTEXT
) this.error('Received an unencrypted message.')
) this.notify('Received an unencrypted message.', 'warn')
// received a plaintext message
// stop sending the whitespace tag
@@ -2498,7 +2527,7 @@
this.doAKE(msg)
}
if (msg.msg) this.trigger('ui', [msg.msg, !!msg.encrypted])
if (msg.msg) this.trigger('ui', [msg.msg, !!msg.encrypted, meta])
}
OTR.prototype.checkInstanceTags = function (it) {
@@ -2522,20 +2551,19 @@
} else if (this.ALLOW_V2 && ~msg.ver.indexOf(CONST.OTR_VERSION_2)) {
this.ake.initiateAKE(CONST.OTR_VERSION_2)
} else {
// is this an error?
this.error('OTR conversation requested, ' +
'but no compatible protocol version found.')
this.notify('OTR conversation requested, ' +
'but no compatible protocol version found.', 'warn')
}
}
OTR.prototype.error = function (err, send) {
if (send) {
if (!this.debug) err = "An OTR error has occurred."
err = '?OTR Error:' + err
this.io(err)
return
}
this.trigger('error', [err])
OTR.prototype.error = function (err) {
if (!this.debug) err = 'An OTR error has occurred.'
this.io('?OTR Error:' + err)
this.notify(err)
}
OTR.prototype.notify = function (err, severity) {
this.trigger('error', [err, severity || 'error'])
}
OTR.prototype.sendStored = function () {
@@ -2548,18 +2576,18 @@
OTR.prototype.sendFile = function (filename) {
if (this.msgstate !== CONST.MSGSTATE_ENCRYPTED)
return this.error('Not ready to encrypt.')
return this.notify('Not ready to encrypt.')
if (this.ake.otr_version !== CONST.OTR_VERSION_3)
return this.error('Protocol v3 required.')
return this.notify('Protocol v3 required.')
if (!filename) return this.error('Please specify a filename.')
if (!filename) return this.notify('Please specify a filename.')
// utf8 filenames
var l1name = CryptoJS.enc.Utf8.parse(filename)
l1name = l1name.toString(CryptoJS.enc.Latin1)
if (l1name.length >= 65532) return this.error('filename is too long.')
if (l1name.length >= 65532) return this.notify('Filename is too long.')
var msg = '\x00' // null byte
msg += '\x00\x08' // type 8 tlv
@@ -2571,9 +2599,11 @@
this.io(msg)
}
OTR.prototype.endOtr = function () {
OTR.prototype.endOtr = function (cb) {
if (this.msgstate === CONST.MSGSTATE_ENCRYPTED) {
this.sendMsg('\x00\x00\x01\x00\x00')
if (typeof cb === 'function')
cb = new OTRCB(cb)
this.sendMsg('\x00\x00\x01\x00\x00', cb)
if (this.sm) {
if (this.smw) this.sm.worker.terminate() // destroy webworker
this.sm = null
+4 -4
Ver Arquivo
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+12 -1
Ver Arquivo
@@ -50,6 +50,17 @@
child.__super__ = parent.prototype
}
// assumes 32-bit
function intCompare(x, y) {
var z = ~(x ^ y)
z &= z >> 16
z &= z >> 8
z &= z >> 4
z &= z >> 2
z &= z >> 1
return z & 1
}
// constant-time string comparison
HLP.compare = function (str1, str2) {
if (str1.length !== str2.length)
@@ -57,7 +68,7 @@
var i = 0, result = 0
for (; i < str1.length; i++)
result |= str1[i].charCodeAt(0) ^ str2[i].charCodeAt(0)
return result === 0
return intCompare(result, 0)
}
HLP.randomExponent = function () {
+11 -3
Ver Arquivo
@@ -7,6 +7,8 @@
*
* Authors: - Michael Weibel <michael.weibel@gmail.com> - Klaus Herberth <klaus@jsxc.org>
* Copyright: - Michael Weibel <michael.weibel@gmail.com>
*
* @license MIT
*/
(function($) {
@@ -189,13 +191,18 @@
* 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');
var query = stanza.querySelector('query');
var from = stanza.getAttribute('from');
var node = query.getAttribute('node');
var ver = (node)? node.split('#')[1] : this._jidVerIndex[from]; //fix open prosody issue
if (!this._knownCapabilities[ver]) {
var childNodes = query.childNodes, childNodesLen = childNodes.length;
this._knownCapabilities[ver] = {
features: [],
identities: []
};
for (var i = 0; i < childNodesLen; i++) {
var node = childNodes[i];
if (node.nodeName == 'feature') {
@@ -203,10 +210,11 @@
} else if (node.nodeName == 'identity') {
this._knownCapabilities[ver]['identities'].push(this._attributesToJsObject(node.attributes));
} else {
if (_knownCapabilities[ver][node.nodeName])
_knownCapabilities[ver][node.nodeName] = [];
if (typeof this._knownCapabilities[ver][node.nodeName] === 'undefined')
this._knownCapabilities[ver][node.nodeName] = [];
this._knownCapabilities[ver][node.nodeName].push(this._attributesToJsObject(node.attributes));
}
}
this._jidVerIndex[from] = ver;
} else if (!this._jidVerIndex[from] || !this._jidVerIndex[from] !== ver) {
+85 -29
Ver Arquivo
@@ -7,6 +7,9 @@ TraceablePeerConnection = function(ice_config, constraints) {
var RTCPeerconnection = navigator.mozGetUserMedia ? mozRTCPeerConnection : webkitRTCPeerConnection;
this.peerconnection = new RTCPeerconnection(ice_config, constraints);
this.updateLog = [];
this.stats = {};
this.statsinterval = null;
this.maxstats = 300; // limit to 300 values, i.e. 5 minutes; set to 0 to disable
// override as desired
this.trace = function(what, info) {
@@ -14,47 +17,47 @@ TraceablePeerConnection = function(ice_config, constraints) {
self.updateLog.push({
time: new Date(),
type: what,
value: info
value: info || ""
});
};
this.onicecandidate = null;
this.peerconnection.onicecandidate = function (event) {
self.trace('onicecandidate', event.candidate);
self.trace('onicecandidate', JSON.stringify(event.candidate, null, ' '));
if (self.onicecandidate !== null) {
self.onicecandidate(event);
}
};
this.onaddstream = null;
this.peerconnection.onaddstream = function (event) {
self.trace('onaddstream', event.stream);
self.trace('onaddstream', event.stream.id);
if (self.onaddstream !== null) {
self.onaddstream(event);
}
};
this.onremovestream = null;
this.peerconnection.onremovestream = function (event) {
self.trace('onremovestream', event.stream);
self.trace('onremovestream', event.stream.id);
if (self.onremovestream !== null) {
self.onremovestream(event);
}
};
this.onsignalingstatechange = null;
this.peerconnection.onsignalingstatechange = function (event) {
self.trace('onsignalingstatechange', event);
self.trace('onsignalingstatechange', self.signalingState);
if (self.onsignalingstatechange !== null) {
self.onsignalingstatechange(event);
}
};
this.oniceconnectionstatechange = null;
this.peerconnection.oniceconnectionstatechange = function (event) {
self.trace('oniceconnectionstatechange', event);
self.trace('oniceconnectionstatechange', self.iceConnectionState);
if (self.oniceconnectionstatechange !== null) {
self.oniceconnectionstatechange(event);
}
};
this.onnegotiationneeded = null;
this.peerconnection.onnegotiationneeded = function (event) {
self.trace('onnegotiationneeded', event);
self.trace('onnegotiationneeded');
if (self.onnegotiationneeded !== null) {
self.onnegotiationneeded(event);
}
@@ -66,20 +69,56 @@ TraceablePeerConnection = function(ice_config, constraints) {
self.ondatachannel(event);
}
}
if (!navigator.mozGetUserMedia) {
this.statsinterval = window.setInterval(function() {
self.peerconnection.getStats(function(stats) {
var results = stats.result();
for (var i = 0; i < results.length; ++i) {
//console.log(results[i].type, results[i].id, results[i].names())
var now = new Date();
results[i].names().forEach(function (name) {
var id = results[i].id + '-' + name;
if (!self.stats[id]) {
self.stats[id] = {
startTime: now,
endTime: now,
values: [],
times: []
};
}
self.stats[id].values.push(results[i].stat(name));
self.stats[id].times.push(now.getTime());
if (self.stats[id].values.length > self.maxstats) {
self.stats[id].values.shift();
self.stats[id].times.shift();
}
self.stats[id].endTime = now;
});
}
});
}, 1000);
}
};
TraceablePeerConnection.prototype.__defineGetter__('signalingState', function() { return this.peerconnection.signalingState; });
TraceablePeerConnection.prototype.__defineGetter__('iceConnectionState', function() { return this.peerconnection.iceConnectionState; });
TraceablePeerConnection.prototype.__defineGetter__('localDescription', function() { return this.peerconnection.localDescription; });
TraceablePeerConnection.prototype.__defineGetter__('remoteDescription', function() { return this.peerconnection.remoteDescription; });
dumpSDP = function(description) {
return 'type: ' + description.type + '\r\n' + description.sdp;
}
if (TraceablePeerConnection.prototype.__defineGetter__ !== undefined) {
TraceablePeerConnection.prototype.__defineGetter__('signalingState', function() { return this.peerconnection.signalingState; });
TraceablePeerConnection.prototype.__defineGetter__('iceConnectionState', function() { return this.peerconnection.iceConnectionState; });
TraceablePeerConnection.prototype.__defineGetter__('localDescription', function() { return this.peerconnection.localDescription; });
TraceablePeerConnection.prototype.__defineGetter__('remoteDescription', function() { return this.peerconnection.remoteDescription; });
}
TraceablePeerConnection.prototype.addStream = function (stream) {
this.trace('addStream', stream);
this.trace('addStream', stream.id);
this.peerconnection.addStream(stream);
};
TraceablePeerConnection.prototype.removeStream = function (stream) {
this.trace('removeStream', stream);
this.trace('removeStream', stream.id);
this.peerconnection.removeStream(stream);
};
@@ -90,7 +129,7 @@ TraceablePeerConnection.prototype.createDataChannel = function (label, opts) {
TraceablePeerConnection.prototype.setLocalDescription = function (description, successCallback, failureCallback) {
var self = this;
this.trace('setLocalDescription', description);
this.trace('setLocalDescription', dumpSDP(description));
this.peerconnection.setLocalDescription(description,
function () {
self.trace('setLocalDescriptionOnSuccess');
@@ -101,11 +140,16 @@ TraceablePeerConnection.prototype.setLocalDescription = function (description, s
failureCallback(err);
}
);
/*
if (this.statsinterval === null && this.maxstats > 0) {
// start gathering stats
}
*/
};
TraceablePeerConnection.prototype.setRemoteDescription = function (description, successCallback, failureCallback) {
var self = this;
this.trace('setRemoteDescription', description);
this.trace('setRemoteDescription', dumpSDP(description));
this.peerconnection.setRemoteDescription(description,
function () {
self.trace('setRemoteDescriptionOnSuccess');
@@ -116,20 +160,29 @@ TraceablePeerConnection.prototype.setRemoteDescription = function (description,
failureCallback(err);
}
);
/*
if (this.statsinterval === null && this.maxstats > 0) {
// start gathering stats
}
*/
};
TraceablePeerConnection.prototype.close = function () {
this.trace('stop');
if (this.statsinterval !== null) {
window.clearInterval(this.statsinterval);
this.statsinterval = null;
}
this.peerconnection.close();
};
TraceablePeerConnection.prototype.createOffer = function (successCallback, failureCallback, constraints) {
var self = this;
this.trace('createOffer', constraints);
this.trace('createOffer', JSON.stringify(constraints, null, ' '));
this.peerconnection.createOffer(
function (sdp) {
self.trace('createOfferOnSuccess', sdp);
successCallback(sdp);
function (offer) {
self.trace('createOfferOnSuccess', dumpSDP(offer));
successCallback(offer);
},
function(err) {
self.trace('createOfferOnFailure', err);
@@ -141,11 +194,11 @@ TraceablePeerConnection.prototype.createOffer = function (successCallback, failu
TraceablePeerConnection.prototype.createAnswer = function (successCallback, failureCallback, constraints) {
var self = this;
this.trace('createAnswer', constraints);
this.trace('createAnswer', JSON.stringify(constraints, null, ' '));
this.peerconnection.createAnswer(
function (sdp) {
self.trace('createAnswerOnSuccess', sdp);
successCallback(sdp);
function (answer) {
self.trace('createAnswerOnSuccess', dumpSDP(answer));
successCallback(answer);
},
function(err) {
self.trace('createAnswerOnFailure', err);
@@ -157,7 +210,7 @@ TraceablePeerConnection.prototype.createAnswer = function (successCallback, fail
TraceablePeerConnection.prototype.addIceCandidate = function (candidate, successCallback, failureCallback) {
var self = this;
this.trace('addIceCandidate', candidate);
this.trace('addIceCandidate', JSON.stringify(candidate, null, ' '));
this.peerconnection.addIceCandidate(candidate);
/* maybe later
this.peerconnection.addIceCandidate(candidate,
@@ -173,11 +226,14 @@ TraceablePeerConnection.prototype.addIceCandidate = function (candidate, success
*/
};
TraceablePeerConnection.prototype.getStats = function(callback) {
this.peerconnection.getStats(callback);
TraceablePeerConnection.prototype.getStats = function(callback, errback) {
if (navigator.mozGetUserMedia) {
// ignore for now...
} else {
this.peerconnection.getStats(callback);
}
};
// mozilla chrome compat layer -- very similar to adapter.js
setupRTC = function (){
var RTC = null;
@@ -320,11 +376,11 @@ getUserMediaWithConstraints = function(um, resolution, bandwidth, fps) {
},
function (error) {
console.warn('Failed to get access to local media. Error ', error);
$(document).trigger('mediafailure.jingle');
$(document).trigger('mediafailure.jingle', [error]);
});
} catch (e) {
console.error('GUM failed: ', e);
$(document).trigger('mediafailure.jingle');
}
}
}(jQuery));
}(jQuery));
+7 -2
Ver Arquivo
@@ -91,9 +91,13 @@ Strophe.addConnectionPlugin('jingle', {
sess.ice_config = this.ice_config;
sess.initiate($(iq).attr('from'), false);
// FIXME: setRemoteDescription should only be done when this call is to be accepted
sess.setRemoteDescription($(iq).find('>jingle'), 'offer');
if ($(iq).find('>jingle>muted[xmlns="http://jitsi.org/protocol/meet#startmuted"]').length) {
console.log('got a request to start muted');
sess.startmuted = true;
}
this.sessions[sess.sid] = sess;
this.jid2session[sess.peerjid] = sess;
@@ -209,6 +213,7 @@ Strophe.addConnectionPlugin('jingle', {
// validity have to be fetched before creating the peerconnection
// TODO: implement refresh via updateIce as described in
// https://code.google.com/p/webrtc/issues/detail?id=1650
var self = this;
this.connection.sendIQ(
$iq({type: 'get', to: this.connection.domain})
.c('services', {xmlns: 'urn:xmpp:extdisco:1'}).c('service', {host: 'turn.' + this.connection.domain}),
@@ -248,7 +253,7 @@ Strophe.addConnectionPlugin('jingle', {
break;
}
});
this.ice_config.iceServers = iceservers;
self.ice_config.iceServers = iceservers;
},
function (err) {
console.warn('getting turn credentials failed', err);
+21 -12
Ver Arquivo
@@ -75,15 +75,7 @@ SDP.prototype.toJingle = function (elem, thecreator) {
for (i = 0; i < lines.length; i++) {
tmp = lines[i].split(' ');
var semantics = tmp.shift().substr(8);
// new plan
elem.c('group', {xmlns: 'urn:xmpp:jingle:apps:grouping:0', type: semantics, semantics:semantics});
for (j = 0; j < tmp.length; j++) {
elem.c('content', {name: tmp[j]}).up();
}
elem.up();
// temporary plan, to be removed
elem.c('group', {xmlns: 'urn:ietf:rfc:5888', type: semantics});
elem.c('group', {xmlns: 'urn:xmpp:jingle:apps:grouping:0', semantics:semantics});
for (j = 0; j < tmp.length; j++) {
elem.c('content', {name: tmp[j]}).up();
}
@@ -620,6 +612,9 @@ SDPUtil = {
case 'generation':
candidate.generation = elems[i + 1];
break;
case 'tcptype':
candidate.tcptype = elems[i + 1];
break;
default: // TODO
console.log('parse_icecandidate not translating "' + elems[i] + '" = "' + elems[i + 1] + '"');
}
@@ -647,6 +642,12 @@ SDPUtil = {
}
break;
}
if (cand.hasOwnAttribute('tcptype')) {
line += 'tcptype';
line += ' ';
line += cand.tcptype;
line += ' ';
}
line += 'generation';
line += ' ';
line += cand.hasOwnAttribute('generation') ? cand.generation : '0';
@@ -729,8 +730,10 @@ SDPUtil = {
candidateToJingle: function (line) {
// a=candidate:2979166662 1 udp 2113937151 192.168.2.100 57698 typ host generation 0
// <candidate component=... foundation=... generation=... id=... ip=... network=... port=... priority=... protocol=... type=.../>
if (line.substring(0, 12) != 'a=candidate:') {
console.log('parseCandidate called with a line that is not a candidate line');
if (line.indexOf('candidate:') === 0) {
line = 'a=' + line;
} else if (line.substring(0, 12) != 'a=candidate:') {
console.log('parseCandidate called with a line that is not a candidate line');
console.log(line);
return null;
}
@@ -752,6 +755,9 @@ SDPUtil = {
candidate.port = elems[5];
// elems[6] => "typ"
candidate.type = elems[7];
candidate.generation = '0'; // fippo from jitsi-meet: default, may be overwritten below
for (i = 8; i < elems.length; i += 2) {
switch (elems[i]) {
case 'raddr':
@@ -763,6 +769,9 @@ SDPUtil = {
case 'generation':
candidate.generation = elems[i + 1];
break;
case 'tcptype':
candidate.tcptype = elems[i + 1];
break;
default: // TODO
console.log('not translating "' + elems[i] + '" = "' + elems[i + 1] + '"');
}
@@ -810,4 +819,4 @@ SDPUtil = {
return line + '\r\n';
}
};
}(jQuery));
}(jQuery));
+156 -101
Ver Arquivo
@@ -23,7 +23,7 @@ JingleSession = function(me, sid, connection) {
this.stopTime = null;
this.media_constraints = null;
this.pc_constraints = null;
this.ice_config = {},
this.ice_config = {};
this.drip_container = [];
this.usetrickle = true;
@@ -40,8 +40,18 @@ JingleSession = function(me, sid, connection) {
this.addssrc = [];
this.removessrc = [];
this.pendingop = null;
this.wait = true;
// XEP-0172 support, non-standard
this.nickname = null;
// non-standard "please start muted" support for colibri/meet
this.startmuted = false;
// Filter for testcases with ICE Candidates
this.filter_candidates = null;
}
JingleSession.prototype.initiate = function (peerjid, isInitiator) {
@@ -159,6 +169,7 @@ JingleSession.prototype.accept = function () {
this.peerconnection.setLocalDescription(new RTCSessionDescription({type: 'answer', sdp: sdp}),
function () {
//console.log('setLocalDescription success');
$(document).trigger('setLocalDescription.jingle', [self.sid]);
},
function (e) {
console.error('setLocalDescription failed', e);
@@ -197,118 +208,50 @@ JingleSession.prototype.sendIceCandidate = function (candidate) {
this.hadturncandidate = true;
}
if (this.usetrickle) {
if (this.usedrip) {
if (this.drip_container.length === 0) {
// start 10ms callout
window.setTimeout(function () {
if (self.drip_container.length === 0) return;
var allcands = self.drip_container;
self.drip_container = [];
var cand = $iq({to: self.peerjid, type: 'set'})
.c('jingle', {xmlns: 'urn:xmpp:jingle:1',
action: 'transport-info',
initiator: self.initiator,
sid: self.sid});
for (var mid = 0; mid < self.localSDP.media.length; mid++) {
var cands = allcands.filter(function (el) { return el.sdpMLineIndex == mid; });
if (cands.length > 0) {
var ice = SDPUtil.iceparams(self.localSDP.media[mid], self.localSDP.session);
ice.xmlns = 'urn:xmpp:jingle:transports:ice-udp:1';
cand.c('content', {creator: self.initiator == self.me ? 'initiator' : 'responder',
name: cands[0].sdpMid
}).c('transport', ice);
for (var i = 0; i < cands.length; i++) {
cand.c('candidate', SDPUtil.candidateToJingle(cands[i].candidate)).up();
}
// add fingerprint
if (SDPUtil.find_line(self.localSDP.media[mid], 'a=fingerprint:', self.localSDP.session)) {
var tmp = SDPUtil.parse_fingerprint(SDPUtil.find_line(self.localSDP.media[mid], 'a=fingerprint:', self.localSDP.session));
tmp.required = true;
cand.c('fingerprint').t(tmp.fingerprint);
delete tmp.fingerprint;
cand.attrs(tmp);
cand.up();
}
cand.up(); // transport
cand.up(); // content
}
}
// might merge last-candidate notification into this, but it is called alot later. See webrtc issue #2340
//console.log('was this the last candidate', self.lasticecandidate);
self.connection.sendIQ(cand,
function () {
var ack = {};
ack.source = 'transportinfo';
$(document).trigger('ack.jingle', [self.sid, ack]);
},
function (stanza) {
var error = ($(stanza).find('error').length) ? {
code: $(stanza).find('error').attr('code'),
reason: $(stanza).find('error :first')[0].tagName,
}:{};
error.source = 'transportinfo';
$(document).trigger('error.jingle', [self.sid, error]);
},
10000);
}, 10);
if(this.filter_candidates === null || jcand.type === this.filter_candidates) {
if (this.usetrickle) {
console.log('sendIceCandidate using trickle');
if (this.usedrip) {
if (this.drip_container.length === 0) {
// start 20ms callout
window.setTimeout(function () {
console.log('sending drip container');
if (self.drip_container.length === 0) return;
self.sendIceCandidates(self.drip_container);
self.drip_container = [];
}, 20);
}
this.drip_container.push(event.candidate);
return;
} else {
console.log('sending single candidate');
self.sendIceCandidates([event.candidate]);
}
this.drip_container.push(event.candidate);
return;
}
// map to transport-info
var cand = $iq({to: this.peerjid, type: 'set'})
.c('jingle', {xmlns: 'urn:xmpp:jingle:1',
action: 'transport-info',
initiator: this.initiator,
sid: this.sid})
.c('content', {creator: this.initiator == this.me ? 'initiator' : 'responder',
name: candidate.sdpMid
})
.c('transport', ice)
.c('candidate', jcand);
cand.up();
// add fingerprint
if (SDPUtil.find_line(this.localSDP.media[candidate.sdpMLineIndex], 'a=fingerprint:', this.localSDP.session)) {
var tmp = SDPUtil.parse_fingerprint(SDPUtil.find_line(this.localSDP.media[candidate.sdpMLineIndex], 'a=fingerprint:', this.localSDP.session));
tmp.required = true;
cand.c('fingerprint').t(tmp.fingerprint);
delete tmp.fingerprint;
cand.attrs(tmp);
cand.up();
}
this.connection.sendIQ(cand,
function () {
var ack = {};
ack.source = 'transportinfo';
$(document).trigger('ack.jingle', [self.sid, ack]);
},
function (stanza) {
console.error('transport info error');
var error = ($(stanza).find('error').length) ? {
code: $(stanza).find('error').attr('code'),
reason: $(stanza).find('error :first')[0].tagName,
}:{};
error.source = 'transportinfo';
$(document).trigger('error.jingle', [self.sid, error]);
},
10000);
}
} else {
//console.log('sendIceCandidate: last candidate.');
console.log('sendIceCandidate: last candidate...');
if (!this.usetrickle) {
//console.log('should send full offer now...');
console.log('should send full offer now...');
var init = $iq({to: this.peerjid,
type: 'set'})
.c('jingle', {xmlns: 'urn:xmpp:jingle:1',
action: this.peerconnection.localDescription.type == 'offer' ? 'session-initiate' : 'session-accept',
initiator: this.initiator,
sid: this.sid});
if (this.nickname != null) {
init.c('nick', {xmlns:'http://jabber.org/protocol/nick'}).t(this.nickname).up();
}
if (this.startmuted) {
init.c('muted', {xmlns:'http://jitsi.org/protocol/meet#startmuted'}).up();
}
this.localSDP = new SDP(this.peerconnection.localDescription.sdp);
this.localSDP.toJingle(init, this.initiator == this.me ? 'initiator' : 'responder');
console.log('try to send ack(offer)...');
this.connection.sendIQ(init,
function () {
//console.log('session initiate ack');
console.log('Sent session initiate (ACK, offer)...');
var ack = {};
ack.source = 'offer';
$(document).trigger('ack.jingle', [self.sid, ack]);
@@ -330,11 +273,65 @@ JingleSession.prototype.sendIceCandidate = function (candidate) {
console.log('Have we encountered any relay candidates? ' + this.hadturncandidate);
if (!(this.hadstuncandidate || this.hadturncandidate) && this.peerconnection.signalingState != 'closed') {
console.log('no candidates found!');
$(document).trigger('nostuncandidates.jingle', [this.sid]);
}
}
};
JingleSession.prototype.sendIceCandidates = function (candidates) {
console.log('sendIceCandidates', candidates);
var cand = $iq({to: this.peerjid, type: 'set'})
.c('jingle', {xmlns: 'urn:xmpp:jingle:1',
action: 'transport-info',
initiator: this.initiator,
sid: this.sid});
for (var mid = 0; mid < this.localSDP.media.length; mid++) {
var cands = candidates.filter(function (el) { return el.sdpMLineIndex == mid; });
if (cands.length > 0) {
var ice = SDPUtil.iceparams(this.localSDP.media[mid], this.localSDP.session);
ice.xmlns = 'urn:xmpp:jingle:transports:ice-udp:1';
cand.c('content', {creator: this.initiator == this.me ? 'initiator' : 'responder',
name: cands[0].sdpMid
}).c('transport', ice);
for (var i = 0; i < cands.length; i++) {
cand.c('candidate', SDPUtil.candidateToJingle(cands[i].candidate)).up();
}
// add fingerprint
if (SDPUtil.find_line(this.localSDP.media[mid], 'a=fingerprint:', this.localSDP.session)) {
var tmp = SDPUtil.parse_fingerprint(SDPUtil.find_line(this.localSDP.media[mid], 'a=fingerprint:', this.localSDP.session));
tmp.required = true;
cand.c('fingerprint').t(tmp.fingerprint);
delete tmp.fingerprint;
cand.attrs(tmp);
cand.up();
}
cand.up(); // transport
cand.up(); // content
}
}
// might merge last-candidate notification into this, but it is called alot later. See webrtc issue #2340
//console.log('was this the last candidate', this.lasticecandidate);
console.log('try to send ack(transportinfo)...');
this.connection.sendIQ(cand,
function () {
var ack = {};
ack.source = 'transportinfo';
console.log('Sent session initiate (ACK, transportinfo)...');
$(document).trigger('ack.jingle', [this.sid, ack]);
},
function (stanza) {
var error = ($(stanza).find('error').length) ? {
code: $(stanza).find('error').attr('code'),
reason: $(stanza).find('error :first')[0].tagName,
}:{};
error.source = 'transportinfo';
$(document).trigger('error.jingle', [this.sid, error]);
},
10000);
};
JingleSession.prototype.sendOffer = function () {
//console.log('sendOffer...');
var self = this;
@@ -360,6 +357,12 @@ JingleSession.prototype.createdOffer = function (sdp) {
action: 'session-initiate',
initiator: this.initiator,
sid: this.sid});
if (this.nickname != null) {
init.c('nick', {xmlns:'http://jabber.org/protocol/nick'}).t(this.nickname).up();
}
if (this.startmuted) {
init.c('muted', {xmlns:'http://jitsi.org/protocol/meet#startmuted'}).up();
}
this.localSDP.toJingle(init, this.initiator == this.me ? 'initiator' : 'responder');
this.connection.sendIQ(init,
function () {
@@ -382,6 +385,7 @@ JingleSession.prototype.createdOffer = function (sdp) {
sdp.sdp = this.localSDP.raw;
this.peerconnection.setLocalDescription(sdp,
function () {
$(document).trigger('setLocalDescription.jingle', [self.sid]);
//console.log('setLocalDescription success');
},
function (e) {
@@ -566,11 +570,31 @@ JingleSession.prototype.sendAnswer = function (provisional) {
JingleSession.prototype.createdAnswer = function (sdp, provisional) {
//console.log('createAnswer callback');
console.log(sdp);
var self = this;
this.localSDP = new SDP(sdp.sdp);
//this.localSDP.mangle();
this.usepranswer = provisional === true;
if (this.startmuted) {
console.log('we got a request to start muted...');
this.connection.jingle.localStream.getAudioTracks().forEach(function (track) {
track.enabled = false;
});
// doing this freezes local video, too (which probably means it should be replaced
// by a symbol
this.connection.jingle.localStream.getVideoTracks().forEach(function (track) {
track.enabled = false;
});
// set video to recvonly
this.localSDP.media[1] = this.localSDP.media[1].replace('a=sendrecv', 'a=recvonly');
// and remove a=ssrc lines. Weird things happen otherwise
SDPUtil.find_lines(this.localSDP.media[1], 'a=ssrc:').forEach(function (line) {
self.localSDP.media[1] = self.localSDP.media[1].replace(line + '\r\n', '');
});
this.localSDP.raw = this.localSDP.session + this.localSDP.media.join('');
}
if (this.usetrickle) {
if (!this.usepranswer) {
var accept = $iq({to: this.peerjid,
@@ -601,12 +625,13 @@ JingleSession.prototype.createdAnswer = function (sdp, provisional) {
for (var i = 0; i < this.localSDP.media.length; i++) {
this.localSDP.media[i] = this.localSDP.media[i].replace('a=sendrecv\r\n', 'a=inactive\r\n');
}
this.localSDP.raw = this.localSDP.session + '\r\n' + this.localSDP.media.join('');
this.localSDP.raw = this.localSDP.session + this.localSDP.media.join('');
}
}
sdp.sdp = this.localSDP.raw;
this.peerconnection.setLocalDescription(sdp,
function () {
$(document).trigger('setLocalDescription.jingle', [self.sid]);
//console.log('setLocalDescription success');
},
function (e) {
@@ -727,8 +752,8 @@ JingleSession.prototype.removeSource = function (elem) {
JingleSession.prototype.modifySources = function() {
var self = this;
if (!(this.addssrc.length || this.removessrc.length)) return;
if (this.peerconnection.signalingState == 'closed') return;
if (!(this.addssrc.length || this.removessrc.length || this.pendingop !== null)) return;
if (!(this.peerconnection.signalingState == 'stable' && this.peerconnection.iceConnectionState == 'connected')) {
console.warn('modifySources not yet', this.peerconnection.signalingState, this.peerconnection.iceConnectionState);
this.wait = true;
@@ -764,9 +789,28 @@ JingleSession.prototype.modifySources = function() {
function() {
self.peerconnection.createAnswer(
function(modifiedAnswer) {
// change video direction, see https://github.com/jitsi/jitmeet/issues/41
if (self.pendingop !== null) {
var sdp = new SDP(modifiedAnswer.sdp);
if (sdp.media.length > 1) {
switch(self.pendingop) {
case 'mute':
sdp.media[1] = sdp.media[1].replace('a=sendrecv', 'a=recvonly');
break;
case 'unmute':
sdp.media[1] = sdp.media[1].replace('a=recvonly', 'a=sendrecv');
break;
}
sdp.raw = sdp.session + sdp.media.join('');
modifiedAnswer.sdp = sdp.raw;
}
self.pendingop = null;
}
self.peerconnection.setLocalDescription(modifiedAnswer,
function() {
//console.log('modified setLocalDescription ok');
$(document).trigger('setLocalDescription.jingle', [self.sid]);
},
function(error) {
console.log('modified setLocalDescription failed');
@@ -784,6 +828,17 @@ JingleSession.prototype.modifySources = function() {
);
};
// SDP-based mute by going recvonly/sendrecv
// FIXME: should probably black out the screen as well
JingleSession.prototype.hardMuteVideo = function (muted) {
this.pendingop = muted ? 'mute' : 'unmute';
this.modifySources();
this.connection.jingle.localStream.getVideoTracks().forEach(function (track) {
track.enabled = !muted;
});
};
JingleSession.prototype.sendMute = function (muted, content) {
var info = $iq({to: this.peerjid,
type: 'set'})
+7 -6
Ver Arquivo
@@ -3,9 +3,10 @@
* Klaus Herberth, 2014
*/
// This code was written by Tyler Akins and has been placed in the
// public domain. It would be nice if you left this header intact.
// Base64 code from Tyler Akins -- http://rumkin.com
/*! This code was written by Tyler Akins and has been placed in the
public domain. It would be nice if you left this header intact.
Base64 code from Tyler Akins -- http://rumkin.com
*/
var Base64 = (function () {
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
@@ -84,7 +85,7 @@ var Base64 = (function () {
return obj;
})();
/*
/*!
* 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.
@@ -261,7 +262,7 @@ function binb2b64(binarray)
return str;
}
/*
/*!
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
@@ -469,7 +470,7 @@ var MD5 = (function () {
return obj;
})();
/*
/*!
This program is distributed under the terms of the MIT license.
Please see the LICENSE file for details.
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+82
Ver Arquivo
@@ -0,0 +1,82 @@
[
{
"file": "lib/strophe.js",
"license": "multiple",
"url": "http://strophe.im/strophejs/"
},
{
"file": "lib/strophe.muc.js",
"license": "MIT",
"url": "https://github.com/strophe/strophejs-plugins"
},
{
"file": "lib/strophe.disco.js",
"license": "MIT",
"url": "https://github.com/strophe/strophejs-plugins"
},
{
"file": "lib/strophe.caps.js",
"license": "MIT",
"url": "https://github.com/strophe/strophejs-plugins"
},
{
"file": "lib/strophe.vcard.js",
"license": "MIT",
"url": "https://github.com/strophe/strophejs-plugins"
},
{
"file": "lib/strophe.jingle/strophe.jingle.js",
"license": "MIT",
"url": "https://github.com/ESTOS/strophe.jingle"
},
{
"file": "lib/strophe.jingle/strophe.jingle.session.js",
"license": "MIT",
"url": "https://github.com/ESTOS/strophe.jingle"
},
{
"file": "lib/strophe.jingle/strophe.jingle.sdp.js",
"license": "MIT",
"url": "https://github.com/ESTOS/strophe.jingle"
},
{
"file": "lib/strophe.jingle/strophe.jingle.adapter.js",
"license": "MIT",
"url": "https://github.com/ESTOS/strophe.jingle"
},
{
"file": "lib/otr/build/dep/salsa20.js",
"license": "AGPL3",
"url": "https://github.com/neoatlantis/node-salsa20"
},
{
"file": "lib/otr/build/dep/bigint.js",
"license": "public domain",
"url": "www.leemon.com"
},
{
"file": "lib/otr/build/dep/crypto.js",
"license": "code.google.com/p/crypto-js/wiki/license",
"url": "code.google.com/p/crypto-js"
},
{
"file": "lib/otr/build/dep/eventemitter.js",
"license": "MIT",
"url": "http://git.io/ee"
},
{
"file": "lib/otr/build/otr.js",
"license": "MPL v2.0",
"url": "https://arlolra.github.io/otr/"
},
{
"file": "lib/i18next/release/i18next-latest.min.js",
"license": "MIT",
"url": "http://i18next.com/"
},
{
"file": "lib/translation.js",
"license": "MIT",
"url": "https://webtranslateit.com/en/projects/10365-JSXC"
}
]
+63
Ver Arquivo
@@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Index</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Index</h1>
<h3> </h3>
</div>
<nav>
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
</nav>
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>
+556
Ver Arquivo
@@ -0,0 +1,556 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Namespace: dialog</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Namespace: dialog</h1>
<section>
<header>
<h2>
<span class="ancestors"><a href="jsxc.html">jsxc</a><a href="jsxc.gui.html">.gui</a>.</span>
dialog
</h2>
</header>
<article>
<div class="container-overview">
<div class="description">Wrapper for dialog</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2384">line 2384</a>
</li></ul></dd>
</dl>
</div>
<h3 class="subsection-title">Methods</h3>
<dl>
<dt>
<h4 class="name" id="close"><span class="type-signature">&lt;static> </span>close<span class="signature">()</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Close current dialog.
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2450">line 2450</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="open"><span class="type-signature">&lt;static> </span>open<span class="signature">(data, <span class="optional">o</span>)</span><span class="type-signature"> &rarr; {jQuery}</span></h4>
</dt>
<dd>
<div class="description">
Open a Dialog.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Argument</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>data</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="attributes">
</td>
<td class="description last">Data of the dialog</td>
</tr>
<tr>
<td class="name"><code>o</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="description last">Options for the dialog
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Argument</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>noClose</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="description last">If true, hide all default close options</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2399">line 2399</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Dialog object
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">jQuery</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="resize"><span class="type-signature">&lt;static> </span>resize<span class="signature">(options)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Resizes current dialog.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>options</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">e.g. width and height</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2460">line 2460</a>
</li></ul></dd>
</dl>
</dd>
</dl>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
</nav>
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>
+3286
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+404
Ver Arquivo
@@ -0,0 +1,404 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Namespace: queryActions</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Namespace: queryActions</h1>
<section>
<header>
<h2>
<span class="ancestors"><a href="jsxc.html">jsxc</a><a href="jsxc.gui.html">.gui</a>.</span>
queryActions
</h2>
</header>
<article>
<div class="container-overview">
<div class="description">Different uri query actions as defined in XEP-0147.</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line902">line 902</a>
</li></ul></dd>
</dl>
</div>
<h3 class="subsection-title">Methods</h3>
<dl>
<dt>
<h4 class="name" id="message"><span class="type-signature">&lt;static> </span>message<span class="signature">()</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
xmpp:JID?message[;body=TEXT]
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line909">line 909</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="remove"><span class="type-signature">&lt;static> </span>remove<span class="signature">()</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
xmpp:JID?remove
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line918">line 918</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="subscribe"><span class="type-signature">&lt;static> </span>subscribe<span class="signature">()</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
xmpp:JID?subscribe[;name=NAME]
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line923">line 923</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="vcard"><span class="type-signature">&lt;static> </span>vcard<span class="signature">()</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
xmpp:JID?vcard
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line932">line 932</a>
</li></ul></dd>
</dl>
</dd>
</dl>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
</nav>
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+124
Ver Arquivo
@@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Namespace: template</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Namespace: template</h1>
<section>
<header>
<h2>
<span class="ancestors"><a href="jsxc.html">jsxc</a><a href="jsxc.gui.html">.gui</a>.</span>
template
</h2>
</header>
<article>
<div class="container-overview">
<div class="description">Hold all HTML templates.</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3001">line 3001</a>
</li></ul></dd>
</dl>
</div>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
</nav>
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+3964
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+124
Ver Arquivo
@@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Namespace: l10n</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Namespace: l10n</h1>
<section>
<header>
<h2>
<span class="ancestors"><a href="jsxc.html">jsxc</a>.</span>
l10n
</h2>
</header>
<article>
<div class="container-overview">
<div class="description">Contains all available translations</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5777">line 5777</a>
</li></ul></dd>
</dl>
</div>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
</nav>
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:14 GMT+0100 (CET)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+307 -94
Ver Arquivo
@@ -1,43 +1,88 @@
/* jsxc, Strophe, SDPUtil, getUserMediaWithConstraints, setupRTC, jQuery */
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: jsxc.lib.webrtc.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Source: jsxc.lib.webrtc.js</h1>
<section>
<article>
<pre class="prettyprint source"><code>/* global jsxc, Strophe, SDPUtil, getUserMediaWithConstraints, setupRTC, jQuery, MediaStreamTrack */
var RTC = null, RTCPeerconnection = null;
jsxc.gui.template.incomingCall = '<h3>%%Incoming_call%%</h3>\
<p>%%Do_you_want_to_accept_the_call_from%% {{cid_name}}?</p>\
<p class="jsxc_right">\
<a href="#" class="button jsxc_reject">%%Reject%%</a> <a href="#" class="button creation jsxc_accept">%%Accept%%</a>\
</p>';
jsxc.gui.template.incomingCall = '&lt;h3>%%Incoming_call%%&lt;/h3>\
&lt;p>%%Do_you_want_to_accept_the_call_from%% {{bid_name}}?&lt;/p>\
&lt;p class="jsxc_right">\
&lt;a href="#" class="button jsxc_reject">%%Reject%%&lt;/a> &lt;a href="#" class="button creation jsxc_accept">%%Accept%%&lt;/a>\
&lt;/p>';
jsxc.gui.template.allowMediaAccess = '<p>%%Please_allow_access_to_microphone_and_camera%%</p>';
jsxc.gui.template.allowMediaAccess = '&lt;p>%%Please_allow_access_to_microphone_and_camera%%&lt;/p>';
jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
<div class="jsxc_videoContainer">\
<video class="jsxc_localvideo" autoplay></video>\
<video class="jsxc_remotevideo" autoplay></video>\
<div class="jsxc_status"></div>\
</div>\
<div class="jsxc_controlbar">\
<button type="button" class="jsxc_hangUp">%%hang_up%%</button>\
<input type="range" class="jsxc_volume" min="0.0" max="1.0" step="0.05" value="0.5" />\
<div class="jsxc_buttongroup">\
<button type="button" class="jsxc_snapshot">%%snapshot%%</button><button type="button" class="jsxc_snapshots">&#9660;</button>\
</div>\
<!-- <button type="button" class="jsxc_mute_local">%%mute_my_audio%%</button>\
<button type="button" class="jsxc_pause_local">%%pause_my_video%%</button> --> \
<button type="button" class="jsxc_showchat">%%chat%%</button>\
<button type="button" class="jsxc_fullscreen">%%fullscreen%%</button>\
<button type="button" class="jsxc_info">%%Info%%</button>\
</div>\
<div class="jsxc_multi">\
<div class="jsxc_snapshotbar">\
<p>No pictures yet!</p>\
</div>\n\
<div class="jsxc_chatarea">\
<ul></ul>\
</div>\
<div class="jsxc_infobar"></div>\
</div>\
</div>';
jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
&lt;div class="jsxc_chatarea">\
&lt;ul>&lt;/ul>\
&lt;/div>\
&lt;div class="jsxc_videoContainer">\
&lt;video class="jsxc_localvideo" autoplay>&lt;/video>\
&lt;video class="jsxc_remotevideo" autoplay>&lt;/video>\
&lt;div class="jsxc_status">&lt;/div>\
&lt;div class="bubblingG">\
&lt;span id="bubblingG_1">\
&lt;/span>\
&lt;span id="bubblingG_2">\
&lt;/span>\
&lt;span id="bubblingG_3">\
&lt;/span>\
&lt;/div>\
&lt;div class="jsxc_noRemoteVideo">\
&lt;div>\
&lt;div>&lt;/div>\
&lt;p>%%No_video_signal%%&lt;/p>\
&lt;div>&lt;/div>\
&lt;/div>\
&lt;/div>\
&lt;/div>\
&lt;div class="jsxc_controlbar">\
&lt;button type="button" class="jsxc_hangUp">%%hang_up%%&lt;/button>\
&lt;input type="range" class="jsxc_volume" min="0.0" max="1.0" step="0.05" value="0.5" />\
&lt;div class="jsxc_buttongroup">\
&lt;button type="button" class="jsxc_snapshot">%%snapshot%%&lt;/button>&lt;button type="button" class="jsxc_snapshots">&#9660;&lt;/button>\
&lt;/div>\
&lt;!-- &lt;button type="button" class="jsxc_mute_local">%%mute_my_audio%%&lt;/button>\
&lt;button type="button" class="jsxc_pause_local">%%pause_my_video%%&lt;/button> --> \
&lt;button type="button" class="jsxc_showchat">%%chat%%&lt;/button>\
&lt;button type="button" class="jsxc_fullscreen">%%fullscreen%%&lt;/button>\
&lt;button type="button" class="jsxc_info">%%Info%%&lt;/button>\
&lt;/div>\
&lt;div class="jsxc_multi">\
&lt;div class="jsxc_snapshotbar">\
&lt;p>No pictures yet!&lt;/p>\
&lt;/div>\n\
&lt;!--&lt;div class="jsxc_chatarea">\
&lt;ul>&lt;/ul>\
&lt;/div>-->\
&lt;div class="jsxc_infobar">&lt;/div>\
&lt;/div>\
&lt;/div>';
(function($) {
"use strict";
@@ -64,7 +109,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
AUTO_ACCEPT: false,
/** required disco features */
reqVideoFeatures: [ 'urn:xmpp:jingle:apps:rtp:video', 'urn:xmpp:jingle:apps:rtp:audio', 'urn:xmpp:jingle:transports:ice-udp:1' ],
reqVideoFeatures: [ 'urn:xmpp:jingle:apps:rtp:video', 'urn:xmpp:jingle:apps:rtp:audio', 'urn:xmpp:jingle:transports:ice-udp:1', 'urn:xmpp:jingle:apps:dtls:0' ],
/** bare jid to current jid mapping */
chatJids: {},
@@ -98,6 +143,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
self.conn.jingle.pc_constraints = RTC.pc_constraints;
$(document).on('message.jsxc', $.proxy(self.onMessage, self));
$(document).on('presence.jsxc', $.proxy(self.onPresence, self));
$(document).on('mediaready.jingle', $.proxy(self.onMediaReady, self));
$(document).on('mediafailure.jingle', $.proxy(self.onMediaFailure, self));
@@ -114,6 +160,10 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
jsxc.error('[JINGLE]', error);
});
if (self.conn.disco) {
self.conn.disco.addFeature('urn:xmpp:jingle:apps:dtls:0');
}
if (self.conn.caps) {
$(document).on('caps.strophe', $.proxy(self.onCaps, self));
}
@@ -160,19 +210,49 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
});
},
/**
* Return list of video capable resources.
*
* @memberOf jsxc.webrtc
* @param jid
* @returns {Array}
*/
getCapableRes: function(jid) {
var self = jsxc.webrtc;
var bid = jsxc.jidToBid(jid);
var res = jsxc.storage.getUserItem('res', bid) || [];
var available = [];
$.each(res, function(r) {
if (self.conn.caps.hasFeatureByJid(bid + '/' + r, self.reqVideoFeatures)) {
available.push(r);
}
});
return available;
},
/**
* Add "video" button to roster
*
* @private
* @memberOf jsxc.webrtc
* @param event
* @param cid cid of roster item
* @param data data wich belongs to cid
* @param bid bid of roster item
* @param data data wich belongs to bid
* @param el the roster item
*/
onAddRosterItem: function(event, cid, data, el) {
onAddRosterItem: function(event, bid, data, el) {
var self = jsxc.webrtc;
var videoIcon = $('<div class="jsxc_video jsxc_disabled" title="' + jsxc.l.Start_video_call + '"></div>');
if (!self.conn) {
$(document).one('connectionReady.jsxc', function() {
self.onAddRosterItem(null, bid, data, el);
});
return;
}
var videoIcon = $('&lt;div class="jsxc_video jsxc_disabled" title="' + jsxc.l.Start_video_call + '">&lt;/div>');
videoIcon.click(function() {
self.startCall(data.jid);
@@ -182,7 +262,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
el.find('.jsxc_options.jsxc_left').append(videoIcon);
el.on('extra.jsxc', function() {
self.updateIcon(cid);
self.updateIcon(bid);
});
},
@@ -197,6 +277,8 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
initWindow: function(event, win) {
var self = jsxc.webrtc;
jsxc.debug('webrtc.initWindow');
if (!self.conn) {
$(document).one('connectionReady.jsxc', function() {
self.initWindow(null, win);
@@ -204,42 +286,51 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
return;
}
var div = $('<div>').addClass('jsxc_video');
var div = $('&lt;div>').addClass('jsxc_video');
win.find('.jsxc_transfer:eq(1)').after(div);
self.updateIcon(jsxc.jidToCid(win.data('jid')));
self.updateIcon(jsxc.jidToBid(win.data('jid')));
},
/**
* Enable or disable "video" icon and assign full jid.
*
* @memberOf jsxc.webrtc
* @param cid CSS conform jid
* @param bid CSS conform jid
*/
updateIcon: function(cid) {
updateIcon: function(bid) {
jsxc.debug('Update icon', bid);
var self = jsxc.webrtc;
var win = jsxc.gui.getWindow(cid);
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy_' + cid).jid;
var el = win.find('.jsxc_video').add('#' + cid + ' .jsxc_video');
if (bid === jsxc.jidToBid(self.conn.jid)) {
return;
}
// only start video call to a full jid
if (Strophe.getResourceFromJid(jid) === null) {
var win = jsxc.gui.window.get(bid);
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy', bid).jid;
var res = jsxc.storage.getUserItem('buddy_' + cid).res;
var el = win.find('.jsxc_video').add(jsxc.gui.roster.getItem(bid).find('.jsxc_video'));
if (Array.isArray(res) && res.length === 1) {
jid += '/' + res[0];
}
var capableRes = self.getCapableRes(jid);
var targetRes = Strophe.getResourceFromJid(jid);
if (targetRes === null) {
$.each(jsxc.storage.getUserItem('buddy', bid).res, function(index, val) {
if (capableRes.indexOf(val) > -1) {
targetRes = val;
return false;
}
});
}
el.off('click');
if (self.conn.caps.hasFeatureByJid(jid, self.reqVideoFeatures)) {
if (capableRes.indexOf(targetRes) > -1) {
el.click(function() {
self.startCall(jid);
self.startCall(jid + '/' + targetRes);
});
el.removeClass('jsxc_disabled');
el.attr('title', jsxc.translate('%%Start video call%%'));
@@ -260,14 +351,32 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
*/
onMessage: function(e, from) {
var self = jsxc.webrtc;
var bJid = Strophe.getBareJidFromJid(from);
var bid = jsxc.jidToBid(from);
if (self.chatJids[bJid] !== from) {
self.updateIcon(jsxc.jidToCid(bJid));
self.chatJids[bJid] = from;
jsxc.debug('webrtc.onmessage', from);
if (self.chatJids[bid] !== from) {
self.updateIcon(bid);
self.chatJids[bid] = from;
}
},
/**
* Update icon on presence.
*
* @memberOf jsxc.webrtc
* @param ev
* @param status
* @private
*/
onPresence: function(ev, jid) {
var self = jsxc.webrtc;
jsxc.debug('webrtc.onpresence', jid);
self.updateIcon(jsxc.jidToBid(jid));
},
/**
* Display status message to user.
*
@@ -283,7 +392,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
if (status.html()) {
// attach old messages
txt = status.html() + '<br />' + txt;
txt = status.html() + '&lt;br />' + txt;
}
status.html(txt);
@@ -326,7 +435,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
onCaps: function(event, jid) {
var self = jsxc.webrtc;
self.updateIcon(jsxc.jidToCid(jid));
self.updateIcon(jsxc.jidToBid(jid));
},
/**
@@ -348,15 +457,16 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
jsxc.gui.showVideoWindow(self.last_caller);
var i;
for (i = 0; i < stream.getAudioTracks().length; i++) {
for (i = 0; i &lt; stream.getAudioTracks().length; i++) {
self.setStatus((stream.getAudioTracks().length > 0) ? 'Use local audio device.' : 'No local audio device.');
jsxc.debug('using audio device "' + stream.getAudioTracks()[i].label + '"');
}
for (i = 0; i < stream.getVideoTracks().length; i++) {
for (i = 0; i &lt; stream.getVideoTracks().length; i++) {
self.setStatus((stream.getVideoTracks().length > 0) ? 'Use local video device.' : 'No local video device.');
jsxc.debug('using video device "' + stream.getVideoTracks()[i].label + '"');
$('#jsxc_dialog .jsxc_localvideo').show();
}
$(document).one('cleanup.dialog.jsxc', $.proxy(self.hangUp, self));
@@ -369,8 +479,11 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
* @private
* @memberOf jsxc.webrtc
*/
onMediaFailure: function() {
onMediaFailure: function(ev, err) {
this.setStatus('media failure');
jsxc.gui.window.postMessage(jsxc.jidToBid(jsxc.webrtc.last_caller), 'sys', jsxc.translate('%%Media failure%%: ') + err.name);
jsxc.debug('media failure: ' + err.name);
},
/**
@@ -386,10 +499,12 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
var self = this;
var sess = this.conn.jingle.sessions[sid];
var jid = jsxc.jidToCid(sess.peerjid);
var bid = jsxc.jidToBid(sess.peerjid);
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Incoming call.%%'));
// display notification
jsxc.notification.notify(jsxc.translate('%%Incoming call%%'), jsxc.translate('%%from%% ' + jid));
jsxc.notification.notify(jsxc.translate('%%Incoming call%%'), jsxc.translate('%%from%% ' + bid));
// send signal to partner
sess.sendRinging();
@@ -417,7 +532,9 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
return;
}
var dialog = jsxc.gui.dialog.open(jsxc.gui.template.get('incomingCall', jsxc.jidToCid(jid)));
var dialog = jsxc.gui.dialog.open(jsxc.gui.template.get('incomingCall', bid), {
noClose: true
});
dialog.find('.jsxc_accept').click(function() {
$(document).trigger('accept.call.jsxc');
@@ -447,22 +564,30 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
onCallTerminated: function(event, sid, reason, text) {
this.setStatus('call terminated ' + sid + (reason ? (': ' + reason + ' ' + text) : ''));
var bid = jsxc.jidToBid(jsxc.webrtc.last_caller);
if (this.localStream) {
this.localStream.stop();
}
$('.jsxc_remotevideo')[0].src = "";
$('.jsxc_localvideo')[0].src = "";
if ($('.jsxc_videoContainer').length) {
$('.jsxc_remotevideo')[0].src = "";
$('.jsxc_localvideo')[0].src = "";
}
this.conn.jingle.localStream = null;
this.localStream = null;
this.remoteStream = null;
$('#jsxc_windowList > ul').prepend($('#jsxc_dialog .jsxc_chatarea > ul > li').detach());
var win = $('#jsxc_dialog .jsxc_chatarea > ul > li');
$('#jsxc_windowList > ul').prepend(win.detach());
win.find('.slimScrollDiv').resizable('enable');
$(document).off('cleanup.dialog.jsxc');
$(document).off('error.jingle');
jsxc.gui.dialog.close();
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Call terminated%%' + (reason ? (': %%' + reason + '%%') : '') + '.'));
},
/**
@@ -504,7 +629,9 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
this.setStatus(isAudioDevice ? 'Use remote audio device.' : 'No remote audio device');
if ($('.jsxc_remotevideo').length) {
RTC.attachMediaStream($('.jsxc_remotevideo'), stream);
RTC.attachMediaStream($('#jsxc_dialog .jsxc_remotevideo'), stream);
$('#jsxc_dialog .jsxc_' + (isVideoDevice ? 'remotevideo' : 'noRemoteVideo')).addClass('jsxc_deviceAvailable');
}
},
@@ -538,7 +665,11 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
jsxc.debug('iceCon state for ' + sid, iceCon);
jsxc.debug('sig state for ' + sid, sigState);
if (sigState === 'stable' && iceCon === 'connected') {
if (sigState === 'stable' && (iceCon === 'connected' || iceCon === 'completed')) {
$('#jsxc_dialog .jsxc_deviceAvailable').show();
$('#jsxc_dialog .bubblingG').hide();
var localSDP = sess.peerconnection.localDescription.sdp;
var remoteSDP = sess.peerconnection.remoteDescription.sdp;
@@ -559,14 +690,23 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
}
}
var text = '<p>';
text += '<b>' + jsxc.translate('%%Local IP%%: ') + '</b>' + sess.local_ip + '<br />';
text += '<b>' + jsxc.translate('%%Remote IP%%: ') + '</b>' + sess.remote_ip + '<br />';
text += '<b>' + jsxc.translate('%%Local Fingerprint%%: ') + '</b>' + sess.local_fp + '<br />';
text += '<b>' + jsxc.translate('%%Remote Fingerprint%%: ') + '</b>' + sess.remote_fp;
text += '</p>';
var text = '&lt;p>';
text += '&lt;b>' + jsxc.translate('%%Local IP%%: ') + '&lt;/b>' + sess.local_ip + '&lt;br />';
text += '&lt;b>' + jsxc.translate('%%Remote IP%%: ') + '&lt;/b>' + sess.remote_ip + '&lt;br />';
text += '&lt;b>' + jsxc.translate('%%Local Fingerprint%%: ') + '&lt;/b>' + sess.local_fp + '&lt;br />';
text += '&lt;b>' + jsxc.translate('%%Remote Fingerprint%%: ') + '&lt;/b>' + sess.remote_fp;
text += '&lt;/p>';
$('#jsxc_dialog .jsxc_infobar').html(text);
} else if (iceCon === 'failed') {
jsxc.gui.window.postMessage(jsxc.jidToBid(sess.peerjid), 'sys', jsxc.translate('%%ICE connection failure%%.'));
$(document).off('cleanup.dialog.jsxc');
sess.sendTerminate('failed-transport');
sess.terminate();
$(document).trigger('callterminated.jingle');
}
},
@@ -585,8 +725,9 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
*
* @memberOf jsxc.webrtc
* @param jid full jid
* @param um requested user media
*/
startCall: function(jid) {
startCall: function(jid, um) {
var self = this;
if (Strophe.getResourceFromJid(jid) === null) {
@@ -600,6 +741,8 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
'finish.mediaready.jsxc': function() {
self.setStatus('Initiate call');
jsxc.gui.window.postMessage(jsxc.jidToBid(jid), 'sys', jsxc.translate('%%Call started.%%'));
$(document).one('error.jingle', function(e, sid, error) {
if (error.source !== 'offer') {
return;
@@ -618,7 +761,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
}
});
this.reqUserMedia();
self.reqUserMedia(um);
},
/**
@@ -626,10 +769,10 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
*
* @memberOf jsxc.webrtc
*/
hangUp: function() {
hangUp: function(reason, text) {
$(document).off('cleanup.dialog.jsxc');
jsxc.webrtc.conn.jingle.terminate(null);
jsxc.webrtc.conn.jingle.terminate(null, reason, text);
$(document).trigger('callterminated.jingle');
},
@@ -638,24 +781,41 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
*
* @memberOf jsxc.webrtc
*/
reqUserMedia: function() {
reqUserMedia: function(um) {
if (this.localStream) {
$(document).trigger('mediaready.jingle', [ this.localStream ]);
return;
}
um = um || [ 'video', 'audio' ];
jsxc.gui.dialog.open(jsxc.gui.template.get('allowMediaAccess'), {
noClose: true
});
this.setStatus('please allow access to microphone and camera');
getUserMediaWithConstraints([ 'video', 'audio' ]);
if (typeof MediaStreamTrack !== 'undefined' && typeof MediaStreamTrack.getSources !== 'undefined') {
MediaStreamTrack.getSources(function(sourceInfo) {
var availableDevices = sourceInfo.map(function(el) {
return el.kind;
});
um = um.filter(function(el) {
return availableDevices.indexOf(el) !== -1;
});
getUserMediaWithConstraints(um);
});
} else {
getUserMediaWithConstraints(um);
}
},
/**
* Make a snapshot from a video stream and display it.
*
* @memberOf
* @memberOf jsxc.webrtc
* @param video Video stream
*/
snapshot: function(video) {
@@ -665,17 +825,25 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
$('.jsxc_snapshotbar p').remove();
var canvas = $('<canvas/>').css('display', 'none').appendTo('body').attr({
var canvas = $('&lt;canvas/>').css('display', 'none').appendTo('body').attr({
width: video.width(),
height: video.height()
}).get(0);
var ctx = canvas.getContext('2d');
ctx.drawImage(video[0], 0, 0);
var img = $('<img/>');
var url = canvas.toDataURL('image/jpeg');
var img = $('&lt;img/>');
var url = null;
try {
url = canvas.toDataURL('image/jpeg');
} catch (err) {
jsxc.warn('Error', err);
return;
}
img[0].src = url;
var link = $('<a/>').attr({
var link = $('&lt;a/>').attr({
target: '_blank',
href: url
});
@@ -731,6 +899,8 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
if (self.remoteStream) {
RTC.attachMediaStream(rv, self.remoteStream);
$('#jsxc_dialog .jsxc_' + (self.remoteStream.getVideoTracks().length > 0 ? 'remotevideo' : 'noRemoteVideo')).addClass('jsxc_deviceAvailable');
}
var toggleMulti = function(elem, open) {
@@ -747,7 +917,13 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
}
};
var win = jsxc.gui.window.open(jsxc.jidToCid(jid));
var win = jsxc.gui.window.open(jsxc.jidToBid(jid));
win.find('.slimScrollDiv').resizable('disable');
win.find('.jsxc_textarea').slimScroll({
height: 413
});
win.find('.jsxc_emoticons').css('top', (413 + 6) + 'px');
$('#jsxc_dialog .jsxc_chatarea ul').append(win.detach());
@@ -765,7 +941,21 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
});
$('#jsxc_dialog .jsxc_showchat').click(function() {
toggleMulti($('#jsxc_dialog .jsxc_chatarea'));
var chatarea = $('#jsxc_dialog .jsxc_chatarea');
if (chatarea.is(':hidden')) {
chatarea.show();
$('#jsxc_dialog .jsxc_webrtc').width('900');
jsxc.gui.dialog.resize({
width: '920px'
});
} else {
chatarea.hide();
$('#jsxc_dialog .jsxc_webrtc').width('650');
jsxc.gui.dialog.resize({
width: '660px'
});
}
});
$('#jsxc_dialog .jsxc_info').click(function() {
@@ -832,7 +1022,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
Remote_IP: 'Remote IP',
Local_Fingerprint: 'Local fingerprint',
Remote_Fingerprint: 'Remote fingerprint',
Video_call_not_possible: 'Video call not possible',
Video_call_not_possible: 'Video call not possible. Your buddy does not support video calls.',
Start_video_call: 'Start video call'
});
@@ -853,7 +1043,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
Remote_IP: 'Remote IP',
Local_Fingerprint: 'Lokaler Fingerprint',
Remote_Fingerprint: 'Remote Fingerprint',
Video_call_not_possible: 'Videoanruf nicht verfügbar',
Video_call_not_possible: 'Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.',
Start_video_call: 'Starte Videoanruf'
});
@@ -878,3 +1068,26 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
Start_video_call: 'Iniciar llamada de vídeo'
});
}(jQuery));
</code></pre>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
</nav>
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:12 GMT+0100 (CET)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+2033
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+464
Ver Arquivo
@@ -0,0 +1,464 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Namespace: carbons</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Namespace: carbons</h1>
<section>
<header>
<h2>
<span class="ancestors"><a href="jsxc.html">jsxc</a><a href="jsxc.xmpp.html">.xmpp</a>.</span>
carbons
</h2>
</header>
<article>
<div class="container-overview">
<div class="description">Handle carbons (XEP-0280);</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4291">line 4291</a>
</li></ul></dd>
</dl>
</div>
<h3 class="subsection-title">Methods</h3>
<dl>
<dt>
<h4 class="name" id="disable"><span class="type-signature">&lt;static> </span>disable<span class="signature">(cb)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Disable carbons.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>cb</code></td>
<td class="type">
</td>
<td class="description last">callback</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4331">line 4331</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="enable"><span class="type-signature">&lt;static> </span>enable<span class="signature">(cb)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Enable carbons.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>cb</code></td>
<td class="type">
</td>
<td class="description last">callback</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4305">line 4305</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="refresh"><span class="type-signature">&lt;static> </span>refresh<span class="signature">(err)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Enable/Disable carbons depending on options key.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>err</code></td>
<td class="type">
</td>
<td class="description last">error message</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4357">line 4357</a>
</li></ul></dd>
</dl>
</dd>
</dl>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
</nav>
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:15 GMT+0100 (CET)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>
+2530
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+17
Ver Arquivo
@@ -0,0 +1,17 @@
(function() {
var counter = 0;
var numbered;
var source = document.getElementsByClassName('prettyprint source');
if (source && source[0]) {
source = source[0].getElementsByTagName('code')[0];
numbered = source.innerHTML.split('\n');
numbered = numbered.map(function(item) {
counter++;
return '<span id="line' + counter + '" class="line"></span>' + item;
});
source.innerHTML = numbered.join('\n');
}
})();
+202
Ver Arquivo
@@ -0,0 +1,202 @@
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.
+2
Ver Arquivo
@@ -0,0 +1,2 @@
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com",
/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]);
+28
Ver Arquivo
@@ -0,0 +1,28 @@
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
+290
Ver Arquivo
@@ -0,0 +1,290 @@
html
{
overflow: auto;
background-color: #fff;
}
body
{
font: 14px "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans serif;
line-height: 130%;
color: #000;
background-color: #fff;
}
a {
color: #444;
}
a:visited {
color: #444;
}
a:active {
color: #444;
}
header
{
display: block;
padding: 6px 4px;
}
.class-description {
font-style: italic;
font-family: Palatino, 'Palatino Linotype', serif;
font-size: 130%;
line-height: 140%;
margin-bottom: 1em;
margin-top: 1em;
}
#main {
float: left;
width: 100%;
}
section
{
display: block;
background-color: #fff;
padding: 12px 24px;
border-bottom: 1px solid #ccc;
margin-right: 240px;
}
.variation {
display: none;
}
.optional:after {
content: "opt";
font-size: 60%;
color: #aaa;
font-style: italic;
font-weight: lighter;
}
nav
{
display: block;
float: left;
margin-left: -230px;
margin-top: 28px;
width: 220px;
border-left: 1px solid #ccc;
padding-left: 9px;
}
nav ul {
font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
font-size: 100%;
line-height: 17px;
padding:0;
margin:0;
list-style-type:none;
}
nav h2 a, nav h2 a:visited {
color: #A35A00;
text-decoration: none;
}
nav h3 {
margin-top: 12px;
}
nav li {
margin-top: 6px;
}
nav a {
color: #5C5954;
}
nav a:visited {
color: #5C5954;
}
nav a:active {
color: #5C5954;
}
footer {
display: block;
padding: 6px;
margin-top: 12px;
font-style: italic;
font-size: 90%;
}
h1
{
font-size: 200%;
font-weight: bold;
letter-spacing: -0.01em;
margin: 6px 0 9px 0;
}
h2
{
font-size: 170%;
font-weight: bold;
letter-spacing: -0.01em;
margin: 6px 0 3px 0;
}
h3
{
font-size: 150%;
font-weight: bold;
letter-spacing: -0.01em;
margin-top: 16px;
margin: 6px 0 3px 0;
}
h4
{
font-size: 130%;
font-weight: bold;
letter-spacing: -0.01em;
margin-top: 16px;
margin: 18px 0 3px 0;
color: #A35A00;
}
h5, .container-overview .subsection-title
{
font-size: 120%;
font-weight: bold;
letter-spacing: -0.01em;
margin: 8px 0 3px -16px;
}
h6
{
font-size: 100%;
letter-spacing: -0.01em;
margin: 6px 0 3px 0;
font-style: italic;
}
.ancestors { color: #999; }
.ancestors a
{
color: #999 !important;
text-decoration: none;
}
.important
{
font-weight: bold;
color: #950B02;
}
.yes-def {
text-indent: -1000px;
}
.type-signature {
color: #aaa;
}
.name, .signature {
font-family: Consolas, "Lucida Console", Monaco, monospace;
}
.details { margin-top: 14px; border-left: 2px solid #DDD; }
.details dt { width:100px; float:left; padding-left: 10px; padding-top: 6px; }
.details dd { margin-left: 50px; }
.details ul { margin: 0; }
.details ul { list-style-type: none; }
.details li { margin-left: 30px; padding-top: 6px; }
.details pre.prettyprint { margin: 0 }
.details .object-value { padding-top: 0; }
.description {
margin-bottom: 1em;
margin-left: -16px;
margin-top: 1em;
}
.code-caption
{
font-style: italic;
font-family: Palatino, 'Palatino Linotype', serif;
font-size: 107%;
margin: 0;
}
.prettyprint
{
border: 1px solid #ddd;
width: 80%;
overflow: auto;
}
.prettyprint.source {
width: inherit;
}
.prettyprint code
{
font-family: Consolas, 'Lucida Console', Monaco, monospace;
font-size: 100%;
line-height: 18px;
display: block;
padding: 4px 12px;
margin: 0;
background-color: #fff;
color: #000;
border-left: 3px #ddd solid;
}
.prettyprint code span.line
{
display: inline-block;
}
.params, .props
{
border-spacing: 0;
border: 0;
border-collapse: collapse;
}
.params .name, .props .name, .name code {
color: #A35A00;
font-family: Consolas, 'Lucida Console', Monaco, monospace;
font-size: 100%;
}
.params td, .params th, .props td, .props th
{
border: 1px solid #ddd;
margin: 0px;
text-align: left;
vertical-align: top;
padding: 4px 6px;
display: table-cell;
}
.params thead tr, .props thead tr
{
background-color: #ddd;
font-weight: bold;
}
.params .params thead tr, .props .props thead tr
{
background-color: #fff;
font-weight: bold;
}
.params th, .props th { border-right: 1px solid #aaa; }
.params thead .last, .props thead .last { border-right: 1px solid #ddd; }
.disabled {
color: #454545;
}
+111
Ver Arquivo
@@ -0,0 +1,111 @@
/* JSDoc prettify.js theme */
/* plain text */
.pln {
color: #000000;
font-weight: normal;
font-style: normal;
}
/* string content */
.str {
color: #006400;
font-weight: normal;
font-style: normal;
}
/* a keyword */
.kwd {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* a comment */
.com {
font-weight: normal;
font-style: italic;
}
/* a type name */
.typ {
color: #000000;
font-weight: normal;
font-style: normal;
}
/* a literal value */
.lit {
color: #006400;
font-weight: normal;
font-style: normal;
}
/* punctuation */
.pun {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* lisp open bracket */
.opn {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* lisp close bracket */
.clo {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* a markup tag name */
.tag {
color: #006400;
font-weight: normal;
font-style: normal;
}
/* a markup attribute name */
.atn {
color: #006400;
font-weight: normal;
font-style: normal;
}
/* a markup attribute value */
.atv {
color: #006400;
font-weight: normal;
font-style: normal;
}
/* a declaration */
.dec {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* a variable name */
.var {
color: #000000;
font-weight: normal;
font-style: normal;
}
/* a function name */
.fun {
color: #000000;
font-weight: bold;
font-style: normal;
}
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin-top: 0;
margin-bottom: 0;
}
+132
Ver Arquivo
@@ -0,0 +1,132 @@
/* Tomorrow Theme */
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
/* Pretty printing styles. Used with prettify.js. */
/* SPAN elements with the classes below are added by prettyprint. */
/* plain text */
.pln {
color: #4d4d4c; }
@media screen {
/* string content */
.str {
color: #718c00; }
/* a keyword */
.kwd {
color: #8959a8; }
/* a comment */
.com {
color: #8e908c; }
/* a type name */
.typ {
color: #4271ae; }
/* a literal value */
.lit {
color: #f5871f; }
/* punctuation */
.pun {
color: #4d4d4c; }
/* lisp open bracket */
.opn {
color: #4d4d4c; }
/* lisp close bracket */
.clo {
color: #4d4d4c; }
/* a markup tag name */
.tag {
color: #c82829; }
/* a markup attribute name */
.atn {
color: #f5871f; }
/* a markup attribute value */
.atv {
color: #3e999f; }
/* a declaration */
.dec {
color: #f5871f; }
/* a variable name */
.var {
color: #c82829; }
/* a function name */
.fun {
color: #4271ae; } }
/* Use higher contrast and text-weight for printable form. */
@media print, projection {
.str {
color: #060; }
.kwd {
color: #006;
font-weight: bold; }
.com {
color: #600;
font-style: italic; }
.typ {
color: #404;
font-weight: bold; }
.lit {
color: #044; }
.pun, .opn, .clo {
color: #440; }
.tag {
color: #006;
font-weight: bold; }
.atn {
color: #404; }
.atv {
color: #060; } }
/* Style */
/*
pre.prettyprint {
background: white;
font-family: Menlo, Monaco, Consolas, monospace;
font-size: 12px;
line-height: 1.5;
border: 1px solid #ccc;
padding: 10px; }
*/
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin-top: 0;
margin-bottom: 0; }
/* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L4,
li.L5,
li.L6,
li.L7,
li.L8,
li.L9 {
/* */ }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 {
/* */ }
+50
Ver Arquivo
@@ -0,0 +1,50 @@
<!DOCTYPE HTML>
<html>
<head>
<title>JSXC example application</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link href="../lib/jquery-ui.min.css" media="all" rel="stylesheet" type="text/css" />
<link href="../lib/jquery.mCustomScrollbar.css" media="all" rel="stylesheet" type="text/css" />
<link href="../lib/jquery.colorbox.css" media="all" rel="stylesheet" type="text/css" />
<link href="../dev/css/jsxc.css" media="all" rel="stylesheet" type="text/css" />
<link href="../dev/css/jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
<style type="text/css">
body, * {font-size: 13px; font-family: "Helvetica Neue",Helvetica,Arial,FreeSans,sans-serif;}
fieldset {float: left;}
</style>
<script src="../dev/lib/jquery.min.js"></script>
<script src="../dev/lib/jquery.ui.min.js"></script>
<script src="../dev/lib/jquery.colorbox-min.js"></script>
<script src="../dev/lib/jquery.slimscroll.js"></script>
<script src="../dev/lib/jquery.fullscreen.js"></script>
<script src="../dev/lib/jsxc.dep.js"></script>
<script src="../dev/jsxc.js"></script>
<script src="js/example.js"></script>
</head>
<body>
<form id="form" method="post" action="login.html">
<fieldset>
<legend>Dual-Login</legend>
<label for="username">Username:</label><input type="text" id="username" name="username" /><br />
<label for="password">Password:</label><input type="password" id="password" name="password" /><br />
<input type="submit" value="Log in chat and page" />
</fieldset>
</form>
<form id="form2" method="post">
<fieldset>
<legend>Chat Login</legend>
<label for="username2">Username:</label><input type="text" id="username2" name="username2" /><br />
<label for="password2">Password:</label><input type="password" id="password2" name="password2" /><br />
<input type="submit" value="Log in chat" /> <button id="logout2" style="display:none;">Log out</button>
</fieldset>
</form>
</body>
</html>
+23 -26
Ver Arquivo
@@ -7,35 +7,23 @@
<link href="../lib/jquery-ui.min.css" media="all" rel="stylesheet" type="text/css" />
<link href="../lib/jquery.mCustomScrollbar.css" media="all" rel="stylesheet" type="text/css" />
<link href="../lib/jquery.colorbox.css" media="all" rel="stylesheet" type="text/css" />
<link href="../jsxc.css" media="all" rel="stylesheet" type="text/css" />
<link href="../jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
<link href="../build/css/jsxc.css" media="all" rel="stylesheet" type="text/css" />
<link href="../build/css/jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
<style type="text/css">
body, * {font-size: 13px; font-family: "Helvetica Neue",Helvetica,Arial,FreeSans,sans-serif;}
fieldset {float: left;}
</style>
<script src="../lib/jquery.min.js"></script>
<script src="../lib/jquery.ui.min.js"></script>
<script src="../lib/jquery.colorbox-min.js"></script>
<script src="../lib/jquery.slimscroll.js"></script>
<script src="../lib/jquery.fullscreen.js"></script>
<script src="../lib/strophe.js"></script>
<script src="../lib/strophe.muc.js"></script>
<script src="../lib/strophe.disco.js"></script>
<script src="../lib/strophe.caps.js"></script>
<script src="../lib/strophe.vcard.js"></script>
<script src="../lib/strophe.jingle/strophe.jingle.js"></script>
<script src="../lib/strophe.jingle/strophe.jingle.session.js"></script>
<script src="../lib/strophe.jingle/strophe.jingle.sdp.js"></script>
<script src="../lib/strophe.jingle/strophe.jingle.adapter.js"></script>
<script src="../lib/otr/build/dep/salsa20.js"></script>
<script src="../lib/otr/build/dep/bigint.js"></script>
<script src="../lib/otr/build/dep/crypto.js"></script>
<script src="../lib/otr/build/dep/eventemitter.js"></script>
<script src="../lib/otr/build/otr.js"></script>
<script src="../jsxc.lib.js"></script>
<script src="../jsxc.lib.webrtc.js"></script>
<script src="../build/lib/jquery.min.js"></script>
<script src="../build/lib/jquery.ui.min.js"></script>
<script src="../build/lib/jquery.colorbox-min.js"></script>
<script src="../build/lib/jquery.slimscroll.js"></script>
<script src="../build/lib/jquery.fullscreen.js"></script>
<script src="../build/lib/jsxc.dep.js"></script>
<script src="../build/jsxc.lib.js"></script>
<script src="../build/jsxc.lib.webrtc.js"></script>
<script src="js/example.js"></script>
@@ -44,11 +32,20 @@
<body>
<form id="form" method="post" action="login.html">
<fieldset>
<legend>Login</legend>
<legend>Dual-Login</legend>
<label for="username">Username:</label><input type="text" id="username" name="username" /><br />
<label for="password">Password:</label><input type="password" id="password" name="password" /><br />
<input type="submit" value="Log in" />
<input type="submit" value="Log in chat and page" />
</fieldset>
</form>
<form id="form2" method="post">
<fieldset>
<legend>Chat Login</legend>
<label for="username2">Username:</label><input type="text" id="username2" name="username2" /><br />
<label for="password2">Password:</label><input type="password" id="password2" name="password2" /><br />
<input type="submit" value="Log in chat" /> <button id="logout2" style="display:none;">Log out</button>
</fieldset>
</form>
</body>
</html>
</html>
+50
Ver Arquivo
@@ -0,0 +1,50 @@
$(function() {
var settings = {
xmpp: {
url: '/http-bind/',
domain: 'localhost',
resource: 'example',
overwrite: true,
onlogin: true
}
};
jsxc.init({
loginForm: {
form: '#form',
jid: '#username',
pass: '#password'
},
logoutElement: $('#logout'),
checkFlash: false,
rosterAppend: 'body',
root: window.location.pathname.replace(/\/[^/]+$/, "/") + '../dev'
turnCredentialsPath: 'ajax/getturncredentials.json',
displayRosterMinimized: function() {
return true;
},
otr: {
debug: true,
SEND_WHITESPACE_TAG: true,
WHITESPACE_START_AKE: true
},
loadSettings: function(username, password) {
return settings;
},
xmpp: {
url: settings.xmpp.url
}
});
$('#form2').submit(function(ev) {
ev.preventDefault();
$(document).on('connectionReady.jsxc', function() {
$('#form2 input').prop('disabled', true);
$('#logout2').show().click(jsxc.xmpp.logout);
});
jsxc.xmpp.login($('#username2').val() + '@' + settings.xmpp.domain, $('#password2').val());
});
});
+28 -11
Ver Arquivo
@@ -1,4 +1,14 @@
$(function() {
var settings = {
xmpp: {
url: '/http-bind/',
domain: 'localhost',
resource: 'example',
overwrite: true,
onlogin: true
}
};
jsxc.init({
loginForm: {
form: '#form',
@@ -8,7 +18,7 @@ $(function() {
logoutElement: $('#logout'),
checkFlash: false,
rosterAppend: 'body',
root: '/jsxc/',
root: window.location.pathname.replace(/\/[^/]+$/, '/') + '../build',
turnCredentialsPath: 'ajax/getturncredentials.json',
displayRosterMinimized: function() {
return true;
@@ -19,15 +29,22 @@ $(function() {
WHITESPACE_START_AKE: true
},
loadSettings: function(username, password) {
return {
xmpp: {
url: '/http-bind/',
domain: 'localhost',
resource: 'example',
overwrite: true,
onlogin: true
}
};
return settings;
},
xmpp: {
url: settings.xmpp.url
}
});
});
$('#form2').submit(function(ev) {
ev.preventDefault();
$(document).on('connectionReady.jsxc', function() {
$('#form2 input').prop('disabled', true);
$('#logout2').show().click(jsxc.xmpp.logout);
});
jsxc.xmpp.login($('#username2').val() + '@' + settings.xmpp.domain, $('#password2').val());
});
});
+12 -24
Ver Arquivo
@@ -7,35 +7,23 @@
<link href="../lib/jquery-ui.min.css" media="all" rel="stylesheet" type="text/css" />
<link href="../lib/jquery.mCustomScrollbar.css" media="all" rel="stylesheet" type="text/css" />
<link href="../lib/jquery.colorbox.css" media="all" rel="stylesheet" type="text/css" />
<link href="../jsxc.css" media="all" rel="stylesheet" type="text/css" />
<link href="../jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
<link href="../build/css/jsxc.css" media="all" rel="stylesheet" type="text/css" />
<link href="../build/css/jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
<style type="text/css">
body, * {font-size: 13px; font-family: "Helvetica Neue",Helvetica,Arial,FreeSans,sans-serif;}
fieldset {float: left;}
</style>
<script src="../lib/jquery.min.js"></script>
<script src="../lib/jquery.ui.min.js"></script>
<script src="../lib/jquery.colorbox-min.js"></script>
<script src="../lib/jquery.slimscroll.js"></script>
<script src="../lib/jquery.fullscreen.js"></script>
<script src="../lib/strophe.js"></script>
<script src="../lib/strophe.muc.js"></script>
<script src="../lib/strophe.disco.js"></script>
<script src="../lib/strophe.caps.js"></script>
<script src="../lib/strophe.vcard.js"></script>
<script src="../lib/strophe.jingle/strophe.jingle.js"></script>
<script src="../lib/strophe.jingle/strophe.jingle.session.js"></script>
<script src="../lib/strophe.jingle/strophe.jingle.sdp.js"></script>
<script src="../lib/strophe.jingle/strophe.jingle.adapter.js"></script>
<script src="../lib/otr/build/dep/salsa20.js"></script>
<script src="../lib/otr/build/dep/bigint.js"></script>
<script src="../lib/otr/build/dep/crypto.js"></script>
<script src="../lib/otr/build/dep/eventemitter.js"></script>
<script src="../lib/otr/build/otr.js"></script>
<script src="../jsxc.lib.js"></script>
<script src="../jsxc.lib.webrtc.js"></script>
<script src="../build/lib/jquery.min.js"></script>
<script src="../build/lib/jquery.ui.min.js"></script>
<script src="../build/lib/jquery.colorbox-min.js"></script>
<script src="../build/lib/jquery.slimscroll.js"></script>
<script src="../build/lib/jquery.fullscreen.js"></script>
<script src="../build/lib/jsxc.dep.js"></script>
<script src="../build/jsxc.lib.js"></script>
<script src="../build/jsxc.lib.webrtc.js"></script>
<script src="js/example.js"></script>
@@ -46,4 +34,4 @@
<a href="index.html" id="logout">Log out</a>
</body>
</html>
</html>
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 9.3 KiB

+105
Ver Arquivo
@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="Layer_1"
xml:space="preserve"
height="147.22015"
viewBox="0 0 192.89149 147.21771"
width="192.89587"
version="1.1"
y="0px"
x="0px"
enable-background="new 0 0 176.486 181.437"
inkscape:version="0.91pre2 r"
sodipodi:docname="XMPP_logo.svg"><metadata
id="metadata41"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs39" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="640"
inkscape:window-height="480"
id="namedview37"
showgrid="false"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10"
inkscape:zoom="1.3007054"
inkscape:cx="71.332001"
inkscape:cy="72.501142"
inkscape:window-x="75"
inkscape:window-y="34"
inkscape:window-maximized="0"
inkscape:current-layer="Layer_1" /><linearGradient
id="SVGID_1_"
y2="0.00048828"
gradientUnits="userSpaceOnUse"
x2="-1807.2"
gradientTransform="translate(1925.9953,9.9988343)"
y1="125.86"
x1="-1807.2"><stop
stop-color="#1b3967"
offset=".011"
id="stop4" /><stop
stop-color="#13b5ea"
offset=".467"
id="stop6" /><stop
stop-color="#002b5c"
offset=".9945"
id="stop8" /></linearGradient><path
d="m 146.28531,24.187835 c 0.077,1.313 -1.786,0.968 -1.786,2.293 0,38.551 -44.720002,96.831035 -89.847002,108.190035 l 0,1.182 C 114.60931,130.34287 181.38231,69.052835 182.89231,10.002834 l -36.6,14.189001 z"
id="path10"
style="fill:url(#SVGID_1_)"
inkscape:connector-curvature="0" /><path
d="m 130.22531,27.958835 c 0.077,1.313 0.121,2.633 0.121,3.958 0,38.551 -30.700002,90.497035 -75.827002,101.860035 l 0,1.637 c 59.065002,-3.823 105.810002,-63.023035 105.810002,-109.200035 0,-2.375 -0.125,-4.729 -0.371,-7.056 l -29.73,8.796 z"
id="path12"
inkscape:connector-curvature="0"
style="fill:#e96d1f" /><linearGradient
id="SVGID_2_"
y2="1.279e-13"
gradientUnits="userSpaceOnUse"
x2="-1073.2"
gradientTransform="matrix(-1,0,0,1,-998.20465,9.9988343)"
y1="126.85"
x1="-1073.2"><stop
stop-color="#1b3967"
offset=".011"
id="stop15" /><stop
stop-color="#13b5ea"
offset=".467"
id="stop17" /><stop
stop-color="#002b5c"
offset=".9945"
id="stop19" /></linearGradient><path
d="m 46.594308,24.187835 c -0.077,1.313 1.787,0.968 1.787,2.293 0,38.551 46.558,97.366035 91.688002,108.730035 l 0,1.639 C 80.116308,131.32987 11.509308,69.049835 9.9993079,9.9998343 L 46.598308,24.188835 Z"
id="path21"
style="fill:url(#SVGID_2_)"
inkscape:connector-curvature="0" /><path
d="m 64.726308,28.930835 c -0.076,1.313 -0.12,2.63 -0.12,3.957 0,38.551 30.699,90.497035 75.827002,101.860035 l 0,1.639 C 81.389308,133.59687 34.623308,73.362835 34.623308,27.186835 c 0,-2.375 0.128,-4.729 0.371,-7.056 l 29.73,8.798 z"
id="path23"
inkscape:connector-curvature="0"
style="fill:#a0ce67" /><path
d="m 34.708308,19.581835 7.617,2.722 c -0.041,0.962 -0.066,2.254 -0.066,3.225 0,41.219 37.271,98.204035 87.272002,107.120035 3.245,1.088 7.538,2.077 10.932,2.931 l 0,1.638 C 75.209308,131.65787 29.363308,65.351835 34.703308,19.577835 Z"
id="path25"
inkscape:connector-curvature="0"
style="fill:#439639" /><path
d="m 160.33531,18.758835 -7.833,2.625 c 0.041,0.963 0.191,2.203 0.191,3.173 0,41.219 -37.272,98.205035 -87.274002,107.120035 -3.243,1.089 -7.538,2.077 -10.93,2.932 l 0,1.639 C 122.83331,127.58787 165.66931,64.528835 160.32931,18.757835 Z"
id="path27"
inkscape:connector-curvature="0"
style="fill:#d9541e" /></svg>

Depois

Largura:  |  Altura:  |  Tamanho: 4.5 KiB

+59
Ver Arquivo
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 1000 1000"
preserveAspectRatio="xMinYMin meet"
width="100%"
height="100%"
style="width: 512px; height: 512px;"
id="svg2"
version="1.1"
inkscape:version="0.91+devel r"
sodipodi:docname="group_grey.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="980"
inkscape:window-height="888"
id="namedview6"
showgrid="false"
inkscape:zoom="0.6675088"
inkscape:cx="512.17823"
inkscape:cy="480.21903"
inkscape:window-x="889"
inkscape:window-y="85"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="m 0.94630456,763.0963 c 0,22.21203 9.08673644,33.31804 27.26020844,33.31804 l 112.069747,0 0,-142.35887 c 0,-18.17347 4.54363,-34.83222 13.63088,-49.97627 9.08724,-15.14405 21.70797,-26.75512 37.86216,-34.83326 l 115.09866,-54.52042 c 10.09637,-6.05782 18.17347,-13.12528 24.23129,-21.20238 -12.11564,-18.17347 -22.21202,-39.37586 -30.28912,-63.60715 -8.0771,-24.2313 -12.11564,-49.47223 -12.11564,-75.7228 0,-16.1542 2.01927,-32.3084 6.05782,-48.46259 4.03855,-16.1542 9.08674,-31.29876 15.14456,-45.43368 -20.19275,-14.13493 -41.39513,-21.20239 -63.60715,-21.20239 -38.36622,2.01928 -68.65534,17.66839 -90.86736,46.94736 -22.21201,29.27897 -33.31803,62.09244 -33.31803,98.44042 2.01928,62.59751 24.2313,107.02155 66.63606,133.27212 L 16.092416,596.50615 C 5.9960421,602.56397 0.94785546,612.66034 0.94785546,626.79527 l 0,136.30103 z M 191.76775,796.41434 c -2.01927,42.40476 10.09637,64.61678 36.34695,66.63606 l 542.17524,0 c 12.11565,-4.03855 20.69783,-10.09637 25.74653,-18.17347 5.04869,-8.0771 7.57305,-14.63948 7.57305,-19.68716 l 0,-171.13275 c 0,-18.17347 -7.06746,-30.28912 -21.20238,-36.34694 L 637.01936,545.01619 573.41221,514.72707 c 38.36622,-22.21202 63.60715,-60.57824 75.7228,-115.09865 8.0771,-30.28912 8.0771,-61.58788 0,-93.89627 -10.09637,-36.34695 -28.7744,-67.14115 -56.0341,-92.38259 -27.25969,-25.24145 -59.06352,-38.87182 -95.4115,-40.89109 -36.34694,2.01927 -67.6457,15.64964 -93.89627,40.89109 -26.25057,25.24144 -44.42404,55.02601 -54.52042,89.35368 -12.11564,46.44331 -8.07709,93.89627 12.11565,142.35886 16.1542,30.28912 37.35658,54.52041 63.60715,72.69389 l -57.54932,27.2602 -151.4456,69.66498 c -16.1542,8.0771 -24.2313,21.20238 -24.2313,39.37585 l 0,142.35887 z m 475.53918,-302.8912 c 8.0771,8.0771 18.17347,16.1542 30.28912,24.23129 12.11565,8.0771 23.22166,14.13493 33.31803,18.17348 10.09638,4.03855 23.22166,9.59181 39.37586,16.65979 16.1542,7.06797 28.26984,12.62124 36.34694,16.65979 16.1542,8.0771 28.77493,19.68819 37.86218,34.83326 9.08724,15.14507 13.63088,31.80384 13.63088,49.97627 l 0,142.35887 115.09865,0 c 18.17347,-2.01928 27.26021,-13.12529 27.26021,-33.31803 l 0,-136.30104 c 0,-14.13493 -5.04819,-24.2313 -15.14456,-30.28912 L 815.72517,514.72707 c 42.40477,-30.28912 63.60715,-73.70352 63.60715,-130.24321 0,-38.36622 -12.11565,-72.18881 -36.34694,-101.46778 -24.2313,-29.27897 -53.51078,-43.91896 -87.83845,-43.92 -22.21202,0 -44.42404,7.06747 -66.63606,21.20239 12.11564,30.28912 18.17347,61.58787 18.17347,93.89627 0,50.48187 -13.12529,96.92518 -39.37586,139.32995 z"
id="path4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cscsscccsssccscccscccccssscccccscscccccscccssssssccssccssccscc"
style="fill:#999999;stroke-width:1.55090213;fill-opacity:1" />
</svg>

Depois

Largura:  |  Altura:  |  Tamanho: 4.2 KiB

+58
Ver Arquivo
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 1000 1000"
preserveAspectRatio="xMinYMin meet"
width="100%"
height="100%"
style="width: 512px; height: 512px;"
id="svg2"
version="1.1"
inkscape:version="0.91+devel r"
sodipodi:docname="group_white.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1855"
inkscape:window-height="1056"
id="namedview6"
showgrid="false"
inkscape:zoom="0.6675088"
inkscape:cx="538.39511"
inkscape:cy="480.21903"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<path
d="m 0.94630456,763.0963 c 0,22.21203 9.08673644,33.31804 27.26020844,33.31804 l 112.069747,0 0,-142.35887 c 0,-18.17347 4.54363,-34.83222 13.63088,-49.97627 9.08724,-15.14405 21.70797,-26.75512 37.86216,-34.83326 l 115.09866,-54.52042 c 10.09637,-6.05782 18.17347,-13.12528 24.23129,-21.20238 -12.11564,-18.17347 -22.21202,-39.37586 -30.28912,-63.60715 -8.0771,-24.2313 -12.11564,-49.47223 -12.11564,-75.7228 0,-16.1542 2.01927,-32.3084 6.05782,-48.46259 4.03855,-16.1542 9.08674,-31.29876 15.14456,-45.43368 -20.19275,-14.13493 -41.39513,-21.20239 -63.60715,-21.20239 -38.36622,2.01928 -68.65534,17.66839 -90.86736,46.94736 -22.21201,29.27897 -33.31803,62.09244 -33.31803,98.44042 2.01928,62.59751 24.2313,107.02155 66.63606,133.27212 L 16.092416,596.50615 C 5.9960421,602.56397 0.94785546,612.66034 0.94785546,626.79527 l 0,136.30103 z M 191.76775,796.41434 c -2.01927,42.40476 10.09637,64.61678 36.34695,66.63606 l 542.17524,0 c 12.11565,-4.03855 20.69783,-10.09637 25.74653,-18.17347 5.04869,-8.0771 7.57305,-14.63948 7.57305,-19.68716 l 0,-171.13275 c 0,-18.17347 -7.06746,-30.28912 -21.20238,-36.34694 L 637.01936,545.01619 573.41221,514.72707 c 38.36622,-22.21202 63.60715,-60.57824 75.7228,-115.09865 8.0771,-30.28912 8.0771,-61.58788 0,-93.89627 -10.09637,-36.34695 -28.7744,-67.14115 -56.0341,-92.38259 -27.25969,-25.24145 -59.06352,-38.87182 -95.4115,-40.89109 -36.34694,2.01927 -67.6457,15.64964 -93.89627,40.89109 -26.25057,25.24144 -44.42404,55.02601 -54.52042,89.35368 -12.11564,46.44331 -8.07709,93.89627 12.11565,142.35886 16.1542,30.28912 37.35658,54.52041 63.60715,72.69389 l -57.54932,27.2602 -151.4456,69.66498 c -16.1542,8.0771 -24.2313,21.20238 -24.2313,39.37585 l 0,142.35887 z m 475.53918,-302.8912 c 8.0771,8.0771 18.17347,16.1542 30.28912,24.23129 12.11565,8.0771 23.22166,14.13493 33.31803,18.17348 10.09638,4.03855 23.22166,9.59181 39.37586,16.65979 16.1542,7.06797 28.26984,12.62124 36.34694,16.65979 16.1542,8.0771 28.77493,19.68819 37.86218,34.83326 9.08724,15.14507 13.63088,31.80384 13.63088,49.97627 l 0,142.35887 115.09865,0 c 18.17347,-2.01928 27.26021,-13.12529 27.26021,-33.31803 l 0,-136.30104 c 0,-14.13493 -5.04819,-24.2313 -15.14456,-30.28912 L 815.72517,514.72707 c 42.40477,-30.28912 63.60715,-73.70352 63.60715,-130.24321 0,-38.36622 -12.11565,-72.18881 -36.34694,-101.46778 -24.2313,-29.27897 -53.51078,-43.91896 -87.83845,-43.92 -22.21202,0 -44.42404,7.06747 -66.63606,21.20239 12.11564,30.28912 18.17347,61.58787 18.17347,93.89627 0,50.48187 -13.12529,96.92518 -39.37586,139.32995 z"
id="path4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cscsscccsssccscccscccccssscccccscscccccscccssssssccssccssccscc"
style="fill:#ffffff;stroke-width:1.55090213" />
</svg>

Depois

Largura:  |  Altura:  |  Tamanho: 4.2 KiB

+76
Ver Arquivo
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="15"
height="15"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="resize_gray.svg">
<defs
id="defs4">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3803">
<rect
style="stroke:none"
id="rect3805"
width="16.09375"
height="14.71875"
x="0.84375"
y="1038.1434" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
inkscape:cx="6.9909088"
inkscape:cy="6.5564812"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1865"
inkscape:window-height="1056"
inkscape:window-x="55"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1037.3622)">
<path
style="fill:none;stroke:#bfbfbf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 10.46875,1032.1747 -14.5,14.2813 z m 3.5,1.2501 -17.3125,17.3124 z"
id="path2985"
inkscape:connector-curvature="0"
clip-path="url(#clipPath3803)"
transform="translate(0.8125,0.6875)"
sodipodi:nodetypes="cccccc" />
</g>
</svg>

Depois

Largura:  |  Altura:  |  Tamanho: 2.2 KiB

-978
Ver Arquivo
@@ -1,978 +0,0 @@
.jsxc_online,.jsxc_chat {
border-left: 4px solid #00BFFF !important;
}
.jsxc_away,.jsxc_xa {
border-left: 4px solid orange !important;
}
.jsxc_dnd {
border-left: 4px solid red !important;
}
.jsxc_offline {
border-left: 4px solid #A4A4A4 !important;
}
.jsxc_hidden {
display: none;
}
.jsxc_invalid {
border: 2px solid red !important;
}
p.jsxc_right {
text-align: right;
}
p.jsxc_center {
text-align: center;
}
/*############################
*########## Dialog ##########
*############################*/
#jsxc_dialog {
padding: 10px;
min-width: 300px;
}
#jsxc_dialog p {
margin-bottom: 1em;
}
#jsxc_dialog h3 {
font-size: 120%;
font-weight: bold;
margin-bottom: 10px;
margin-top: 20px;
}
#jsxc_dialog p input {
margin-bottom: 5px;
width: 60%;
outline: none;
}
#jsxc_dialog p input[type="submit"] {
width: auto;
}
#jsxc_dialog p label {
display: block;
width: 30%;
float: left;
padding: 6px 0px;
}
#jsxc_dialog .jsxc_right {
margin-top: 20px;
}
#jsxc_dialog p.jsxc_maxWidth {
max-width: 500px;
}
#jsxc_dialog fieldset {
border: 2px solid #ccc;
}
#jsxc_dialog legend {
padding: 0px 10px;
font-weight: bold;
}
#jsxc_dialog input {
outline: none;
}
#jsxc_dialog input:invalid {
border:1px solid red;
}
#jsxc_dialog .jsxc_fieldset {
width: 280px;
padding: 10px;
border-radius: 3px;
}
#jsxc_dialog .jsxc_fieldset label {
display: inline-block;
width: 100px;
}
#jsxc_dialog .jsxc_fieldset input[type="Number"] {
display: inline-block;
width: 50px;
}
#jsxc_dialog input[readonly] {
background-color: #efefef;
}
/*############################
*########## Overall #########
*############################*/
li .jsxc_name {
overflow: hidden;
height: 30px;
cursor: pointer;
text-overflow: ellipsis;
white-space: nowrap;
}
li .jsxc_name:hover {
color: #FAFAFA;
}
.jsxc_avatar,ul#jsxc_buddylist li:hover .jsxc_avatar {
width: 25px;
height: 25px;
line-height: 25px;
margin-top: 2px;
margin-right: 4px;
background-color: #a3a3a3;
border-radius: 2px;
float: left;
text-align: center;
font-weight: bold;
font-size: 30px;
color: #b1b1b1;
overflow: hidden;
position: relative;
font-family: Arial;
}
.jsxc_avatar img {
display: block;
width: 25px;
height: 25px;
position: absolute;
top: 0px;
left: 0px;
}
/*############################
*########## Roster ##########
*############################*/
div#jsxc_roster {
position: fixed;
top: 0px;
bottom: 0px;
right: 0px;
width: 200px;
overflow: visible;
border-left: 4px solid #A4A4A4;
z-index: 80;
margin-left: 10px;
box-shadow: 0px 0px 7px #000000;
background-color: #383C43;
}
div#jsxc_roster .slimScrollDiv {
left: -4px;
margin-bottom: 30px;
z-index: 40;
}
div#jsxc_roster .jsxc_wait {
position: absolute;
top: 0px;
left: 0px;
bottom: 0px;
width: 160px;
padding: 20px;
background-color: #fff;
z-index: 60;
}
div#jsxc_roster .jsxc_wait img {
padding: 5px;
}
div#jsxc_roster .jsxc_wait h3 {
margin-bottom: 5px;
font-size: 1.13em;
font-weight: bold;
}
/** Input field for alias renaming */
#jsxc_roster input {
position: absolute;
top: 50%;
left: 31px;
width: 157px;
height: 18px;
margin-top: -11px;
padding: 2px;
border: 0px;
background-image: none;
background-color: #fff;
border-radius: 3px;
-moz-box-shadow: inset 0 0 5px #888;
-webkit-box-shadow: inset 0 0 5px #888;
box-shadow: inner 0 0 5px #888;
outline: none;
}
#jsxc_roster .jsxc_expand input {
left: 51px;
width: 137px;
}
div#jsxc_roster p {
color: #939393;
padding: 10px;
}
div#jsxc_roster p a {
color: #b1b1b1;
text-decoration: underline;
}
div#jsxc_roster>.jsxc_bottom {
position: absolute;
left: -4px;
bottom: 0px;
height: 30px;
width: 200px;
border-left: 4px solid #A4A4A4;
border-top: 1px solid #939393;
padding-left: 0px;
background-color: #282323;
color: #939393;
cursor: pointer;
line-height: 30px;
z-index: 50;
}
div#jsxc_roster>.jsxc_bottom>div:hover {
color: #FAFAFA;
}
div#jsxc_roster>.jsxc_bottom>div>span {
cursor: pointer;
}
div#jsxc_roster>.jsxc_bottom ul {
width: 190px;
position: absolute;
bottom: 30px;
left: 0px;
display: none;
border-top: 1px solid #939393;
padding-left: 10px;
background-color: #282323;
margin: 0;
}
div#jsxc_roster>.jsxc_bottom li {
height: 30px;
background-color: #282323;
color: #939393;
cursor: pointer;
width: 180px;
padding-left: 10px;
line-height: 30px;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
div#jsxc_roster>.jsxc_bottom li:hover:not(.jsxc_disabled ) {
color: #fff;
background-color: #3F8FBA;
}
div#jsxc_roster>.jsxc_bottom li.jsxc_disabled {
color: #595959;
cursor: default;
}
div#jsxc_roster>.jsxc_bottom ul li:last-child {
border-bottom: 1px solid #939393;
}
#jsxc_menu,#jsxc_avatar,#jsxc_notice {
height: 30px;
width: 30px;
}
/** own avatar */
#jsxc_avatar {
float: left;
margin: 0px 2px;
width: 25px;
}
#jsxc_menu {
cursor: pointer;
float: right;
text-align: center;
width: 25px;
}
#jsxc_menu>span {
opacity: 0.5;
display: block;
width: 25px;
height: 30px;
background-image: url('img/gear_white.svg');
background-size: 18px 18px;
background-repeat: no-repeat;
background-position: center center;
}
#jsxc_menu:hover>span {
opacity: 1;
}
#jsxc_notice {
float: right;
text-align: center;
line-height: 30px;
}
#jsxc_notice>span:empty {
display: none;
}
#jsxc_notice span {
background-color: #fbc14c;
border-radius: 11px;
color: black;
font-size: 80%;
padding: 2px;
}
#jsxc_presence {
cursor: pointer;
padding-left: 2px;
overflow: hidden;
}
/** List of all buddies inside the roster */
ul#jsxc_buddylist {
list-style: none;
padding: 0px;
margin: 0px;
width: 204px;
}
ul#jsxc_buddylist li {
padding: 0px;
margin: 0px;
height: 30px;
border-bottom: 1px solid #939393;
cursor: pointer;
width: 200px;
position: relative;
color: #939393;
font-family: Arial;
line-height: 30px;
padding-left: 3px;
z-index: 85;
overflow: hidden;
}
ul#jsxc_buddylist .jsxc_name {
padding-right: 30px;
}
ul#jsxc_buddylist li.jsxc_expand {
height: 54px;
}
ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar, ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar img {
width: 48px;
height: 48px;
}
#jsxc_buddylist .jsxc_control {
position:absolute;
width: 30px;
height: 30px;
top: 0px;
right: 0px;
cursor: pointer;
}
#jsxc_buddylist .jsxc_control:after {
content: '▾';
position: absolute;
left: 50%;
top: 15px;
width: 16px;
height: 16px;
line-height: 16px;
text-align: center;
margin-left: -8px;
margin-top: -8px;
border-radius: 8px;
color: #c1c1c1;
background-color: rgba(150, 150, 150, 0.5);
opacity: 0.6;
-webkit-transition: -webkit-transform 0.5s;
transition: transform 0.5s;
}
#jsxc_buddylist .jsxc_control:hover:after {
color: #fff;
opacity: 1.0;
}
#jsxc_buddylist li.jsxc_expand .jsxc_control:after {
/* content: '▴'; */
-ms-transform:rotate(180deg); /* IE 9 */
-webkit-transform:rotate(180deg);
transform:rotate(180deg);
}
#jsxc_buddylist .jsxc_options {
height: 20px;
float: left;
border-radius:2px;
background-color: rgba(150, 150, 150, 0.5);
}
#jsxc_buddylist .jsxc_options > div {
height: 20px;
width: 20px;
float: left;
margin-right:0px 1px;
background-repeat: no-repeat;
background-position: center center;
opacity: 0.6;
cursor: pointer;
}
#jsxc_buddylist .jsxc_options > div:hover {
opacity: 1;
}
#jsxc_buddylist .jsxc_chaticon {
background-image: url('img/speech_balloon_white.svg');
background-size: 15px 15px;
}
#jsxc_buddylist .jsxc_videoicon {
background-image: url('img/camera_icon_white.svg');
background-size: 13px 13px;
}
#jsxc_buddylist .jsxc_vcardicon {
font-size: 15px;
line-height: 20px;
text-align: center;
color: #fff;
font-weight: bold;
font-family: serif;
}
ul#jsxc_buddylist li:hover {
}
ul#jsxc_buddylist .jsxc_oneway {
opacity: 0.7;
}
.jsxc_oneway .jsxc_avatar {
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: grayscale(100%);
}
ul#jsxc_buddylist .jsxc_right {
float:left;
}
ul#jsxc_buddylist .jsxc_right {
float: right;
margin-right: 6px;
}
ul#jsxc_buddylist .jsxc_right div {
font-weight: bold;
text-align: center;
font-size: 13px;
line-height: 20px;
color: #fff;
}
ul#jsxc_buddylist li[data-type!="chat"] .jsxc_right {
display: none;
}
ul#jsxc_buddylist .jsxc_right div:hover {
opacity: 1.0;
}
ul#jsxc_buddylist .jsxc_rename {
}
ul#jsxc_buddylist .jsxc_delete {
}
#jsxc_roster .jsxc_avatar {
position: relative;
cursor: pointer;
}
#jsxc_roster .jsxc_avatar img {
cursor: pointer;
}
div#jsxc_toggleRoster {
width: 14px;
height: 100%;
position: absolute;
left: -14px !important;
top: 0px;
z-index: 110;
background-color: transparent;
cursor: pointer;
}
#jsxc_toggleRoster:hover {
background-color: #a4a4a4;
opacity: 0.5;
}
/*############################
*###### Window List #########
*############################*/
div#jsxc_windowList {
position: fixed;
bottom: 0px;
right: 0px;
width: 100%;
z-index: 50;
}
div#jsxc_windowList>ul {
list-style: none;
padding: 0px;
margin: 0px;
padding-right: 210px;
height: 30px;
overflow: visible;
}
div#jsxc_windowList>ul>li {
padding: 0px;
margin: 0px;
display: block;
float: right;
width: 250px;
background-color: #282323;
height: 30px;
position: relative;
overflow: visible;
margin-right: 5px;
cursor: pointer;
}
div#jsxc_windowList>ul>li.jsxc_min {
width: 200px;
}
/*############################
*######### Window ###########
*############################*/
div.jsxc_bar {
background-color: #282323;
cursor: pointer;
height: 30px;
line-height: 26px;
padding: 2px;
color: #939393;
width: 100%;
box-sizing: border-box;
overflow: hidden;
}
div.jsxc_cycle {
position: absolute;
bottom: 9px;
right: 5px;
height: 12px;
width: 12px;
border-radius: 6px;
}
div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_name {
font-style: italic;
}
div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_cycle {
background-color: orange;
}
/** Contains text area */
div.jsxc_window {
position: absolute;
bottom: 0px;
left: 0px;
right: 0px;
height: auto;
background-color: #A4A4A4;
z-index: 80;
cursor: default;
}
div.jsxc_window .jsxc_emoticons {
height: 30px;
width: 30px;
position: absolute;
top: 240px;
right: 0px;
cursor: pointer;
}
div.jsxc_window .jsxc_emoticons:after {
content: ' ';
background-image: url('img/smiley.png');
background-position: center center;
background-repeat: no-repeat;
height: 30px;
width: 30px;
opacity: 0.3;
position: absolute;
top: 0px;
left: 0px;
}
div.jsxc_window .jsxc_emoticons:hover:after {
opacity: 0.5;
}
div.jsxc_window .jsxc_emoticons ul {
display: none;
position: absolute;
bottom: 33px;
right: 3px;
width: 210px;
background-color: rgba(40, 35, 35, 0.8);
padding: 3px;
border-radius: 3px;
z-index: 200;
}
div.jsxc_window .jsxc_emoticons ul:after {
content: '';
position: absolute;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 6px solid rgba(40, 35, 35, 0.8);
display: block;
width: 0;
z-index: 1;
right: 6px;
bottom: -6px;
}
div.jsxc_window .jsxc_emoticons li {
float: right;
cursor: pointer;
}
div.jsxc_window .jsxc_emoticons img {
cursor: pointer;
border-radius: 3px;
}
div.jsxc_window .jsxc_emoticons img:hover {
background-color: rgba(255, 255, 255, 0.8);
}
/** groups elements, which will be hidden, if the window is minimized. */
.jsxc_window .jsxc_fade {
position: relative;
}
.jsxc_window .jsxc_gradient {
position: absolute;
top: 0px;
left: 0px;
right: 0px;
height: 15px;
z-index: 100;
background: -moz-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(164,
164, 164, 1)), color-stop(100%, rgba(40, 35, 35, 0)));
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* IE10+ */
background: linear-gradient(to bottom, #a4a4a4 0%, rgba(40, 35, 35, 0)
100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4a4a4',
endColorstr='#00282323', GradientType=0); /* IE6-9 */
}
div.jsxc_window .jsxc_avatar {
margin-top: 1px;
}
div.jsxc_window .jsxc_textarea {
width: 100%;
height: 100%;
overflow: hidden;
padding: 3px;
}
div.jsxc_window .slimScrollDiv {
margin: 0px 0px 6px 0px;
}
div.jsxc_chatmessage {
margin: 3px;
padding: 4px;
padding-right: 10px;
max-width: 76%;
word-wrap: break-word;
background-color: #fff;
position: relative;
outline: none;
clear: both;
}
div.jsxc_chatmessage a {
color: blue;
text-decoration: underline;
}
div.jsxc_chatmessage img {
width: 19px;
height: 19px;
}
/** incoming message */
div.jsxc_in {
float: left;
position: relative;
margin-left: 10px;
background: #f1f7fd;
border: solid 1px #a6b8c9;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
div.jsxc_in:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 6px 5px 0;
border-color: transparent #f1f7fd;
display: block;
width: 0;
z-index: 1;
left: -6px;
bottom: 10px;
}
div.jsxc_out.jsxc_received:before {
content: '✓';
position: absolute;
bottom: 2px;
right: 2px;
font-size: 12px;
line-height: 12px;
color: green;
}
/** outgoing message */
div.jsxc_out {
float: right;
position: relative;
margin-right: 10px;
background: #e6ffd1;
border: solid 1px #b4d89f;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
div.jsxc_out:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 0 5px 6px;
border-color: transparent #e6ffd1;
display: block;
width: 0;
z-index: 1;
right: -6px;
bottom: 10px;
}
/** system message */
div.jsxc_sys {
width: auto;
max-width: none;
padding-right: 4px;
box-sizing: border-box;
margin-right: 3px;
border-radius: 3px;
}
.jsxc_window input.jsxc_textinput {
width: 100%;
height: 30px;
margin: 0px;
padding: 3px;
padding-right: 40px;
outline: none;
border-radius: 0px;
box-sizing: border-box;
text-align: right;
}
.jsxc_window ::-webkit-input-placeholder {
color: #000;
opacity: 0.3;
}
.jsxc_window ::-moz-placeholder {
color: #000;
opacity: 0.3;
} /* firefox 19+ */
.jsxc_window :-ms-input-placeholder {
color: rgba(0, 0, 0, 0.4);
} /* ie */
.jsxc_window input:-moz-placeholder {
color: #000;
opacity: 0.3;
}
div.jsxc_window .jsxc_tools {
height: 26px;
float: right;
}
.jsxc_min .jsxc_tools {
display: none;
}
div.jsxc_window .jsxc_tools > div {
width: 17px;
height: 26px;
display: block;
float: left;
color: #939393;
font-family: Arial;
line-height: 26px;
cursor: pointer;
text-align: center;
}
div.jsxc_settings {
background-image: url('img/gear_grey.svg');
background-size: 15px 15px;
background-repeat: no-repeat;
background-position: center center;
overflow: visible;
}
div.jsxc_settings:hover,div.jsxc_settings.hover {
background-image: url('img/gear_white.svg');
}
div.jsxc_settings ul {
list-style: none;
padding: 0px;
margin: 0px;
position: absolute;
top: 30px;
left: 0px;
box-shadow: 0px 5px 5px -5px #000;
z-index: 110;
overflow: visible;
background-color: #282323;
display: none;
}
div.jsxc_settings li {
width: 170px;
margin-left: 20px;
padding-left: 10px;
height: 30px;
line-height: 30px;
text-align: left;
}
div.jsxc_settings li:first-child {
border-top: 1px solid #ccc;
}
div.jsxc_settings li:hover:not(.jsxc_disabled ){
color: #fff;
background-color: #3F8FBA;
}
div.jsxc_settings li.jsxc_disabled {
color: #595959;
cursor: default;
}
div.jsxc_transfer {
background-image: url('img/padlock_open_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 12px 12px;
}
div.jsxc_transfer:hover {
background-image: url('img/padlock_open_white.svg');
}
div.jsxc_transfer.jsxc_fin {
background-image: url('img/padlock_close_grey.svg');
}
div.jsxc_transfer.jsxc_enc {
background-image: url('img/padlock_close_orange.svg');
}
div.jsxc_transfer.jsxc_enc.jsxc_trust {
background-image: url('img/padlock_close_green.svg');
}
.jsxc_window .jsxc_close {
font-size: 20px;
}
.jsxc_window .jsxc_close:hover {
color: #FAFAFA;
}
#colorbox,#cboxWrapper {
outline: none;
}
/*############################
*######### Other ############
*############################*/
ul.jsxc_vCard {
min-width: 400px;
}
ul.jsxc_vCard ul {
margin-left: 20px;
}
ul.jsxc_vCard li {
cursor: default !important;
}
ul.jsxc_vCard strong {
}
img.jsxc_vCard {
float: right;
max-width: 200px;
max-height: 200px;
}
-5092
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
-257
Ver Arquivo
@@ -1,257 +0,0 @@
/* global jsxc, Strophe, jQuery */
jsxc.l10n.en.Join_chat = 'Join chat';
jsxc.l10n.de.Join_chat = 'Chat beitreten';
jsxc.l10n.en.Join = 'Join';
jsxc.l10n.de.Join = 'Beitreten';
jsxc.gui.template.joinChat = '<h3>%%Join_chat%%</h3>\
<p class=".jsxc_explanation">Blub</p>\
<p><label for="jsxc_room">%%Room%%:</label>\
<input type="text" name="room" id="jsxc_room" required="required" /></p>\
<p><label for="jsxc_nickname">%%Nickname%%:</label>\
<input type="text" name="nickname" id="jsxc_nickname" /></p>\
<p><label for="jsxc_password">%%Password%%:</label>\
<input type="text" name="password" id="jsxc_password" /></p>\
<p class="jsxc_right">\
<a href="#" class="button jsxc_close">%%Close%%</a> <a href="#" class="button creation jsxc_join">%%Join%%</a>\
</p>';
(function($) {
"use strict";
jsxc.muc = {
conn: null,
initMenu: function() {
var li = $('<li>').attr('class', 'jsxc_joinChat').text(jsxc.translate('%%Join_chat%%'));
li.click(jsxc.muc.showJoinChat);
$('#jsxc_menu ul').append(li);
},
showJoinChat: function() {
var dialog = jsxc.gui.dialog.open(jsxc.gui.template.get('joinChat'));
dialog.find('.jsxc_join').click(function() {
var room = $('#jsxc_room').val() || null;
var nickname = $('#jsxc_nickname').val() || Strophe.getNodeFromJid(jsxc.xmpp.conn.jid);
var password = $('#jsxc_password').val() || null;
if (!room) {
$('#jsxc_room').addClass('jsxc_invalid').keyup(function() {
if ($(this).val()) {
$(this).removeClass('jsxc_invalid');
}
});
return false;
}
if (!room.match(/@(.*)$/)) {
room += '@' + 'conference.localhost'; // @TODO: replace
}
var cid = jsxc.jidToCid(room);
if (jsxc.xmpp.conn.muc.roomNames.indexOf(room) < 0) {
jsxc.xmpp.conn.muc.join(room, nickname, null, null, null, password);
jsxc.storage.setUserItem('roomNames', jsxc.xmpp.conn.muc.roomNames);
var own = jsxc.storage.getUserItem('own') || [];
own.push(jsxc.xmpp.conn.muc.test_append_nick(room, nickname));
jsxc.storage.setUserItem('own', own);
jsxc.storage.setUserItem('buddy_' + cid, {
jid: room,
name: room,
type: 'groupchat'
});
var bl = jsxc.storage.getUserItem('buddylist');
bl.push(cid);
jsxc.storage.setUserItem('buddylist', bl);
jsxc.gui.roster.add(cid);
}
jsxc.gui.window.open(cid);
jsxc.gui.dialog.close();
});
dialog.find('input').keydown(function(ev) {
if (ev.which !== 13) {
return;
}
dialog.find('.jsxc_join').click();
});
},
initWindow: function(event, win) {
var self = jsxc.muc;
var data = win.data();
var cid = jsxc.jidToCid(data.jid);
var sdata = jsxc.storage.getUserItem('window_' + cid);
if (!jsxc.xmpp.conn) {
$(document).one('connectionReady.jsxc', function() {
self.initWindow(null, win);
});
return;
}
if (self.conn.muc.roomNames.indexOf(data.jid) < 0) {
return;
}
win.addClass('jsxc_groupchat');
win.find('.jsxc_tools > .jsxc_transfer').after('<div class="jsxc_members">M</div>');
var ml = $('<div class="jsxc_memberlist"><ul></ul></div>');
win.append(ml);
ml.find('ul').slimScroll({
height: '255px',
distance: '3px'
});
var member = jsxc.storage.getUserItem('member_' + cid) || {};
$.each(member, function(index, val) {
self.insertMember(cid, index, val.jid, val.status);
});
if (sdata.minimize_ml || sdata.minimize_ml === null) {
self.hideMemberList(win, 200, true);
} else {
setTimeout(function() {
self.showMemberList(win, 200);
}, 500);
}
win.on('show', function() {
ml.slideDown();
ml.css('display', 'block');
});
win.on('hide', function() {
ml.slideUp();
});
win.trigger((sdata.minimize) ? 'hide' : 'show');
},
showMemberList: function(win, originalWidth, noani) {
if (!noani) {
win.animate({
width: (originalWidth + 200) + 'px'
}).css('overflow', 'visible');
}
jsxc.storage
.updateUserItem('window_' + jsxc.jidToCid(win.data().jid), 'minimize_ml', false);
win.find('.jsxc_members').off('click').one('click', function() {
jsxc.muc.hideMemberList(win, originalWidth);
});
},
hideMemberList: function(win, originalWidth, noani) {
if (!noani) {
win.animate({
width: originalWidth + 'px'
}).css('overflow', 'visible');
}
jsxc.storage
.updateUserItem('window_' + jsxc.jidToCid(win.data().jid), 'minimize_ml', true);
win.find('.jsxc_members').off('click').one('click', function() {
jsxc.muc.showMemberList(win, originalWidth);
});
},
onPresence: function(event, from, status, presence) {
var self = jsxc.muc;
var room = Strophe.getBareJidFromJid(from);
var cid = jsxc.jidToCid(room);
var nickname = Strophe.getResourceFromJid(from);
var xdata = $(presence).find('x[xmlns^="' + Strophe.NS.MUC + '"]');
if (self.conn.muc.roomNames.indexOf(room) < 0 || xdata.length === 0) {
return;
}
var jid = xdata.find('item').attr('jid');
var member = jsxc.storage.getUserItem('member_' + cid) || {};
if (status === 0) {
delete member[nickname];
self.removeMember(cid, nickname);
jsxc.gui.window.postMessage(cid, 'sys', nickname + ' left the building.');
} else {
if (!member[nickname]) {
jsxc.gui.window.postMessage(cid, 'sys', nickname + ' entered the room.');
}
member[nickname] = {
jid: jid,
status: status,
roomJid: from
};
self.insertMember(cid, nickname, jid, status);
}
jsxc.storage.setUserItem('member_' + cid, member);
return true;
},
insertMember: function(cid, nickname, jid, status) {
var win = jsxc.gui.getWindow(cid);
var m = win.find('.jsxc_memberlist li[data-nickname="' + nickname + '"]');
if (m.length === 0) {
m = $('<li title="' + jid + '">' + nickname + '</li>');
m.attr('data-nickname', nickname);
win.find('.jsxc_memberlist ul').append(m);
}
if (status !== null) {
m.removeClass('jsxc_' + jsxc.status.join(' jsxc_'))
.addClass('jsxc_' + jsxc.status[status]);
}
},
removeMember: function(cid, nickname) {
var win = jsxc.gui.getWindow(cid);
var m = win.find('.jsxc_memberlist li[data-nickname="' + nickname + '"]');
if (m.length > 0) {
m.remove();
}
},
onGroupchatMessage: function(message) {
var from = $(message).attr('from');
var body = $(message).find('body:first').text();
body = Strophe.getResourceFromJid(from) + ': ' + body;
$(message).find('body:first').text(body);
jsxc.xmpp.onMessage($(message)[0]);
return true;
},
onNormalMessage: function() {
return true;
}
};
$(document).one('ready.roster.jsxc', jsxc.muc.initMenu);
$(document).one('attached', function() {
var self = jsxc.muc;
self.conn = jsxc.xmpp.conn;
self.conn.addHandler(self.onGroupchatMessage, null, 'message', 'groupchat');
self.conn.addHandler(self.onNormalMessage, null, 'message', 'normal');
self.conn.muc.roomNames = jsxc.storage.getUserItem('roomNames') || [];
});
$(document).one('connected', function() {
jsxc.storage.removeUserItem('roomNames');
});
$(document).on('init.window.jsxc', jsxc.muc.initWindow);
$(document).on('presence.jsxc', jsxc.muc.onPresence);
$(function() {
});
}(jQuery));
-173
Ver Arquivo
@@ -1,173 +0,0 @@
.jsxc_videoContainer {
width: 640px;
height: 480px;
position: relative;
}
.jsxc_remotevideo {
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
z-index: 9000;
background-color: grey;
}
.jsxc_localvideo {
width: 160px;
height: 120px;
position: absolute;
right: 10px;
bottom: 10px;
z-index: 9990;
background-color: black;
cursor: pointer;
}
.jsxc_webrtc .jsxc_status {
z-index: 9999;
border-radius: 20px;
display: none;
position: absolute;
top: 30px;
left: 50%;
background-color: lightgrey;
background-color: rgba(0, 0, 0, 0.5);
color: white;
padding: 15px;
font-weight: bold;
text-align: center;
}
div:-moz-full-screen {
width: 100%;
height: 100%;
background-color: black;
}
div:-ms-full-screen {
width: 100%;
height: 100%;
background-color: black;
}
div:-webkit-full-screen {
width: 100%;
height: 100%;
background-color: black;
}
div:fullscreen {
width: 100%;
height: 100%;
background-color: black;
}
div:-moz-full-screen.jsxc_localvideo {
border: 1px solid white;
}
div:-webkit-full-screen.jsxc_localvideo {
border: 1px solid white;
}
div:-ms-full-screen.jsxc_localvideo {
border: 1px solid white;
}
div:fullscreen.jsxc_localvideo {
border: 1px solid white;
}
.jsxc_fullscreen.jsxc_localvideo {
border: 1px solid white;
}
.jsxc_multi>div {
display: none;
}
.jsxc_snapshotbar {
width: 100%;
display: none;
}
.jsxc_snapshotbar img {
height: 50px;
}
.jsxc_buttongroup {
display: inline;
}
.jsxc_buttongroup button:first-child {
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
margin-right: 0px;
}
.jsxc_buttongroup button:last-child {
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
margin-left: 0px;
}
.jsxc_chatarea {
position: relative;
height: 270px;
display: none;
background-color: #A4A4A4;
}
.jsxc_chatarea > ul {
position: absolute;
left: 50%;
top: 0px;
width: 250px;
height: 270px;
list-style: none;
padding: 0px;
margin: 0px 0px 0px -100px;
}
.jsxc_chatarea .jsxc_settings {
display: none;
}
.jsxc_chatarea .jsxc_close {
display: none;
}
.jsxc_chatarea .jsxc_bar {
display: none;
}
.jsxc_chatarea .jsxc_window {
bottom: 0px;
box-shadow: none;
}
.jsxc_videoSuitable .jsxc_name {
font-style: italic;
}
div.jsxc_video {
background-image: url('img/camera_icon_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 15px 15px;
}
div.jsxc_video:not(.jsxc_disabled):hover, #jsxc_buddylist .jsxc_options .jsxc_video {
background-image: url('img/camera_icon_white.svg');
}
div.jsxc_video.jsxc_disabled {
opacity: 0.5;
cursor: default !important;
}
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
opacity: 0.2;
}
Submódulo
+1
Submodule lib/i18next added at e51cad3c82
+186 -73
Ver Arquivo
@@ -2,35 +2,81 @@
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*
* Version: 1.0.0
*
* Version: 1.3.3 + pr#94
*
*/
(function($) {
jQuery.fn.extend({
$.fn.extend({
slimScroll: function(options) {
var defaults = {
wheelStep : 20,
// width in pixels of the visible scroll area
width : 'auto',
// height in pixels of the visible scroll area
height : '250px',
// width in pixels of the scrollbar and rail
size : '7px',
// scrollbar color, accepts any hex/color value
color: '#000',
// scrollbar position - left/right
position : 'right',
// distance in pixels between the side edge and the scrollbar
distance : '1px',
// default scroll position on load - top / bottom / $('selector')
start : 'top',
// sets scrollbar opacity
opacity : .4,
// enables always-on mode for the scrollbar
alwaysVisible : false,
disableFadeOut: false,
// check if we should hide the scrollbar when user is hovering over
disableFadeOut : false,
// sets visibility of the rail
railVisible : false,
// sets rail color
railColor : '#333',
railOpacity : '0.2',
// sets rail opacity
railOpacity : .2,
// whether we should use jQuery UI Draggable to enable bar dragging
railDraggable : true,
// defautlt CSS class of the slimscroll rail
railClass : 'slimScrollRail',
// defautlt CSS class of the slimscroll bar
barClass : 'slimScrollBar',
// defautlt CSS class of the slimscroll wrapper
wrapperClass : 'slimScrollDiv',
// check if mousewheel should scroll the window if we reach top/bottom
allowPageScroll : false,
scroll : 0,
touchScrollStep : 200
// scroll amount applied to each mouse wheel step
wheelStep : 20,
// scroll amount applied when user is using gestures
touchScrollStep : 200,
// sets border radius
borderRadius: '7px',
// sets border radius of the rail
railBorderRadius : '7px'
};
var o = $.extend(defaults, options);
@@ -38,7 +84,7 @@
// do it for every element that matches selector
this.each(function(){
var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
barHeight, percentScroll, lastScroll,
divS = '<div></div>',
minBarHeight = 30,
@@ -48,20 +94,33 @@
var me = $(this);
// ensure we are not binding it again
if (me.parent().hasClass('slimScrollDiv'))
{
if (me.parent().hasClass(o.wrapperClass))
{
// start from last bar position
var offset = me.scrollTop();
// find bar and rail
bar = me.parent().find('.slimScrollBar');
rail = me.parent().find('.slimScrollRail');
bar = me.parent().find('.' + o.barClass);
rail = me.parent().find('.' + o.railClass);
getBarHeight();
// check if we should scroll existing instance
if (options)
if ($.isPlainObject(options))
{
// Pass height: auto to an existing slimscroll object to force a resize after contents have changed
if ( 'height' in options && options.height == 'auto' ) {
me.parent().css('height', 'auto');
me.css('height', 'auto');
var height = me.parent().parent().height();
me.parent().css('height', height);
me.css('height', height);
} else if ('height' in options) {
var h = options.height;
me.parent().css('height', h);
me.css('height', h);
}
if ('scrollTo' in options)
{
// jump to a static point
@@ -72,6 +131,14 @@
// jump by value pixels
offset += parseInt(o.scrollBy);
}
else if ('destroy' in options)
{
// remove slimscroll elements
bar.remove();
rail.remove();
me.unwrap();
return;
}
// scroll content by the given offset
scrollContent(offset, false, true);
@@ -79,9 +146,16 @@
return;
}
else if ($.isPlainObject(options))
{
if ('destroy' in options)
{
return;
}
}
// optionally set height to the parent's height
o.height = (o.height == 'auto') ? me.parent().innerHeight() : o.height;
o.height = (o.height == 'auto') ? me.parent().height() : o.height;
// wrap content
var wrapper = $(divS)
@@ -101,7 +175,7 @@
});
// create scrollbar rail
var rail = $(divS)
var rail = $(divS)
.addClass(o.railClass)
.css({
width: o.size,
@@ -109,7 +183,7 @@
position: 'absolute',
top: 0,
display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none',
'border-radius': o.size,
'border-radius': o.railBorderRadius,
background: o.railColor,
opacity: o.railOpacity,
zIndex: 90
@@ -125,10 +199,10 @@
top: 0,
opacity: o.opacity,
display: o.alwaysVisible ? 'block' : 'none',
'border-radius' : o.size,
BorderRadius: o.size,
MozBorderRadius: o.size,
WebkitBorderRadius: o.size,
'border-radius' : o.borderRadius,
BorderRadius: o.borderRadius,
MozBorderRadius: o.borderRadius,
WebkitBorderRadius: o.borderRadius,
zIndex: 99
});
@@ -144,18 +218,31 @@
me.parent().append(bar);
me.parent().append(rail);
// make it draggable
bar.draggable({
axis: 'y',
containment: 'parent',
start: function() { isDragg = true; },
stop: function() { isDragg = false; hideBar(); },
drag: function(e)
{
// scroll content
scrollContent(0, $(this).position().top, false);
}
});
// make it draggable and no longer dependent on the jqueryUI
if (o.railDraggable){
bar.bind("mousedown", function(e) {
var $doc = $(document);
isDragg = true;
t = parseFloat(bar.css('top'));
pageY = e.pageY;
$doc.bind("mousemove.slimscroll", function(e){
currTop = t + e.pageY - pageY;
bar.css('top', currTop);
scrollContent(0, bar.position().top, false);// scroll content
});
$doc.bind("mouseup.slimscroll", function(e) {
isDragg = false;hideBar();
$doc.unbind('.slimscroll');
});
return false;
}).bind("selectstart.slimscroll", function(e){
e.stopPropagation();
e.preventDefault();
return false;
});
}
// on rail over
rail.hover(function(){
@@ -191,18 +278,44 @@
});
me.bind('touchmove', function(e){
// prevent scrolling the page
e.originalEvent.preventDefault();
// prevent scrolling the page if necessary
if(!releaseScroll)
{
e.originalEvent.preventDefault();
}
if (e.originalEvent.touches.length)
{
// see how far user swiped
var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep;
// scroll content
scrollContent(diff, true);
touchDif = e.originalEvent.touches[0].pageY;
}
});
var _onWheel = function(e)
// set up initial height
getBarHeight();
// check start position
if (o.start === 'bottom')
{
// scroll content to bottom
bar.css({ top: me.outerHeight() - bar.outerHeight() });
scrollContent(0, true);
}
else if (o.start !== 'top')
{
// assume jQuery selector
scrollContent($(o.start).position().top, null, true);
// make sure bar stays hidden
if (!o.alwaysVisible) { bar.hide(); }
}
// attach scroll events
attachWheel();
function _onWheel(e)
{
// use mouse wheel only when mouse is over
if (!isOverPanel) { return; }
@@ -213,8 +326,11 @@
if (e.wheelDelta) { delta = -e.wheelDelta/120; }
if (e.detail) { delta = e.detail / 3; }
// scroll content
scrollContent(delta, true);
var target = e.target || e.srcTarget || e.srcElement;
if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {
// scroll content
scrollContent(delta, true);
}
// stop window scroll
if (e.preventDefault && !releaseScroll) { e.preventDefault(); }
@@ -223,16 +339,24 @@
function scrollContent(y, isWheel, isJump)
{
releaseScroll = false;
var delta = y;
var maxTop = me.outerHeight() - bar.outerHeight();
if (isWheel)
{
// move bar with mouse wheel
delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight();
// move bar, make sure it doesn't go out
// move bar, make sure it doesn't go out
delta = Math.min(Math.max(delta, 0), maxTop);
// if scrolling down, make sure a fractional change to the
// scroll position isn't rounded away when the scrollbar's CSS is set
// this flooring of delta would happened automatically when
// bar.css is set below, but we floor here for clarity
delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta);
// scroll the scrollbar
bar.css({ top: delta + 'px' });
}
@@ -245,7 +369,6 @@
{
delta = y;
var offsetTop = delta / me[0].scrollHeight * me.outerHeight();
offsetTop = Math.min(Math.max(offsetTop, 0), maxTop);
bar.css({ top: offsetTop + 'px' });
}
@@ -253,6 +376,9 @@
// scroll content
me.scrollTop(delta);
// fire scrolling event
me.trigger('slimscrolling', ~~delta);
// ensure bar is visible
showBar();
@@ -260,31 +386,29 @@
hideBar();
}
var attachWheel = function()
function attachWheel()
{
if (window.addEventListener)
{
this.addEventListener('DOMMouseScroll', _onWheel, false );
this.addEventListener('mousewheel', _onWheel, false );
}
}
else
{
document.attachEvent("onmousewheel", _onWheel)
}
}
// attach scroll events
attachWheel();
function getBarHeight()
{
// calculate scrollbar height and make sure it is not too small
barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);
bar.css({ height: barHeight + 'px' });
}
// set up initial height
getBarHeight();
// hide scrollbar if content is not long enough
var display = barHeight == me.outerHeight() ? 'none' : 'block';
bar.css({ display: display });
}
function showBar()
{
@@ -293,18 +417,22 @@
clearTimeout(queueHide);
// when bar reached top or bottom
if (percentScroll == ~~ percentScroll)
if (percentScroll == ~~percentScroll)
{
//release wheel
//release wheel
releaseScroll = o.allowPageScroll;
// publish approporiate event
if (lastScroll != percentScroll)
{
var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
me.trigger('slimscroll', msg);
}
}
else
{
releaseScroll = false;
}
lastScroll = percentScroll;
// show only when required
@@ -324,7 +452,7 @@
{
queueHide = setTimeout(function(){
if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg)
{
{
bar.fadeOut('slow');
rail.fadeOut('slow');
}
@@ -332,30 +460,15 @@
}
}
// check start position
if (o.start == 'bottom')
{
// scroll content to bottom
bar.css({ top: me.outerHeight() - bar.outerHeight() });
scrollContent(0, true);
}
else if (typeof o.start == 'object')
{
// scroll content
scrollContent($(o.start).position().top, null, true);
// make sure bar stays hidden
if (!o.alwaysVisible) { bar.hide(); }
}
});
// maintain chainability
return this;
}
});
jQuery.fn.extend({
slimscroll: jQuery.fn.slimScroll
$.fn.extend({
slimscroll: $.fn.slimScroll
});
})(jQuery);
+1 -1
Submodule lib/otr updated: 7650bb3f50...5831c5d49a
+11 -3
Ver Arquivo
@@ -7,6 +7,8 @@
*
* Authors: - Michael Weibel <michael.weibel@gmail.com> - Klaus Herberth <klaus@jsxc.org>
* Copyright: - Michael Weibel <michael.weibel@gmail.com>
*
* @license MIT
*/
(function($) {
@@ -189,13 +191,18 @@
* 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');
var query = stanza.querySelector('query');
var from = stanza.getAttribute('from');
var node = query.getAttribute('node');
var ver = (node)? node.split('#')[1] : this._jidVerIndex[from]; //fix open prosody issue
if (!this._knownCapabilities[ver]) {
var childNodes = query.childNodes, childNodesLen = childNodes.length;
this._knownCapabilities[ver] = {
features: [],
identities: []
};
for (var i = 0; i < childNodesLen; i++) {
var node = childNodes[i];
if (node.nodeName == 'feature') {
@@ -203,10 +210,11 @@
} else if (node.nodeName == 'identity') {
this._knownCapabilities[ver]['identities'].push(this._attributesToJsObject(node.attributes));
} else {
if (_knownCapabilities[ver][node.nodeName])
_knownCapabilities[ver][node.nodeName] = [];
if (typeof this._knownCapabilities[ver][node.nodeName] === 'undefined')
this._knownCapabilities[ver][node.nodeName] = [];
this._knownCapabilities[ver][node.nodeName].push(this._attributesToJsObject(node.attributes));
}
}
this._jidVerIndex[from] = ver;
} else if (!this._jidVerIndex[from] || !this._jidVerIndex[from] !== ver) {
+7 -6
Ver Arquivo
@@ -3,9 +3,10 @@
* Klaus Herberth, 2014
*/
// This code was written by Tyler Akins and has been placed in the
// public domain. It would be nice if you left this header intact.
// Base64 code from Tyler Akins -- http://rumkin.com
/*! This code was written by Tyler Akins and has been placed in the
public domain. It would be nice if you left this header intact.
Base64 code from Tyler Akins -- http://rumkin.com
*/
var Base64 = (function () {
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
@@ -84,7 +85,7 @@ var Base64 = (function () {
return obj;
})();
/*
/*!
* 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.
@@ -261,7 +262,7 @@ function binb2b64(binarray)
return str;
}
/*
/*!
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
@@ -469,7 +470,7 @@ var MD5 = (function () {
return obj;
})();
/*
/*!
This program is distributed under the terms of the MIT license.
Please see the LICENSE file for details.
+172
Ver Arquivo
@@ -0,0 +1,172 @@
{
"translation": {
"Logging_in": "Login läuft…",
"your_connection_is_unencrypted": "Deine Verbindung ist Unverschlüsselt.",
"your_connection_is_encrypted": "Deine Verbindung ist verschlüsselt.",
"your_buddy_closed_the_private_connection": "Dein Kontakt hat die private Verbindung getrennt.",
"start_private": "Privat starten",
"close_private": "Privat abbrechen",
"your_buddy_is_verificated": "Dein Kontakt ist verifiziert.",
"you_have_only_a_subscription_in_one_way": "Der Kontaktstatus ist einseitig.",
"authentication_query_sent": "Authentifizierungsanfrage gesendet.",
"your_message_wasnt_send_please_end_your_private_conversation": "Deine Nachricht wurde nicht gesendet. Bitte beende die private Konversation.",
"unencrypted_message_received": "Unverschlüsselte Nachricht erhalten.",
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Deine Nachricht wurde nicht gesandt, da der Kontaktstatus einseitig ist.",
"not_available": "Nicht verfügbar.",
"no_connection": "Keine Verbindung.",
"relogin": "Neu anmelden.",
"trying_to_start_private_conversation": "Versuche private Konversation zu starten.",
"Verified": "Verifiziert",
"Unverified": "Unverifiziert",
"private_conversation_started": "Private Konversation gestartet.",
"private_conversation_aborted": "Private Konversation abgebrochen.",
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Dein Kontakt hat die private Konversation beendet. Das solltest du auch tun!",
"conversation_is_now_verified": "Konversation ist jetzt verifiziert",
"authentication_failed": "Authentifizierung fehlgeschlagen.",
"your_buddy_is_attempting_to_determine_": "Dein Kontakt versucht herauszufinden ob er wirklich mit dir redet.",
"to_authenticate_to_your_buddy": "Um dich gegenüber deinem Kontakt zu verifizieren ",
"enter_the_answer_and_click_answer": "gib die Antwort ein und klick auf Antworten.",
"enter_the_secret": "gib das Geheimnis ein.",
"Creating_your_private_key_": "Wir werden jetzt deinen privaten Schlüssel generieren. Das kann einige Zeit in Anspruch nehmen.",
"Authenticating_a_buddy_helps_": "Einen Kontakt zu authentifizieren hilft sicher zustellen, dass die Person mit der du sprichst auch die ist die sie sagt.",
"How_do_you_want_to_authenticate_your_buddy": "Wie willst du {{bid_name}} (<b>{{bid_jid}}</b>) authentifizieren?",
"Select_method": "Wähle...",
"Manual": "Manual",
"Question": "Frage",
"Secret": "Geheimnis",
"To_verify_the_fingerprint_": "Um den Fingerprint zu verifizieren kontaktiere dein Kontakt über einen anderen Kommunikationsweg. Zum Beispiel per Telefonanruf.",
"Your_fingerprint": "Dein Fingerprint",
"Buddy_fingerprint": "Sein/Ihr Fingerprint",
"Close": "Schließen",
"Compared": "Verglichen",
"To_authenticate_using_a_question_": "Um die Authentifizierung per Frage durchzuführen, wähle eine Frage bei welcher nur dein Kontakt die Antwort weiß.",
"Ask": "Frage",
"To_authenticate_pick_a_secret_": "Um deinen Kontakt zu authentifizieren, wähle ein Geheimnis welches nur deinem Kontakt und dir bekannt ist.",
"Compare": "Vergleiche",
"Fingerprints": "Fingerprints",
"Authentication": "Authentifizierung",
"Message": "Nachricht",
"Add_buddy": "Kontakt hinzufügen",
"rename_buddy": "Kontakt umbenennen",
"delete_buddy": "Kontakt löschen",
"Login": "Anmeldung",
"Username": "Benutzername",
"Password": "Passwort",
"Cancel": "Abbrechen",
"Connect": "Verbinden",
"Type_in_the_full_username_": "Gib bitte den vollen Benutzernamen und optional ein Alias an.",
"Alias": "Alias",
"Add": "Hinzufügen",
"Subscription_request": "Kontaktanfrage",
"You_have_a_request_from": "Du hast eine Anfrage von",
"Deny": "Ablehnen",
"Approve": "Bestätigen",
"Remove_buddy": "Kontakt entfernen",
"You_are_about_to_remove_": "Du bist gerade dabei {{bid_name}} (<b>{{bid_jid}}</b>) von deiner Kontaktliste zu entfernen. Alle Chats werden geschlossen.",
"Continue_without_chat": "Weiter ohne Chat",
"Please_wait": "Bitte warten",
"Login_failed": "Chat-Anmeldung fehlgeschlagen",
"Sorry_we_cant_authentikate_": "Der Chatserver hat die Anmeldung abgelehnt. Falsches Passwort?",
"Retry": "Zurück",
"clear_history": "Lösche Verlauf",
"New_message_from": "Neue Nachricht von",
"Should_we_notify_you_": "Sollen wir dich in Zukunft über eingehende Nachrichten informieren, auch wenn dieser Tab nicht im Vordergrund ist?",
"Please_accept_": "Bitte klick auf den \"Zulassen\" Button oben.",
"Hide_offline": "Offline ausblenden",
"Show_offline": "Offline einblenden",
"About": "Über",
"dnd": "Beschäftigt",
"Mute": "Ton aus",
"Unmute": "Ton an",
"Subscription": "Bezug",
"both": "beidseitig",
"Status": "Status",
"online": "online",
"chat": "chat",
"away": "abwesend",
"xa": "länger abwesend",
"offline": "offline",
"none": "keine",
"Unknown_instance_tag": "Unbekannter instance tag.",
"Not_one_of_our_latest_keys": "Nicht einer unserer letzten Schlüssel.",
"Received_an_unreadable_encrypted_message": "Eine unlesbare verschlüsselte Nachricht erhalten.",
"Online": "Online",
"Chatty": "Gesprächig",
"Away": "Abwesend",
"Extended_away": "Länger abwesend",
"Offline": "Offline",
"Friendship_request": "Kontaktanfrage",
"Confirm": "Bestätigen",
"Dismiss": "Ablehnen",
"Remove": "Löschen",
"Online_help": "Online Hilfe",
"FN": "Name",
"N": " ",
"FAMILY": "Familienname",
"GIVEN": "Vorname",
"NICKNAME": "Spitzname",
"URL": "URL",
"ADR": "Adresse",
"STREET": "Straße",
"EXTADD": "Zusätzliche Adresse",
"LOCALITY": "Ortschaft",
"REGION": "Region",
"PCODE": "Postleitzahl",
"CTRY": "Land",
"TEL": "Telefon",
"NUMBER": "Nummer",
"EMAIL": "E-Mail",
"USERID": " ",
"ORG": "Organisation",
"ORGNAME": "Name",
"ORGUNIT": "Abteilung",
"TITLE": "Titel",
"ROLE": "Rolle",
"BDAY": "Geburtstag",
"DESC": "Beschreibung",
"PHOTO": " ",
"send_message": "Sende Nachricht",
"get_info": "Benutzerinformationen",
"Settings": "Einstellungen",
"Priority": "Priorität",
"Save": "Speichern",
"User_settings": "Benutzereinstellungen",
"A_fingerprint_": "Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.",
"Your_roster_is_empty_add_a": "Deine Kontaktliste ist leer, füge einen neuen Kontakt ",
"new_buddy": "hinzu",
"is": "ist",
"Login_options": "Anmeldeoptionen",
"BOSH_url": "BOSH url",
"Domain": "Domain",
"Resource": "Ressource",
"On_login": "Beim Anmelden",
"Received_an_unencrypted_message": "Unverschlüsselte Nachricht empfangen",
"Sorry_your_buddy_doesnt_provide_any_information": "Dein Kontakt stellt leider keine Informationen bereit.",
"Info_about": "Info über",
"Authentication_aborted": "Authentifizierung abgebrochen.",
"Authentication_request_received": "Authentifizierunganfrage empfangen.",
"Do_you_want_to_display_them": "Möchtest du sie sehen?",
"Log_in_without_chat": "Anmelden ohne Chat",
"has_come_online": "ist online gekommen",
"Unknown_sender": "Unbekannter Sender",
"You_received_a_message_from_an_unknown_sender": "Du hast eine Nachricht von einem unbekannten Sender erhalten",
"Please_allow_access_to_microphone_and_camera": "Bitte klick auf den \"Zulassen\" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.",
"Incoming_call": "Eingehender Anruf",
"from": "von",
"Do_you_want_to_accept_the_call_from": "Möchtest Du den Anruf annehmen von",
"Reject": "Ablehnen",
"Accept": "Annehmen",
"hang_up": "Auflegen",
"snapshot": "Schnappschuss",
"mute_my_audio": "Mein Ton aus",
"pause_my_video": "Mein Video pausieren",
"fullscreen": "Vollbild",
"Info": "Info",
"Local_IP": "Lokale IP",
"Remote_IP": "Remote IP",
"Local_Fingerprint": "Lokaler Fingerprint",
"Remote_Fingerprint": "Remote Fingerprint",
"Video_call_not_possible": "Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.",
"Start_video_call": "Starte Videoanruf"
}
}
+172
Ver Arquivo
@@ -0,0 +1,172 @@
{
"translation": {
"Logging_in": null,
"your_connection_is_unencrypted": null,
"your_connection_is_encrypted": null,
"your_buddy_closed_the_private_connection": null,
"start_private": null,
"close_private": null,
"your_buddy_is_verificated": null,
"you_have_only_a_subscription_in_one_way": null,
"authentication_query_sent": null,
"your_message_wasnt_send_please_end_your_private_conversation": null,
"unencrypted_message_received": null,
"your_message_wasnt_send_because_you_have_no_valid_subscription": null,
"not_available": null,
"no_connection": null,
"relogin": null,
"trying_to_start_private_conversation": null,
"Verified": null,
"Unverified": null,
"private_conversation_started": null,
"private_conversation_aborted": null,
"your_buddy_closed_the_private_conversation_you_should_do_the_same": null,
"conversation_is_now_verified": null,
"authentication_failed": null,
"your_buddy_is_attempting_to_determine_": null,
"to_authenticate_to_your_buddy": null,
"enter_the_answer_and_click_answer": null,
"enter_the_secret": null,
"Creating_your_private_key_": null,
"Authenticating_a_buddy_helps_": null,
"How_do_you_want_to_authenticate_your_buddy": null,
"Select_method": null,
"Manual": null,
"Question": null,
"Secret": null,
"To_verify_the_fingerprint_": null,
"Your_fingerprint": null,
"Buddy_fingerprint": null,
"Close": null,
"Compared": null,
"To_authenticate_using_a_question_": null,
"Ask": null,
"To_authenticate_pick_a_secret_": null,
"Compare": null,
"Fingerprints": null,
"Authentication": null,
"Message": null,
"Add_buddy": null,
"rename_buddy": null,
"delete_buddy": null,
"Login": null,
"Username": null,
"Password": null,
"Cancel": null,
"Connect": null,
"Type_in_the_full_username_": null,
"Alias": null,
"Add": null,
"Subscription_request": null,
"You_have_a_request_from": null,
"Deny": null,
"Approve": null,
"Remove_buddy": null,
"You_are_about_to_remove_": null,
"Continue_without_chat": null,
"Please_wait": null,
"Login_failed": null,
"Sorry_we_cant_authentikate_": null,
"Retry": null,
"clear_history": null,
"New_message_from": null,
"Should_we_notify_you_": null,
"Please_accept_": null,
"Hide_offline": null,
"Show_offline": null,
"About": null,
"dnd": null,
"Mute": null,
"Unmute": null,
"Subscription": null,
"both": null,
"Status": null,
"online": null,
"chat": null,
"away": null,
"xa": null,
"offline": null,
"none": null,
"Unknown_instance_tag": null,
"Not_one_of_our_latest_keys": null,
"Received_an_unreadable_encrypted_message": null,
"Online": null,
"Chatty": null,
"Away": null,
"Extended_away": null,
"Offline": null,
"Friendship_request": null,
"Confirm": null,
"Dismiss": null,
"Remove": null,
"Online_help": null,
"FN": null,
"N": null,
"FAMILY": null,
"GIVEN": null,
"NICKNAME": null,
"URL": null,
"ADR": null,
"STREET": null,
"EXTADD": null,
"LOCALITY": null,
"REGION": null,
"PCODE": null,
"CTRY": null,
"TEL": null,
"NUMBER": null,
"EMAIL": null,
"USERID": null,
"ORG": null,
"ORGNAME": null,
"ORGUNIT": null,
"TITLE": null,
"ROLE": null,
"BDAY": null,
"DESC": null,
"PHOTO": null,
"send_message": null,
"get_info": null,
"Settings": null,
"Priority": null,
"Save": null,
"User_settings": null,
"A_fingerprint_": null,
"Your_roster_is_empty_add_a": null,
"new_buddy": null,
"is": null,
"Login_options": null,
"BOSH_url": null,
"Domain": null,
"Resource": null,
"On_login": null,
"Received_an_unencrypted_message": null,
"Sorry_your_buddy_doesnt_provide_any_information": null,
"Info_about": null,
"Authentication_aborted": null,
"Authentication_request_received": null,
"Do_you_want_to_display_them": null,
"Log_in_without_chat": null,
"has_come_online": null,
"Unknown_sender": null,
"You_received_a_message_from_an_unknown_sender": null,
"Please_allow_access_to_microphone_and_camera": null,
"Incoming_call": null,
"from": null,
"Do_you_want_to_accept_the_call_from": null,
"Reject": null,
"Accept": null,
"hang_up": null,
"snapshot": null,
"mute_my_audio": null,
"pause_my_video": null,
"fullscreen": null,
"Info": null,
"Local_IP": null,
"Remote_IP": null,
"Local_Fingerprint": null,
"Remote_Fingerprint": null,
"Video_call_not_possible": null,
"Start_video_call": null
}
}
+263
Ver Arquivo
@@ -0,0 +1,263 @@
{
"translation": {
"Logging_in": "Logging in…",
"your_connection_is_unencrypted": "Your connection is unencrypted.",
"your_connection_is_encrypted": "Your connection is encrypted.",
"your_buddy_closed_the_private_connection": "Your buddy closed the private connection.",
"start_private": "Start private",
"close_private": "Close private",
"your_buddy_is_verificated": "Your buddy is verified.",
"you_have_only_a_subscription_in_one_way": "You only have a one-way subscription.",
"authentication_query_sent": "Authentication query sent.",
"your_message_wasnt_send_please_end_your_private_conversation": "Your message was not sent. Please end your private conversation.",
"unencrypted_message_received": "Unencrypted message received",
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Your message was not sent because you have no valid subscription.",
"not_available": "Not available",
"no_connection": "No connection!",
"relogin": "relogin",
"trying_to_start_private_conversation": "Trying to start private conversation!",
"Verified": "Verified",
"Unverified": "Unverified",
"private_conversation_started": "Private conversation started.",
"private_conversation_aborted": "Private conversation aborted!",
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Your buddy closed the private conversation! You should do the same.",
"conversation_is_now_verified": "Conversation is now verified.",
"authentication_failed": "Authentication failed.",
"your_buddy_is_attempting_to_determine_": "You buddy is attempting to determine if he or she is really talking to you.",
"to_authenticate_to_your_buddy": "To authenticate to your buddy, ",
"enter_the_answer_and_click_answer": "enter the answer and click Answer.",
"enter_the_secret": "enter the secret.",
"Creating_your_private_key_": "Creating your private key; this may take a while.",
"Authenticating_a_buddy_helps_": "Authenticating a buddy helps ensure that the person you are talking to is really the one he or she claims to be.",
"How_do_you_want_to_authenticate_your_buddy": "How do you want to authenticate {{bid_name}} (<b>{{bid_jid}}</b>)?",
"Select_method": "Select method...",
"Manual": "Manual",
"Question": "Question",
"Secret": "Secret",
"To_verify_the_fingerprint_": "To verify the fingerprint, contact your buddy via some other trustworthy channel, such as the telephone.",
"Your_fingerprint": "Your fingerprint",
"Buddy_fingerprint": "Buddy fingerprint",
"Close": "Close",
"Compared": "Compared",
"To_authenticate_using_a_question_": "To authenticate using a question, pick a question whose answer is known only you and your buddy.",
"Ask": "Ask",
"To_authenticate_pick_a_secret_": "To authenticate, pick a secret known only to you and your buddy.",
"Compare": "Compare",
"Fingerprints": "Fingerprints",
"Authentication": "Authentication",
"Message": "Message",
"Add_buddy": "Add buddy",
"rename_buddy": "rename buddy",
"delete_buddy": "delete buddy",
"Login": "Login",
"Username": "Username",
"Password": "Password",
"Cancel": "Cancel",
"Connect": "Connect",
"Type_in_the_full_username_": "Type in the full username and an optional alias.",
"Alias": "Alias",
"Add": "Add",
"Subscription_request": "Subscription request",
"You_have_a_request_from": "You have a request from",
"Deny": "Deny",
"Approve": "Approve",
"Remove_buddy": "Remove buddy",
"You_are_about_to_remove_": "You are about to remove {{bid_name}} (<b>{{bid_jid}}</b>) from your buddy list. All related chats will be closed.",
"Continue_without_chat": "Continue without chat",
"Please_wait": "Please wait",
"Login_failed": "Chat login failed",
"Sorry_we_cant_authentikate_": "Authentication failed with the chat server. Maybe the password is wrong?",
"Retry": "Back",
"clear_history": "Clear history",
"New_message_from": "New message from",
"Should_we_notify_you_": "Should we notify you about new messages in the future?",
"Please_accept_": "Please click the \"Allow\" button at the top.",
"Hide_offline": "Hide offline contacts",
"Show_offline": "Show offline contacts",
"About": "About",
"dnd": "Do Not Disturb",
"Mute": "Mute",
"Unmute": "Unmute",
"Subscription": "Subscription",
"both": "both",
"Status": "Status",
"online": "online",
"chat": "chat",
"away": "away",
"xa": "extended away",
"offline": "offline",
"none": "none",
"Unknown_instance_tag": "Unknown instance tag.",
"Not_one_of_our_latest_keys": "Not one of our latest keys.",
"Received_an_unreadable_encrypted_message": "Received an unreadable encrypted message.",
"Online": "Online",
"Chatty": "Chatty",
"Away": "Away",
"Extended_away": "Extended away",
"Offline": "Offline",
"Friendship_request": "Friendship request",
"Confirm": "Confirm",
"Dismiss": "Dismiss",
"Remove": "Remove",
"Online_help": "Online help",
"FN": "Full name",
"N": " ",
"FAMILY": "Family name",
"GIVEN": "Given name",
"NICKNAME": "Nickname",
"URL": "URL",
"ADR": "Address",
"STREET": "Street Address",
"EXTADD": "Extended Address",
"LOCALITY": "Locality",
"REGION": "Region",
"PCODE": "Postal Code",
"CTRY": "Country",
"TEL": "Telephone",
"NUMBER": "Number",
"EMAIL": "Email",
"USERID": " ",
"ORG": "Organization",
"ORGNAME": "Name",
"ORGUNIT": "Unit",
"TITLE": "Job title",
"ROLE": "Role",
"BDAY": "Birthday",
"DESC": "Description",
"PHOTO": " ",
"send_message": "Send message",
"get_info": "Show information",
"Settings": "Settings",
"Priority": "Priority",
"Save": "Save",
"User_settings": "User settings",
"A_fingerprint_": "A fingerprint is used to make sure that the person you are talking to is who he or she is saying.",
"Your_roster_is_empty_add_a": "Your roster is empty, add a ",
"new_buddy": "new buddy",
"is": "is",
"Login_options": "Login options",
"BOSH_url": "BOSH URL",
"Domain": "Domain",
"Resource": "Resource",
"On_login": "On login",
"Received_an_unencrypted_message": "Received an unencrypted message",
"Sorry_your_buddy_doesnt_provide_any_information": "Sorry, your buddy does not provide any information.",
"Info_about": "Info about",
"Authentication_aborted": "Authentication aborted.",
"Authentication_request_received": "Authentication request received.",
"Do_you_want_to_display_them": "Do you want to display them?",
"Log_in_without_chat": "Log in without chat",
"has_come_online": "has come online",
"Unknown_sender": "Unknown sender",
"You_received_a_message_from_an_unknown_sender": "You received a message from an unknown sender",
"Please_allow_access_to_microphone_and_camera": "Please click the \"Allow\" button at the top, to allow access to microphone and camera.",
"Incoming_call": "Incoming call",
"from": "from",
"Do_you_want_to_accept_the_call_from": "Do you want to accept the call from",
"Reject": "Reject",
"Accept": "Accept",
"hang_up": "hang up",
"snapshot": "snapshot",
"mute_my_audio": "mute my audio",
"pause_my_video": "pause my video",
"fullscreen": "fullscreen",
"Info": "Info",
"Local_IP": "Local IP",
"Remote_IP": "Remote IP",
"Local_Fingerprint": "Local fingerprint",
"Remote_Fingerprint": "Remote fingerprint",
"Video_call_not_possible": "Video call not possible. Your buddy does not support video calls.",
"Start_video_call": "Start video call",
"Join_chat": "Join chat",
"Join": "Join",
"Room": "Room",
"Nickname": "Nickname",
"left_the_building": "__nickname__ left the building",
"entered_the_room": "__nickname__ entered the room",
"is_now_known_as": "__oldNickname__ is now known as __newNickname__",
"This_room_is": "This room is",
"muc_hidden": {
"keyword": "hidden",
"description": "can not be found through search"
},
"muc_membersonly": {
"keyword": "members-only",
"description": "you need to be on the member list"
},
"muc_moderated": {
"keyword": "moderated",
"description": "only persons with \"voice\" are allowed to send messages"
},
"muc_nonanonymous": {
"keyword": "non-anonymous",
"description": "your jabber id is exposed to all other occupants"
},
"muc_open": {
"keyword": "open",
"description": "everyone is allowed to join"
},
"muc_passwordprotected": {
"keyword": "password-protected",
"description": "you need to provide the correct password"
},
"muc_persistent": {
"keyword": "persistent",
"description": "will not be destroyed if the last occupant left"
},
"muc_public": {
"keyword": "public",
"description": "can be found through search"
},
"muc_semianonymous": {
"keyword": "semi-anonymous",
"description": "your jabber id is only exposed to room admins"
},
"muc_temporary": {
"keyword": "temporary",
"description": "will be destroyed if the last occupant left"
},
"muc_unmoderated": {
"keyword": "unmoderated",
"description": "everyone is allowed to send messages"
},
"muc_unsecured": {
"keyword": "unsecured",
"description": "you need no password to enter"
},
"Continue": "Continue",
"Server": "Server",
"Rooms_are_loaded": "Rooms are loaded",
"Could_load_only": "Could load only __count__ rooms for autocomplete",
"muc_explanation": "Please enter room name and optional a nickname and password to join a chat",
"You_already_joined_this_room": "You already joined this room",
"This_room_will_be_closed": "This room will be closed",
"Room_not_found_": "A new room will be created",
"Loading_room_information": "Loading room information",
"Destroy": "Destroy",
"Leave": "Leave",
"changed_subject_to": "__nickname__ changed the room subject to \"__subject__\"",
"muc_removed_kicked": "You have been kicked from the room",
"muc_removed_info_kicked": "__nickname__ has been kicked from the room",
"muc_removed_banned": "You have been banned from the room",
"muc_removed_info_banned": "__nickname__ has been banned from the room",
"muc_removed_affiliation": "You have been removed from the room, because of an affiliation change",
"muc_removed_info_affiliation": "__nickname__ has been removed from the room, because of an affiliation change",
"muc_removed_membersonly": "You have been removed from the room, because the room has been changed to members-only and you are no member",
"muc_removed_info_membersonly": "__nickname__ has been removed from the room, because the room has been changed to members-only and you are no member",
"muc_removed_shutdown": "You have been removed from the room, because the MUC service is being shut down",
"Reason": "Reason",
"message_not_send": "Your message was not send because of an error",
"message_not_send_item-not-found": "Your message was not send because this room does not exist",
"message_not_send_forbidden": "Your message was not send because you have no voice in this room",
"message_not_send_not-acceptable": "Your message was not send because you are no occupant of this room",
"This_room_has_been_closed": "This room has been closed",
"Room_logging_is_enabled": "Room logging is enabled",
"A_password_is_required": "A password is required",
"You_are_not_on_the_member_list": "You are not on the member list",
"You_are_banned_from_this_room": "You are banned from this room",
"Your_desired_nickname_": "Your desired nickname is already in use. Please choose another",
"The_maximum_number_": "The maximum number of user is reached in this room",
"This_room_is_locked_": "This room is locked",
"You_are_not_allowed_to_create_": "You are not allowed to create a room"
}
}
+172
Ver Arquivo
@@ -0,0 +1,172 @@
{
"translation": {
"Logging_in": "Por favor, espere...",
"your_connection_is_unencrypted": "Su conexión no está cifrada.",
"your_connection_is_encrypted": "Su conexión está cifrada.",
"your_buddy_closed_the_private_connection": "Su amigo ha cerrado la conexión privada.",
"start_private": "Iniciar privado",
"close_private": "Cerrar privado",
"your_buddy_is_verificated": "Tu amigo está verificado.",
"you_have_only_a_subscription_in_one_way": "Sólo tienes una suscripción de un modo.",
"authentication_query_sent": "Consulta de verificación enviada.",
"your_message_wasnt_send_please_end_your_private_conversation": "Su mensaje no fue enviado. Por favor, termine su conversación privada.",
"unencrypted_message_received": "Mensaje no cifrado recibido:",
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Su mensaje no se ha enviado, porque usted no tiene suscripción válida.",
"not_available": "No disponible",
"no_connection": "Sin conexión!",
"relogin": "iniciar sesión nuevamente",
"trying_to_start_private_conversation": "Intentando iniciar una conversación privada!",
"Verified": "Verificado",
"Unverified": "No verificado",
"private_conversation_started": "se inició una conversación privada.",
"private_conversation_aborted": "Conversación privada abortada!",
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Su amigo cerró la conversación privada! Usted debería hacer lo mismo.",
"conversation_is_now_verified": "La conversación es ahora verificada.",
"authentication_failed": "Fallo la verificación.",
"your_buddy_is_attempting_to_determine_": "Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.",
"to_authenticate_to_your_buddy": "Para autenticar a su amigo, ",
"enter_the_answer_and_click_answer": "introduce la respuesta y haga clic en Contestar.",
"enter_the_secret": "especifique el secreto.",
"Creating_your_private_key_": "Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.",
"Authenticating_a_buddy_helps_": "Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.",
"How_do_you_want_to_authenticate_your_buddy": "¿Cómo desea autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?",
"Select_method": "Escoja un método...",
"Manual": "Manual",
"Question": "Pregunta",
"Secret": "Secreto",
"To_verify_the_fingerprint_": "Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.",
"Your_fingerprint": "Tu firma digital",
"Buddy_fingerprint": "firma digital de tu amigo",
"Close": "Cerrar",
"Compared": "Comparado",
"To_authenticate_using_a_question_": "Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.",
"Ask": "Preguntar",
"To_authenticate_pick_a_secret_": "Para autenticar, elija un secreto conocido sólo por usted y su amigo.",
"Compare": "Comparar",
"Fingerprints": "Firmas digitales",
"Authentication": "Autenticación",
"Message": "Mensaje",
"Add_buddy": "Añadir amigo",
"rename_buddy": "renombrar amigo",
"delete_buddy": "eliminar amigo",
"Login": "Iniciar Sesión",
"Username": "Usuario",
"Password": "Contraseña",
"Cancel": "Cancelar",
"Connect": "Conectar",
"Type_in_the_full_username_": "Escriba el usuario completo y un alias opcional.",
"Alias": "Alias",
"Add": "Añadir",
"Subscription_request": "Solicitud de suscripción",
"You_have_a_request_from": "Tienes una petición de",
"Deny": "Rechazar",
"Approve": "Aprobar",
"Remove_buddy": "Eliminar amigo",
"You_are_about_to_remove_": "Vas a eliminar a {{bid_name}} (<b>{{bid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.",
"Continue_without_chat": "Continuar",
"Please_wait": "Espere por favor",
"Login_failed": "Fallo el inicio de sesión",
"Sorry_we_cant_authentikate_": "Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?",
"Retry": "Reintentar",
"clear_history": "Borrar el historial",
"New_message_from": "Nuevo mensaje de",
"Should_we_notify_you_": "¿Debemos notificarle sobre nuevos mensajes en el futuro?",
"Please_accept_": "Por favor, haga clic en el botón \"Permitir\" en la parte superior.",
"Hide_offline": "Ocultar contactos desconectados",
"Show_offline": "Mostrar contactos desconectados",
"About": "Acerca de",
"dnd": "No Molestar",
"Mute": "Desactivar sonido",
"Unmute": "Activar sonido",
"Subscription": "Suscripción",
"both": "ambos",
"Status": "Estado",
"online": "en línea",
"chat": "chat",
"away": "ausente",
"xa": "mas ausente",
"offline": "desconectado",
"none": "nadie",
"Unknown_instance_tag": "Etiqueta de instancia desconocida.",
"Not_one_of_our_latest_keys": "No de nuestra ultima tecla.",
"Received_an_unreadable_encrypted_message": "Se recibió un mensaje cifrado ilegible.",
"Online": "En linea",
"Chatty": "Hablador",
"Away": "Ausente",
"Extended_away": "Mas ausente",
"Offline": "Desconectado",
"Friendship_request": "Solicitud de amistad",
"Confirm": "Confirmar",
"Dismiss": "Rechazar",
"Remove": "Eliminar",
"Online_help": "Ayuda en línea",
"FN": "Nombre completo ",
"N": " ",
"FAMILY": "Apellido",
"GIVEN": "Nombre",
"NICKNAME": "Apodar",
"URL": "URL",
"ADR": "Dirección",
"STREET": "Calle",
"EXTADD": "Extendido dirección",
"LOCALITY": "Población",
"REGION": "Región",
"PCODE": "Código postal",
"CTRY": "País",
"TEL": "Teléfono",
"NUMBER": "Número",
"EMAIL": "Emilio",
"USERID": " ",
"ORG": "Organización",
"ORGNAME": "Nombre",
"ORGUNIT": "Departamento",
"TITLE": "Título",
"ROLE": "Rol",
"BDAY": "Cumpleaños",
"DESC": "Descripción",
"PHOTO": " ",
"send_message": "mandar un texto",
"get_info": "obtener información",
"Settings": "Ajustes",
"Priority": "Prioridad",
"Save": "Guardar",
"User_settings": "Configuración de usuario",
"A_fingerprint_": "La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser",
"Your_roster_is_empty_add_a": "Tu lista de amigos esta vacia",
"new_buddy": "Nuevo amigo",
"is": "es",
"Login_options": "Opciones de login",
"BOSH_url": "BOSH url",
"Domain": "Dominio",
"Resource": "Recurso",
"On_login": "Iniciar sesión",
"Received_an_unencrypted_message": "Recibe un mensaje no cifrado",
"Sorry_your_buddy_doesnt_provide_any_information": "Lo sentimos, su amigo no provee ninguna información.",
"Info_about": "Info acerca de",
"Authentication_aborted": "Autenticación abortada",
"Authentication_request_received": "Pedido de autenticación recibido.",
"Do_you_want_to_display_them": "¿Quiere mostrarlos?",
"Log_in_without_chat": "Ingresar sin chat",
"has_come_online": "se ha conectado",
"Unknown_sender": "Remitente desconocido",
"You_received_a_message_from_an_unknown_sender": "Ha recibido un mensaje de un remitente desconocido",
"Please_allow_access_to_microphone_and_camera": "Por favor, permitir el acceso al micrófono y la cámara.",
"Incoming_call": "Llamada entrante",
"from": "de",
"Do_you_want_to_accept_the_call_from": "Desea aceptar la llamada de",
"Reject": "Rechazar",
"Accept": "Aceptar",
"hang_up": "colgar",
"snapshot": "instantánea",
"mute_my_audio": "silenciar mi audio",
"pause_my_video": "pausar mi vídeo",
"fullscreen": "pantalla completa",
"Info": "Info",
"Local_IP": "IP local",
"Remote_IP": "IP remota",
"Local_Fingerprint": "Firma digital local",
"Remote_Fingerprint": "Firma digital remota",
"Video_call_not_possible": "Llamada de vídeo no es posible",
"Start_video_call": "Iniciar llamada de vídeo"
}
}
+172
Ver Arquivo
@@ -0,0 +1,172 @@
{
"translation": {
"Logging_in": "Connexion...",
"your_connection_is_unencrypted": "Connexion non chiffrée.",
"your_connection_is_encrypted": "Connexion chiffrée.",
"your_buddy_closed_the_private_connection": "Votre ami a fermé la connexion privée.",
"start_private": "Démarrer une conversation privé",
"close_private": "Clôturer une conversation privée",
"your_buddy_is_verificated": "Votre ami est vérifié.",
"you_have_only_a_subscription_in_one_way": "Vous ne pouvez souscrire qu'une fois.",
"authentication_query_sent": "Requête dauthentification envoyée.",
"your_message_wasnt_send_please_end_your_private_conversation": "Votre message n'a pas été envoyé. Veuillez terminer votre conversation privée.",
"unencrypted_message_received": "Message non chiffré reçu",
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Votre message n'a pas été envoyé car votre abonnement n'est pas valide.",
"not_available": "Pas disponible",
"no_connection": "Pas de connexion !",
"relogin": "Re-connexion",
"trying_to_start_private_conversation": "Essai de démarrage d'une conversation privée !",
"Verified": "Vérifié",
"Unverified": "Non vérifié",
"private_conversation_started": "Conversation privé démarrée.",
"private_conversation_aborted": "Conversation privée interrompue !",
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Votre ami a fermé la conversation privée ! Vous devriez faire de même.",
"conversation_is_now_verified": "La conversation est maintenant vérifiée.",
"authentication_failed": "L'authentification a échoué.",
"your_buddy_is_attempting_to_determine_": "Votre ami tente de déterminer si il ou elle parle vraiment à vous.",
"to_authenticate_to_your_buddy": "Vous authentifier à votre ami, ",
"enter_the_answer_and_click_answer": "Saisissez une réponse et cliquer sur Répondre.",
"enter_the_secret": "Entrez le mot secret",
"Creating_your_private_key_": "Création de votre clé privée; cela peut prendre un moment.",
"Authenticating_a_buddy_helps_": "L'authentification d'un ami permet de s'assurer que la personne à qui vous parlez est vraiment celui qu'il ou elle prétend être.",
"How_do_you_want_to_authenticate_your_buddy": "Comment voulez-vous vous authentifier {{bid_name}} (<b>{{bid_jid}}</b>)?",
"Select_method": "Sélection de la méthode...",
"Manual": "Manuel",
"Question": "Question",
"Secret": "Sécurité",
"To_verify_the_fingerprint_": "Pour vérifier l'empreinte, contactez votre ami via un autre canal digne de confiance, tel que le téléphone.",
"Your_fingerprint": "Votre empreinte",
"Buddy_fingerprint": "Empreinte de l'ami",
"Close": "Fermer",
"Compared": "Comparé",
"To_authenticate_using_a_question_": "Pour s'authentifier à l'aide d'une question, choisissez une question dont la réponse n'est connue que vous et de votre ami.",
"Ask": "Demander",
"To_authenticate_pick_a_secret_": "Pour vous authentifier, choisissez un secret connu seulement de vous et de votre ami.",
"Compare": "Comparer",
"Fingerprints": "Empreintes",
"Authentication": "Authentification",
"Message": "Message",
"Add_buddy": "Ajouter comme ami",
"rename_buddy": "Renommer l'ami",
"delete_buddy": "Supprimer l'ami",
"Login": "Connexion",
"Username": "Nom d'utilisateur",
"Password": "Mot de passe",
"Cancel": "Annuler",
"Connect": "Connecter",
"Type_in_the_full_username_": "Tapez un nom d'utilisateur complet et un alias(optionnel).",
"Alias": "Alias",
"Add": "Ajouter",
"Subscription_request": "Demande d'abonnement",
"You_have_a_request_from": "Vous avez une requête de ",
"Deny": "Refuser",
"Approve": "Approuver",
"Remove_buddy": "Supprimer l'ami",
"You_are_about_to_remove_": "Vous allez retirer {{bid_name}} (<b>{{bid_jid}}</b>) de votre liste d'amis. Toutes les fenêtres de chat en lien avec celui-ci seront fermées.",
"Continue_without_chat": "Continuer sans tchat",
"Please_wait": "Merci de patienter",
"Login_failed": "Authentification échouée",
"Sorry_we_cant_authentikate_": "La connexion avec le serveur de tchat a échoué. Vérifiez le mot de passe.",
"Retry": "Retour",
"clear_history": "Effacer lhistorique",
"New_message_from": "Nouveau message de",
"Should_we_notify_you_": "Dans le futur, devrons-nous vous notifier les nouveaux messages ?",
"Please_accept_": "Merci de cliquer sur le bouton \"autoriser\" en haut de page",
"Hide_offline": "Masquer les contacts non connectés",
"Show_offline": "Afficher les contacts non connectés",
"About": "À propos",
"dnd": "Ne pas déranger",
"Mute": "Muet",
"Unmute": "Son actif",
"Subscription": "Abonnement",
"both": "Les deux",
"Status": "Status",
"online": "En ligne",
"chat": "tchat",
"away": "Absent",
"xa": "Options étendues",
"offline": "Hors ligne",
"none": "Aucun",
"Unknown_instance_tag": "Tag inconnu",
"Not_one_of_our_latest_keys": "Ce n'est pas l'une des dernières touches",
"Received_an_unreadable_encrypted_message": "Message chiffré non lisible",
"Online": "En ligne",
"Chatty": "tchatty",
"Away": "Absent",
"Extended_away": "Options étendues",
"Offline": "Hors ligne",
"Friendship_request": "Demande d'amitié",
"Confirm": "Valider",
"Dismiss": "Rejeter",
"Remove": "Supprimer",
"Online_help": "Aide en ligne",
"FN": "Nom",
"N": " N ",
"FAMILY": "Nom de famille",
"GIVEN": "prénom",
"NICKNAME": "Surnom",
"URL": "URL",
"ADR": "Adresse",
"STREET": "Rue",
"EXTADD": "Adresse (suite)",
"LOCALITY": "Localité",
"REGION": "Région",
"PCODE": "Code Postal",
"CTRY": "Pays",
"TEL": "Téléphone",
"NUMBER": "Numéro",
"EMAIL": "Courriel",
"USERID": " USERID ",
"ORG": "Organisation",
"ORGNAME": "Nom",
"ORGUNIT": "Unité",
"TITLE": "Qualité:",
"ROLE": "Rôle",
"BDAY": "Date de naissance",
"DESC": "Description",
"PHOTO": "Photo",
"send_message": "Envoyer le message",
"get_info": "Montrer les informations",
"Settings": "Réglages",
"Priority": "Priorité",
"Save": "Enregistrer",
"User_settings": "Paramètres utilisateur",
"A_fingerprint_": "Une empreinte est utilisée pour s'assurer de l'identité de la personne à qui vous parlez",
"Your_roster_is_empty_add_a": "Votre liste est vide, ajouter ",
"new_buddy": "Nouvel ami",
"is": "est",
"Login_options": "Options d'identification",
"BOSH_url": "URL BOSH",
"Domain": "Domaine",
"Resource": "Ressource",
"On_login": "Après authentification",
"Received_an_unencrypted_message": "Reçu un message non chiffré",
"Sorry_your_buddy_doesnt_provide_any_information": "Désolé, votre ami n'a pas fourni d'informations",
"Info_about": "A propos de",
"Authentication_aborted": "Authentification interrompue.",
"Authentication_request_received": "Requête d'authentification reçue.",
"Do_you_want_to_display_them": "Voulez-vous les afficher ?",
"Log_in_without_chat": "S'identifier sans tchat",
"has_come_online": "vient d'arriver",
"Unknown_sender": "Expéditeur inconnu",
"You_received_a_message_from_an_unknown_sender": "Vous avez reçu un message d'un expéditeur inconnu",
"Please_allow_access_to_microphone_and_camera": "Veuillez cliquez sur le bouton \"Autoriser\" en haut, pour permettre l'accès au micro et à la caméra.",
"Incoming_call": "Appel entrant",
"from": "de",
"Do_you_want_to_accept_the_call_from": "Voulez-vous accepter l'appel de",
"Reject": "Rejeté",
"Accept": "Accepté",
"hang_up": "Décrochez",
"snapshot": "Capture d’écran",
"mute_my_audio": "Couper l'audio",
"pause_my_video": "Mettre ma vidéo en pause",
"fullscreen": "Plein écran",
"Info": "Info",
"Local_IP": "IP locale",
"Remote_IP": "IP distante",
"Local_Fingerprint": "Empreinte locale",
"Remote_Fingerprint": "Empreinte distante",
"Video_call_not_possible": "L'appel vidéo n'est possible. Votre ami ne supporte pas les appels vidéo.",
"Start_video_call": "Démarrer l'appel vidéo"
}
}
+172
Ver Arquivo
@@ -0,0 +1,172 @@
{
"translation": {
"Logging_in": "login…",
"your_connection_is_unencrypted": "La sua connessione è non cifrata.",
"your_connection_is_encrypted": "La sua connessione è cifrata.",
"your_buddy_closed_the_private_connection": "La sua connessione privata è stato chiuso dal suo compagno.",
"start_private": "Inizia privata",
"close_private": "Chiude privata",
"your_buddy_is_verificated": "Il tuo compagno è stato verificato",
"you_have_only_a_subscription_in_one_way": "Hai solo una one-way inscrizione.",
"authentication_query_sent": "Domanda d'autenticità inviata.",
"your_message_wasnt_send_please_end_your_private_conversation": "Il tuo messaggio non è stato inviato. Si prega di finire la sua conversazione privata.",
"unencrypted_message_received": "Messaggio non cifrato ricevuto",
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Il tuo messaggio non è stato inviato perché non hai una sottoscrizione valida.",
"not_available": "non disponibile",
"no_connection": "nessun collegamento!",
"relogin": "nuovo login",
"trying_to_start_private_conversation": "Cercando di avviare una conversazione privata!",
"Verified": "verificato",
"Unverified": "non verificato",
"private_conversation_started": "Conversazione privata iniziato.",
"private_conversation_aborted": "Conversazione privata abortito!",
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Il tuo compagno ha chiuso la conversazione privata! Si dovrebbe fare lo stesso.",
"conversation_is_now_verified": "Conversazione è ora verificato.",
"authentication_failed": "autenticazione fallita.",
"your_buddy_is_attempting_to_determine_": "Il tuo compagno sta cercando di determinare se lui o lei sta davvero parlando con te.",
"to_authenticate_to_your_buddy": "Per autenticare a il tuo compagno. ",
"enter_the_answer_and_click_answer": "inserisci la risposta e fare click su risposta.",
"enter_the_secret": "inserire il segreto.",
"Creating_your_private_key_": "Creare la propria chiave privata; questo potrebbe richiedere un po'.",
"Authenticating_a_buddy_helps_": "Autenticazione un compagno aiuta a garantire che la persona si sta parlando è davvero quello che lui o lei sostiene di essere.",
"How_do_you_want_to_authenticate_your_buddy": "Come si desidera autenticare {{bid_name}} (<b>{{bid_jid}}</b>)?",
"Select_method": "Seleziona metodo ..",
"Manual": "manuale",
"Question": "domanda",
"Secret": "segreto",
"To_verify_the_fingerprint_": "Per verificare l'impronta digitale, contattare il proprio compagno attraverso qualche altro canale affidabile, come il telefono.",
"Your_fingerprint": "il tuo impronta digitale",
"Buddy_fingerprint": "impronta digitale da compagno",
"Close": "chiude",
"Compared": "comparato",
"To_authenticate_using_a_question_": "Per autenticare tramite una questione, scegli una questione la cui risposta è nota solo voi e il tuo compagno",
"Ask": "chiedi",
"To_authenticate_pick_a_secret_": "Per autenticare, scegli un segreto noto solo a te e il tuo compagno.",
"Compare": "Comparare",
"Fingerprints": "Impronta digitale",
"Authentication": "Autenticazione",
"Message": "Messagio",
"Add_buddy": "Aggiungi un compagno",
"rename_buddy": "rinomina compagno",
"delete_buddy": "elimina compagno",
"Login": "Login",
"Username": "Identificazione dell'utente",
"Password": "Password",
"Cancel": "Cancella",
"Connect": "Collega",
"Type_in_the_full_username_": "Digita l'identificazione utente completo e un alias opzionale.",
"Alias": "Alias",
"Add": "Aggiungi",
"Subscription_request": "Rrichiesta di sottoscrizione",
"You_have_a_request_from": "Hai una richiesta da",
"Deny": "Refiuta",
"Approve": "Approva",
"Remove_buddy": "Rimuova il compagno",
"You_are_about_to_remove_": "Stai rimovendo {{bid_name}} (<b>{{bid_jid}}</b>) del suo lista di compagni. Tutte le chat appartenente saranno chiuse.",
"Continue_without_chat": "Continua senza chat",
"Please_wait": "Si prega d'attendere",
"Login_failed": "Chat login è fallito",
"Sorry_we_cant_authentikate_": "Autenticazione non riuscita con il server di chat. Forse la password è sbagliata?",
"Retry": "Indietro",
"clear_history": "Cancella la cronologia",
"New_message_from": "Nuovo messaggio da",
"Should_we_notify_you_": "Vuoi ricevere una notifica di nuovi messaggi in futuro?",
"Please_accept_": "Si prega di fare clic sul bottone \"Autorizzazione\" sopra.",
"Hide_offline": "Nascondere i contatti non in linea",
"Show_offline": "Mostra i contatti non in linea",
"About": "Informazione legale",
"dnd": "Non disturbare",
"Mute": "Muto attivo",
"Unmute": "Muto inattivo",
"Subscription": "Sottoscrizione",
"both": "etrambi",
"Status": "Status",
"online": "In linea",
"chat": "chat",
"away": "via",
"xa": "via estensivo",
"offline": "non in linea",
"none": "nessuno",
"Unknown_instance_tag": "Instance tag sconosciuta.",
"Not_one_of_our_latest_keys": "Non è una delle nostre ultime chiavi.",
"Received_an_unreadable_encrypted_message": "Ricevuto un messaggio crittografato illeggibile.",
"Online": "In linea",
"Chatty": "Chiacchierino",
"Away": "Via",
"Extended_away": "Via estensivo",
"Offline": "Non in linea",
"Friendship_request": "Amicizia richiesto",
"Confirm": "Conferma",
"Dismiss": "Rifiuta",
"Remove": "Rimuovi",
"Online_help": "Guida in linea",
"FN": "Nome e cognome",
"N": null,
"FAMILY": "Cognome",
"GIVEN": "Nome",
"NICKNAME": "Soprannome",
"URL": "URL",
"ADR": "Indirizzo",
"STREET": "Via",
"EXTADD": "Esteso Indirizzo",
"LOCALITY": "Località",
"REGION": "Regione",
"PCODE": "Codice Postale",
"CTRY": "Paese",
"TEL": "Telefono",
"NUMBER": "Numero",
"EMAIL": "E-mail",
"USERID": null,
"ORG": "Organizzazione",
"ORGNAME": "Nome",
"ORGUNIT": "Unità",
"TITLE": "Titolo di lavoro",
"ROLE": "Funzione",
"BDAY": "Compleanno",
"DESC": "Descrizione",
"PHOTO": null,
"send_message": "Messagio inviato",
"get_info": "Mostra informazioni",
"Settings": "Impostazione",
"Priority": "Priorità",
"Save": "Salva",
"User_settings": "Impostazione dell'utente",
"A_fingerprint_": "Una impronta digitale è usato per assicurarsi che la persona con cui stai parlando è lui o lei che sta dicendo.",
"Your_roster_is_empty_add_a": "Il suo elenco è vuoto, aggiungi un ",
"new_buddy": "compagno nuovo",
"is": "è",
"Login_options": "Opzioni di login",
"BOSH_url": "BOSH URL",
"Domain": "Domain",
"Resource": "Risorsa",
"On_login": "Login on",
"Received_an_unencrypted_message": "Ricevuto un messaggio non crittografato",
"Sorry_your_buddy_doesnt_provide_any_information": "Spiace, il tuo compagno non fornisce alcuna informazione.",
"Info_about": "Informazioni",
"Authentication_aborted": "Autenticazione interrotta",
"Authentication_request_received": "Richiesta di autenticazione ricevuto.",
"Do_you_want_to_display_them": "Vuoi che venga visualizzato?",
"Log_in_without_chat": "Log in senza chat",
"has_come_online": "È venuto in linea",
"Unknown_sender": "Mittente sconosciuto",
"You_received_a_message_from_an_unknown_sender": "Hai ricevuto un messaggio da un mittente sconosciuto",
"Please_allow_access_to_microphone_and_camera": "Si prega di fare clic sul bottone \"Autorizzazione\" sopra per autorizzazione del l'accesso al microfono e fotocamera.",
"Incoming_call": "Chiamata in arrivo",
"from": "di",
"Do_you_want_to_accept_the_call_from": "Vuoi accettare la chiamata di",
"Reject": "Rifiuta",
"Accept": "Accetta",
"hang_up": "Riattacca",
"snapshot": "istantanea",
"mute_my_audio": "disattiva il mio audio",
"pause_my_video": "pausa il mio audio",
"fullscreen": "schermo intero",
"Info": "Informazione",
"Local_IP": "IP locale",
"Remote_IP": "IP remoto",
"Local_Fingerprint": "Impronta digitale locale",
"Remote_Fingerprint": "Impronta digitale remoto",
"Video_call_not_possible": "Videochiamata non è possibile. Il tuo compagno non può effettuare videochiamate.",
"Start_video_call": "Inizia videochiamata"
}
}
+172
Ver Arquivo
@@ -0,0 +1,172 @@
{
"translation": {
"Logging_in": null,
"your_connection_is_unencrypted": null,
"your_connection_is_encrypted": null,
"your_buddy_closed_the_private_connection": null,
"start_private": null,
"close_private": null,
"your_buddy_is_verificated": null,
"you_have_only_a_subscription_in_one_way": null,
"authentication_query_sent": null,
"your_message_wasnt_send_please_end_your_private_conversation": null,
"unencrypted_message_received": null,
"your_message_wasnt_send_because_you_have_no_valid_subscription": null,
"not_available": null,
"no_connection": null,
"relogin": null,
"trying_to_start_private_conversation": null,
"Verified": null,
"Unverified": null,
"private_conversation_started": null,
"private_conversation_aborted": null,
"your_buddy_closed_the_private_conversation_you_should_do_the_same": null,
"conversation_is_now_verified": null,
"authentication_failed": null,
"your_buddy_is_attempting_to_determine_": null,
"to_authenticate_to_your_buddy": null,
"enter_the_answer_and_click_answer": null,
"enter_the_secret": null,
"Creating_your_private_key_": null,
"Authenticating_a_buddy_helps_": null,
"How_do_you_want_to_authenticate_your_buddy": null,
"Select_method": null,
"Manual": null,
"Question": null,
"Secret": null,
"To_verify_the_fingerprint_": null,
"Your_fingerprint": null,
"Buddy_fingerprint": null,
"Close": null,
"Compared": null,
"To_authenticate_using_a_question_": null,
"Ask": null,
"To_authenticate_pick_a_secret_": null,
"Compare": null,
"Fingerprints": null,
"Authentication": null,
"Message": null,
"Add_buddy": null,
"rename_buddy": null,
"delete_buddy": null,
"Login": null,
"Username": null,
"Password": null,
"Cancel": null,
"Connect": null,
"Type_in_the_full_username_": null,
"Alias": null,
"Add": null,
"Subscription_request": null,
"You_have_a_request_from": null,
"Deny": null,
"Approve": null,
"Remove_buddy": null,
"You_are_about_to_remove_": null,
"Continue_without_chat": null,
"Please_wait": null,
"Login_failed": null,
"Sorry_we_cant_authentikate_": null,
"Retry": null,
"clear_history": null,
"New_message_from": null,
"Should_we_notify_you_": null,
"Please_accept_": null,
"Hide_offline": null,
"Show_offline": null,
"About": null,
"dnd": null,
"Mute": null,
"Unmute": null,
"Subscription": null,
"both": null,
"Status": null,
"online": null,
"chat": null,
"away": null,
"xa": null,
"offline": null,
"none": null,
"Unknown_instance_tag": null,
"Not_one_of_our_latest_keys": null,
"Received_an_unreadable_encrypted_message": null,
"Online": null,
"Chatty": null,
"Away": null,
"Extended_away": null,
"Offline": null,
"Friendship_request": null,
"Confirm": null,
"Dismiss": null,
"Remove": null,
"Online_help": null,
"FN": null,
"N": null,
"FAMILY": null,
"GIVEN": null,
"NICKNAME": null,
"URL": null,
"ADR": null,
"STREET": null,
"EXTADD": null,
"LOCALITY": null,
"REGION": null,
"PCODE": null,
"CTRY": null,
"TEL": null,
"NUMBER": null,
"EMAIL": null,
"USERID": null,
"ORG": null,
"ORGNAME": null,
"ORGUNIT": null,
"TITLE": null,
"ROLE": null,
"BDAY": null,
"DESC": null,
"PHOTO": null,
"send_message": null,
"get_info": null,
"Settings": null,
"Priority": null,
"Save": null,
"User_settings": null,
"A_fingerprint_": null,
"Your_roster_is_empty_add_a": null,
"new_buddy": null,
"is": null,
"Login_options": null,
"BOSH_url": null,
"Domain": null,
"Resource": null,
"On_login": null,
"Received_an_unencrypted_message": null,
"Sorry_your_buddy_doesnt_provide_any_information": null,
"Info_about": null,
"Authentication_aborted": null,
"Authentication_request_received": null,
"Do_you_want_to_display_them": null,
"Log_in_without_chat": null,
"has_come_online": null,
"Unknown_sender": null,
"You_received_a_message_from_an_unknown_sender": null,
"Please_allow_access_to_microphone_and_camera": null,
"Incoming_call": null,
"from": null,
"Do_you_want_to_accept_the_call_from": null,
"Reject": null,
"Accept": null,
"hang_up": null,
"snapshot": null,
"mute_my_audio": null,
"pause_my_video": null,
"fullscreen": null,
"Info": null,
"Local_IP": null,
"Remote_IP": null,
"Local_Fingerprint": null,
"Remote_Fingerprint": null,
"Video_call_not_possible": null,
"Start_video_call": null
}
}
+172
Ver Arquivo
@@ -0,0 +1,172 @@
{
"translation": {
"Logging_in": "Logowanie...",
"your_connection_is_unencrypted": "Twoje połączenie nie jest szyfrowane.",
"your_connection_is_encrypted": "Twoje połączenie jest szyfrowane.",
"your_buddy_closed_the_private_connection": "Twój rozmówca zamknął połączenie.",
"start_private": "Rozpocznij rozmowę.",
"close_private": "Zakończ rozmowę.",
"your_buddy_is_verificated": "Twój rozmówca został zweryfikowany.",
"you_have_only_a_subscription_in_one_way": "Masz jednostronną subskrypcję.",
"authentication_query_sent": "Wysłano proźbę o autentykację.",
"your_message_wasnt_send_please_end_your_private_conversation": "Twoja wiadomość nie została wysłana. Proszę, zamknij rozmowę.",
"unencrypted_message_received": "Zwrotna niezaszyfrowana wiadomość.",
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Wiadomość nie została wysłana ponieważ nie posiadasz subskrybcji u rozmówcy.",
"not_available": "Niedostępny.",
"no_connection": "Brak połączenia!",
"relogin": "Połącz ponownie",
"trying_to_start_private_conversation": "Rozpocznij rozmowę!",
"Verified": "Zweryfikowano",
"Unverified": "Niezweryfikowano",
"private_conversation_started": "Rozmowa prywatna rozpoczęta.",
"private_conversation_aborted": "Anulowano rozmowę!",
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Rozmówca przerwał połączenie!",
"conversation_is_now_verified": "Zweryfikowano połączenie.",
"authentication_failed": "Weryfikacja się nie powiodła.",
"your_buddy_is_attempting_to_determine_": "Twój rozmówca próbuje się z Tobą połączyć.",
"to_authenticate_to_your_buddy": "Autoryzacja z rozmówcą, ",
"enter_the_answer_and_click_answer": "napisz odpowiedź.",
"enter_the_secret": "wpisz hasło.",
"Creating_your_private_key_": "Tworzenie klucza prywatnego; może to chwilę potrwać",
"Authenticating_a_buddy_helps_": "Autoryzacja pomoże w ustaleniu faktycznej tożsamości rozmówcy ;).",
"How_do_you_want_to_authenticate_your_buddy": "Jakiej autoryzacji chcesz użyć {{bid_name}} (<b>{{bid_jid}}</b>)?",
"Select_method": "Wybierz sposób...",
"Manual": "Ręcznie",
"Question": "Pytanie",
"Secret": "Hasło",
"To_verify_the_fingerprint_": "Aby zweryfikować kod najpierw skontaktuj się z rozmówcą np. za pomocą telefonu.",
"Your_fingerprint": "Twój kod:",
"Buddy_fingerprint": "Kod rozmówcy",
"Close": "Zamknij",
"Compared": "Porównano",
"To_authenticate_using_a_question_": "Aby autoryzować za pomocą pytania, wybierz pytanie na które tylko Twój rozmówca zna odpowiedź.",
"Ask": "Zadaj pytanie",
"To_authenticate_pick_a_secret_": "Aby autoryzować za pomocą hasła, wybierz hasło na które zna tylko Twój rozmówca.",
"Compare": "Dopasuj",
"Fingerprints": "Kody autoryzacyjne",
"Authentication": "Autoryzacja",
"Message": "Wiadomość",
"Add_buddy": "Dodaj kontakt",
"rename_buddy": "Zmień nazwę",
"delete_buddy": "Usuń kontakt",
"Login": "Login",
"Username": "Nazwa Użytkownika",
"Password": "Hasło",
"Cancel": "Anuluj",
"Connect": "Połączenie",
"Type_in_the_full_username_": "Wpisz pełną nazwę użytkownika (np. <B>imię.nazwisko@zajezdnia.local</B>) oraz jego nazwę wyświetlaną (Alias).",
"Alias": "Alias",
"Add": "Dodaj",
"Subscription_request": "Potwierdzenie subskrypcji",
"You_have_a_request_from": "Masz potwierdzenie od",
"Deny": "Odmów",
"Approve": "Zatwierdź",
"Remove_buddy": "Usuń rozmówcę",
"You_are_about_to_remove_": "Twój rozmówca {{bid_name}} (<b>{{bid_jid}}</b>) usunął Cię ze swojej listy kontaktów.",
"Continue_without_chat": "Kontynuuj bez komunikatora",
"Please_wait": "Proszę czekać",
"Login_failed": "Błędne logowanie",
"Sorry_we_cant_authentikate_": "Błędna autoryzacja z serwerem. Może hasło jest nieprawidłowe?",
"Retry": "Powrót",
"clear_history": "Wyczyść historię",
"New_message_from": "Nowa wiadomość od",
"Should_we_notify_you_": "Czy chcesz otrzymywać powiadomienia o nowych wiadomościach w przyszłości?",
"Please_accept_": "Kliknij \"Zezwól\" na górze.",
"Hide_offline": "Schowaj niedostępne kontakty",
"Show_offline": "Pokaż niedostępne kontakty",
"About": "Info",
"dnd": "Nie przeszkadzać",
"Mute": "Wycisz",
"Unmute": "Włącz dźwięk",
"Subscription": "Subskrybcja",
"both": "obustronna",
"Status": "Status",
"online": "Dostępny",
"chat": "czat",
"away": "z dala od kompa",
"xa": "hen hen...",
"offline": "niedostępny",
"none": "brak",
"Unknown_instance_tag": "Nieznany przypadek.",
"Not_one_of_our_latest_keys": "Not one of our latest keys.",
"Received_an_unreadable_encrypted_message": "Received an unreadable encrypted message.",
"Online": "Połączony",
"Chatty": "Pogawędzimy?",
"Away": "Daleko",
"Extended_away": "Hen Hen...",
"Offline": "Niedostępny",
"Friendship_request": "Zapytanie od znajomego?",
"Confirm": "Potwierdzenie",
"Dismiss": "Odwołaj",
"Remove": "Usuń",
"Online_help": "Pomoc Online",
"FN": "Pełna nazwa",
"N": " ",
"FAMILY": "Nazwisko",
"GIVEN": "Imię",
"NICKNAME": "Pseudonim",
"URL": "Strona WWW",
"ADR": "Adres",
"STREET": "Ulica",
"EXTADD": "Extended Address",
"LOCALITY": "Lokalizacja",
"REGION": "Region",
"PCODE": "Kod pocztowy",
"CTRY": "Kraj",
"TEL": "Telefon",
"NUMBER": "Numer",
"EMAIL": "Email",
"USERID": " ",
"ORG": "Organizacja",
"ORGNAME": "Nazwa",
"ORGUNIT": "Jednostka",
"TITLE": "Stanowisko",
"ROLE": "Rola",
"BDAY": "Data urodzin",
"DESC": "Opis",
"PHOTO": " ",
"send_message": "Wyślij wiadomość",
"get_info": "Pokaż informację",
"Settings": "Ustawienia",
"Priority": "Priorytet",
"Save": "Zapisz",
"User_settings": "Ustawienia Użytkownika",
"A_fingerprint_": "Kod służy do autoryzacji Twojego rozmówcy aby potwierdzić jego tożsamość.",
"Your_roster_is_empty_add_a": "Twoja lista jest pusta, dodaj kontakty ",
"new_buddy": "Nowy kontakt",
"is": "jest",
"Login_options": "opcje logowania",
"BOSH_url": "Adres BOSH",
"Domain": "Domena",
"Resource": "Źródło",
"On_login": "Na login",
"Received_an_unencrypted_message": "Zatwierdzono nieszyfrowaną wiadomość.",
"Sorry_your_buddy_doesnt_provide_any_information": "Twój rozmówca nie posiada żadnych informacji.",
"Info_about": "Informacja o...",
"Authentication_aborted": "Autoryzacja anulowana.",
"Authentication_request_received": "Prośba o autoryzację została przyjęta.",
"Do_you_want_to_display_them": "Chcesz to wyświetlić?",
"Log_in_without_chat": "Zaloguj bez komunikatora",
"has_come_online": "jest teraz dostępny",
"Unknown_sender": "Nieznany nadawca",
"You_received_a_message_from_an_unknown_sender": "Masz wiadomość od nieznanego nadawcy.",
"Please_allow_access_to_microphone_and_camera": "Kliknij \"Potwierdź\" na górze, aby móc korzystać z mikrofonu oraz kamery.",
"Incoming_call": "Przychodzące połączenie",
"from": "z",
"Do_you_want_to_accept_the_call_from": "Akceptujesz połączenie od",
"Reject": "Odrzuć",
"Accept": "Zaakceptuj",
"hang_up": "odbierz",
"snapshot": "zrób zdjęcie",
"mute_my_audio": "wycisz dźwięk",
"pause_my_video": "zatrzymaj moje wideo",
"fullscreen": "Pełny ekran",
"Info": "Informacja",
"Local_IP": "Adres IP",
"Remote_IP": "Zdalny adres IP",
"Local_Fingerprint": "Kod lokalny",
"Remote_Fingerprint": "Zdalny kod",
"Video_call_not_possible": "Rozmowa wideo jest niemożliwa. Twój rozmówca nie ma możliwości prowadzenia takich rozmów.",
"Start_video_call": "Rozpocznij rozmowę wideo"
}
}
+172
Ver Arquivo
@@ -0,0 +1,172 @@
{
"translation": {
"Logging_in": "Entrando...",
"your_connection_is_unencrypted": "Sua conexão não é encriptada",
"your_connection_is_encrypted": "Sua conexão é encriptada",
"your_buddy_closed_the_private_connection": "Seu contato fechou a conexão privada",
"start_private": "Iniciar conversa privada",
"close_private": "Fechar conversa privada",
"your_buddy_is_verificated": "Seu contato está verificado",
"you_have_only_a_subscription_in_one_way": "Você só tem a inscrição one-way",
"authentication_query_sent": "Pergunta de autenticação enviada",
"your_message_wasnt_send_please_end_your_private_conversation": "Sua mensagem não foi enviada. Por favor finalize sua conversa privada",
"unencrypted_message_received": "Mensagem não encriptada recebida",
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Sua mensagem não foi enviada porque sua inscrição não é válida",
"not_available": "Indisponível",
"no_connection": "Sem conexão!",
"relogin": "reentrar",
"trying_to_start_private_conversation": "Tentando iniciar conversa privada",
"Verified": "Verificado",
"Unverified": "Não verificado",
"private_conversation_started": "Conversa privada iniciada.",
"private_conversation_aborted": "Conversa privada abortada!",
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Seu contato encerrou a conversa privada! Você deveria fazer o mesmo.",
"conversation_is_now_verified": "Conversa verificada.",
"authentication_failed": "Autenticação falhou.",
"your_buddy_is_attempting_to_determine_": "Seu contato está tentando determinar se ele realmente está falando contigo.",
"to_authenticate_to_your_buddy": "Para autenticar seu contato, ",
"enter_the_answer_and_click_answer": "entre com a resposta e clique em Responder.",
"enter_the_secret": "escreva a senha.",
"Creating_your_private_key_": "Criando sua chave privada: isso pode demorar um pouco.",
"Authenticating_a_buddy_helps_": "Autenticar seu contato ajuda a garantir que a pessoa com a qual você está falando é realmente a pessoa que ela alega ser.",
"How_do_you_want_to_authenticate_your_buddy": "Como você gostaria de se autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?",
"Select_method": "Selecione o método...",
"Manual": "Manual",
"Question": "Pergunta",
"Secret": "Senha",
"To_verify_the_fingerprint_": "Para verificar o fingerprint, entre em contato com seu contato usando outro meio, de preferência seguro, como o telefone.",
"Your_fingerprint": "Seu fingerprint",
"Buddy_fingerprint": "Fingerprint do contato",
"Close": "Fechar",
"Compared": "Comparado",
"To_authenticate_using_a_question_": "Para autenticar seu contato faça uma pergunta, mas escolha que só ele saiba a resposta.",
"Ask": "Pergunta",
"To_authenticate_pick_a_secret_": "Para autenticar, escolha um segredo que somente você e seu contato saibam.",
"Compare": "Compare",
"Fingerprints": "Fingerprints",
"Authentication": "Autenticação",
"Message": "Mensagem",
"Add_buddy": "Adicionar contato",
"rename_buddy": "renomear contato",
"delete_buddy": "remover contato",
"Login": "Entrar",
"Username": "Usuário",
"Password": "Senha",
"Cancel": "Cancelar",
"Connect": "Conectar",
"Type_in_the_full_username_": "Digite seu nome completo e um apelido opcional.",
"Alias": "Apelido",
"Add": "Adicionar",
"Subscription_request": "Pedido de inscrição",
"You_have_a_request_from": "Você tem um pedido de",
"Deny": "Negar",
"Approve": "Aprovar",
"Remove_buddy": "Remover contato",
"You_are_about_to_remove_": "Você está prestes a remover {{bid_name}} (<b>{{bid_jid}}</b>) de sua lista de contatos. Todas as conversas serão fechadas.",
"Continue_without_chat": "Continue sem converar",
"Please_wait": "Por favor aguarde",
"Login_failed": "Autenticação da conversa falhou",
"Sorry_we_cant_authentikate_": "A autenticação com o servidor falhou. Talvez seja a senha errada?",
"Retry": "Voltar",
"clear_history": "Limpar histórico",
"New_message_from": "Nova mensagem de",
"Should_we_notify_you_": "Devemos continuar notificando sobre novas mensagens no futuro?",
"Please_accept_": "Por favor clique no botão \"Permitir\" na parte superior.",
"Hide_offline": "Esconder contatos desconectados",
"Show_offline": "Mostrar contatos desconectados",
"About": "Sobre",
"dnd": "Não perturbe",
"Mute": "Mudo",
"Unmute": "Ligar",
"Subscription": "Inscrição",
"both": "ambos",
"Status": "Status",
"online": "online",
"chat": "conversa",
"away": "ausente",
"xa": "ausente por mais tempo",
"offline": "desativado",
"none": "nenhum",
"Unknown_instance_tag": "Marcação desconhecida da instância",
"Not_one_of_our_latest_keys": "Nenhuma de nossas ultimas chaves.",
"Received_an_unreadable_encrypted_message": "Mensagem encriptada ilegível foi recebida.",
"Online": "Online",
"Chatty": "Tagarela",
"Away": "Ausente",
"Extended_away": "Ausente por mais tempo",
"Offline": "Desativado",
"Friendship_request": "Pedido de amizade",
"Confirm": "Confirmar",
"Dismiss": "Ignorar",
"Remove": "Remover",
"Online_help": "Ajuda online",
"FN": "Nome completo",
"N": " ",
"FAMILY": "Sobrenome",
"GIVEN": "Nome",
"NICKNAME": "Apelido",
"URL": "URL",
"ADR": "Endereço",
"STREET": "Rua, Av, etc",
"EXTADD": "Complemento",
"LOCALITY": "Localidade",
"REGION": "Região",
"PCODE": "CEP",
"CTRY": "País",
"TEL": "Telefone",
"NUMBER": "Número",
"EMAIL": "Email",
"USERID": " ",
"ORG": "Empresa",
"ORGNAME": "Nome",
"ORGUNIT": "Unidade",
"TITLE": "Cargo",
"ROLE": "Rol",
"BDAY": "Data de nascimento",
"DESC": "Descrição",
"PHOTO": " ",
"send_message": "Enviar mensagem",
"get_info": "Exibir informações",
"Settings": "Configurações",
"Priority": "Prioridade",
"Save": "Salvar",
"User_settings": "Configurações do usuário",
"A_fingerprint_": "O fingerprint é usado para certificar que a pessoa com a qual se está falando é que ela diz ser.",
"Your_roster_is_empty_add_a": "Sua lista está vazia, adicione um ",
"new_buddy": "novo contato",
"is": "é",
"Login_options": "Opções de login",
"BOSH_url": "BOSH URL",
"Domain": "Domínio",
"Resource": "Recurso",
"On_login": "Ao autenticar",
"Received_an_unencrypted_message": "Mensagem não encriptada recebida",
"Sorry_your_buddy_doesnt_provide_any_information": "Desculpe, seu contato não forneceu nenhuma informação",
"Info_about": "Informações sobre",
"Authentication_aborted": "Autenticação encerrada.",
"Authentication_request_received": "Pedido de autenticação recebido",
"Do_you_want_to_display_them": "Você quer mostrá-los?",
"Log_in_without_chat": "Entrar sem conversar",
"has_come_online": "ficou online",
"Unknown_sender": "Emissor desconhecido",
"You_received_a_message_from_an_unknown_sender": "Você recebeu uma mensagem de um emissor desconhecido",
"Please_allow_access_to_microphone_and_camera": "Por favor clique no botão \"Permitir\" no topo, para conceder acesso ao seu microfone e câmera.",
"Incoming_call": "Recebendo chamada",
"from": "de",
"Do_you_want_to_accept_the_call_from": "Você aceita a chamada de",
"Reject": "Negar",
"Accept": "Aceitar",
"hang_up": "desligar",
"snapshot": "registrar imagem",
"mute_my_audio": "mudo",
"pause_my_video": "pausar vídeo",
"fullscreen": "tela cheia",
"Info": "Informações",
"Local_IP": "IP local",
"Remote_IP": "IP remoto",
"Local_Fingerprint": "Fingerprint local",
"Remote_Fingerprint": "Fingerprint remoto",
"Video_call_not_possible": "Chamada de vídeo impossível. Seu contato não suporta chamadas desse tipo.",
"Start_video_call": "Iniciar chamada de vídeo"
}
}
+172
Ver Arquivo
@@ -0,0 +1,172 @@
{
"translation": {
"Logging_in": null,
"your_connection_is_unencrypted": null,
"your_connection_is_encrypted": null,
"your_buddy_closed_the_private_connection": null,
"start_private": null,
"close_private": null,
"your_buddy_is_verificated": null,
"you_have_only_a_subscription_in_one_way": null,
"authentication_query_sent": null,
"your_message_wasnt_send_please_end_your_private_conversation": null,
"unencrypted_message_received": null,
"your_message_wasnt_send_because_you_have_no_valid_subscription": null,
"not_available": null,
"no_connection": null,
"relogin": null,
"trying_to_start_private_conversation": null,
"Verified": null,
"Unverified": null,
"private_conversation_started": null,
"private_conversation_aborted": null,
"your_buddy_closed_the_private_conversation_you_should_do_the_same": null,
"conversation_is_now_verified": null,
"authentication_failed": null,
"your_buddy_is_attempting_to_determine_": null,
"to_authenticate_to_your_buddy": null,
"enter_the_answer_and_click_answer": null,
"enter_the_secret": null,
"Creating_your_private_key_": null,
"Authenticating_a_buddy_helps_": null,
"How_do_you_want_to_authenticate_your_buddy": null,
"Select_method": null,
"Manual": null,
"Question": null,
"Secret": null,
"To_verify_the_fingerprint_": null,
"Your_fingerprint": null,
"Buddy_fingerprint": null,
"Close": null,
"Compared": null,
"To_authenticate_using_a_question_": null,
"Ask": null,
"To_authenticate_pick_a_secret_": null,
"Compare": null,
"Fingerprints": null,
"Authentication": null,
"Message": null,
"Add_buddy": null,
"rename_buddy": null,
"delete_buddy": null,
"Login": null,
"Username": null,
"Password": null,
"Cancel": null,
"Connect": null,
"Type_in_the_full_username_": null,
"Alias": null,
"Add": null,
"Subscription_request": null,
"You_have_a_request_from": null,
"Deny": null,
"Approve": null,
"Remove_buddy": null,
"You_are_about_to_remove_": null,
"Continue_without_chat": null,
"Please_wait": null,
"Login_failed": null,
"Sorry_we_cant_authentikate_": null,
"Retry": null,
"clear_history": null,
"New_message_from": null,
"Should_we_notify_you_": null,
"Please_accept_": null,
"Hide_offline": null,
"Show_offline": null,
"About": null,
"dnd": null,
"Mute": null,
"Unmute": null,
"Subscription": null,
"both": null,
"Status": null,
"online": null,
"chat": null,
"away": null,
"xa": null,
"offline": null,
"none": null,
"Unknown_instance_tag": null,
"Not_one_of_our_latest_keys": null,
"Received_an_unreadable_encrypted_message": null,
"Online": null,
"Chatty": null,
"Away": null,
"Extended_away": null,
"Offline": null,
"Friendship_request": null,
"Confirm": null,
"Dismiss": null,
"Remove": null,
"Online_help": null,
"FN": null,
"N": null,
"FAMILY": null,
"GIVEN": null,
"NICKNAME": null,
"URL": null,
"ADR": null,
"STREET": null,
"EXTADD": null,
"LOCALITY": null,
"REGION": null,
"PCODE": null,
"CTRY": null,
"TEL": null,
"NUMBER": null,
"EMAIL": null,
"USERID": null,
"ORG": null,
"ORGNAME": null,
"ORGUNIT": null,
"TITLE": null,
"ROLE": null,
"BDAY": null,
"DESC": null,
"PHOTO": null,
"send_message": null,
"get_info": null,
"Settings": null,
"Priority": null,
"Save": null,
"User_settings": null,
"A_fingerprint_": null,
"Your_roster_is_empty_add_a": null,
"new_buddy": null,
"is": null,
"Login_options": null,
"BOSH_url": null,
"Domain": null,
"Resource": null,
"On_login": null,
"Received_an_unencrypted_message": null,
"Sorry_your_buddy_doesnt_provide_any_information": null,
"Info_about": null,
"Authentication_aborted": null,
"Authentication_request_received": null,
"Do_you_want_to_display_them": null,
"Log_in_without_chat": null,
"has_come_online": null,
"Unknown_sender": null,
"You_received_a_message_from_an_unknown_sender": null,
"Please_allow_access_to_microphone_and_camera": null,
"Incoming_call": null,
"from": null,
"Do_you_want_to_accept_the_call_from": null,
"Reject": null,
"Accept": null,
"hang_up": null,
"snapshot": null,
"mute_my_audio": null,
"pause_my_video": null,
"fullscreen": null,
"Info": null,
"Local_IP": null,
"Remote_IP": null,
"Local_Fingerprint": null,
"Remote_Fingerprint": null,
"Video_call_not_possible": null,
"Start_video_call": null
}
}
+18 -5
Ver Arquivo
@@ -1,23 +1,36 @@
{
"name": "jsxc",
"version": "0.8.2",
"version": "2.0.0-beta2",
"description": "Real-time chat app",
"homepage": "http://www.jsxc.org/",
"bugs": "https://github.com/sualko/jsxc/issues",
"bugs": "https://github.com/jsxc/jsxc/issues",
"license": "MIT",
"author": "Klaus Herberth <klaus@jsxc.org>",
"repository": {
"type": "git",
"url": "https://github.com/sualko/jsxc"
"url": "https://github.com/jsxc/jsxc"
},
"devDependencies": {
"grunt": "~0.4.4",
"autoprefixer-core": "^4.0.2",
"grunt": "^0.4.5",
"grunt-autoprefixer": "^2.1.0",
"grunt-banner": "~0.2.2",
"grunt-cli": "~0.1.13",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-compress": "^0.10.0",
"grunt-contrib-concat": "^0.5.0",
"grunt-contrib-copy": "~0.5.0",
"grunt-contrib-csslint": "^0.3.1",
"grunt-contrib-jshint": "~0.9.2",
"grunt-contrib-uglify": "^0.6.0",
"grunt-contrib-watch": "^0.6.1",
"grunt-data-uri": "^0.2.0",
"grunt-jsdoc": "^0.5.7",
"grunt-merge-data": "^0.4.3",
"grunt-postcss": "^0.2.0",
"grunt-sass": "^0.17.0",
"grunt-search": "^0.1.6",
"grunt-text-replace": "~0.3.11"
"grunt-shell": "^1.1.1",
"grunt-text-replace": "~0.4.0"
}
}
+3
Ver Arquivo
@@ -0,0 +1,3 @@
#!/bin/sh
grunt commit
+147
Ver Arquivo
@@ -0,0 +1,147 @@
@import 'modules';
#jsxc_buddylist {
list-style: none;
padding: 0;
margin: 0;
width: 204px;
li {
padding: 0;
margin: 0;
height: 30px;
border-bottom: 1px solid $roster_bottom_border_top;
cursor: pointer;
width: 200px;
position: relative;
color: $roster_color;
font-family: $font_sans;
line-height: 30px;
padding-left: 3px;
z-index: 85;
overflow: hidden;
&.jsxc_expand {
height: 54px;
.jsxc_avatar {
width: 48px;
height: 48px;
img {
width: 48px;
height: 48px;
}
}
}
&:hover .jsxc_avatar {
@extend %avatar-icon;
}
.jsxc_name:before {
content: ' ';
width: 0;
height: 0;
display: inline-block;
opacity: 0.0;
transition: width 0.5s, opacity 0.5s;
}
&.jsxc_unreadMsg .jsxc_name:before {
width: 12px;
height: 12px;
border-radius: 6px;
background-color: $roster_unread_bg;
margin-right: 3px;
opacity: 1.0;
transition: width 0.5s, opacity 0.5s;
}
}
.jsxc_name {
padding-right: 30px;
}
.jsxc_oneway {
opacity: 0.7;
}
.jsxc_right {
float: right;
margin-right: 6px;
div {
font-weight: bold;
text-align: center;
font-size: 13px;
line-height: 20px;
color: $white;
&:hover {
opacity: 1.0;
}
}
}
.jsxc_control {
position: absolute;
width: 30px;
height: 30px;
top: 0;
right: 0;
cursor: pointer;
&:after {
content: '';
position: absolute;
left: 50%;
top: 15px;
width: 16px;
height: 16px;
line-height: 16px;
text-align: center;
margin-left: -8px;
margin-top: -8px;
border-radius: 8px;
color: $roster_icon_color;
background-color: $roster_icon_bg;
opacity: 0.6;
transition: transform 0.5s;
}
&:hover:after {
color: $white;
opacity: 1.0;
}
}
.jsxc_options {
height: 20px;
float: left;
border-radius: 2px;
background-color: $roster_icon_bg;
> div {
height: 20px;
width: 20px;
float: left;
margin-right: 0 1px;
background-repeat: no-repeat;
background-position: center center;
opacity: 0.6;
cursor: pointer;
&:hover {
opacity: 1;
}
}
}
.jsxc_chaticon {
background-image: image-url('speech_balloon_white.svg');
background-size: 15px 15px;
}
.jsxc_videoicon {
background-image: image-url('camera_icon_white.svg');
background-size: 13px 13px;
}
.jsxc_vcardicon {
font-size: 15px;
line-height: 20px;
text-align: center;
color: $white;
font-weight: bold;
font-family: $font_serif;
}
li.jsxc_expand .jsxc_control:after {
transform: rotate(180deg);
}
&.jsxc_hideOffline {
.jsxc_offline {
display: none;
}
}
}
+115
Ver Arquivo
@@ -0,0 +1,115 @@
$black: #000;
$gray10: lighten($black, 10%);
$gray20: lighten($black, 20%);
$gray30: lighten($black, 30%);
$gray40: lighten($black, 40%);
$gray50: lighten($black, 50%);
$gray60: lighten($black, 60%);
$gray70: lighten($black, 70%);
$gray80: lighten($black, 80%);
$gray90: lighten($black, 90%);
$white: #fff;
$orange: #ffa500;
$red: #f00;
$blue: #00f;
$shadow: $black;
$separator: $black;
$invalid_border: $red;
$name_hover: $white;
$dialog_fieldset_border: $gray80;
$dialog_input_invalid: $red;
$dialog_input_readonly_bg: $gray90;
$spot_bg: $white;
$spot_border: $black;
$state_online: #00bfff;
$state_chat: #00bfff;
$state_away: $orange;
$state_xa: $orange;
$state_dnd: $red;
$state_offline: $gray60;
$notice_bg: $orange;
$notice_color: $black;
$window_unread_cycle: $orange;
$window_bar_bg: $gray10;
$window_bar_color: $gray50;
$window_bg: $gray60;
$window_gradient: $gray60;
$window_placeholder: $black;
$tools_color: $gray50;
$window_close_hover: $white;
$chatmessage_bg: $white;
$chatmessage_a: $blue;
$chatmessage_timestamp: $gray60;
$chatmessage_in_bg: #f1f7fd;
$chatmessage_in_border: #a6b8c9;
$chatmessage_out_bg: #e6ffd1;
$chatmessage_out_border: #b4d89f;
$chatmessage_received: #008000;
$window_settings_bg: $gray10;
$window_settings_border_top: $gray80;
$window_settings_disabled: $gray30;
$window_settings_bg_hover: #3f8fba;
$window_settings_color_hover: $white;
$windowListSB_bg: $gray80;
$windowListSB_color: $gray50;
$windowListSB_bg_hover: $gray70;
$windowListSB_bg_disabled: $gray90;
$windowListSB_color_disabled: $gray80;
$emoticon_selection_bg: rgba($gray20, 0.8);
$emoticon_selection_hover: rgba($white, 0.8);
$roster_bg: $gray20;
$roster_input_bg: $white;
$roster_input_shadow: $gray40;
$roster_color: $gray50;
$roster_a: $gray70;
$roster_unread_bg: $orange;
$roster_icon_bg: rgba($gray40, 0.5);
$roster_icon_color: $gray70;
$roster_toggle_hover: rgba($gray60, 0.5);
$roster_border_left: $gray60;
$roster_bottom_border_top: $gray50;
$roster_bottom_bg: $gray10;
$roster_bottom_color: $gray50;
$roster_bottom_disabled: $gray20;
$roster_bottom_bg_hover: #3f8fba;
$roster_bottom_color_hover: $white;
$fullscreen_bg: $gray60;
$video_status_bg: rgba($black, 0.5);
$video_status_color: $white;
$video_bg: $gray60;
$novideo_color: $white;
$novideo_bg: $gray30;
$bubbling_bg: $black;
$bubbling_start_bg: $black;
$bubbling_end_bg: $white;
$avatar_bg: $gray60;
$avatar_color: $gray70;
$loginForm_bg: #5cb85c;
$loginForm_border: #4cae4c;
+706
Ver Arquivo
@@ -0,0 +1,706 @@
.jsxc_right {
text-align: right;
}
.jsxc_center {
text-align: center;
}
.jsxc_sep {
border-top: 1px solid $separator;
}
.jsxc_name {
overflow: hidden;
height: 30px;
cursor: pointer;
text-overflow: ellipsis;
white-space: nowrap;
&:hover {
color: $name_hover;
}
}
.jsxc_maxWidth {
max-width: 500px;
}
#jsxc_dialog {
padding: 10px;
min-width: 300px;
display: inline-block;
ul {
list-style: none;
margin: 0;
padding: 0;
}
li {
margin: 0;
padding: 0;
}
p {
margin-bottom: 1em;
input {
margin-bottom: 5px;
width: 60%;
outline: none;
}
input[type="submit"] {
width: auto;
}
label {
display: block;
width: 30%;
float: left;
padding: 6px 0;
}
}
h3 {
font-size: 120%;
font-weight: bold;
margin-bottom: 10px;
margin-top: 20px;
}
.jsxc_right {
margin-top: 20px;
}
fieldset {
border: 2px solid $dialog_fieldset_border;
}
legend {
padding: 0 10px;
font-weight: bold;
}
input {
outline: none;
&:invalid {
border: 1px solid $dialog_input_invalid;
}
}
.jsxc_fieldset {
width: 280px;
padding: 10px;
border-radius: 3px;
label {
display: inline-block;
width: 100px;
}
input[type="Number"] {
display: inline-block;
width: 50px;
}
}
input[readonly] {
background-color: $dialog_input_readonly_bg;
}
.jsxc_inputinfo {
padding-left: 30%;
font-style: italic;
margin-top: -1em;
}
.jsxc_waiting {
&:before {
content: " ";
width: 1em;
height: 1em;
display: inline-block;
background-size: 100%;
margin: 0 3px 0 0;
background-image: image-url('loading.gif');
}
}
}
.jsxc_avatar {
@extend %avatar-icon;
img {
display: block;
width: 25px;
height: 25px;
position: absolute;
top: 0;
left: 0;
}
}
ul.jsxc_vCard {
min-width: 400px;
ul {
margin-left: 20px;
}
li {
cursor: default !important;
}
strong {
}
}
.jsxc_spot {
display: inline-block;
width: 10px;
height: 10px;
background-color: $white;
border-radius: 5px;
text-indent: -99999em;
margin-top: 3px;
margin-right: 5px;
border: 1px solid $spot_border !important;
line-height: 100%;
cursor: pointer;
&.jsxc_online {
background-color: $state_online;
}
&.jsxc_chat {
background-color: $state_chat;
}
&.jsxc_away {
background-color: $state_away;
}
&.jsxc_xa {
background-color: $state_xa;
}
&.jsxc_dnd {
background-color: $state_dnd;
}
&.jsxc_offline {
background-color: $state_offline;
}
}
#jsxc_menu {
height: 30px;
width: 30px;
cursor: pointer;
float: right;
text-align: center;
&:hover>span {
opacity: 1;
}
}
#jsxc_avatar {
height: 30px;
width: 30px;
float: left;
margin: 0 2px;
}
#jsxc_notice {
height: 30px;
width: 30px;
float: right;
text-align: center;
line-height: 30px;
span {
background-color: $notice_bg;
border-radius: 11px;
color: $notice_color;
font-size: 80%;
padding: 2px;
position: relative;
animation: bounce 2s 1s infinite;
}
}
#jsxc_menu>span {
opacity: 0.5;
display: block;
width: 25px;
height: 30px;
background-image: image-url('gear_white.svg');
background-size: 18px 18px;
background-repeat: no-repeat;
background-position: center center;
}
@keyframes bounce {
0% {
bottom: 0;
animation-timing-function: ease-in;
}
12% {
bottom: 5px;
animation-timing-function: ease-out;
}
25% {
bottom: 0;
animation-timing-function: ease-in;
}
37% {
bottom: 5px;
animation-timing-function: ease-out;
}
50% {
bottom: 0;
animation-timing-function: ease-in;
}
100% {
bottom: 0;
}
}
#jsxc_presence {
cursor: pointer;
padding-left: 2px;
overflow: hidden;
}
#jsxc_windowList {
position: fixed;
bottom: 0;
right: 210px;
left: 0;
z-index: 50;
clip: rect(-10000px, 10000px, 30px, 30px);
&>ul {
list-style: none;
padding: 0;
margin: 0;
position: absolute;
bottom: 0;
right: 0;
height: 30px;
overflow: visible;
white-space: nowrap;
transition: right 0.5s;
&>li {
padding: 0;
margin: 0;
display: inline-block;
width: 250px;
height: 30px;
position: relative;
overflow: visible;
margin-right: 5px;
cursor: pointer;
white-space: normal;
&.jsxc_min {
width: 200px !important;
}
&.jsxc_unreadMsg {
.jsxc_name {
font-style: italic;
}
.jsxc_cycle {
background-color: $window_unread_cycle;
}
}
}
}
}
#jsxc_windowListSB {
position: fixed;
left: 0;
bottom: 0;
width: 30px;
height: 30px;
> {
div {
box-sizing: border-box;
width: 14px;
height: 100%;
background-color: $windowListSB_bg;
color: $windowListSB_color;
text-align: center;
line-height: 30px;
float: left;
cursor: pointer;
user-select: none;
&:hover {
background-color: $windowListSB_bg_hover;
}
}
.jsxc_disabled {
background-color: $windowListSB_bg_disabled !important;
color: $windowListSB_color_disabled;
cursor: default !important;
display: none;
}
}
}
.jsxc_bar {
background-color: $window_bar_bg;
cursor: pointer;
height: 30px;
line-height: 26px;
padding: 2px;
color: $window_bar_color;
width: 100%;
box-sizing: border-box;
overflow: hidden;
}
.jsxc_cycle {
position: absolute;
bottom: 9px;
right: 5px;
height: 12px;
width: 12px;
border-radius: 6px;
}
.jsxc_window {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: auto;
background-color: $window_bg;
z-index: 80;
cursor: default;
.jsxc_emoticons {
height: 30px;
width: 30px;
position: absolute;
top: 240px;
right: 0;
cursor: pointer;
&:after {
content: ' ';
background-image: image-url('smiley.png');
background-position: center center;
background-repeat: no-repeat;
height: 30px;
width: 30px;
opacity: 0.3;
position: absolute;
top: 0;
left: 0;
}
ul {
display: none;
position: absolute;
bottom: 33px;
right: 3px;
width: 210px;
background-color: $emoticon_selection_bg;
padding: 3px;
border-radius: 3px;
z-index: 200;
list-style-type: none;
&:after {
content: '';
position: absolute;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 6px solid $emoticon_selection_bg;
display: block;
width: 0;
z-index: 1;
right: 6px;
bottom: -6px;
}
}
li {
float: right;
cursor: pointer;
}
div {
cursor: pointer;
border-radius: 3px;
background-size: 30px 30px;
width: 30px;
height: 30px;
&:hover {
background-color: $emoticon_selection_hover;
}
}
&:hover:after {
opacity: 0.5;
}
}
.jsxc_fade {
position: relative;
}
.jsxc_gradient {
display: none;
position: absolute;
top: 0;
left: 0;
right: 0;
height: 15px;
z-index: 100;
background: linear-gradient(to bottom, $window_gradient 0, rgba(0, 0, 0, 0) 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$window_gradient', endColorstr='#00282323', GradientType=0);
}
.jsxc_avatar {
margin-top: 1px;
}
.jsxc_textarea {
width: 100%;
overflow: hidden;
padding: 3px;
}
.slimScrollDiv {
margin: 0 0 6px 0;
left: auto !important;
top: auto !important;
}
input {
&.jsxc_textinput {
width: 100%;
height: 30px;
margin: 0;
padding: 3px;
padding-right: 40px;
outline: none;
border-radius: 0;
box-sizing: border-box;
text-align: right;
}
&::placeholder {
color: $window_placeholder;
opacity: 0.3;
}
}
.jsxc_tools {
height: 26px;
float: right;
> div {
width: 17px;
height: 26px;
display: block;
float: left;
color: $tools_color;
font-family: $font_sans;
line-height: 26px;
cursor: pointer;
text-align: center;
}
}
.jsxc_close {
font-size: 20px;
&:hover {
color: $window_close_hover;
}
}
.ui-resizable-w {
left: 0;
}
.ui-resizable-nw {
top: 0;
left: 0;
width: 15px;
height: 15px;
z-index: 95 !important;
background-image: image-url('resize_gray.svg');
}
.ui-resizable-n {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 15px;
z-index: 100;
background: linear-gradient(to bottom, $window_gradient 0, rgba(40, 35, 35, 0) 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$window_gradient', endColorstr='#00282323', GradientType=0);
}
}
.jsxc_chatmessage {
margin: 3px;
padding: 4px;
padding-right: 10px;
max-width: 76%;
word-wrap: break-word;
background-color: $chatmessage_bg;
position: relative;
outline: none;
clear: both;
a {
color: $chatmessage_a;
text-decoration: underline;
}
img {
width: 19px;
height: 19px;
background-size: 19px 19px;
}
.jsxc_avatar {
display: none;
}
}
.jsxc_timestamp {
font-size: 8px;
color: $chatmessage_timestamp;
line-height: 8px;
overflow: hidden;
white-space: nowrap;
max-width: 100%;
text-overflow: ellipsis;
}
.jsxc_in {
float: left;
position: relative;
margin-left: 10px;
background: $chatmessage_in_bg;
border: solid 1px $chatmessage_in_border;
border-radius: 3px;
&:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 6px 5px 0;
border-color: transparent $chatmessage_in_bg;
display: block;
width: 0;
z-index: 1;
left: -6px;
bottom: 10px;
}
.jsxc_timestamp {
float: left;
}
}
.jsxc_out {
float: right;
position: relative;
margin-right: 10px;
background: $chatmessage_out_bg;
border: solid 1px $chatmessage_out_border;
border-radius: 3px;
&:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 0 5px 6px;
border-color: transparent $chatmessage_out_bg;
display: block;
width: 0;
z-index: 1;
right: -6px;
bottom: 10px;
}
&.jsxc_received{
&:before {
content: '';
position: absolute;
bottom: 2px;
right: 2px;
font-size: 12px;
line-height: 12px;
color: $chatmessage_received;
}
.jsxc_timestamp {
margin-right: 4px;
}
}
.jsxc_timestamp {
float: right;
}
}
.jsxc_sys {
width: auto;
max-width: none;
padding-right: 4px;
box-sizing: border-box;
margin-right: 3px;
border-radius: 3px;
}
div.jsxc_settings {
background-image: image-url('gear_grey.svg');
background-size: 15px 15px;
background-repeat: no-repeat;
background-position: center center;
overflow: visible;
&:hover, .hover {
background-image: image-url('gear_white.svg');
}
ul {
list-style: none;
padding: 0;
margin: 0;
position: absolute;
top: 30px;
left: 0;
box-shadow: 0 5px 5px -5px $shadow;
z-index: 110;
overflow: visible;
background-color: $window_settings_bg;
display: none;
}
li {
width: 170px;
margin-left: 20px;
padding-left: 10px;
height: 30px;
line-height: 30px;
text-align: left;
cursor: pointer;
&:first-child {
border-top: 1px solid $window_settings_border_top;
}
&.jsxc_disabled {
color: $window_settings_disabled;
cursor: default;
}
&:hover:not(.jsxc_disabled ) {
color: $window_settings_color_hover;
background-color: $window_settings_bg_hover;
}
}
}
div.jsxc_transfer {
@extend %padlock-icon;
&:hover {
background-image: image-url('padlock_open_white.svg');
}
&.jsxc_fin {
background-image: image-url('padlock_close_grey.svg');
}
&.jsxc_enc {
background-image: image-url('padlock_close_orange.svg');
&.jsxc_trust {
background-image: image-url('padlock_close_green.svg');
}
}
&.jsxc_disabled:hover {
@extend %padlock-icon;
}
}
#colorbox {
outline: none;
}
#cboxWrapper {
outline: none;
}
.jsxc_loading {
margin: 0 auto;
width: 32px;
height: 32px;
border: 0;
background-size: 32px 32px !important;
background: image-url('loading.gif');
}
/* @TODO: check */
#jsxc_loginForm input[type="submit"] {
height: 34px;
display: inline-block;
padding: 6px 12px;
margin-bottom: 0;
font-size: 14px;
font-weight: normal;
line-height: 1.428571429;
text-align: center;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
border: 1px solid transparent;
border-radius: 4px;
user-select: none;
color: $white;
background-color: $loginForm_bg;
border-color: $loginForm_border;
}
#jsxc_notice>span:empty {
display: none;
}
.jsxc_oneway .jsxc_avatar {
filter: grayscale(100%);
}
.jsxc_min .jsxc_tools {
display: none;
}
.jsxc_tools > .jsxc_disabled {
opacity: 0.5;
cursor: default !important;
}
img.jsxc_vCard {
float: right;
max-width: 200px;
max-height: 200px;
border: 5px solid $white;
border-radius: 2px;
}
+28
Ver Arquivo
@@ -0,0 +1,28 @@
%avatar-icon {
width: 25px;
height: 25px;
line-height: 25px;
margin-top: 2px;
margin-right: 4px;
background-color: $avatar_bg;
border-radius: 2px;
float: left;
text-align: center;
font-weight: bold;
font-size: 30px;
color: $avatar_color;
overflow: hidden;
position: relative;
font-family: $font_sans;
background-size: cover;
background-position: center center;
}
%padlock-icon {
background-image: image-url('padlock_open_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 12px 12px;
}
+109
Ver Arquivo
@@ -0,0 +1,109 @@
%muc-avatar-icon {
text-indent: 999px;
background-image: image-url('group_white.svg');
background-size: 70% 70% !important;
background-repeat: no-repeat;
}
.jsxc_windowItem {
&.jsxc_groupchat {
.jsxc_fade {
padding-top: 30px;
}
.jsxc_video {
display: none;
}
.jsxc_transfer {
display: none;
}
.jsxc_fingerprints, jsxc_verification, jsxc_transfer {
display: none;
}
.jsxc_members {
background-image: image-url('group_grey.svg');
background-size: 90%;
background-repeat: no-repeat;
background-position: center;
&:hover {
background-image: image-url('group_white.svg');
}
}
.jsxc_chatmessage.jsxc_in {
margin-left: 40px;
.jsxc_avatar {
display: block;
position:absolute;
bottom: 0px;
left: -37px;
background-color: #777;
}
}
.jsxc_bar {
.jsxc_avatar {
@extend %muc-avatar-icon;
}
}
}
.jsxc_memberlist {
height: 30px;
width: 100%;
background-color: $window_bar_bg;
overflow: hidden;
position: absolute;
top: 0px;
transition: height 400ms;
z-index: 100;
ul {
white-space: nowrap;
position: absolute;
background-color: $window_bar_bg;
color: $window_bar_color;
overflow: hidden;
transition: left 400ms;
&>li {
display: inline-block;
white-space: normal;
&:last-child {
margin-right: 2px;
}
.jsxc_name {
display: none;
}
.jsxc_avatar {
margin-left: 2px;
margin-right: 0px;
}
}
}
&.jsxc_expand {
ul {
white-space: normal;
&>li {
display: block;
width: 100%;
height: 27px;
line-height: 27px;
.jsxc_name {
display: block;
cursor: default;
&:hover {
color: inherit;
}
}
.jsxc_avatar {
margin-right: 4px;
}
}
}
}
}
}
li[data-type="groupchat"] {
.jsxc_avatar {
@extend %muc-avatar-icon;
}
.jsxc_video {
display: none;
}
}
+154
Ver Arquivo
@@ -0,0 +1,154 @@
#jsxc_roster {
position: fixed;
top: 0px;
bottom: 0;
right: 0;
width: 200px;
overflow: visible;
border-left: 4px solid $roster_border_left;
z-index: 80;
margin-left: 10px;
box-shadow: 0px 0px 7px $shadow;
background-color: $roster_bg;
a {
cursor: pointer;
}
.slimScrollDiv {
left: -4px;
margin-bottom: 30px;
z-index: 40;
}
.jsxc_wait {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 160px;
padding: 20px;
background-color: $white;
z-index: 60;
img {
padding: 5px;
}
h3 {
margin-bottom: 5px;
font-size: 1.13em;
font-weight: bold;
}
}
input {
position: absolute;
top: 50%;
left: 31px;
width: 157px;
height: 18px;
margin-top: -11px;
padding: 2px;
border: 0;
background-image: none;
background-color: $roster_input_bg;
border-radius: 3px;
box-shadow: inner 0 0 5px $roster_input_shadow;
outline: none;
}
p {
color: $roster_color;
padding: 10px;
a {
color: $roster_a;
text-decoration: underline;
}
}
.jsxc_avatar {
position: relative;
cursor: pointer;
img {
cursor: pointer;
}
}
.jsxc_expand input {
left: 51px;
width: 137px;
}
&.jsxc_noConnection {
.slimScrollDiv {
display: none;
}
> .jsxc_bottom {
display: none;
}
}
}
#jsxc_toggleRoster {
width: 14px;
height: 100%;
position: absolute;
left: -14px !important;
top: 0;
z-index: 110;
background-color: transparent;
cursor: pointer;
&:hover {
background-color: $roster_toggle_hover;
}
}
#jsxc_roster> {
&.jsxc_bottom {
position: absolute;
left: -4px;
bottom: 0;
height: 30px;
width: 200px;
border-left: 4px solid $roster_border_left;
border-top: 1px solid $roster_bottom_border_top;
padding-left: 0;
background-color: $roster_bottom_bg;
color: $roster_color;
cursor: pointer;
line-height: 30px;
z-index: 50;
ul {
width: 190px;
position: absolute;
bottom: 30px;
left: 0;
display: none;
border-top: 1px solid $roster_bottom_border_top;
padding-left: 10px;
background-color: $roster_bottom_bg;
margin: 0;
li:last-child {
border-bottom: 1px solid $roster_bottom_border_top;
}
}
li {
height: 30px;
background-color: $roster_bottom_bg;
color: $roster_bottom_color;
cursor: pointer;
width: 180px;
padding-left: 10px;
line-height: 30px;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
&.jsxc_disabled {
color: $roster_bottom_disabled;
cursor: default;
}
&:hover:not(.jsxc_disabled) {
color: $roster_bottom_color_hover;
background-color: $roster_bottom_bg_hover;
}
}
}
&.jsxc_bottom>div>span {
cursor: pointer;
}
&.jsxc_bottom>div:hover {
color: $roster_bottom_color_hover;
}
}
+25
Ver Arquivo
@@ -0,0 +1,25 @@
.jsxc_online {
border-left: 4px solid $state_online !important;
}
.jsxc_chat {
border-left: 4px solid $state_chat !important;
}
.jsxc_away {
border-left: 4px solid $state_away !important;
}
.jsxc_xa {
border-left: 4px solid $state_xa !important;
}
.jsxc_dnd {
border-left: 4px solid $state_dnd !important;
}
.jsxc_offline {
border-left: 4px solid $state_offline !important;
}
.jsxc_hidden {
display: none;
}
.jsxc_invalid {
border: 2px solid $invalid_border !important;
}
+245
Ver Arquivo
@@ -0,0 +1,245 @@
@import 'colors';
%fullscreen {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 9000;
background-color: $fullscreen_bg;
}
.jsxc_webrtc {
width: 900px;
.jsxc_status {
z-index: 9999;
border-radius: 20px;
display: none;
position: absolute;
top: 30px;
left: 50%;
background-color: $video_status_bg;
color: $video_status_color;
padding: 15px;
font-weight: bold;
text-align: center;
}
.slimScrollDiv {
opacity: 1 !important;
}
li .jsxc_name {
cursor: auto;
&:hover {
color: $window_bar_color;
}
}
}
.jsxc_videoContainer {
width: 640px;
height: 480px;
position: relative;
background-color: $video_bg;
video {
display: none;
}
.jsxc_noRemoteVideo {
display: none;
}
}
.jsxc_remotevideo {
@extend %fullscreen;
}
.jsxc_noRemoteVideo {
@extend %fullscreen;
p {
position: absolute;
bottom: 0;
left: 0;
text-align: center;
color: $novideo_color;
width: 100%;
z-index: 100;
}
> div {
width: 200px;
height: 200px;
overflow: hidden;
position: absolute;
top: 50%;
margin-top: -100px;
left: 50%;
margin-left: -100px;
> div {
background-color: $novideo_bg;
&:first-child {
width: 50%;
height: 50%;
border-radius: 50%;
position: absolute;
left: 50%;
margin-left: -25%;
top: 10%;
}
&:last-child {
position: absolute;
bottom: -50%;
width: 100%;
height: 100%;
border-radius: 50%;
}
}
}
}
.jsxc_localvideo {
width: 160px;
height: 120px;
position: absolute;
right: 10px;
bottom: 10px;
z-index: 9990;
background-color: $black;
cursor: pointer;
}
div {
&:full-screen {
width: 100%;
height: 100%;
background-color: $black;
&.jsxc_localvideo {
border: 1px solid $white;
}
}
&:fullscreen {
width: 100%;
height: 100%;
background-color: $black;
&.jsxc_localvideo {
border: 1px solid $white;
}
}
&.jsxc_video {
background-image: image-url('camera_icon_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 15px 15px;
&:not(.jsxc_disabled) {
&:hover {
background-image: image-url('camera_icon_white.svg');
}
}
}
}
.jsxc_controlbar {
width: 640px;
.jsxc_showchat {
float: right;
}
}
.jsxc_multi>div {
display: none;
}
.jsxc_snapshotbar {
width: 100%;
display: none;
img {
height: 50px;
}
}
.jsxc_buttongroup {
display: inline;
button {
&:first-child {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
margin-right: 0;
}
&:last-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
margin-left: 0;
}
}
}
.jsxc_chatarea {
position: relative;
float: right;
height: 480px;
width: 250px;
background-color: $window_bg;
.jsxc_settings {
display: none !important;
}
.jsxc_close {
display: none !important;
}
.jsxc_video {
display: none !important;
}
.jsxc_bar {
}
.jsxc_window {
bottom: 0;
box-shadow: none;
}
> ul {
width: 250px;
height: 480px;
list-style: none;
padding: 0;
}
}
.bubblingG {
text-align: center;
width: 129px;
height: 80px;
position: absolute;
top: 40%;
left: 50%;
margin-left: -64px;
span {
display: inline-block;
vertical-align: middle;
width: 16px;
height: 16px;
margin: 40px auto;
background: $bubbling_bg;
border-radius: 81px;
animation: bubblingG 1.3s infinite alternate;
}
}
#bubblingG_1 {
animation-delay: 0s;
}
#bubblingG_2 {
animation-delay: 0.39s;
}
#bubblingG_3 {
animation-delay: 0.78s;
}
@keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color: $bubbling_start_bg;
transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color: $white;
transform: translateY(-34px);
}
}
.jsxc_fullscreen.jsxc_localvideo {
border: 1px solid $white;
}
.jsxc_videoSuitable .jsxc_name {
font-style: italic;
}
#jsxc_buddylist .jsxc_options .jsxc_video {
background-image: image-url('camera_icon_white.svg');
&.jsxc_disabled {
opacity: 0.2;
}
}

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais