Comparar commits

...

53 Commits

Autor SHA1 Mensagem Data
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
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
Klaus Herberth 9750a558f2 update example (fix #115) 2015-01-01 23:10:34 +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
57 arquivos alterados com 6330 adições e 4122 exclusões
+3
Ver Arquivo
@@ -1,3 +1,6 @@
node_modules
*.zip
*.zip.sig
bower_components
archives/
css/
+18
Ver Arquivo
@@ -1,3 +1,21 @@
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
+56 -12
Ver Arquivo
@@ -1,11 +1,11 @@
/* global module:false */
module.exports = function(grunt) {
var dep = grunt.file.readJSON('dep.json');
var dep_files = dep.map(function(el) {
return el.file;
});
// Project configuration.
grunt.initConfig({
app: grunt.file.readJSON('package.json'),
@@ -25,7 +25,7 @@ module.exports = function(grunt) {
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/**' ],
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', 'LICENSE', 'img/**', 'sound/**' ],
dest: 'build/'
} ]
}
@@ -62,12 +62,12 @@ module.exports = function(grunt) {
' * \n' +
' */\n\n',
process: function(src, filepath) {
if (filepath === 'build/lib/otr/build/dep/crypto.js') {
if (filepath === 'build/lib/otr/build/dep/crypto.js') {
src += ';';
}
var data = dep[dep_files.indexOf(filepath)];
return '/*!\n * Source: ' + filepath + ', license: ' + data.license + ', url: ' + data.url + ' */\n' + src;
}
},
@@ -115,7 +115,7 @@ module.exports = function(grunt) {
logFormat: 'console',
onComplete: function(m) {
if (m.numMatches === 0) {
grunt.fail.fatal("No entry in README.md for current version found.");
grunt.fail.fatal("No entry in CHANGELOG.md for current version found.");
}
}
}
@@ -124,7 +124,7 @@ module.exports = function(grunt) {
compress: {
main: {
options: {
archive: "jsxc-<%= app.version %>.zip"
archive: "archives/jsxc-<%= app.version %>.zip"
},
files: [ {
src: [ '**' ],
@@ -134,12 +134,47 @@ module.exports = function(grunt) {
} ]
}
},
dataUri: {
dist: {
src: 'css/*.css',
dest: 'build/css/',
options: {
target: ['img/*.*', 'img/**/*.*'],
fixDirLevel: false,
maxBytes: 2048
}
}
},
jsdoc: {
dist: {
src: ['jsxc.lib.js', 'jsxc.lib.webrtc.js'],
dest: 'doc'
}
}
},
autoprefixer: {
no_dest: {
src: 'css/*.css'
}
},
csslint: {
strict: {
options: {
import: 2
},
src: ['css/*.css']
},
},
sass: {
options: {
imagePath: '../img'
},
dist: {
files: {
'css/jsxc.css': 'scss/jsxc.scss',
'css/jsxc.webrtc.css': 'scss/jsxc.webrtc.scss'
}
}
},
});
// These plugins provide necessary tasks.
@@ -153,13 +188,22 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-search');
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.loadNpmTasks('grunt-jsdoc');
grunt.loadNpmTasks('grunt-data-uri');
grunt.loadNpmTasks('grunt-contrib-csslint');
grunt.loadNpmTasks('grunt-sass');
grunt.loadNpmTasks('grunt-autoprefixer');
// Default task.
grunt.registerTask('default', [ 'jshint', 'search', 'jsdoc', 'clean', 'copy', 'usebanner', 'replace', 'concat', 'uglify', 'compress' ]);
//Default task
grunt.registerTask('default', [ 'css' ]);
// Create new build
grunt.registerTask('build', [ 'search:changelog', 'pre', 'jsdoc' ]);
// Create alpha/beta build
grunt.registerTask('pre', [ 'jshint', 'search:console', 'clean', 'copy', 'usebanner', 'replace', 'concat', 'uglify', 'compress' ]);
grunt.registerTask('pre', [ 'jshint', 'search:console', 'clean', 'css', 'dataUri', 'copy', 'usebanner', 'replace', 'concat', 'uglify', 'compress' ]);
// before commit
grunt.registerTask('commit', [ 'jshint', 'search:console' ]);
grunt.registerTask('css', [ 'sass', 'autoprefixer' ]);
};
+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/).
+1026
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+240
Ver Arquivo
@@ -0,0 +1,240 @@
.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; }
-1243
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+477 -100
Ver Arquivo
@@ -1,15 +1,15 @@
/*! This file is concatenated for the browser. */
/*!
* jsxc v1.0.0 - 2014-11-06
* jsxc v1.1.0a - 2015-02-25
*
* Copyright (c) 2014 Klaus Herberth <klaus@jsxc.org> <br>
* Copyright (c) 2015 Klaus Herberth <klaus@jsxc.org> <br>
* Released under the MIT license
*
* Please see http://www.jsxc.org/
*
* @author Klaus Herberth <klaus@jsxc.org>
* @version 1.0.0
* @version 1.1.0a
* @license MIT
*/
@@ -25,7 +25,7 @@ var jsxc;
*/
jsxc = {
/** Version of jsxc */
version: '1.0.0',
version: '1.1.0a',
/** True if i'm the master */
master: false,
@@ -54,9 +54,6 @@ var jsxc;
/** True if restore is complete */
restoreCompleted: false,
/** True if login through form */
triggeredFromForm: false,
/** True if login through box */
triggeredFromBox: false,
@@ -95,9 +92,39 @@ var jsxc;
REGEX: {
JID: new RegExp('\\b[^"&\'\\/:<>@\\s]+@[\\w-_.]+\\b', 'ig'),
URL: new RegExp(/((?:https?:\/\/|www\.|([\w\-]+\.[a-zA-Z]{2,3})(?=\b))(?:(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\)([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|])?)|(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|]))?)/gi)
},
NS: {
CARBONS: 'urn:xmpp:carbons:2',
FORWARD: 'urn:xmpp:forward:0'
}
},
/**
* Parse a unix timestamp and return a formatted time string
*
* @memberOf jsxc
* @param {Object} unixtime
* @returns time of day and/or date
*/
getFormattedTime: function(unixtime) {
var msgDate = new Date(parseInt(unixtime));
var date = ('0' + msgDate.getDate()).slice(-2);
var month = ('0' + (msgDate.getMonth() + 1)).slice(-2);
var year = msgDate.getFullYear();
var hours = ('0' + msgDate.getHours()).slice(-2);
var minutes = ('0' + msgDate.getMinutes()).slice(-2);
var dateNow = new Date(), time = hours + ':' + minutes;
// compare dates only
dateNow.setHours(0, 0, 0, 0);
msgDate.setHours(0, 0, 0, 0);
if (dateNow.getTime() !== msgDate.getTime()) {
return date + '.' + month + '.' + year + ' ' + time;
}
return time;
},
/**
* Write debug message to console and to log.
*
@@ -171,7 +198,7 @@ var jsxc;
if (options) {
// override default options
$.extend(jsxc.options, options);
$.extend(true, jsxc.options, options);
}
/**
@@ -221,6 +248,10 @@ var jsxc;
return;
}
if (jsxc.storage.getItem('debug') === true) {
jsxc.options.otr.debug = true;
}
// Register event listener for the storage event
window.addEventListener('storage', jsxc.storage.onStorage, false);
@@ -272,7 +303,7 @@ var jsxc;
var settings = jsxc.prepareLogin();
if (settings !== false && (settings.xmpp.onlogin === "true" || settings.xmpp.onlogin === true)) {
jsxc.triggeredFromForm = true;
jsxc.options.loginForm.triggered = true;
jsxc.xmpp.login();
@@ -400,8 +431,12 @@ var jsxc;
// Sending keepalive signal
jsxc.startKeepAlive();
// create or load DSA key and call _onMaster
jsxc.otr.createDSA();
if (jsxc.options.get('otr').enable) {
// create or load DSA key and call _onMaster
jsxc.otr.createDSA();
} else {
jsxc._onMaster();
}
},
/**
@@ -441,6 +476,10 @@ var jsxc;
}
}
$(document).on('connectionReady.jsxc', function() {
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
jsxc.xmpp.login();
},
@@ -690,6 +729,27 @@ var jsxc;
return jsxc.l[k] || key.replace(/_/g, ' ');
});
},
/**
* Executes the given function in jsxc namespace.
*
* @memberOf jsxc
* @param {string} fnName Function name
* @param {array} fnParams Function parameters
* @returns Function return value
*/
exec: function(fnName, fnParams) {
var fnList = fnName.split('.');
var fn = jsxc[fnList[0]];
var i;
for (i = 1; i < fnList.length; i++) {
fn = fn[fnList[i]];
}
if (typeof fn === 'function') {
return fn.apply(null, fnParams);
}
}
};
/**
@@ -710,7 +770,11 @@ var jsxc;
/** OTR options */
otr: {
ERROR_START_AKE: true
enable: true,
ERROR_START_AKE: false,
debug: false,
SEND_WHITESPACE_TAG: true,
WHITESPACE_START_AKE: true
},
/** xmpp options */
@@ -746,7 +810,19 @@ var jsxc;
/** manipulate JID from input element */
preJid: function(jid) {
return jid;
}
},
/**
* Action after connected: submit [String] Submit form, false [boolean]
* Do nothing, continue [String] Start chat
*/
onConnected: 'submit',
/**
* Action after auth fail: submit [String] Submit form, false [boolean]
* Do nothing, ask [String] Show auth fail dialog
*/
onAuthFail: 'submit'
},
/** jquery object from logout element */
@@ -817,9 +893,15 @@ var jsxc;
*
* @memberOf jsxc.options
* @param data Holds all data as key/value
* @returns {boolean} false if function failes
*/
saveSettinsPermanent: function() {
},
carbons: {
/** Enable carbon copies? */
enable: false
}
};
@@ -873,6 +955,11 @@ var jsxc;
* @memberOf jsxc.gui
*/
init: function() {
//Prevent duplicate windowList
if ($('#jsxc_windowList').length > 0) {
return;
}
$('body').append($(jsxc.gui.template.get('windowList')));
$(window).resize(jsxc.gui.updateWindowListSB);
@@ -892,7 +979,9 @@ var jsxc;
jsxc.gui.tooltip('#jsxc_windowList');
jsxc.gui.roster.init();
if (!jsxc.el_exists('#jsxc_roster')) {
jsxc.gui.roster.init();
}
// prepare regexp for emotions
$.each(jsxc.gui.emotions, function(i, val) {
@@ -1017,7 +1106,7 @@ var jsxc;
var avatarSrc = jsxc.storage.getUserItem('avatar', aid);
var setAvatar = function(src) {
if (src === 0) {
if (src === 0 || src === '0') {
jsxc.options.defaultAvatar.call(el, jid);
return;
}
@@ -1041,13 +1130,18 @@ var jsxc;
if (vCard.length === 0) {
jsxc.debug('No photo provided');
src = 0;
src = '0';
} else if (vCard.find('EXTVAL').length > 0) {
src = vCard.find('EXTVAL').text();
} else {
var img = vCard.find('BINVAL').text();
var type = vCard.find('TYPE').text();
src = 'data:' + type + ';base64,' + img;
}
// concat chunks
src = src.replace(/[\t\r\n\f]/gi, '');
jsxc.storage.setUserItem('avatar', aid, src);
setAvatar(src);
}, Strophe.getBareJidFromJid(jid), function(msg) {
@@ -1184,7 +1278,7 @@ var jsxc;
var settings = jsxc.prepareLogin();
jsxc.triggeredFromBox = true;
jsxc.triggeredFromForm = false;
jsxc.options.loginForm.triggered = false;
if (settings === false) {
jsxc.gui.showAuthFail();
@@ -1451,7 +1545,7 @@ var jsxc;
showAuthFail: function() {
jsxc.gui.dialog.open(jsxc.gui.template.get('authFailDialog'));
if (jsxc.triggeredFromBox) {
if (jsxc.options.loginForm.triggered !== false) {
$('#jsxc_dialog .jsxc_cancel').hide();
}
@@ -1642,7 +1736,17 @@ var jsxc;
var type = photo.find('TYPE').text();
var src = 'data:' + type + ';base64,' + img;
$('#jsxc_dialog h3').before('<img class="jsxc_vCard" src="' + src + '" alt="avatar" />');
if (photo.find('EXTVAL').length > 0) {
src = photo.find('EXTVAL').text();
}
// concat chunks
src = src.replace(/[\t\r\n\f]/gi, '');
var img_el = $('<img class="jsxc_vCard" alt="avatar" />');
img_el.attr('src', src);
$('#jsxc_dialog h3').before(img_el);
}
if ($(stanza).find('vCard').length === 0 || ($(stanza).find('vcard > *').length === 1 && photo.length === 1)) {
@@ -1716,6 +1820,10 @@ var jsxc;
var err = jsxc.options.saveSettinsPermanent.call(this, data);
if (typeof self.attr('data-onsubmit') === 'string') {
jsxc.exec(self.attr('data-onsubmit'), [ err ]);
}
setTimeout(function() {
self.find('input[type="submit"]').effect('highlight', {
color: (err) ? 'green' : 'red'
@@ -2025,10 +2133,6 @@ var jsxc;
$('#jsxc_presence > span').text($('#jsxc_presence > ul .jsxc_' + pres).text());
jsxc.gui.updatePresence('own', pres);
$(document).on('cloaded.roster.jsxc', function() {
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
jsxc.gui.tooltip('#jsxc_roster');
jsxc.notice.load();
@@ -2266,8 +2370,7 @@ var jsxc;
* Shows a text with link to a login box that no connection exists.
*/
noConnection: function() {
$('#jsxc_roster .slimScrollDiv').remove();
$('#jsxc_roster > .jsxc_bottom').remove();
$('#jsxc_roster').addClass('jsxc_noConnection');
$('#jsxc_roster').append($('<p>' + jsxc.l.no_connection + '</p>').append(' <a>' + jsxc.l.relogin + '</a>').click(function() {
jsxc.gui.showLoginBox();
@@ -2736,8 +2839,11 @@ var jsxc;
* @param {String} direction 'in' message is received or 'out' message is
* send
* @param {String} msg Message to display
* @param {boolean} encrypted Was this message encrypted? Default: false
* @param {boolean} forwarded Was this message forwarded? Default: false
* @param {integer} stamp Timestamp
*/
postMessage: function(bid, direction, msg) {
postMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
var data = jsxc.storage.getUserItem('buddy', bid);
var html_msg = msg;
@@ -2747,12 +2853,12 @@ var jsxc;
// exceptions:
if (direction === 'out' && data.msgstate === 2) {
if (direction === 'out' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED && forwarded !== true) {
direction = 'sys';
msg = jsxc.l.your_message_wasnt_send_please_end_your_private_conversation;
}
if (direction === 'in' && data.msgstate === 2) {
if (direction === 'in' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED) {
direction = 'sys';
msg = jsxc.l.unencrypted_message_received + ' ' + msg;
}
@@ -2762,13 +2868,14 @@ var jsxc;
msg = jsxc.l.your_message_wasnt_send_because_you_have_no_valid_subscription;
}
var post = jsxc.storage.saveMessage(bid, direction, msg);
encrypted = encrypted || data.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED;
var post = jsxc.storage.saveMessage(bid, direction, msg, encrypted, forwarded, stamp);
if (direction === 'in') {
$(document).trigger('postmessagein.jsxc', [ bid, html_msg ]);
}
if (direction === 'out' && jsxc.master) {
if (direction === 'out' && jsxc.master && forwarded !== true) {
jsxc.xmpp.sendMessage(bid, html_msg, post.uid);
}
@@ -2792,7 +2899,6 @@ var jsxc;
var msg = post.msg;
var direction = post.direction;
var uid = post.uid;
var received = post.received || false;
if (win.find('.jsxc_textinput').is(':not(:focus)') && jsxc.restoreCompleted && direction === 'in' && !restore) {
jsxc.gui.window.highlight(bid);
@@ -2831,17 +2937,29 @@ var jsxc;
});
});
var msgDiv = $("<div>");
var msgDiv = $("<div>"), msgTsDiv = $("<div>");
msgDiv.addClass('jsxc_chatmessage jsxc_' + direction);
msgDiv.attr('id', uid);
msgDiv.html(msg);
msgDiv.html('<div>' + msg + '</div>');
msgTsDiv.addClass('jsxc_timestamp');
msgTsDiv.html(jsxc.getFormattedTime(post.stamp));
if (received) {
if (post.received || false) {
msgDiv.addClass('jsxc_received');
}
if (post.forwarded) {
msgDiv.addClass('jsxc_forwarded');
}
if (post.encrypted) {
msgDiv.addClass('jsxc_encrypted');
}
if (direction === 'sys') {
jsxc.gui.window.get(bid).find('.jsxc_textarea').append('<div style="clear:both"/>');
} else if (typeof post.stamp !== 'undefined') {
msgDiv.append(msgTsDiv);
}
win.find('.jsxc_textarea').append(msgDiv);
@@ -3159,6 +3277,14 @@ var jsxc;
<label for="priority-dnd">%%dnd%%</label><input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/><br />\
<input type="submit" value="%%Save%%"/>\
</fieldset>\
</form>\
<p></p>\
<form data-onsubmit="xmpp.carbons.refresh">\
<fieldset class="jsxc_fieldsetCarbons jsxc_fieldset">\
<legend>%%Carbon copy%%</legend>\
<label for="carbons-enable">%%Enable%%</label><input type="checkbox" id="carbons-enable" /><br />\
<input type="submit" value="%%Save%%"/>\
</fieldset>\
</form>'
};
@@ -3173,13 +3299,50 @@ var jsxc;
/**
* Create new connection or attach to old
*
* @name login
* @memberOf jsxc.xmpp
*/
/**
* Create new connection with given parameters.
*
* @name login^2
* @param {string} jid
* @param {string} password
* @memberOf jsxc.xmpp
*/
/**
* Attach connection with given parameters.
*
* @name login^3
* @param {string} jid
* @param {string} sid
* @param {string} rid
* @memberOf jsxc.xmpp
*/
login: function() {
var sid = jsxc.storage.getItem('sid');
var rid = jsxc.storage.getItem('rid');
var jid = jsxc.storage.getItem('jid');
if (jsxc.xmpp.conn && jsxc.xmpp.conn.connected) {
return;
}
var jid = null, password = null, sid = null, rid = null;
switch (arguments.length) {
case 2:
jid = arguments[0];
password = arguments[1];
break;
case 3:
jid = arguments[0];
sid = arguments[1];
rid = arguments[2];
break;
default:
jid = jsxc.storage.getItem('jid');
sid = jsxc.storage.getItem('sid');
rid = jsxc.storage.getItem('rid');
}
var url = jsxc.options.get('xmpp').url;
// Register eventlistener
@@ -3187,6 +3350,8 @@ var jsxc;
$(document).on('attached.jsxc', jsxc.xmpp.attached);
$(document).on('disconnected.jsxc', jsxc.xmpp.disconnected);
$(document).on('ridChange', jsxc.xmpp.onRidChange);
$(document).on('connfail.jsxc', jsxc.xmpp.onConnfail);
$(document).on('authfail.jsxc', jsxc.xmpp.onAuthFail);
Strophe.addNamespace('RECEIPTS', 'urn:xmpp:receipts');
@@ -3227,10 +3392,10 @@ var jsxc;
$(document).trigger('disconnected.jsxc');
break;
case Strophe.Status.CONNFAIL:
jsxc.xmpp.onConnfail(condition);
$(document).trigger('connfail.jsxc');
break;
case Strophe.Status.AUTHFAIL:
jsxc.gui.showAuthFail();
$(document).trigger('authfail.jsxc');
break;
}
};
@@ -3246,7 +3411,23 @@ var jsxc;
} else {
jsxc.debug('New connection');
jsxc.xmpp.conn.connect(jsxc.options.xmpp.jid, jsxc.options.xmpp.password, callback);
if (jsxc.xmpp.conn.caps) {
// Add system handler, because user handler isn't called before
// we are authenticated
jsxc.xmpp.conn._addSysHandler(function(stanza) {
var from = jsxc.xmpp.conn.domain, c = stanza.querySelector('c'), ver = c.getAttribute('ver'), node = c.getAttribute('node');
var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
jsxc.xmpp.conn.caps._jidVerIndex[from] = ver;
_jidNodeIndex[from] = node;
localStorage.setItem('strophe.caps._jidVerIndex', JSON.stringify(jsxc.xmpp.conn.caps._jidVerIndex));
localStorage.setItem('strophe.caps._jidNodeIndex', JSON.stringify(_jidNodeIndex));
}, Strophe.NS.CAPS);
}
jsxc.xmpp.conn.connect(jid || jsxc.options.xmpp.jid, password || jsxc.options.xmpp.password, callback);
}
},
@@ -3281,11 +3462,11 @@ var jsxc;
jsxc.triggeredFromElement = true;
// restore all otr objects
$.each(jsxc.storage.getUserItem('otrlist'), function(i, val) {
$.each(jsxc.storage.getUserItem('otrlist') || {}, function(i, val) {
jsxc.otr.create(val);
});
var numOtr = Object.keys(jsxc.otr.objects).length + 1;
var numOtr = Object.keys(jsxc.otr.objects || {}).length + 1;
var disReady = function() {
if (--numOtr <= 0) {
jsxc.xmpp.conn.flush();
@@ -3297,7 +3478,7 @@ var jsxc;
};
// end all private conversations
$.each(jsxc.otr.objects, function(key, obj) {
$.each(jsxc.otr.objects || {}, function(key, obj) {
if (obj.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED) {
obj.endOtr.call(obj, function() {
obj.init.call(obj);
@@ -3341,20 +3522,25 @@ var jsxc;
jsxc.storage.removeUserItem('avatar', 'own');
jsxc.storage.removeUserItem('otrlist');
// submit login form
if (jsxc.triggeredFromForm) {
// Trigger normal submit
jsxc.submitLoginForm();
return;
if (jsxc.options.loginForm.triggered) {
switch (jsxc.options.loginForm.onConnected || 'submit') {
case 'submit':
jsxc.submitLoginForm();
/* falls through */
case false:
jsxc.xmpp.connectionReady();
return;
}
}
// reload page after login from login box
if (jsxc.triggeredFromBox) {
window.location.reload();
return;
}
// start chat
jsxc.xmpp.connectionReady();
jsxc.gui.init();
$('#jsxc_roster').removeClass('jsxc_noConnection');
jsxc.onMaster();
jsxc.xmpp.conn.resume();
jsxc.gui.dialog.close();
$(document).trigger('attached.jsxc');
},
/**
@@ -3369,6 +3555,37 @@ var jsxc;
jsxc.xmpp.conn.addHandler(jsxc.xmpp.onReceived, null, 'message');
jsxc.xmpp.conn.addHandler(jsxc.xmpp.onPresence, null, 'presence');
var caps = jsxc.xmpp.conn.caps;
var domain = jsxc.xmpp.conn.domain;
if (caps && jsxc.options.get('carbons').enable) {
var conditionalEnable = function() {
if (jsxc.xmpp.conn.caps.hasFeatureByJid(domain, jsxc.CONST.NS.CARBONS)) {
jsxc.xmpp.carbons.enable();
}
};
if (typeof caps._knownCapabilities[caps._jidVerIndex[domain]] === 'undefined') {
var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
$(document).on('caps.strophe', function onCaps(ev, from) {
if (from !== domain) {
return;
}
conditionalEnable();
$(document).off('caps.strophe', onCaps);
});
caps._requestCapabilities(jsxc.xmpp.conn.domain, _jidNodeIndex[domain], caps._jidVerIndex[domain]);
} else {
// We know server caps
conditionalEnable();
}
}
// Only load roaster if necessary
if (!jsxc.restore || !jsxc.storage.getUserItem('buddylist')) {
// in order to not overide existing presence information, we send
@@ -3450,6 +3667,13 @@ var jsxc;
jsxc.storage.removeUserItem('avatar', 'own');
jsxc.storage.removeUserItem('otrlist');
$(document).off('connected.jsxc', jsxc.xmpp.connected);
$(document).off('attached.jsxc', jsxc.xmpp.attached);
$(document).off('disconnected.jsxc', jsxc.xmpp.disconnected);
$(document).off('ridChange', jsxc.xmpp.onRidChange);
$(document).off('connfail.jsxc', jsxc.xmpp.onConnfail);
$(document).off('authfail.jsxc', jsxc.xmpp.onAuthFail);
jsxc.xmpp.conn = null;
$('#jsxc_windowList').remove();
@@ -3473,14 +3697,32 @@ var jsxc;
* @param {String} condition information why we lost the connection
* @private
*/
onConnfail: function(condition) {
onConnfail: function(ev, condition) {
jsxc.debug('XMPP connection failed: ' + condition);
if (jsxc.triggeredFromForm) {
if (jsxc.options.loginForm.triggered) {
jsxc.submitLoginForm();
}
},
/**
* Triggered on auth fail.
*
* @private
*/
onAuthFail: function() {
if (jsxc.options.loginForm.triggered) {
switch (jsxc.options.loginForm.onAuthFail || 'ask') {
case 'ask':
jsxc.gui.showAuthFail();
break;
case 'submit':
jsxc.submitLoginForm();
break;
}
}
},
/**
* Triggered on initial roster load
*
@@ -3628,8 +3870,6 @@ var jsxc;
var ptype = $(presence).attr('type');
var from = $(presence).attr('from');
var jid = Strophe.getBareJidFromJid(from).toLowerCase();
var to = $(presence).attr('to');
to = (to) ? Strophe.getBareJidFromJid(to).toLowerCase() : jid;
var r = Strophe.getResourceFromJid(from);
var bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
@@ -3637,7 +3877,7 @@ var jsxc;
var status = null;
var xVCard = $(presence).find('x[xmlns="vcard-temp:x:update"]');
if (jid === to) {
if (jid === Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))) {
return true;
}
@@ -3731,28 +3971,66 @@ var jsxc;
* @returns {Boolean}
* @private
*/
onMessage: function(message) {
/*
* <message xmlns='jabber:client' type='chat' to='' id='' from=''>
* <body>...</body> <active
* xmlns='http://jabber.org/protocol/chatstates'/> </message>
*/
onMessage: function(stanza) {
jsxc.debug('Incoming message', message);
var forwarded = $(stanza).find('forwarded[xmlns="' + jsxc.CONST.NS.FORWARD + '"]');
var message, carbon;
if (forwarded.length > 0) {
message = forwarded.find('> message');
forwarded = true;
carbon = $(stanza).find('> [xmlns="' + jsxc.CONST.NS.CARBONS + '"]');
if (carbon.length === 0) {
carbon = false;
}
jsxc.debug('Incoming forwarded message', message);
} else {
message = stanza;
forwarded = false;
carbon = false;
jsxc.debug('Incoming message', message);
}
var body = $(message).find('body:first').text();
if (!body || (body.match(/\?OTR/i) && forwarded)) {
return true;
}
var type = $(message).attr('type');
var from = $(message).attr('from');
var mid = $(message).attr('id');
var jid = Strophe.getBareJidFromJid(from);
var bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
var body = $(message).find('body:first').text();
var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
var bid;
var delay = $(message).find('delay[xmlns="urn:xmpp:delay"]');
var stamp = (delay.length > 0) ? new Date(delay.attr('stamp')) : new Date();
stamp = stamp.getTime();
if (carbon) {
var direction = (carbon.prop("tagName") === 'sent') ? 'out' : 'in';
bid = jsxc.jidToBid((direction === 'out') ? $(message).attr('to') : from);
jsxc.gui.window.postMessage(bid, direction, body, false, forwarded, stamp);
if (!body) {
return true;
} else if (forwarded) {
// Someone forwarded a message to us
body = from + jsxc.translate(' %%to%% ') + $(stanza).attr('to') + '"' + body + '"';
from = $(stanza).attr('from');
}
var jid = Strophe.getBareJidFromJid(from);
bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
if (data === null) {
// jid not in roster
@@ -3765,7 +4043,7 @@ var jsxc;
var msg = jsxc.removeHTML(body);
msg = jsxc.escapeHTML(msg);
jsxc.storage.saveMessage(bid, 'in', msg);
jsxc.storage.saveMessage(bid, 'in', msg, false, forwarded, stamp);
return true;
}
@@ -3787,7 +4065,7 @@ var jsxc;
jsxc.otr.create(bid);
}
if (mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
if (!forwarded && mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
// Send received according to XEP-0184
jsxc.xmpp.conn.send($msg({
to: from
@@ -3798,9 +4076,12 @@ var jsxc;
}
if (jsxc.otr.objects.hasOwnProperty(bid)) {
jsxc.otr.objects[bid].receiveMsg(body);
jsxc.otr.objects[bid].receiveMsg(body, {
stamp: stamp,
forwarded: forwarded
});
} else {
jsxc.gui.window.postMessage(bid, 'in', body);
jsxc.gui.window.postMessage(bid, 'in', body, false, forwarded, stamp);
}
// preserve handler
@@ -3959,6 +4240,12 @@ var jsxc;
id: uid
}).c('body').t(msg);
if (jsxc.xmpp.carbons.enabled && msg.match(/^\?OTR/)) {
xmlMsg.up().c("private", {
xmlns: jsxc.CONST.NS.CARBONS
});
}
if (type === 'chat' && (isBar || jsxc.xmpp.conn.caps.hasFeatureByJid(jid, Strophe.NS.RECEIPTS))) {
// Add request according to XEP-0184
xmlMsg.up().c('request', {
@@ -4016,6 +4303,85 @@ var jsxc;
}
};
/**
* Handle carbons (XEP-0280);
*
* @namespace jsxc.xmpp.carbons
*/
jsxc.xmpp.carbons = {
enabled: false,
/**
* Enable carbons.
*
* @memberOf jsxc.xmpp.carbons
* @param cb callback
*/
enable: function(cb) {
var iq = $iq({
type: 'set'
}).c('enable', {
xmlns: jsxc.CONST.NS.CARBONS
});
jsxc.xmpp.conn.sendIQ(iq, function() {
jsxc.xmpp.carbons.enabled = true;
jsxc.debug('Carbons enabled');
if (cb) {
cb.call(this);
}
}, function(stanza) {
jsxc.warn('Could not enable carbons', stanza);
});
},
/**
* Disable carbons.
*
* @memberOf jsxc.xmpp.carbons
* @param cb callback
*/
disable: function(cb) {
var iq = $iq({
type: 'set'
}).c('disable', {
xmlns: jsxc.CONST.NS.CARBONS
});
jsxc.xmpp.conn.sendIQ(iq, function() {
jsxc.xmpp.carbons.enabled = false;
jsxc.debug('Carbons disabled');
if (cb) {
cb.call(this);
}
}, function(stanza) {
jsxc.warn('Could not disable carbons', stanza);
});
},
/**
* Enable/Disable carbons depending on options key.
*
* @memberOf jsxc.xmpp.carbons
* @param err error message
*/
refresh: function(err) {
if (err === false) {
return;
}
if (jsxc.options.get('carbons').enable) {
return jsxc.xmpp.carbons.enable();
}
return jsxc.xmpp.carbons.disable();
}
};
/**
* Handle long-live data
*
@@ -4555,9 +4921,11 @@ var jsxc;
* @param bid
* @param direction
* @param msg
* @param encrypted
* @param forwarded
* @return post
*/
saveMessage: function(bid, direction, msg) {
saveMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
var chat = jsxc.storage.getUserItem('chat', bid) || [];
var uid = new Date().getTime() + ':msg';
@@ -4570,7 +4938,10 @@ var jsxc;
direction: direction,
msg: msg,
uid: uid.replace(/:/, '-'),
received: false
received: false,
encrypted: encrypted || false,
forwarded: forwarded || false,
stamp: stamp || new Date().getTime()
};
chat.unshift(post);
@@ -4624,20 +4995,24 @@ var jsxc;
* Handler for otr receive event
*
* @memberOf jsxc.otr
* @param {string} bid
* @param {string} msg received message
* @param {string} encrypted True, if msg was encrypted.
* @param {Object} d
* @param {string} d.bid
* @param {string} d.msg received message
* @param {boolean} d.encrypted True, if msg was encrypted.
* @param {boolean} d.forwarded
* @param {string} d.stamp timestamp
*/
receiveMessage: function(bid, msg, encrypted) {
receiveMessage: function(d) {
var bid = d.bid;
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT) {
jsxc.otr.backup(bid);
}
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !encrypted) {
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Received an unencrypted message.%% [') + msg + ']');
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !d.encrypted) {
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Received an unencrypted message.%% [') + d.msg + ']', d.encrypted, d.forwarded, d.stamp);
} else {
jsxc.gui.window.postMessage(bid, 'in', msg);
jsxc.gui.window.postMessage(bid, 'in', d.msg, d.encrypted, d.forwarded, d.stamp);
}
},
@@ -4772,8 +5147,14 @@ var jsxc;
});
// Receive message
jsxc.otr.objects[bid].on('ui', function(msg, encrypted) {
jsxc.otr.receiveMessage(bid, msg, encrypted === true);
jsxc.otr.objects[bid].on('ui', function(msg, encrypted, meta) {
jsxc.otr.receiveMessage({
bid: bid,
msg: msg,
encrypted: encrypted === true,
stamp: meta.stamp,
forwarded: meta.forwarded
});
});
// Send message
@@ -5364,16 +5745,7 @@ var jsxc;
notice.click(function() {
jsxc.notice.remove(nid);
var fnList = fnName.split('.');
var fn = jsxc[fnList[0]];
var i;
for (i = 1; i < fnList.length; i++) {
fn = fn[fnList[i]];
}
if (typeof fn === 'function') {
fn.apply(null, fnParams);
}
jsxc.exec(fnName, fnParams);
return false;
});
@@ -5873,15 +6245,15 @@ var jsxc;
}(jQuery));
/*!
* jsxc v1.0.0 - 2014-11-06
* jsxc v1.1.0a - 2015-02-25
*
* Copyright (c) 2014 Klaus Herberth <klaus@jsxc.org> <br>
* Copyright (c) 2015 Klaus Herberth <klaus@jsxc.org> <br>
* Released under the MIT license
*
* Please see http://www.jsxc.org/
*
* @author Klaus Herberth <klaus@jsxc.org>
* @version 1.0.0
* @version 1.1.0a
* @license MIT
*/
@@ -6162,6 +6534,11 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
jsxc.debug('Update icon', bid);
var self = jsxc.webrtc;
if (bid === jsxc.jidToBid(self.conn.jid)) {
return;
}
var win = jsxc.gui.window.get(bid);
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy', bid).jid;
+469 -97
Ver Arquivo
@@ -1,13 +1,13 @@
/*!
* jsxc v1.0.0 - 2014-11-06
* jsxc v1.1.0a - 2015-02-25
*
* Copyright (c) 2014 Klaus Herberth <klaus@jsxc.org> <br>
* Copyright (c) 2015 Klaus Herberth <klaus@jsxc.org> <br>
* Released under the MIT license
*
* Please see http://www.jsxc.org/
*
* @author Klaus Herberth <klaus@jsxc.org>
* @version 1.0.0
* @version 1.1.0a
* @license MIT
*/
@@ -23,7 +23,7 @@ var jsxc;
*/
jsxc = {
/** Version of jsxc */
version: '1.0.0',
version: '1.1.0a',
/** True if i'm the master */
master: false,
@@ -52,9 +52,6 @@ var jsxc;
/** True if restore is complete */
restoreCompleted: false,
/** True if login through form */
triggeredFromForm: false,
/** True if login through box */
triggeredFromBox: false,
@@ -93,9 +90,39 @@ var jsxc;
REGEX: {
JID: new RegExp('\\b[^"&\'\\/:<>@\\s]+@[\\w-_.]+\\b', 'ig'),
URL: new RegExp(/((?:https?:\/\/|www\.|([\w\-]+\.[a-zA-Z]{2,3})(?=\b))(?:(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\)([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|])?)|(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|]))?)/gi)
},
NS: {
CARBONS: 'urn:xmpp:carbons:2',
FORWARD: 'urn:xmpp:forward:0'
}
},
/**
* Parse a unix timestamp and return a formatted time string
*
* @memberOf jsxc
* @param {Object} unixtime
* @returns time of day and/or date
*/
getFormattedTime: function(unixtime) {
var msgDate = new Date(parseInt(unixtime));
var date = ('0' + msgDate.getDate()).slice(-2);
var month = ('0' + (msgDate.getMonth() + 1)).slice(-2);
var year = msgDate.getFullYear();
var hours = ('0' + msgDate.getHours()).slice(-2);
var minutes = ('0' + msgDate.getMinutes()).slice(-2);
var dateNow = new Date(), time = hours + ':' + minutes;
// compare dates only
dateNow.setHours(0, 0, 0, 0);
msgDate.setHours(0, 0, 0, 0);
if (dateNow.getTime() !== msgDate.getTime()) {
return date + '.' + month + '.' + year + ' ' + time;
}
return time;
},
/**
* Write debug message to console and to log.
*
@@ -169,7 +196,7 @@ var jsxc;
if (options) {
// override default options
$.extend(jsxc.options, options);
$.extend(true, jsxc.options, options);
}
/**
@@ -219,6 +246,10 @@ var jsxc;
return;
}
if (jsxc.storage.getItem('debug') === true) {
jsxc.options.otr.debug = true;
}
// Register event listener for the storage event
window.addEventListener('storage', jsxc.storage.onStorage, false);
@@ -270,7 +301,7 @@ var jsxc;
var settings = jsxc.prepareLogin();
if (settings !== false && (settings.xmpp.onlogin === "true" || settings.xmpp.onlogin === true)) {
jsxc.triggeredFromForm = true;
jsxc.options.loginForm.triggered = true;
jsxc.xmpp.login();
@@ -398,8 +429,12 @@ var jsxc;
// Sending keepalive signal
jsxc.startKeepAlive();
// create or load DSA key and call _onMaster
jsxc.otr.createDSA();
if (jsxc.options.get('otr').enable) {
// create or load DSA key and call _onMaster
jsxc.otr.createDSA();
} else {
jsxc._onMaster();
}
},
/**
@@ -439,6 +474,10 @@ var jsxc;
}
}
$(document).on('connectionReady.jsxc', function() {
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
jsxc.xmpp.login();
},
@@ -688,6 +727,27 @@ var jsxc;
return jsxc.l[k] || key.replace(/_/g, ' ');
});
},
/**
* Executes the given function in jsxc namespace.
*
* @memberOf jsxc
* @param {string} fnName Function name
* @param {array} fnParams Function parameters
* @returns Function return value
*/
exec: function(fnName, fnParams) {
var fnList = fnName.split('.');
var fn = jsxc[fnList[0]];
var i;
for (i = 1; i < fnList.length; i++) {
fn = fn[fnList[i]];
}
if (typeof fn === 'function') {
return fn.apply(null, fnParams);
}
}
};
/**
@@ -708,7 +768,11 @@ var jsxc;
/** OTR options */
otr: {
ERROR_START_AKE: true
enable: true,
ERROR_START_AKE: false,
debug: false,
SEND_WHITESPACE_TAG: true,
WHITESPACE_START_AKE: true
},
/** xmpp options */
@@ -744,7 +808,19 @@ var jsxc;
/** manipulate JID from input element */
preJid: function(jid) {
return jid;
}
},
/**
* Action after connected: submit [String] Submit form, false [boolean]
* Do nothing, continue [String] Start chat
*/
onConnected: 'submit',
/**
* Action after auth fail: submit [String] Submit form, false [boolean]
* Do nothing, ask [String] Show auth fail dialog
*/
onAuthFail: 'submit'
},
/** jquery object from logout element */
@@ -815,9 +891,15 @@ var jsxc;
*
* @memberOf jsxc.options
* @param data Holds all data as key/value
* @returns {boolean} false if function failes
*/
saveSettinsPermanent: function() {
},
carbons: {
/** Enable carbon copies? */
enable: false
}
};
@@ -871,6 +953,11 @@ var jsxc;
* @memberOf jsxc.gui
*/
init: function() {
//Prevent duplicate windowList
if ($('#jsxc_windowList').length > 0) {
return;
}
$('body').append($(jsxc.gui.template.get('windowList')));
$(window).resize(jsxc.gui.updateWindowListSB);
@@ -890,7 +977,9 @@ var jsxc;
jsxc.gui.tooltip('#jsxc_windowList');
jsxc.gui.roster.init();
if (!jsxc.el_exists('#jsxc_roster')) {
jsxc.gui.roster.init();
}
// prepare regexp for emotions
$.each(jsxc.gui.emotions, function(i, val) {
@@ -1015,7 +1104,7 @@ var jsxc;
var avatarSrc = jsxc.storage.getUserItem('avatar', aid);
var setAvatar = function(src) {
if (src === 0) {
if (src === 0 || src === '0') {
jsxc.options.defaultAvatar.call(el, jid);
return;
}
@@ -1039,13 +1128,18 @@ var jsxc;
if (vCard.length === 0) {
jsxc.debug('No photo provided');
src = 0;
src = '0';
} else if (vCard.find('EXTVAL').length > 0) {
src = vCard.find('EXTVAL').text();
} else {
var img = vCard.find('BINVAL').text();
var type = vCard.find('TYPE').text();
src = 'data:' + type + ';base64,' + img;
}
// concat chunks
src = src.replace(/[\t\r\n\f]/gi, '');
jsxc.storage.setUserItem('avatar', aid, src);
setAvatar(src);
}, Strophe.getBareJidFromJid(jid), function(msg) {
@@ -1182,7 +1276,7 @@ var jsxc;
var settings = jsxc.prepareLogin();
jsxc.triggeredFromBox = true;
jsxc.triggeredFromForm = false;
jsxc.options.loginForm.triggered = false;
if (settings === false) {
jsxc.gui.showAuthFail();
@@ -1449,7 +1543,7 @@ var jsxc;
showAuthFail: function() {
jsxc.gui.dialog.open(jsxc.gui.template.get('authFailDialog'));
if (jsxc.triggeredFromBox) {
if (jsxc.options.loginForm.triggered !== false) {
$('#jsxc_dialog .jsxc_cancel').hide();
}
@@ -1640,7 +1734,17 @@ var jsxc;
var type = photo.find('TYPE').text();
var src = 'data:' + type + ';base64,' + img;
$('#jsxc_dialog h3').before('<img class="jsxc_vCard" src="' + src + '" alt="avatar" />');
if (photo.find('EXTVAL').length > 0) {
src = photo.find('EXTVAL').text();
}
// concat chunks
src = src.replace(/[\t\r\n\f]/gi, '');
var img_el = $('<img class="jsxc_vCard" alt="avatar" />');
img_el.attr('src', src);
$('#jsxc_dialog h3').before(img_el);
}
if ($(stanza).find('vCard').length === 0 || ($(stanza).find('vcard > *').length === 1 && photo.length === 1)) {
@@ -1714,6 +1818,10 @@ var jsxc;
var err = jsxc.options.saveSettinsPermanent.call(this, data);
if (typeof self.attr('data-onsubmit') === 'string') {
jsxc.exec(self.attr('data-onsubmit'), [ err ]);
}
setTimeout(function() {
self.find('input[type="submit"]').effect('highlight', {
color: (err) ? 'green' : 'red'
@@ -2023,10 +2131,6 @@ var jsxc;
$('#jsxc_presence > span').text($('#jsxc_presence > ul .jsxc_' + pres).text());
jsxc.gui.updatePresence('own', pres);
$(document).on('cloaded.roster.jsxc', function() {
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
jsxc.gui.tooltip('#jsxc_roster');
jsxc.notice.load();
@@ -2264,8 +2368,7 @@ var jsxc;
* Shows a text with link to a login box that no connection exists.
*/
noConnection: function() {
$('#jsxc_roster .slimScrollDiv').remove();
$('#jsxc_roster > .jsxc_bottom').remove();
$('#jsxc_roster').addClass('jsxc_noConnection');
$('#jsxc_roster').append($('<p>' + jsxc.l.no_connection + '</p>').append(' <a>' + jsxc.l.relogin + '</a>').click(function() {
jsxc.gui.showLoginBox();
@@ -2734,8 +2837,11 @@ var jsxc;
* @param {String} direction 'in' message is received or 'out' message is
* send
* @param {String} msg Message to display
* @param {boolean} encrypted Was this message encrypted? Default: false
* @param {boolean} forwarded Was this message forwarded? Default: false
* @param {integer} stamp Timestamp
*/
postMessage: function(bid, direction, msg) {
postMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
var data = jsxc.storage.getUserItem('buddy', bid);
var html_msg = msg;
@@ -2745,12 +2851,12 @@ var jsxc;
// exceptions:
if (direction === 'out' && data.msgstate === 2) {
if (direction === 'out' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED && forwarded !== true) {
direction = 'sys';
msg = jsxc.l.your_message_wasnt_send_please_end_your_private_conversation;
}
if (direction === 'in' && data.msgstate === 2) {
if (direction === 'in' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED) {
direction = 'sys';
msg = jsxc.l.unencrypted_message_received + ' ' + msg;
}
@@ -2760,13 +2866,14 @@ var jsxc;
msg = jsxc.l.your_message_wasnt_send_because_you_have_no_valid_subscription;
}
var post = jsxc.storage.saveMessage(bid, direction, msg);
encrypted = encrypted || data.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED;
var post = jsxc.storage.saveMessage(bid, direction, msg, encrypted, forwarded, stamp);
if (direction === 'in') {
$(document).trigger('postmessagein.jsxc', [ bid, html_msg ]);
}
if (direction === 'out' && jsxc.master) {
if (direction === 'out' && jsxc.master && forwarded !== true) {
jsxc.xmpp.sendMessage(bid, html_msg, post.uid);
}
@@ -2790,7 +2897,6 @@ var jsxc;
var msg = post.msg;
var direction = post.direction;
var uid = post.uid;
var received = post.received || false;
if (win.find('.jsxc_textinput').is(':not(:focus)') && jsxc.restoreCompleted && direction === 'in' && !restore) {
jsxc.gui.window.highlight(bid);
@@ -2829,17 +2935,29 @@ var jsxc;
});
});
var msgDiv = $("<div>");
var msgDiv = $("<div>"), msgTsDiv = $("<div>");
msgDiv.addClass('jsxc_chatmessage jsxc_' + direction);
msgDiv.attr('id', uid);
msgDiv.html(msg);
msgDiv.html('<div>' + msg + '</div>');
msgTsDiv.addClass('jsxc_timestamp');
msgTsDiv.html(jsxc.getFormattedTime(post.stamp));
if (received) {
if (post.received || false) {
msgDiv.addClass('jsxc_received');
}
if (post.forwarded) {
msgDiv.addClass('jsxc_forwarded');
}
if (post.encrypted) {
msgDiv.addClass('jsxc_encrypted');
}
if (direction === 'sys') {
jsxc.gui.window.get(bid).find('.jsxc_textarea').append('<div style="clear:both"/>');
} else if (typeof post.stamp !== 'undefined') {
msgDiv.append(msgTsDiv);
}
win.find('.jsxc_textarea').append(msgDiv);
@@ -3157,6 +3275,14 @@ var jsxc;
<label for="priority-dnd">%%dnd%%</label><input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/><br />\
<input type="submit" value="%%Save%%"/>\
</fieldset>\
</form>\
<p></p>\
<form data-onsubmit="xmpp.carbons.refresh">\
<fieldset class="jsxc_fieldsetCarbons jsxc_fieldset">\
<legend>%%Carbon copy%%</legend>\
<label for="carbons-enable">%%Enable%%</label><input type="checkbox" id="carbons-enable" /><br />\
<input type="submit" value="%%Save%%"/>\
</fieldset>\
</form>'
};
@@ -3171,13 +3297,50 @@ var jsxc;
/**
* Create new connection or attach to old
*
* @name login
* @memberOf jsxc.xmpp
*/
/**
* Create new connection with given parameters.
*
* @name login^2
* @param {string} jid
* @param {string} password
* @memberOf jsxc.xmpp
*/
/**
* Attach connection with given parameters.
*
* @name login^3
* @param {string} jid
* @param {string} sid
* @param {string} rid
* @memberOf jsxc.xmpp
*/
login: function() {
var sid = jsxc.storage.getItem('sid');
var rid = jsxc.storage.getItem('rid');
var jid = jsxc.storage.getItem('jid');
if (jsxc.xmpp.conn && jsxc.xmpp.conn.connected) {
return;
}
var jid = null, password = null, sid = null, rid = null;
switch (arguments.length) {
case 2:
jid = arguments[0];
password = arguments[1];
break;
case 3:
jid = arguments[0];
sid = arguments[1];
rid = arguments[2];
break;
default:
jid = jsxc.storage.getItem('jid');
sid = jsxc.storage.getItem('sid');
rid = jsxc.storage.getItem('rid');
}
var url = jsxc.options.get('xmpp').url;
// Register eventlistener
@@ -3185,6 +3348,8 @@ var jsxc;
$(document).on('attached.jsxc', jsxc.xmpp.attached);
$(document).on('disconnected.jsxc', jsxc.xmpp.disconnected);
$(document).on('ridChange', jsxc.xmpp.onRidChange);
$(document).on('connfail.jsxc', jsxc.xmpp.onConnfail);
$(document).on('authfail.jsxc', jsxc.xmpp.onAuthFail);
Strophe.addNamespace('RECEIPTS', 'urn:xmpp:receipts');
@@ -3225,10 +3390,10 @@ var jsxc;
$(document).trigger('disconnected.jsxc');
break;
case Strophe.Status.CONNFAIL:
jsxc.xmpp.onConnfail(condition);
$(document).trigger('connfail.jsxc');
break;
case Strophe.Status.AUTHFAIL:
jsxc.gui.showAuthFail();
$(document).trigger('authfail.jsxc');
break;
}
};
@@ -3244,7 +3409,23 @@ var jsxc;
} else {
jsxc.debug('New connection');
jsxc.xmpp.conn.connect(jsxc.options.xmpp.jid, jsxc.options.xmpp.password, callback);
if (jsxc.xmpp.conn.caps) {
// Add system handler, because user handler isn't called before
// we are authenticated
jsxc.xmpp.conn._addSysHandler(function(stanza) {
var from = jsxc.xmpp.conn.domain, c = stanza.querySelector('c'), ver = c.getAttribute('ver'), node = c.getAttribute('node');
var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
jsxc.xmpp.conn.caps._jidVerIndex[from] = ver;
_jidNodeIndex[from] = node;
localStorage.setItem('strophe.caps._jidVerIndex', JSON.stringify(jsxc.xmpp.conn.caps._jidVerIndex));
localStorage.setItem('strophe.caps._jidNodeIndex', JSON.stringify(_jidNodeIndex));
}, Strophe.NS.CAPS);
}
jsxc.xmpp.conn.connect(jid || jsxc.options.xmpp.jid, password || jsxc.options.xmpp.password, callback);
}
},
@@ -3279,11 +3460,11 @@ var jsxc;
jsxc.triggeredFromElement = true;
// restore all otr objects
$.each(jsxc.storage.getUserItem('otrlist'), function(i, val) {
$.each(jsxc.storage.getUserItem('otrlist') || {}, function(i, val) {
jsxc.otr.create(val);
});
var numOtr = Object.keys(jsxc.otr.objects).length + 1;
var numOtr = Object.keys(jsxc.otr.objects || {}).length + 1;
var disReady = function() {
if (--numOtr <= 0) {
jsxc.xmpp.conn.flush();
@@ -3295,7 +3476,7 @@ var jsxc;
};
// end all private conversations
$.each(jsxc.otr.objects, function(key, obj) {
$.each(jsxc.otr.objects || {}, function(key, obj) {
if (obj.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED) {
obj.endOtr.call(obj, function() {
obj.init.call(obj);
@@ -3339,20 +3520,25 @@ var jsxc;
jsxc.storage.removeUserItem('avatar', 'own');
jsxc.storage.removeUserItem('otrlist');
// submit login form
if (jsxc.triggeredFromForm) {
// Trigger normal submit
jsxc.submitLoginForm();
return;
if (jsxc.options.loginForm.triggered) {
switch (jsxc.options.loginForm.onConnected || 'submit') {
case 'submit':
jsxc.submitLoginForm();
/* falls through */
case false:
jsxc.xmpp.connectionReady();
return;
}
}
// reload page after login from login box
if (jsxc.triggeredFromBox) {
window.location.reload();
return;
}
// start chat
jsxc.xmpp.connectionReady();
jsxc.gui.init();
$('#jsxc_roster').removeClass('jsxc_noConnection');
jsxc.onMaster();
jsxc.xmpp.conn.resume();
jsxc.gui.dialog.close();
$(document).trigger('attached.jsxc');
},
/**
@@ -3367,6 +3553,37 @@ var jsxc;
jsxc.xmpp.conn.addHandler(jsxc.xmpp.onReceived, null, 'message');
jsxc.xmpp.conn.addHandler(jsxc.xmpp.onPresence, null, 'presence');
var caps = jsxc.xmpp.conn.caps;
var domain = jsxc.xmpp.conn.domain;
if (caps && jsxc.options.get('carbons').enable) {
var conditionalEnable = function() {
if (jsxc.xmpp.conn.caps.hasFeatureByJid(domain, jsxc.CONST.NS.CARBONS)) {
jsxc.xmpp.carbons.enable();
}
};
if (typeof caps._knownCapabilities[caps._jidVerIndex[domain]] === 'undefined') {
var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
$(document).on('caps.strophe', function onCaps(ev, from) {
if (from !== domain) {
return;
}
conditionalEnable();
$(document).off('caps.strophe', onCaps);
});
caps._requestCapabilities(jsxc.xmpp.conn.domain, _jidNodeIndex[domain], caps._jidVerIndex[domain]);
} else {
// We know server caps
conditionalEnable();
}
}
// Only load roaster if necessary
if (!jsxc.restore || !jsxc.storage.getUserItem('buddylist')) {
// in order to not overide existing presence information, we send
@@ -3448,6 +3665,13 @@ var jsxc;
jsxc.storage.removeUserItem('avatar', 'own');
jsxc.storage.removeUserItem('otrlist');
$(document).off('connected.jsxc', jsxc.xmpp.connected);
$(document).off('attached.jsxc', jsxc.xmpp.attached);
$(document).off('disconnected.jsxc', jsxc.xmpp.disconnected);
$(document).off('ridChange', jsxc.xmpp.onRidChange);
$(document).off('connfail.jsxc', jsxc.xmpp.onConnfail);
$(document).off('authfail.jsxc', jsxc.xmpp.onAuthFail);
jsxc.xmpp.conn = null;
$('#jsxc_windowList').remove();
@@ -3471,14 +3695,32 @@ var jsxc;
* @param {String} condition information why we lost the connection
* @private
*/
onConnfail: function(condition) {
onConnfail: function(ev, condition) {
jsxc.debug('XMPP connection failed: ' + condition);
if (jsxc.triggeredFromForm) {
if (jsxc.options.loginForm.triggered) {
jsxc.submitLoginForm();
}
},
/**
* Triggered on auth fail.
*
* @private
*/
onAuthFail: function() {
if (jsxc.options.loginForm.triggered) {
switch (jsxc.options.loginForm.onAuthFail || 'ask') {
case 'ask':
jsxc.gui.showAuthFail();
break;
case 'submit':
jsxc.submitLoginForm();
break;
}
}
},
/**
* Triggered on initial roster load
*
@@ -3626,8 +3868,6 @@ var jsxc;
var ptype = $(presence).attr('type');
var from = $(presence).attr('from');
var jid = Strophe.getBareJidFromJid(from).toLowerCase();
var to = $(presence).attr('to');
to = (to) ? Strophe.getBareJidFromJid(to).toLowerCase() : jid;
var r = Strophe.getResourceFromJid(from);
var bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
@@ -3635,7 +3875,7 @@ var jsxc;
var status = null;
var xVCard = $(presence).find('x[xmlns="vcard-temp:x:update"]');
if (jid === to) {
if (jid === Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))) {
return true;
}
@@ -3729,28 +3969,66 @@ var jsxc;
* @returns {Boolean}
* @private
*/
onMessage: function(message) {
/*
* <message xmlns='jabber:client' type='chat' to='' id='' from=''>
* <body>...</body> <active
* xmlns='http://jabber.org/protocol/chatstates'/> </message>
*/
onMessage: function(stanza) {
jsxc.debug('Incoming message', message);
var forwarded = $(stanza).find('forwarded[xmlns="' + jsxc.CONST.NS.FORWARD + '"]');
var message, carbon;
if (forwarded.length > 0) {
message = forwarded.find('> message');
forwarded = true;
carbon = $(stanza).find('> [xmlns="' + jsxc.CONST.NS.CARBONS + '"]');
if (carbon.length === 0) {
carbon = false;
}
jsxc.debug('Incoming forwarded message', message);
} else {
message = stanza;
forwarded = false;
carbon = false;
jsxc.debug('Incoming message', message);
}
var body = $(message).find('body:first').text();
if (!body || (body.match(/\?OTR/i) && forwarded)) {
return true;
}
var type = $(message).attr('type');
var from = $(message).attr('from');
var mid = $(message).attr('id');
var jid = Strophe.getBareJidFromJid(from);
var bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
var body = $(message).find('body:first').text();
var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
var bid;
var delay = $(message).find('delay[xmlns="urn:xmpp:delay"]');
var stamp = (delay.length > 0) ? new Date(delay.attr('stamp')) : new Date();
stamp = stamp.getTime();
if (carbon) {
var direction = (carbon.prop("tagName") === 'sent') ? 'out' : 'in';
bid = jsxc.jidToBid((direction === 'out') ? $(message).attr('to') : from);
jsxc.gui.window.postMessage(bid, direction, body, false, forwarded, stamp);
if (!body) {
return true;
} else if (forwarded) {
// Someone forwarded a message to us
body = from + jsxc.translate(' %%to%% ') + $(stanza).attr('to') + '"' + body + '"';
from = $(stanza).attr('from');
}
var jid = Strophe.getBareJidFromJid(from);
bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
if (data === null) {
// jid not in roster
@@ -3763,7 +4041,7 @@ var jsxc;
var msg = jsxc.removeHTML(body);
msg = jsxc.escapeHTML(msg);
jsxc.storage.saveMessage(bid, 'in', msg);
jsxc.storage.saveMessage(bid, 'in', msg, false, forwarded, stamp);
return true;
}
@@ -3785,7 +4063,7 @@ var jsxc;
jsxc.otr.create(bid);
}
if (mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
if (!forwarded && mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
// Send received according to XEP-0184
jsxc.xmpp.conn.send($msg({
to: from
@@ -3796,9 +4074,12 @@ var jsxc;
}
if (jsxc.otr.objects.hasOwnProperty(bid)) {
jsxc.otr.objects[bid].receiveMsg(body);
jsxc.otr.objects[bid].receiveMsg(body, {
stamp: stamp,
forwarded: forwarded
});
} else {
jsxc.gui.window.postMessage(bid, 'in', body);
jsxc.gui.window.postMessage(bid, 'in', body, false, forwarded, stamp);
}
// preserve handler
@@ -3957,6 +4238,12 @@ var jsxc;
id: uid
}).c('body').t(msg);
if (jsxc.xmpp.carbons.enabled && msg.match(/^\?OTR/)) {
xmlMsg.up().c("private", {
xmlns: jsxc.CONST.NS.CARBONS
});
}
if (type === 'chat' && (isBar || jsxc.xmpp.conn.caps.hasFeatureByJid(jid, Strophe.NS.RECEIPTS))) {
// Add request according to XEP-0184
xmlMsg.up().c('request', {
@@ -4014,6 +4301,85 @@ var jsxc;
}
};
/**
* Handle carbons (XEP-0280);
*
* @namespace jsxc.xmpp.carbons
*/
jsxc.xmpp.carbons = {
enabled: false,
/**
* Enable carbons.
*
* @memberOf jsxc.xmpp.carbons
* @param cb callback
*/
enable: function(cb) {
var iq = $iq({
type: 'set'
}).c('enable', {
xmlns: jsxc.CONST.NS.CARBONS
});
jsxc.xmpp.conn.sendIQ(iq, function() {
jsxc.xmpp.carbons.enabled = true;
jsxc.debug('Carbons enabled');
if (cb) {
cb.call(this);
}
}, function(stanza) {
jsxc.warn('Could not enable carbons', stanza);
});
},
/**
* Disable carbons.
*
* @memberOf jsxc.xmpp.carbons
* @param cb callback
*/
disable: function(cb) {
var iq = $iq({
type: 'set'
}).c('disable', {
xmlns: jsxc.CONST.NS.CARBONS
});
jsxc.xmpp.conn.sendIQ(iq, function() {
jsxc.xmpp.carbons.enabled = false;
jsxc.debug('Carbons disabled');
if (cb) {
cb.call(this);
}
}, function(stanza) {
jsxc.warn('Could not disable carbons', stanza);
});
},
/**
* Enable/Disable carbons depending on options key.
*
* @memberOf jsxc.xmpp.carbons
* @param err error message
*/
refresh: function(err) {
if (err === false) {
return;
}
if (jsxc.options.get('carbons').enable) {
return jsxc.xmpp.carbons.enable();
}
return jsxc.xmpp.carbons.disable();
}
};
/**
* Handle long-live data
*
@@ -4553,9 +4919,11 @@ var jsxc;
* @param bid
* @param direction
* @param msg
* @param encrypted
* @param forwarded
* @return post
*/
saveMessage: function(bid, direction, msg) {
saveMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
var chat = jsxc.storage.getUserItem('chat', bid) || [];
var uid = new Date().getTime() + ':msg';
@@ -4568,7 +4936,10 @@ var jsxc;
direction: direction,
msg: msg,
uid: uid.replace(/:/, '-'),
received: false
received: false,
encrypted: encrypted || false,
forwarded: forwarded || false,
stamp: stamp || new Date().getTime()
};
chat.unshift(post);
@@ -4622,20 +4993,24 @@ var jsxc;
* Handler for otr receive event
*
* @memberOf jsxc.otr
* @param {string} bid
* @param {string} msg received message
* @param {string} encrypted True, if msg was encrypted.
* @param {Object} d
* @param {string} d.bid
* @param {string} d.msg received message
* @param {boolean} d.encrypted True, if msg was encrypted.
* @param {boolean} d.forwarded
* @param {string} d.stamp timestamp
*/
receiveMessage: function(bid, msg, encrypted) {
receiveMessage: function(d) {
var bid = d.bid;
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT) {
jsxc.otr.backup(bid);
}
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !encrypted) {
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Received an unencrypted message.%% [') + msg + ']');
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !d.encrypted) {
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Received an unencrypted message.%% [') + d.msg + ']', d.encrypted, d.forwarded, d.stamp);
} else {
jsxc.gui.window.postMessage(bid, 'in', msg);
jsxc.gui.window.postMessage(bid, 'in', d.msg, d.encrypted, d.forwarded, d.stamp);
}
},
@@ -4770,8 +5145,14 @@ var jsxc;
});
// Receive message
jsxc.otr.objects[bid].on('ui', function(msg, encrypted) {
jsxc.otr.receiveMessage(bid, msg, encrypted === true);
jsxc.otr.objects[bid].on('ui', function(msg, encrypted, meta) {
jsxc.otr.receiveMessage({
bid: bid,
msg: msg,
encrypted: encrypted === true,
stamp: meta.stamp,
forwarded: meta.forwarded
});
});
// Send message
@@ -5362,16 +5743,7 @@ var jsxc;
notice.click(function() {
jsxc.notice.remove(nid);
var fnList = fnName.split('.');
var fn = jsxc[fnList[0]];
var i;
for (i = 1; i < fnList.length; i++) {
fn = fn[fnList[i]];
}
if (typeof fn === 'function') {
fn.apply(null, fnParams);
}
jsxc.exec(fnName, fnParams);
return false;
});
+8 -3
Ver Arquivo
@@ -1,13 +1,13 @@
/*!
* jsxc v1.0.0 - 2014-11-06
* jsxc v1.1.0a - 2015-02-25
*
* Copyright (c) 2014 Klaus Herberth <klaus@jsxc.org> <br>
* Copyright (c) 2015 Klaus Herberth <klaus@jsxc.org> <br>
* Released under the MIT license
*
* Please see http://www.jsxc.org/
*
* @author Klaus Herberth <klaus@jsxc.org>
* @version 1.0.0
* @version 1.1.0a
* @license MIT
*/
@@ -288,6 +288,11 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
jsxc.debug('Update icon', bid);
var self = jsxc.webrtc;
if (bid === jsxc.jidToBid(self.conn.jid)) {
return;
}
var win = jsxc.gui.window.get(bid);
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy', bid).jid;
+10 -10
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
-379
Ver Arquivo
@@ -1,379 +0,0 @@
.jsxc_webrtc {
width: 900px;
}
.jsxc_webrtc li .jsxc_name {
cursor: auto;
}
.jsxc_webrtc li .jsxc_name:hover {
color: #939393;
}
.jsxc_videoContainer {
width: 640px;
height: 480px;
position: relative;
background-color: #a4a4a4;
}
.jsxc_videoContainer video, .jsxc_videoContainer .jsxc_noRemoteVideo {
display: none;
}
.jsxc_remotevideo, .jsxc_noRemoteVideo {
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
z-index: 9000;
background-color: #a4a4a4;
}
.jsxc_localvideo {
width: 160px;
height: 120px;
position: absolute;
right: 10px;
bottom: 10px;
z-index: 9990;
background-color: black;
cursor: pointer;
}
.jsxc_noRemoteVideo p {
position: absolute;
bottom: 0px;
left:0px;
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: #717171;
}
.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_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;
}
.jsxc_webrtc .slimScrollDiv {
opacity: 1 !important;
}
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_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: 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;
float:right;
height: 480px;
width: 250px;
background-color: #A4A4A4;
}
.jsxc_chatarea > ul {
width: 250px;
height: 480px;
list-style: none;
padding: 0px;
}
.jsxc_chatarea .jsxc_settings {
display: none !important;
}
.jsxc_chatarea .jsxc_close {
display: none !important;
}
.jsxc_chatarea .jsxc_video {
display: none !important;
}
.jsxc_chatarea .jsxc_bar {
}
.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');
}
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
opacity: 0.2;
}
.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: #000000;
-moz-border-radius: 81px;
-moz-animation: bubblingG 1.3s infinite alternate;
-webkit-border-radius: 81px;
-webkit-animation: bubblingG 1.3s infinite alternate;
-ms-border-radius: 81px;
-ms-animation: bubblingG 1.3s infinite alternate;
-o-border-radius: 81px;
-o-animation: bubblingG 1.3s infinite alternate;
border-radius: 81px;
animation: bubblingG 1.3s infinite alternate;
}
#bubblingG_1 {
-moz-animation-delay: 0s;
-webkit-animation-delay: 0s;
-ms-animation-delay: 0s;
-o-animation-delay: 0s;
animation-delay: 0s;
}
#bubblingG_2 {
-moz-animation-delay: 0.39s;
-webkit-animation-delay: 0.39s;
-ms-animation-delay: 0.39s;
-o-animation-delay: 0.39s;
animation-delay: 0.39s;
}
#bubblingG_3 {
-moz-animation-delay: 0.78s;
-webkit-animation-delay: 0.78s;
-ms-animation-delay: 0.78s;
-o-animation-delay: 0.78s;
animation-delay: 0.78s;
}
@-moz-keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
-moz-transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
-moz-transform: translateY(-34px);
}
}
@-webkit-keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
-webkit-transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
-webkit-transform: translateY(-34px);
}
}
@-ms-keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
-ms-transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
-ms-transform: translateY(-34px);
}
}
@-o-keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
-o-transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
-o-transform: translateY(-34px);
}
}
@keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
transform: translateY(-34px);
}
}
+22 -13
Ver Arquivo
@@ -1,5 +1,5 @@
/*!
* jsxc v1.0.0 - 2014-11-06
* jsxc v1.1.0a - 2015-02-25
*
* This file concatenates all dependencies of jsxc.
*
@@ -6613,13 +6613,18 @@ Strophe.addConnectionPlugin('disco',
* 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') {
@@ -6627,10 +6632,11 @@ Strophe.addConnectionPlugin('disco',
} 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) {
@@ -14013,8 +14019,8 @@ CryptoJS.mode.CTR = (function () {
* Source: build/lib/otr/build/otr.js, license: MPL v2.0, url: https://arlolra.github.io/otr/ */
/*!
otr.js v0.2.13 - 2014-09-07
(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.
@@ -15633,10 +15639,12 @@ CryptoJS.mode.CTR = (function () {
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])
@@ -16423,7 +16431,8 @@ CryptoJS.mode.CTR = (function () {
// 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)
}
@@ -16486,7 +16495,7 @@ CryptoJS.mode.CTR = (function () {
if (msg) this.io(msg, meta)
}
OTR.prototype.receiveMsg = function (msg) {
OTR.prototype.receiveMsg = function (msg, meta) {
// parse type
msg = Parse.parseMsg(this, msg)
@@ -16537,7 +16546,7 @@ CryptoJS.mode.CTR = (function () {
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) {
+4 -4
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
+12 -9
Ver Arquivo
@@ -1,7 +1,7 @@
/*!
otr.js v0.2.13 - 2014-09-07
(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.
@@ -1620,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])
@@ -2410,7 +2412,8 @@
// 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)
}
@@ -2473,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)
@@ -2524,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) {
+4 -4
Ver Arquivo
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+9 -3
Ver Arquivo
@@ -191,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') {
@@ -205,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) {
+2 -2
Ver Arquivo
@@ -48,13 +48,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+6 -6
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line2281">line 2281</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2384">line 2384</a>
</li></ul></dd>
@@ -141,7 +141,7 @@
<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#line2347">line 2347</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2450">line 2450</a>
</li></ul></dd>
@@ -361,7 +361,7 @@
<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#line2296">line 2296</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2399">line 2399</a>
</li></ul></dd>
@@ -500,7 +500,7 @@
<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#line2357">line 2357</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2460">line 2460</a>
</li></ul></dd>
@@ -541,13 +541,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+32 -32
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line811">line 811</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line893">line 893</a>
</li></ul></dd>
@@ -153,7 +153,7 @@
<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#line818">line 818</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line900">line 900</a>
</li></ul></dd>
@@ -289,7 +289,7 @@
<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#line1759">line 1759</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1867">line 1867</a>
</li></ul></dd>
@@ -401,7 +401,7 @@
<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#line1833">line 1833</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1941">line 1941</a>
</li></ul></dd>
@@ -518,7 +518,7 @@
<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#line1097">line 1097</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1191">line 1191</a>
</li></ul></dd>
@@ -609,7 +609,7 @@
<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#line860">line 860</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line942">line 942</a>
</li></ul></dd>
@@ -721,7 +721,7 @@
<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#line1818">line 1818</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1926">line 1926</a>
</li></ul></dd>
@@ -833,7 +833,7 @@
<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#line1068">line 1068</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1162">line 1162</a>
</li></ul></dd>
@@ -902,7 +902,7 @@
<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#line1479">line 1479</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1573">line 1573</a>
</li></ul></dd>
@@ -1019,7 +1019,7 @@
<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#line1427">line 1427</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1521">line 1521</a>
</li></ul></dd>
@@ -1154,7 +1154,7 @@
<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#line1308">line 1308</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1402">line 1402</a>
</li></ul></dd>
@@ -1223,7 +1223,7 @@
<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#line1436">line 1436</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1530">line 1530</a>
</li></ul></dd>
@@ -1404,7 +1404,7 @@
<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#line1460">line 1460</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1554">line 1554</a>
</li></ul></dd>
@@ -1551,7 +1551,7 @@
<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#line1346">line 1346</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1440">line 1440</a>
</li></ul></dd>
@@ -1620,7 +1620,7 @@
<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#line1492">line 1492</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1586">line 1586</a>
</li></ul></dd>
@@ -1737,7 +1737,7 @@
<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#line1189">line 1189</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1283">line 1283</a>
</li></ul></dd>
@@ -1806,7 +1806,7 @@
<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#line1153">line 1153</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1247">line 1247</a>
</li></ul></dd>
@@ -1923,7 +1923,7 @@
<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#line1387">line 1387</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1481">line 1481</a>
</li></ul></dd>
@@ -2010,7 +2010,7 @@
<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#line1719">line 1719</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1827">line 1827</a>
</li></ul></dd>
@@ -2127,7 +2127,7 @@
<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#line1520">line 1520</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1614">line 1614</a>
</li></ul></dd>
@@ -2244,7 +2244,7 @@
<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#line1198">line 1198</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1292">line 1292</a>
</li></ul></dd>
@@ -2313,7 +2313,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line830">line 830</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line835">line 835</a>
</li></ul></dd>
@@ -2430,7 +2430,7 @@
<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#line1415">line 1415</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1509">line 1509</a>
</li></ul></dd>
@@ -2517,7 +2517,7 @@
<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#line1108">line 1108</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1202">line 1202</a>
</li></ul></dd>
@@ -2634,7 +2634,7 @@
<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#line901">line 901</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line990">line 990</a>
</li></ul></dd>
@@ -2746,7 +2746,7 @@
<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#line1805">line 1805</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1913">line 1913</a>
</li></ul></dd>
@@ -2863,7 +2863,7 @@
<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#line917">line 917</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1006">line 1006</a>
</li></ul></dd>
@@ -3026,7 +3026,7 @@
<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#line993">line 993</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1082">line 1082</a>
</li></ul></dd>
@@ -3161,7 +3161,7 @@
<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#line1781">line 1781</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1889">line 1889</a>
</li></ul></dd>
@@ -3230,7 +3230,7 @@
<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#line1052">line 1052</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1146">line 1146</a>
</li></ul></dd>
@@ -3271,13 +3271,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+7 -7
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line820">line 820</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line902">line 902</a>
</li></ul></dd>
@@ -141,7 +141,7 @@
<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#line827">line 827</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line909">line 909</a>
</li></ul></dd>
@@ -210,7 +210,7 @@
<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#line836">line 836</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line918">line 918</a>
</li></ul></dd>
@@ -279,7 +279,7 @@
<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#line841">line 841</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line923">line 923</a>
</li></ul></dd>
@@ -348,7 +348,7 @@
<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#line850">line 850</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line932">line 932</a>
</li></ul></dd>
@@ -389,13 +389,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+14 -14
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line1911">line 1911</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2019">line 2019</a>
</li></ul></dd>
@@ -212,7 +212,7 @@
<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#line2205">line 2205</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2309">line 2309</a>
</li></ul></dd>
@@ -347,7 +347,7 @@
<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#line2029">line 2029</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2133">line 2133</a>
</li></ul></dd>
@@ -416,7 +416,7 @@
<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#line2267">line 2267</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2370">line 2370</a>
</li></ul></dd>
@@ -485,7 +485,7 @@
<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#line1924">line 1924</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2032">line 2032</a>
</li></ul></dd>
@@ -644,7 +644,7 @@ alphabetical of the name
<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#line2092">line 2092</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2196">line 2196</a>
</li></ul></dd>
@@ -731,7 +731,7 @@ alphabetical of the name
<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#line2253">line 2253</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2357">line 2357</a>
</li></ul></dd>
@@ -848,7 +848,7 @@ alphabetical of the name
<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#line2144">line 2144</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2248">line 2248</a>
</li></ul></dd>
@@ -965,7 +965,7 @@ alphabetical of the name
<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#line2135">line 2135</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2239">line 2239</a>
</li></ul></dd>
@@ -1104,7 +1104,7 @@ alphabetical of the name
<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#line2165">line 2165</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2269">line 2269</a>
</li></ul></dd>
@@ -1239,7 +1239,7 @@ alphabetical of the name
<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#line2125">line 2125</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2229">line 2229</a>
</li></ul></dd>
@@ -1374,7 +1374,7 @@ alphabetical of the name
<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#line2228">line 2228</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2332">line 2332</a>
</li></ul></dd>
@@ -1415,13 +1415,13 @@ alphabetical of the name
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+3 -3
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line2883">line 2883</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3001">line 3001</a>
</li></ul></dd>
@@ -109,13 +109,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+90 -21
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line2362">line 2362</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2465">line 2465</a>
</li></ul></dd>
@@ -189,7 +189,7 @@
<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#line2598">line 2598</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2701">line 2701</a>
</li></ul></dd>
@@ -306,7 +306,7 @@
<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#line2678">line 2678</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2781">line 2781</a>
</li></ul></dd>
@@ -470,7 +470,7 @@
<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#line2775">line 2775</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2882">line 2882</a>
</li></ul></dd>
@@ -587,7 +587,7 @@
<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#line2646">line 2646</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2749">line 2749</a>
</li></ul></dd>
@@ -722,7 +722,7 @@
<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#line2877">line 2877</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2995">line 2995</a>
</li></ul></dd>
@@ -857,7 +857,7 @@
<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#line2573">line 2573</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2676">line 2676</a>
</li></ul></dd>
@@ -974,7 +974,7 @@
<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#line2529">line 2529</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2632">line 2632</a>
</li></ul></dd>
@@ -1113,7 +1113,7 @@
<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#line2667">line 2667</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2770">line 2770</a>
</li></ul></dd>
@@ -1230,7 +1230,7 @@
<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#line2689">line 2689</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2792">line 2792</a>
</li></ul></dd>
@@ -1347,7 +1347,7 @@
<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#line2375">line 2375</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2478">line 2478</a>
</li></ul></dd>
@@ -1487,7 +1487,7 @@ be created.
<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#line2540">line 2540</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2643">line 2643</a>
</li></ul></dd>
@@ -1537,7 +1537,7 @@ be created.
<dt>
<h4 class="name" id="postMessage"><span class="type-signature">&lt;static> </span>postMessage<span class="signature">(bid, direction, msg)</span><span class="type-signature"></span></h4>
<h4 class="name" id="postMessage"><span class="type-signature">&lt;static> </span>postMessage<span class="signature">(bid, direction, msg, encrypted, forwarded, stamp)</span><span class="type-signature"></span></h4>
</dt>
@@ -1646,6 +1646,75 @@ be created.
</tr>
<tr>
<td class="name"><code>encrypted</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="description last">Was this message encrypted? Default: false</td>
</tr>
<tr>
<td class="name"><code>forwarded</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="description last">Was this message forwarded? Default: false</td>
</tr>
<tr>
<td class="name"><code>stamp</code></td>
<td class="type">
<span class="param-type">integer</span>
</td>
<td class="description last">Timestamp</td>
</tr>
</tbody>
</table>
@@ -1673,7 +1742,7 @@ be created.
<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#line2725">line 2725</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2831">line 2831</a>
</li></ul></dd>
@@ -1790,7 +1859,7 @@ be created.
<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#line2862">line 2862</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2980">line 2980</a>
</li></ul></dd>
@@ -1925,7 +1994,7 @@ be created.
<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#line2704">line 2704</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2807">line 2807</a>
</li></ul></dd>
@@ -2065,7 +2134,7 @@ be created.
<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#line2852">line 2852</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2970">line 2970</a>
</li></ul></dd>
@@ -2200,7 +2269,7 @@ be created.
<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#line2633">line 2633</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2736">line 2736</a>
</li></ul></dd>
@@ -2317,7 +2386,7 @@ be created.
<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#line2611">line 2611</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2714">line 2714</a>
</li></ul></dd>
@@ -2358,13 +2427,13 @@ be created.
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+313 -90
Ver Arquivo
@@ -160,7 +160,7 @@
<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#line67">line 67</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line64">line 64</a>
</li></ul></dd>
@@ -214,7 +214,7 @@
<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#line70">line 70</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line67">line 67</a>
</li></ul></dd>
@@ -322,7 +322,7 @@
<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#line147">line 147</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line174">line 174</a>
</li></ul></dd>
@@ -376,7 +376,7 @@
<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#line55">line 55</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line52">line 52</a>
</li></ul></dd>
@@ -484,7 +484,7 @@
<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#line5307">line 5307</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5688">line 5688</a>
</li></ul></dd>
@@ -701,7 +701,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line61">line 61</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line58">line 58</a>
</li></ul></dd>
@@ -971,7 +971,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line64">line 64</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line61">line 61</a>
</li></ul></dd>
@@ -1025,7 +1025,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line46">line 46</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line43">line 43</a>
</li></ul></dd>
@@ -1079,61 +1079,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line49">line 49</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="triggeredFromForm"><span class="type-signature">&lt;static> </span>triggeredFromForm<span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
True if login through form
</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#line43">line 43</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line46">line 46</a>
</li></ul></dd>
@@ -1187,7 +1133,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line52">line 52</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line49">line 49</a>
</li></ul></dd>
@@ -1306,7 +1252,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line395">line 395</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line430">line 430</a>
</li></ul></dd>
@@ -1375,7 +1321,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line435">line 435</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line474">line 474</a>
</li></ul></dd>
@@ -1538,7 +1484,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line94">line 94</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line121">line 121</a>
</li></ul></dd>
@@ -1655,7 +1601,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line493">line 493</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line532">line 532</a>
</li></ul></dd>
@@ -1813,7 +1759,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line142">line 142</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line169">line 169</a>
</li></ul></dd>
@@ -1882,7 +1828,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line595">line 595</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line634">line 634</a>
</li></ul></dd>
@@ -1905,6 +1851,283 @@ workaround) 0: conform, 1: not conform, 2: not shure
</dd>
<dt>
<h4 class="name" id="exec"><span class="type-signature">&lt;static> </span>exec<span class="signature">(fnName, fnParams)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Executes the given function in jsxc namespace.
</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>fnName</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">Function name</td>
</tr>
<tr>
<td class="name"><code>fnParams</code></td>
<td class="type">
<span class="param-type">array</span>
</td>
<td class="description last">Function parameters</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#line726">line 726</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Function return value
</div>
</dd>
<dt>
<h4 class="name" id="getFormattedTime"><span class="type-signature">&lt;static> </span>getFormattedTime<span class="signature">(unixtime)</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Parse a unix timestamp and return a formatted time string
</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>unixtime</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last"></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#line94">line 94</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
time of day and/or date
</div>
</dd>
@@ -1999,7 +2222,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line155">line 155</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line182">line 182</a>
</li></ul></dd>
@@ -2068,7 +2291,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line638">line 638</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line677">line 677</a>
</li></ul></dd>
@@ -2202,7 +2425,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line518">line 518</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line557">line 557</a>
</li></ul></dd>
@@ -2329,7 +2552,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line503">line 503</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line542">line 542</a>
</li></ul></dd>
@@ -2420,7 +2643,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<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#line452">line 452</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line491">line 491</a>
</li></ul></dd>
@@ -2490,7 +2713,7 @@ normal signal
<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#line464">line 464</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line503">line 503</a>
</li></ul></dd>
@@ -2559,7 +2782,7 @@ normal signal
<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#line373">line 373</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line404">line 404</a>
</li></ul></dd>
@@ -2628,7 +2851,7 @@ normal signal
<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#line358">line 358</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line389">line 389</a>
</li></ul></dd>
@@ -2697,7 +2920,7 @@ normal signal
<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#line302">line 302</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line333">line 333</a>
</li></ul></dd>
@@ -2824,7 +3047,7 @@ normal signal
<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#line483">line 483</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line522">line 522</a>
</li></ul></dd>
@@ -2958,7 +3181,7 @@ normal signal
<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#line607">line 607</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line646">line 646</a>
</li></ul></dd>
@@ -3037,7 +3260,7 @@ normal signal
<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#line525">line 525</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line564">line 564</a>
</li></ul></dd>
@@ -3106,7 +3329,7 @@ normal signal
<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#line546">line 546</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line585">line 585</a>
</li></ul></dd>
@@ -3175,7 +3398,7 @@ normal signal
<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#line445">line 445</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line484">line 484</a>
</li></ul></dd>
@@ -3244,7 +3467,7 @@ normal signal
<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#line576">line 576</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line615">line 615</a>
</li></ul></dd>
@@ -3384,7 +3607,7 @@ normal signal
<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#line618">line 618</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line657">line 657</a>
</li></ul></dd>
@@ -3523,7 +3746,7 @@ normal signal
<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#line667">line 667</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line706">line 706</a>
</li></ul></dd>
@@ -3685,7 +3908,7 @@ normal signal
<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#line131">line 131</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line158">line 158</a>
</li></ul></dd>
@@ -3726,13 +3949,13 @@ normal signal
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+3 -3
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line5405">line 5405</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5777">line 5777</a>
</li></ul></dd>
@@ -109,13 +109,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+467 -95
Ver Arquivo
@@ -66,9 +66,6 @@
/** True if restore is complete */
restoreCompleted: false,
/** True if login through form */
triggeredFromForm: false,
/** True if login through box */
triggeredFromBox: false,
@@ -107,9 +104,39 @@
REGEX: {
JID: new RegExp('\\b[^"&\'\\/:&lt;>@\\s]+@[\\w-_.]+\\b', 'ig'),
URL: new RegExp(/((?:https?:\/\/|www\.|([\w\-]+\.[a-zA-Z]{2,3})(?=\b))(?:(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\)([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|])?)|(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|]))?)/gi)
},
NS: {
CARBONS: 'urn:xmpp:carbons:2',
FORWARD: 'urn:xmpp:forward:0'
}
},
/**
* Parse a unix timestamp and return a formatted time string
*
* @memberOf jsxc
* @param {Object} unixtime
* @returns time of day and/or date
*/
getFormattedTime: function(unixtime) {
var msgDate = new Date(parseInt(unixtime));
var date = ('0' + msgDate.getDate()).slice(-2);
var month = ('0' + (msgDate.getMonth() + 1)).slice(-2);
var year = msgDate.getFullYear();
var hours = ('0' + msgDate.getHours()).slice(-2);
var minutes = ('0' + msgDate.getMinutes()).slice(-2);
var dateNow = new Date(), time = hours + ':' + minutes;
// compare dates only
dateNow.setHours(0, 0, 0, 0);
msgDate.setHours(0, 0, 0, 0);
if (dateNow.getTime() !== msgDate.getTime()) {
return date + '.' + month + '.' + year + ' ' + time;
}
return time;
},
/**
* Write debug message to console and to log.
*
@@ -183,7 +210,7 @@
if (options) {
// override default options
$.extend(jsxc.options, options);
$.extend(true, jsxc.options, options);
}
/**
@@ -233,6 +260,10 @@
return;
}
if (jsxc.storage.getItem('debug') === true) {
jsxc.options.otr.debug = true;
}
// Register event listener for the storage event
window.addEventListener('storage', jsxc.storage.onStorage, false);
@@ -284,7 +315,7 @@
var settings = jsxc.prepareLogin();
if (settings !== false && (settings.xmpp.onlogin === "true" || settings.xmpp.onlogin === true)) {
jsxc.triggeredFromForm = true;
jsxc.options.loginForm.triggered = true;
jsxc.xmpp.login();
@@ -412,8 +443,12 @@
// Sending keepalive signal
jsxc.startKeepAlive();
// create or load DSA key and call _onMaster
jsxc.otr.createDSA();
if (jsxc.options.get('otr').enable) {
// create or load DSA key and call _onMaster
jsxc.otr.createDSA();
} else {
jsxc._onMaster();
}
},
/**
@@ -453,6 +488,10 @@
}
}
$(document).on('connectionReady.jsxc', function() {
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
jsxc.xmpp.login();
},
@@ -702,6 +741,27 @@
return jsxc.l[k] || key.replace(/_/g, ' ');
});
},
/**
* Executes the given function in jsxc namespace.
*
* @memberOf jsxc
* @param {string} fnName Function name
* @param {array} fnParams Function parameters
* @returns Function return value
*/
exec: function(fnName, fnParams) {
var fnList = fnName.split('.');
var fn = jsxc[fnList[0]];
var i;
for (i = 1; i &lt; fnList.length; i++) {
fn = fn[fnList[i]];
}
if (typeof fn === 'function') {
return fn.apply(null, fnParams);
}
}
};
/**
@@ -722,7 +782,11 @@
/** OTR options */
otr: {
ERROR_START_AKE: true
enable: true,
ERROR_START_AKE: false,
debug: false,
SEND_WHITESPACE_TAG: true,
WHITESPACE_START_AKE: true
},
/** xmpp options */
@@ -758,7 +822,19 @@
/** manipulate JID from input element */
preJid: function(jid) {
return jid;
}
},
/**
* Action after connected: submit [String] Submit form, false [boolean]
* Do nothing, continue [String] Start chat
*/
onConnected: 'submit',
/**
* Action after auth fail: submit [String] Submit form, false [boolean]
* Do nothing, ask [String] Show auth fail dialog
*/
onAuthFail: 'submit'
},
/** jquery object from logout element */
@@ -829,9 +905,15 @@
*
* @memberOf jsxc.options
* @param data Holds all data as key/value
* @returns {boolean} false if function failes
*/
saveSettinsPermanent: function() {
},
carbons: {
/** Enable carbon copies? */
enable: false
}
};
@@ -885,6 +967,11 @@
* @memberOf jsxc.gui
*/
init: function() {
//Prevent duplicate windowList
if ($('#jsxc_windowList').length > 0) {
return;
}
$('body').append($(jsxc.gui.template.get('windowList')));
$(window).resize(jsxc.gui.updateWindowListSB);
@@ -904,7 +991,9 @@
jsxc.gui.tooltip('#jsxc_windowList');
jsxc.gui.roster.init();
if (!jsxc.el_exists('#jsxc_roster')) {
jsxc.gui.roster.init();
}
// prepare regexp for emotions
$.each(jsxc.gui.emotions, function(i, val) {
@@ -1029,7 +1118,7 @@
var avatarSrc = jsxc.storage.getUserItem('avatar', aid);
var setAvatar = function(src) {
if (src === 0) {
if (src === 0 || src === '0') {
jsxc.options.defaultAvatar.call(el, jid);
return;
}
@@ -1053,13 +1142,18 @@
if (vCard.length === 0) {
jsxc.debug('No photo provided');
src = 0;
src = '0';
} else if (vCard.find('EXTVAL').length > 0) {
src = vCard.find('EXTVAL').text();
} else {
var img = vCard.find('BINVAL').text();
var type = vCard.find('TYPE').text();
src = 'data:' + type + ';base64,' + img;
}
// concat chunks
src = src.replace(/[\t\r\n\f]/gi, '');
jsxc.storage.setUserItem('avatar', aid, src);
setAvatar(src);
}, Strophe.getBareJidFromJid(jid), function(msg) {
@@ -1196,7 +1290,7 @@
var settings = jsxc.prepareLogin();
jsxc.triggeredFromBox = true;
jsxc.triggeredFromForm = false;
jsxc.options.loginForm.triggered = false;
if (settings === false) {
jsxc.gui.showAuthFail();
@@ -1463,7 +1557,7 @@
showAuthFail: function() {
jsxc.gui.dialog.open(jsxc.gui.template.get('authFailDialog'));
if (jsxc.triggeredFromBox) {
if (jsxc.options.loginForm.triggered !== false) {
$('#jsxc_dialog .jsxc_cancel').hide();
}
@@ -1654,7 +1748,17 @@
var type = photo.find('TYPE').text();
var src = 'data:' + type + ';base64,' + img;
$('#jsxc_dialog h3').before('&lt;img class="jsxc_vCard" src="' + src + '" alt="avatar" />');
if (photo.find('EXTVAL').length > 0) {
src = photo.find('EXTVAL').text();
}
// concat chunks
src = src.replace(/[\t\r\n\f]/gi, '');
var img_el = $('&lt;img class="jsxc_vCard" alt="avatar" />');
img_el.attr('src', src);
$('#jsxc_dialog h3').before(img_el);
}
if ($(stanza).find('vCard').length === 0 || ($(stanza).find('vcard > *').length === 1 && photo.length === 1)) {
@@ -1728,6 +1832,10 @@
var err = jsxc.options.saveSettinsPermanent.call(this, data);
if (typeof self.attr('data-onsubmit') === 'string') {
jsxc.exec(self.attr('data-onsubmit'), [ err ]);
}
setTimeout(function() {
self.find('input[type="submit"]').effect('highlight', {
color: (err) ? 'green' : 'red'
@@ -2037,10 +2145,6 @@
$('#jsxc_presence > span').text($('#jsxc_presence > ul .jsxc_' + pres).text());
jsxc.gui.updatePresence('own', pres);
$(document).on('cloaded.roster.jsxc', function() {
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
jsxc.gui.tooltip('#jsxc_roster');
jsxc.notice.load();
@@ -2278,8 +2382,7 @@
* Shows a text with link to a login box that no connection exists.
*/
noConnection: function() {
$('#jsxc_roster .slimScrollDiv').remove();
$('#jsxc_roster > .jsxc_bottom').remove();
$('#jsxc_roster').addClass('jsxc_noConnection');
$('#jsxc_roster').append($('&lt;p>' + jsxc.l.no_connection + '&lt;/p>').append(' &lt;a>' + jsxc.l.relogin + '&lt;/a>').click(function() {
jsxc.gui.showLoginBox();
@@ -2748,8 +2851,11 @@
* @param {String} direction 'in' message is received or 'out' message is
* send
* @param {String} msg Message to display
* @param {boolean} encrypted Was this message encrypted? Default: false
* @param {boolean} forwarded Was this message forwarded? Default: false
* @param {integer} stamp Timestamp
*/
postMessage: function(bid, direction, msg) {
postMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
var data = jsxc.storage.getUserItem('buddy', bid);
var html_msg = msg;
@@ -2759,12 +2865,12 @@
// exceptions:
if (direction === 'out' && data.msgstate === 2) {
if (direction === 'out' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED && forwarded !== true) {
direction = 'sys';
msg = jsxc.l.your_message_wasnt_send_please_end_your_private_conversation;
}
if (direction === 'in' && data.msgstate === 2) {
if (direction === 'in' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED) {
direction = 'sys';
msg = jsxc.l.unencrypted_message_received + ' ' + msg;
}
@@ -2774,13 +2880,14 @@
msg = jsxc.l.your_message_wasnt_send_because_you_have_no_valid_subscription;
}
var post = jsxc.storage.saveMessage(bid, direction, msg);
encrypted = encrypted || data.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED;
var post = jsxc.storage.saveMessage(bid, direction, msg, encrypted, forwarded, stamp);
if (direction === 'in') {
$(document).trigger('postmessagein.jsxc', [ bid, html_msg ]);
}
if (direction === 'out' && jsxc.master) {
if (direction === 'out' && jsxc.master && forwarded !== true) {
jsxc.xmpp.sendMessage(bid, html_msg, post.uid);
}
@@ -2804,7 +2911,6 @@
var msg = post.msg;
var direction = post.direction;
var uid = post.uid;
var received = post.received || false;
if (win.find('.jsxc_textinput').is(':not(:focus)') && jsxc.restoreCompleted && direction === 'in' && !restore) {
jsxc.gui.window.highlight(bid);
@@ -2843,17 +2949,29 @@
});
});
var msgDiv = $("&lt;div>");
var msgDiv = $("&lt;div>"), msgTsDiv = $("&lt;div>");
msgDiv.addClass('jsxc_chatmessage jsxc_' + direction);
msgDiv.attr('id', uid);
msgDiv.html(msg);
msgDiv.html('&lt;div>' + msg + '&lt;/div>');
msgTsDiv.addClass('jsxc_timestamp');
msgTsDiv.html(jsxc.getFormattedTime(post.stamp));
if (received) {
if (post.received || false) {
msgDiv.addClass('jsxc_received');
}
if (post.forwarded) {
msgDiv.addClass('jsxc_forwarded');
}
if (post.encrypted) {
msgDiv.addClass('jsxc_encrypted');
}
if (direction === 'sys') {
jsxc.gui.window.get(bid).find('.jsxc_textarea').append('&lt;div style="clear:both"/>');
} else if (typeof post.stamp !== 'undefined') {
msgDiv.append(msgTsDiv);
}
win.find('.jsxc_textarea').append(msgDiv);
@@ -3171,6 +3289,14 @@
&lt;label for="priority-dnd">%%dnd%%&lt;/label>&lt;input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/>&lt;br />\
&lt;input type="submit" value="%%Save%%"/>\
&lt;/fieldset>\
&lt;/form>\
&lt;p>&lt;/p>\
&lt;form data-onsubmit="xmpp.carbons.refresh">\
&lt;fieldset class="jsxc_fieldsetCarbons jsxc_fieldset">\
&lt;legend>%%Carbon copy%%&lt;/legend>\
&lt;label for="carbons-enable">%%Enable%%&lt;/label>&lt;input type="checkbox" id="carbons-enable" />&lt;br />\
&lt;input type="submit" value="%%Save%%"/>\
&lt;/fieldset>\
&lt;/form>'
};
@@ -3185,13 +3311,50 @@
/**
* Create new connection or attach to old
*
* @name login
* @memberOf jsxc.xmpp
*/
/**
* Create new connection with given parameters.
*
* @name login^2
* @param {string} jid
* @param {string} password
* @memberOf jsxc.xmpp
*/
/**
* Attach connection with given parameters.
*
* @name login^3
* @param {string} jid
* @param {string} sid
* @param {string} rid
* @memberOf jsxc.xmpp
*/
login: function() {
var sid = jsxc.storage.getItem('sid');
var rid = jsxc.storage.getItem('rid');
var jid = jsxc.storage.getItem('jid');
if (jsxc.xmpp.conn && jsxc.xmpp.conn.connected) {
return;
}
var jid = null, password = null, sid = null, rid = null;
switch (arguments.length) {
case 2:
jid = arguments[0];
password = arguments[1];
break;
case 3:
jid = arguments[0];
sid = arguments[1];
rid = arguments[2];
break;
default:
jid = jsxc.storage.getItem('jid');
sid = jsxc.storage.getItem('sid');
rid = jsxc.storage.getItem('rid');
}
var url = jsxc.options.get('xmpp').url;
// Register eventlistener
@@ -3199,6 +3362,8 @@
$(document).on('attached.jsxc', jsxc.xmpp.attached);
$(document).on('disconnected.jsxc', jsxc.xmpp.disconnected);
$(document).on('ridChange', jsxc.xmpp.onRidChange);
$(document).on('connfail.jsxc', jsxc.xmpp.onConnfail);
$(document).on('authfail.jsxc', jsxc.xmpp.onAuthFail);
Strophe.addNamespace('RECEIPTS', 'urn:xmpp:receipts');
@@ -3239,10 +3404,10 @@
$(document).trigger('disconnected.jsxc');
break;
case Strophe.Status.CONNFAIL:
jsxc.xmpp.onConnfail(condition);
$(document).trigger('connfail.jsxc');
break;
case Strophe.Status.AUTHFAIL:
jsxc.gui.showAuthFail();
$(document).trigger('authfail.jsxc');
break;
}
};
@@ -3258,7 +3423,23 @@
} else {
jsxc.debug('New connection');
jsxc.xmpp.conn.connect(jsxc.options.xmpp.jid, jsxc.options.xmpp.password, callback);
if (jsxc.xmpp.conn.caps) {
// Add system handler, because user handler isn't called before
// we are authenticated
jsxc.xmpp.conn._addSysHandler(function(stanza) {
var from = jsxc.xmpp.conn.domain, c = stanza.querySelector('c'), ver = c.getAttribute('ver'), node = c.getAttribute('node');
var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
jsxc.xmpp.conn.caps._jidVerIndex[from] = ver;
_jidNodeIndex[from] = node;
localStorage.setItem('strophe.caps._jidVerIndex', JSON.stringify(jsxc.xmpp.conn.caps._jidVerIndex));
localStorage.setItem('strophe.caps._jidNodeIndex', JSON.stringify(_jidNodeIndex));
}, Strophe.NS.CAPS);
}
jsxc.xmpp.conn.connect(jid || jsxc.options.xmpp.jid, password || jsxc.options.xmpp.password, callback);
}
},
@@ -3293,11 +3474,11 @@
jsxc.triggeredFromElement = true;
// restore all otr objects
$.each(jsxc.storage.getUserItem('otrlist'), function(i, val) {
$.each(jsxc.storage.getUserItem('otrlist') || {}, function(i, val) {
jsxc.otr.create(val);
});
var numOtr = Object.keys(jsxc.otr.objects).length + 1;
var numOtr = Object.keys(jsxc.otr.objects || {}).length + 1;
var disReady = function() {
if (--numOtr &lt;= 0) {
jsxc.xmpp.conn.flush();
@@ -3309,7 +3490,7 @@
};
// end all private conversations
$.each(jsxc.otr.objects, function(key, obj) {
$.each(jsxc.otr.objects || {}, function(key, obj) {
if (obj.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED) {
obj.endOtr.call(obj, function() {
obj.init.call(obj);
@@ -3353,20 +3534,25 @@
jsxc.storage.removeUserItem('avatar', 'own');
jsxc.storage.removeUserItem('otrlist');
// submit login form
if (jsxc.triggeredFromForm) {
// Trigger normal submit
jsxc.submitLoginForm();
return;
if (jsxc.options.loginForm.triggered) {
switch (jsxc.options.loginForm.onConnected || 'submit') {
case 'submit':
jsxc.submitLoginForm();
/* falls through */
case false:
jsxc.xmpp.connectionReady();
return;
}
}
// reload page after login from login box
if (jsxc.triggeredFromBox) {
window.location.reload();
return;
}
// start chat
jsxc.xmpp.connectionReady();
jsxc.gui.init();
$('#jsxc_roster').removeClass('jsxc_noConnection');
jsxc.onMaster();
jsxc.xmpp.conn.resume();
jsxc.gui.dialog.close();
$(document).trigger('attached.jsxc');
},
/**
@@ -3381,6 +3567,37 @@
jsxc.xmpp.conn.addHandler(jsxc.xmpp.onReceived, null, 'message');
jsxc.xmpp.conn.addHandler(jsxc.xmpp.onPresence, null, 'presence');
var caps = jsxc.xmpp.conn.caps;
var domain = jsxc.xmpp.conn.domain;
if (caps && jsxc.options.get('carbons').enable) {
var conditionalEnable = function() {
if (jsxc.xmpp.conn.caps.hasFeatureByJid(domain, jsxc.CONST.NS.CARBONS)) {
jsxc.xmpp.carbons.enable();
}
};
if (typeof caps._knownCapabilities[caps._jidVerIndex[domain]] === 'undefined') {
var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
$(document).on('caps.strophe', function onCaps(ev, from) {
if (from !== domain) {
return;
}
conditionalEnable();
$(document).off('caps.strophe', onCaps);
});
caps._requestCapabilities(jsxc.xmpp.conn.domain, _jidNodeIndex[domain], caps._jidVerIndex[domain]);
} else {
// We know server caps
conditionalEnable();
}
}
// Only load roaster if necessary
if (!jsxc.restore || !jsxc.storage.getUserItem('buddylist')) {
// in order to not overide existing presence information, we send
@@ -3462,6 +3679,13 @@
jsxc.storage.removeUserItem('avatar', 'own');
jsxc.storage.removeUserItem('otrlist');
$(document).off('connected.jsxc', jsxc.xmpp.connected);
$(document).off('attached.jsxc', jsxc.xmpp.attached);
$(document).off('disconnected.jsxc', jsxc.xmpp.disconnected);
$(document).off('ridChange', jsxc.xmpp.onRidChange);
$(document).off('connfail.jsxc', jsxc.xmpp.onConnfail);
$(document).off('authfail.jsxc', jsxc.xmpp.onAuthFail);
jsxc.xmpp.conn = null;
$('#jsxc_windowList').remove();
@@ -3485,14 +3709,32 @@
* @param {String} condition information why we lost the connection
* @private
*/
onConnfail: function(condition) {
onConnfail: function(ev, condition) {
jsxc.debug('XMPP connection failed: ' + condition);
if (jsxc.triggeredFromForm) {
if (jsxc.options.loginForm.triggered) {
jsxc.submitLoginForm();
}
},
/**
* Triggered on auth fail.
*
* @private
*/
onAuthFail: function() {
if (jsxc.options.loginForm.triggered) {
switch (jsxc.options.loginForm.onAuthFail || 'ask') {
case 'ask':
jsxc.gui.showAuthFail();
break;
case 'submit':
jsxc.submitLoginForm();
break;
}
}
},
/**
* Triggered on initial roster load
*
@@ -3640,8 +3882,6 @@
var ptype = $(presence).attr('type');
var from = $(presence).attr('from');
var jid = Strophe.getBareJidFromJid(from).toLowerCase();
var to = $(presence).attr('to');
to = (to) ? Strophe.getBareJidFromJid(to).toLowerCase() : jid;
var r = Strophe.getResourceFromJid(from);
var bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
@@ -3649,7 +3889,7 @@
var status = null;
var xVCard = $(presence).find('x[xmlns="vcard-temp:x:update"]');
if (jid === to) {
if (jid === Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))) {
return true;
}
@@ -3743,28 +3983,66 @@
* @returns {Boolean}
* @private
*/
onMessage: function(message) {
/*
* &lt;message xmlns='jabber:client' type='chat' to='' id='' from=''>
* &lt;body>...&lt;/body> &lt;active
* xmlns='http://jabber.org/protocol/chatstates'/> &lt;/message>
*/
onMessage: function(stanza) {
jsxc.debug('Incoming message', message);
var forwarded = $(stanza).find('forwarded[xmlns="' + jsxc.CONST.NS.FORWARD + '"]');
var message, carbon;
if (forwarded.length > 0) {
message = forwarded.find('> message');
forwarded = true;
carbon = $(stanza).find('> [xmlns="' + jsxc.CONST.NS.CARBONS + '"]');
if (carbon.length === 0) {
carbon = false;
}
jsxc.debug('Incoming forwarded message', message);
} else {
message = stanza;
forwarded = false;
carbon = false;
jsxc.debug('Incoming message', message);
}
var body = $(message).find('body:first').text();
if (!body || (body.match(/\?OTR/i) && forwarded)) {
return true;
}
var type = $(message).attr('type');
var from = $(message).attr('from');
var mid = $(message).attr('id');
var jid = Strophe.getBareJidFromJid(from);
var bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
var body = $(message).find('body:first').text();
var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
var bid;
var delay = $(message).find('delay[xmlns="urn:xmpp:delay"]');
var stamp = (delay.length > 0) ? new Date(delay.attr('stamp')) : new Date();
stamp = stamp.getTime();
if (carbon) {
var direction = (carbon.prop("tagName") === 'sent') ? 'out' : 'in';
bid = jsxc.jidToBid((direction === 'out') ? $(message).attr('to') : from);
jsxc.gui.window.postMessage(bid, direction, body, false, forwarded, stamp);
if (!body) {
return true;
} else if (forwarded) {
// Someone forwarded a message to us
body = from + jsxc.translate(' %%to%% ') + $(stanza).attr('to') + '"' + body + '"';
from = $(stanza).attr('from');
}
var jid = Strophe.getBareJidFromJid(from);
bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
if (data === null) {
// jid not in roster
@@ -3777,7 +4055,7 @@
var msg = jsxc.removeHTML(body);
msg = jsxc.escapeHTML(msg);
jsxc.storage.saveMessage(bid, 'in', msg);
jsxc.storage.saveMessage(bid, 'in', msg, false, forwarded, stamp);
return true;
}
@@ -3799,7 +4077,7 @@
jsxc.otr.create(bid);
}
if (mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
if (!forwarded && mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
// Send received according to XEP-0184
jsxc.xmpp.conn.send($msg({
to: from
@@ -3810,9 +4088,12 @@
}
if (jsxc.otr.objects.hasOwnProperty(bid)) {
jsxc.otr.objects[bid].receiveMsg(body);
jsxc.otr.objects[bid].receiveMsg(body, {
stamp: stamp,
forwarded: forwarded
});
} else {
jsxc.gui.window.postMessage(bid, 'in', body);
jsxc.gui.window.postMessage(bid, 'in', body, false, forwarded, stamp);
}
// preserve handler
@@ -3971,6 +4252,12 @@
id: uid
}).c('body').t(msg);
if (jsxc.xmpp.carbons.enabled && msg.match(/^\?OTR/)) {
xmlMsg.up().c("private", {
xmlns: jsxc.CONST.NS.CARBONS
});
}
if (type === 'chat' && (isBar || jsxc.xmpp.conn.caps.hasFeatureByJid(jid, Strophe.NS.RECEIPTS))) {
// Add request according to XEP-0184
xmlMsg.up().c('request', {
@@ -4028,6 +4315,85 @@
}
};
/**
* Handle carbons (XEP-0280);
*
* @namespace jsxc.xmpp.carbons
*/
jsxc.xmpp.carbons = {
enabled: false,
/**
* Enable carbons.
*
* @memberOf jsxc.xmpp.carbons
* @param cb callback
*/
enable: function(cb) {
var iq = $iq({
type: 'set'
}).c('enable', {
xmlns: jsxc.CONST.NS.CARBONS
});
jsxc.xmpp.conn.sendIQ(iq, function() {
jsxc.xmpp.carbons.enabled = true;
jsxc.debug('Carbons enabled');
if (cb) {
cb.call(this);
}
}, function(stanza) {
jsxc.warn('Could not enable carbons', stanza);
});
},
/**
* Disable carbons.
*
* @memberOf jsxc.xmpp.carbons
* @param cb callback
*/
disable: function(cb) {
var iq = $iq({
type: 'set'
}).c('disable', {
xmlns: jsxc.CONST.NS.CARBONS
});
jsxc.xmpp.conn.sendIQ(iq, function() {
jsxc.xmpp.carbons.enabled = false;
jsxc.debug('Carbons disabled');
if (cb) {
cb.call(this);
}
}, function(stanza) {
jsxc.warn('Could not disable carbons', stanza);
});
},
/**
* Enable/Disable carbons depending on options key.
*
* @memberOf jsxc.xmpp.carbons
* @param err error message
*/
refresh: function(err) {
if (err === false) {
return;
}
if (jsxc.options.get('carbons').enable) {
return jsxc.xmpp.carbons.enable();
}
return jsxc.xmpp.carbons.disable();
}
};
/**
* Handle long-live data
*
@@ -4567,9 +4933,11 @@
* @param bid
* @param direction
* @param msg
* @param encrypted
* @param forwarded
* @return post
*/
saveMessage: function(bid, direction, msg) {
saveMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
var chat = jsxc.storage.getUserItem('chat', bid) || [];
var uid = new Date().getTime() + ':msg';
@@ -4582,7 +4950,10 @@
direction: direction,
msg: msg,
uid: uid.replace(/:/, '-'),
received: false
received: false,
encrypted: encrypted || false,
forwarded: forwarded || false,
stamp: stamp || new Date().getTime()
};
chat.unshift(post);
@@ -4636,20 +5007,24 @@
* Handler for otr receive event
*
* @memberOf jsxc.otr
* @param {string} bid
* @param {string} msg received message
* @param {string} encrypted True, if msg was encrypted.
* @param {Object} d
* @param {string} d.bid
* @param {string} d.msg received message
* @param {boolean} d.encrypted True, if msg was encrypted.
* @param {boolean} d.forwarded
* @param {string} d.stamp timestamp
*/
receiveMessage: function(bid, msg, encrypted) {
receiveMessage: function(d) {
var bid = d.bid;
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT) {
jsxc.otr.backup(bid);
}
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !encrypted) {
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Received an unencrypted message.%% [') + msg + ']');
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !d.encrypted) {
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Received an unencrypted message.%% [') + d.msg + ']', d.encrypted, d.forwarded, d.stamp);
} else {
jsxc.gui.window.postMessage(bid, 'in', msg);
jsxc.gui.window.postMessage(bid, 'in', d.msg, d.encrypted, d.forwarded, d.stamp);
}
},
@@ -4784,8 +5159,14 @@
});
// Receive message
jsxc.otr.objects[bid].on('ui', function(msg, encrypted) {
jsxc.otr.receiveMessage(bid, msg, encrypted === true);
jsxc.otr.objects[bid].on('ui', function(msg, encrypted, meta) {
jsxc.otr.receiveMessage({
bid: bid,
msg: msg,
encrypted: encrypted === true,
stamp: meta.stamp,
forwarded: meta.forwarded
});
});
// Send message
@@ -5376,16 +5757,7 @@
notice.click(function() {
jsxc.notice.remove(nid);
var fnList = fnName.split('.');
var fn = jsxc[fnList[0]];
var i;
for (i = 1; i &lt; fnList.length; i++) {
fn = fn[fnList[i]];
}
if (typeof fn === 'function') {
fn.apply(null, fnParams);
}
jsxc.exec(fnName, fnParams);
return false;
});
@@ -5893,13 +6265,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+7 -2
Ver Arquivo
@@ -302,6 +302,11 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
jsxc.debug('Update icon', bid);
var self = jsxc.webrtc;
if (bid === jsxc.jidToBid(self.conn.jid)) {
return;
}
var win = jsxc.gui.window.get(bid);
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy', bid).jid;
@@ -1073,13 +1078,13 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+14 -14
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line5052">line 5052</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5433">line 5433</a>
</li></ul></dd>
@@ -134,7 +134,7 @@
<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#line5060">line 5060</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5441">line 5441</a>
</li></ul></dd>
@@ -199,7 +199,7 @@
<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#line5218">line 5218</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5599">line 5599</a>
</li></ul></dd>
@@ -291,7 +291,7 @@ the default api.
<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#line5130">line 5130</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5511">line 5511</a>
</li></ul></dd>
@@ -382,7 +382,7 @@ the default api.
<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#line5067">line 5067</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5448">line 5448</a>
</li></ul></dd>
@@ -500,7 +500,7 @@ the default api.
<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#line5277">line 5277</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5658">line 5658</a>
</li></ul></dd>
@@ -702,7 +702,7 @@ the default api.
<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#line5094">line 5094</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5475">line 5475</a>
</li></ul></dd>
@@ -865,7 +865,7 @@ the default api.
<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#line5230">line 5230</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5611">line 5611</a>
</li></ul></dd>
@@ -935,7 +935,7 @@ messages.
<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#line5174">line 5174</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5555">line 5555</a>
</li></ul></dd>
@@ -1004,7 +1004,7 @@ messages.
<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#line5199">line 5199</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5580">line 5580</a>
</li></ul></dd>
@@ -1073,7 +1073,7 @@ messages.
<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#line5261">line 5261</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5642">line 5642</a>
</li></ul></dd>
@@ -1191,7 +1191,7 @@ messages.
<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#line5292">line 5292</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5673">line 5673</a>
</li></ul></dd>
@@ -1232,13 +1232,13 @@ messages.
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+50 -28
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line680">line 680</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line740">line 740</a>
</li></ul></dd>
@@ -134,7 +134,7 @@
<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#line688">line 688</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line748">line 748</a>
</li></ul></dd>
@@ -188,7 +188,7 @@
<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#line747">line 747</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line823">line 823</a>
</li></ul></dd>
@@ -242,7 +242,7 @@
<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#line694">line 694</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line754">line 754</a>
</li></ul></dd>
@@ -296,7 +296,7 @@
<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#line744">line 744</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line820">line 820</a>
</li></ul></dd>
@@ -350,7 +350,7 @@
<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#line773">line 773</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line849">line 849</a>
</li></ul></dd>
@@ -404,7 +404,7 @@
<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#line721">line 721</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line785">line 785</a>
</li></ul></dd>
@@ -458,7 +458,7 @@
<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#line762">line 762</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line838">line 838</a>
</li></ul></dd>
@@ -512,7 +512,7 @@
<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#line738">line 738</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line814">line 814</a>
</li></ul></dd>
@@ -566,7 +566,7 @@
<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#line776">line 776</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line852">line 852</a>
</li></ul></dd>
@@ -620,7 +620,7 @@
<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#line753">line 753</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line829">line 829</a>
</li></ul></dd>
@@ -674,7 +674,7 @@
<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#line741">line 741</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line817">line 817</a>
</li></ul></dd>
@@ -728,7 +728,7 @@
<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#line697">line 697</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line757">line 757</a>
</li></ul></dd>
@@ -782,7 +782,7 @@
<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#line756">line 756</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line832">line 832</a>
</li></ul></dd>
@@ -836,7 +836,7 @@
<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#line712">line 712</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line776">line 776</a>
</li></ul></dd>
@@ -890,7 +890,7 @@
<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#line759">line 759</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line835">line 835</a>
</li></ul></dd>
@@ -944,7 +944,7 @@
<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#line750">line 750</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line826">line 826</a>
</li></ul></dd>
@@ -998,7 +998,7 @@
<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#line691">line 691</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line751">line 751</a>
</li></ul></dd>
@@ -1052,7 +1052,7 @@
<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#line702">line 702</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line766">line 766</a>
</li></ul></dd>
@@ -1163,7 +1163,7 @@
<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#line784">line 784</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line860">line 860</a>
</li></ul></dd>
@@ -1233,7 +1233,7 @@ connection is found.
<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#line768">line 768</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line844">line 844</a>
</li></ul></dd>
@@ -1350,7 +1350,7 @@ connection is found.
<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#line168">line 168</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line195">line 195</a>
</li></ul></dd>
@@ -1490,7 +1490,7 @@ connection is found.
<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#line796">line 796</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line872">line 872</a>
</li></ul></dd>
@@ -1540,7 +1540,7 @@ connection is found.
<dt>
<h4 class="name" id="saveSettinsPermanent"><span class="type-signature">&lt;static> </span>saveSettinsPermanent<span class="signature">(data)</span><span class="type-signature"></span></h4>
<h4 class="name" id="saveSettinsPermanent"><span class="type-signature">&lt;static> </span>saveSettinsPermanent<span class="signature">(data)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
</dt>
@@ -1624,7 +1624,7 @@ connection is found.
<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#line806">line 806</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line883">line 883</a>
</li></ul></dd>
@@ -1645,6 +1645,28 @@ connection is found.
<h5>Returns:</h5>
<div class="param-desc">
false if function failes
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">boolean</span>
</dd>
</dl>
</dd>
@@ -1764,7 +1786,7 @@ connection is found.
<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#line180">line 180</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line207">line 207</a>
</li></ul></dd>
@@ -1805,13 +1827,13 @@ connection is found.
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+113 -19
Ver Arquivo
@@ -64,7 +64,7 @@
<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#line4600">line 4600</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4971">line 4971</a>
</li></ul></dd>
@@ -132,7 +132,7 @@
<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#line4605">line 4605</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4976">line 4976</a>
</li></ul></dd>
@@ -197,7 +197,7 @@
<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#line5017">line 5017</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5398">line 5398</a>
</li></ul></dd>
@@ -314,7 +314,7 @@
<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#line4880">line 4880</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5261">line 5261</a>
</li></ul></dd>
@@ -431,7 +431,7 @@
<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#line4649">line 4649</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5024">line 5024</a>
</li></ul></dd>
@@ -518,7 +518,7 @@
<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#line4947">line 4947</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5328">line 5328</a>
</li></ul></dd>
@@ -653,7 +653,7 @@
<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#line5031">line 5031</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5412">line 5412</a>
</li></ul></dd>
@@ -770,7 +770,7 @@
<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#line4849">line 4849</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5230">line 5230</a>
</li></ul></dd>
@@ -923,7 +923,7 @@
<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#line4864">line 4864</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5245">line 5245</a>
</li></ul></dd>
@@ -1101,7 +1101,7 @@
<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#line4792">line 4792</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5173">line 5173</a>
</li></ul></dd>
@@ -1147,7 +1147,7 @@
<dt>
<h4 class="name" id="receiveMessage"><span class="type-signature">&lt;static> </span>receiveMessage<span class="signature">(bid, msg, encrypted)</span><span class="type-signature"></span></h4>
<h4 class="name" id="receiveMessage"><span class="type-signature">&lt;static> </span>receiveMessage<span class="signature">(d)</span><span class="type-signature"></span></h4>
</dt>
@@ -1180,6 +1180,48 @@
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>d</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">
<h6>Properties</h6>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
@@ -1241,7 +1283,7 @@
<td class="type">
<span class="param-type">string</span>
<span class="param-type">boolean</span>
@@ -1255,6 +1297,58 @@
</tr>
<tr>
<td class="name"><code>forwarded</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>stamp</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">timestamp</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
@@ -1282,7 +1376,7 @@
<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#line4616">line 4616</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4990">line 4990</a>
</li></ul></dd>
@@ -1399,7 +1493,7 @@
<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#line4912">line 4912</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5293">line 5293</a>
</li></ul></dd>
@@ -1539,7 +1633,7 @@
<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#line4635">line 4635</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5010">line 5010</a>
</li></ul></dd>
@@ -1730,7 +1824,7 @@
<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#line4823">line 4823</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5204">line 5204</a>
</li></ul></dd>
@@ -1865,7 +1959,7 @@
<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#line4835">line 4835</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5216">line 5216</a>
</li></ul></dd>
@@ -1924,13 +2018,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+54 -18
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line4004">line 4004</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4370">line 4370</a>
</li></ul></dd>
@@ -134,7 +134,7 @@
<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#line4015">line 4015</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4381">line 4381</a>
</li></ul></dd>
@@ -270,7 +270,7 @@
<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#line4083">line 4083</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4449">line 4449</a>
</li></ul></dd>
@@ -383,7 +383,7 @@
<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#line4024">line 4024</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4390">line 4390</a>
</li></ul></dd>
@@ -517,7 +517,7 @@
<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#line4100">line 4100</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4466">line 4466</a>
</li></ul></dd>
@@ -667,7 +667,7 @@
<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#line4212">line 4212</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4578">line 4578</a>
</li></ul></dd>
@@ -901,7 +901,7 @@
<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#line4262">line 4262</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4628">line 4628</a>
</li></ul></dd>
@@ -1064,7 +1064,7 @@
<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#line4225">line 4225</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4591">line 4591</a>
</li></ul></dd>
@@ -1222,7 +1222,7 @@
<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#line4119">line 4119</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4485">line 4485</a>
</li></ul></dd>
@@ -1334,7 +1334,7 @@
<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#line4137">line 4137</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4503">line 4503</a>
</li></ul></dd>
@@ -1464,7 +1464,7 @@
<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#line4575">line 4575</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4946">line 4946</a>
</li></ul></dd>
@@ -1514,7 +1514,7 @@
<dt>
<h4 class="name" id="saveMessage"><span class="type-signature">&lt;static> </span>saveMessage<span class="signature">(bid, direction, msg)</span><span class="type-signature"></span></h4>
<h4 class="name" id="saveMessage"><span class="type-signature">&lt;static> </span>saveMessage<span class="signature">(bid, direction, msg, encrypted, forwarded)</span><span class="type-signature"></span></h4>
</dt>
@@ -1603,6 +1603,42 @@
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>encrypted</code></td>
<td class="type">
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>forwarded</code></td>
<td class="type">
</td>
<td class="description last"></td>
</tr>
@@ -1634,7 +1670,7 @@
<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#line4545">line 4545</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4913">line 4913</a>
</li></ul></dd>
@@ -1807,7 +1843,7 @@
<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#line4038">line 4038</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4404">line 4404</a>
</li></ul></dd>
@@ -2033,7 +2069,7 @@
<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#line4159">line 4159</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4525">line 4525</a>
</li></ul></dd>
@@ -2228,7 +2264,7 @@
<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#line4191">line 4191</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4557">line 4557</a>
</li></ul></dd>
@@ -2269,13 +2305,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+19 -19
Ver Arquivo
@@ -722,7 +722,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line740">line 740</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line745">line 745</a>
</li></ul></dd>
@@ -990,7 +990,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line687">line 687</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line692">line 692</a>
</li></ul></dd>
@@ -1286,7 +1286,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line465">line 465</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line470">line 470</a>
</li></ul></dd>
@@ -1355,7 +1355,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line567">line 567</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line572">line 572</a>
</li></ul></dd>
@@ -1557,7 +1557,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line532">line 532</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line537">line 537</a>
</li></ul></dd>
@@ -1687,7 +1687,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line403">line 403</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line408">line 408</a>
</li></ul></dd>
@@ -1835,7 +1835,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line628">line 628</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line633">line 633</a>
</li></ul></dd>
@@ -1904,7 +1904,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line450">line 450</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line455">line 455</a>
</li></ul></dd>
@@ -2034,7 +2034,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line417">line 417</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line422">line 422</a>
</li></ul></dd>
@@ -2164,7 +2164,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line320">line 320</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line325">line 325</a>
</li></ul></dd>
@@ -2294,7 +2294,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line340">line 340</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line345">line 345</a>
</li></ul></dd>
@@ -2442,7 +2442,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line580">line 580</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line585">line 585</a>
</li></ul></dd>
@@ -2590,7 +2590,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line615">line 615</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line620">line 620</a>
</li></ul></dd>
@@ -2659,7 +2659,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line752">line 752</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line757">line 757</a>
</li></ul></dd>
@@ -2789,7 +2789,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line355">line 355</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line360">line 360</a>
</li></ul></dd>
@@ -2901,7 +2901,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line789">line 789</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line794">line 794</a>
</li></ul></dd>
@@ -3031,7 +3031,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line698">line 698</a>
<a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line703">line 703</a>
</li></ul></dd>
@@ -3184,13 +3184,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:26 GMT+0100 (CET)
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>
+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>
+264 -91
Ver Arquivo
@@ -66,7 +66,7 @@
<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#line3150">line 3150</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3276">line 3276</a>
</li></ul></dd>
@@ -91,9 +91,182 @@
<h3 class="subsection-title">Namespaces</h3>
<dl>
<dt><a href="namespaces.html#jsxc.xmpp.carbons"><a href="jsxc.xmpp.carbons.html">carbons</a></a></dt>
<dd></dd>
</dl>
<h3 class="subsection-title">Members</h3>
<dl>
<dt>
<h4 class="name" id="login"><span class="type-signature">&lt;static> </span>login<span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Create new connection or attach to old
</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#line3284">line 3284</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="login^2"><span class="type-signature">&lt;static> </span>login^2<span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Create new connection with given parameters.
</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#line3285">line 3285</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="login^3"><span class="type-signature">&lt;static> </span>login^3<span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Attach connection with given parameters.
</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#line3286">line 3286</a>
</li></ul></dd>
</dl>
</dd>
</dl>
<h3 class="subsection-title">Methods</h3>
@@ -220,7 +393,7 @@
<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#line3936">line 3936</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4217">line 4217</a>
</li></ul></dd>
@@ -360,7 +533,7 @@
<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#line3833">line 3833</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4114">line 4114</a>
</li></ul></dd>
@@ -429,7 +602,7 @@
<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#line3350">line 3350</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3536">line 3536</a>
</li></ul></dd>
@@ -498,7 +671,7 @@
<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#line3309">line 3309</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3490">line 3490</a>
</li></ul></dd>
@@ -567,7 +740,7 @@
<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#line3382">line 3382</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3599">line 3599</a>
</li></ul></dd>
@@ -636,7 +809,7 @@
<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#line3428">line 3428</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3645">line 3645</a>
</li></ul></dd>
@@ -748,7 +921,7 @@
<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#line3988">line 3988</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4275">line 4275</a>
</li></ul></dd>
@@ -906,76 +1079,7 @@
<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#line3965">line 3965</a>
</li></ul></dd>
</dl>
</dd>
<dt>
<h4 class="name" id="login"><span class="type-signature">&lt;static> </span>login<span class="signature">()</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Create new connection or attach to old
</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#line3163">line 3163</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4252">line 4252</a>
</li></ul></dd>
@@ -1044,7 +1148,7 @@
<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#line3243">line 3243</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3424">line 3424</a>
</li></ul></dd>
@@ -1085,6 +1189,75 @@
</dd>
<dt>
<h4 class="name" id="onAuthFail"><span class="type-signature">&lt;private, static> </span>onAuthFail<span class="signature">()</span><span class="type-signature"></span></h4>
</dt>
<dd>
<div class="description">
Triggered on auth fail.
</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#line3698">line 3698</a>
</li></ul></dd>
</dl>
</dd>
@@ -1179,7 +1352,7 @@
<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#line3461">line 3461</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3685">line 3685</a>
</li></ul></dd>
@@ -1296,7 +1469,7 @@
<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#line3719">line 3719</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3959">line 3959</a>
</li></ul></dd>
@@ -1431,7 +1604,7 @@
<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#line3596">line 3596</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3838">line 3838</a>
</li></ul></dd>
@@ -1571,7 +1744,7 @@
<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#line3802">line 3802</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4083">line 4083</a>
</li></ul></dd>
@@ -1688,7 +1861,7 @@
<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#line3475">line 3475</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3717">line 3717</a>
</li></ul></dd>
@@ -1805,7 +1978,7 @@
<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#line3523">line 3523</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3765">line 3765</a>
</li></ul></dd>
@@ -1944,7 +2117,7 @@
<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#line3868">line 3868</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4149">line 4149</a>
</li></ul></dd>
@@ -2084,7 +2257,7 @@
<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#line3812">line 3812</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4093">line 4093</a>
</li></ul></dd>
@@ -2232,7 +2405,7 @@
<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#line3919">line 3919</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4200">line 4200</a>
</li></ul></dd>
@@ -2301,7 +2474,7 @@
<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#line3393">line 3393</a>
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3610">line 3610</a>
</li></ul></dd>
@@ -2342,13 +2515,13 @@
</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></ul>
<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 Thu Nov 06 2014 13:24:27 GMT+0100 (CET)
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>
+17 -7
Ver Arquivo
@@ -7,8 +7,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="../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;}
@@ -42,8 +42,9 @@
-->
<!-- Build files: -->
<script src="../build/jsxc.dep.js"></script>
<script src="../build/jsxc.js"></script>
<script src="../build/lib/jsxc.dep.js"></script>
<script src="../jsxc.lib.js"></script>
<script src="../jsxc.lib.webrtc.js"></script>
<script src="js/example.js"></script>
@@ -52,11 +53,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>
+27 -10
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',
@@ -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());
});
});
+32 -23
Ver Arquivo
@@ -7,8 +7,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="../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;}
@@ -16,26 +16,35 @@
</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="../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>
<!-- Nightly files:
<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>
-->
<!-- Build files: -->
<script src="../build/lib/jsxc.dep.js"></script>
<script src="../jsxc.lib.js"></script>
<script src="../jsxc.lib.webrtc.js"></script>
<script src="js/example.js"></script>
@@ -46,4 +55,4 @@
<a href="index.html" id="logout">Log out</a>
</body>
</html>
</html>
-1243
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+465 -93
Ver Arquivo
@@ -39,9 +39,6 @@ var jsxc;
/** True if restore is complete */
restoreCompleted: false,
/** True if login through form */
triggeredFromForm: false,
/** True if login through box */
triggeredFromBox: false,
@@ -80,9 +77,39 @@ var jsxc;
REGEX: {
JID: new RegExp('\\b[^"&\'\\/:<>@\\s]+@[\\w-_.]+\\b', 'ig'),
URL: new RegExp(/((?:https?:\/\/|www\.|([\w\-]+\.[a-zA-Z]{2,3})(?=\b))(?:(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\)([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|])?)|(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|]))?)/gi)
},
NS: {
CARBONS: 'urn:xmpp:carbons:2',
FORWARD: 'urn:xmpp:forward:0'
}
},
/**
* Parse a unix timestamp and return a formatted time string
*
* @memberOf jsxc
* @param {Object} unixtime
* @returns time of day and/or date
*/
getFormattedTime: function(unixtime) {
var msgDate = new Date(parseInt(unixtime));
var date = ('0' + msgDate.getDate()).slice(-2);
var month = ('0' + (msgDate.getMonth() + 1)).slice(-2);
var year = msgDate.getFullYear();
var hours = ('0' + msgDate.getHours()).slice(-2);
var minutes = ('0' + msgDate.getMinutes()).slice(-2);
var dateNow = new Date(), time = hours + ':' + minutes;
// compare dates only
dateNow.setHours(0, 0, 0, 0);
msgDate.setHours(0, 0, 0, 0);
if (dateNow.getTime() !== msgDate.getTime()) {
return date + '.' + month + '.' + year + ' ' + time;
}
return time;
},
/**
* Write debug message to console and to log.
*
@@ -156,7 +183,7 @@ var jsxc;
if (options) {
// override default options
$.extend(jsxc.options, options);
$.extend(true, jsxc.options, options);
}
/**
@@ -206,6 +233,10 @@ var jsxc;
return;
}
if (jsxc.storage.getItem('debug') === true) {
jsxc.options.otr.debug = true;
}
// Register event listener for the storage event
window.addEventListener('storage', jsxc.storage.onStorage, false);
@@ -257,7 +288,7 @@ var jsxc;
var settings = jsxc.prepareLogin();
if (settings !== false && (settings.xmpp.onlogin === "true" || settings.xmpp.onlogin === true)) {
jsxc.triggeredFromForm = true;
jsxc.options.loginForm.triggered = true;
jsxc.xmpp.login();
@@ -385,8 +416,12 @@ var jsxc;
// Sending keepalive signal
jsxc.startKeepAlive();
// create or load DSA key and call _onMaster
jsxc.otr.createDSA();
if (jsxc.options.get('otr').enable) {
// create or load DSA key and call _onMaster
jsxc.otr.createDSA();
} else {
jsxc._onMaster();
}
},
/**
@@ -426,6 +461,10 @@ var jsxc;
}
}
$(document).on('connectionReady.jsxc', function() {
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
jsxc.xmpp.login();
},
@@ -675,6 +714,27 @@ var jsxc;
return jsxc.l[k] || key.replace(/_/g, ' ');
});
},
/**
* Executes the given function in jsxc namespace.
*
* @memberOf jsxc
* @param {string} fnName Function name
* @param {array} fnParams Function parameters
* @returns Function return value
*/
exec: function(fnName, fnParams) {
var fnList = fnName.split('.');
var fn = jsxc[fnList[0]];
var i;
for (i = 1; i < fnList.length; i++) {
fn = fn[fnList[i]];
}
if (typeof fn === 'function') {
return fn.apply(null, fnParams);
}
}
};
/**
@@ -695,7 +755,11 @@ var jsxc;
/** OTR options */
otr: {
ERROR_START_AKE: true
enable: true,
ERROR_START_AKE: false,
debug: false,
SEND_WHITESPACE_TAG: true,
WHITESPACE_START_AKE: true
},
/** xmpp options */
@@ -731,7 +795,19 @@ var jsxc;
/** manipulate JID from input element */
preJid: function(jid) {
return jid;
}
},
/**
* Action after connected: submit [String] Submit form, false [boolean]
* Do nothing, continue [String] Start chat
*/
onConnected: 'submit',
/**
* Action after auth fail: submit [String] Submit form, false [boolean]
* Do nothing, ask [String] Show auth fail dialog
*/
onAuthFail: 'submit'
},
/** jquery object from logout element */
@@ -802,9 +878,15 @@ var jsxc;
*
* @memberOf jsxc.options
* @param data Holds all data as key/value
* @returns {boolean} false if function failes
*/
saveSettinsPermanent: function() {
},
carbons: {
/** Enable carbon copies? */
enable: false
}
};
@@ -858,6 +940,11 @@ var jsxc;
* @memberOf jsxc.gui
*/
init: function() {
//Prevent duplicate windowList
if ($('#jsxc_windowList').length > 0) {
return;
}
$('body').append($(jsxc.gui.template.get('windowList')));
$(window).resize(jsxc.gui.updateWindowListSB);
@@ -877,7 +964,9 @@ var jsxc;
jsxc.gui.tooltip('#jsxc_windowList');
jsxc.gui.roster.init();
if (!jsxc.el_exists('#jsxc_roster')) {
jsxc.gui.roster.init();
}
// prepare regexp for emotions
$.each(jsxc.gui.emotions, function(i, val) {
@@ -1002,7 +1091,7 @@ var jsxc;
var avatarSrc = jsxc.storage.getUserItem('avatar', aid);
var setAvatar = function(src) {
if (src === 0) {
if (src === 0 || src === '0') {
jsxc.options.defaultAvatar.call(el, jid);
return;
}
@@ -1026,13 +1115,18 @@ var jsxc;
if (vCard.length === 0) {
jsxc.debug('No photo provided');
src = 0;
src = '0';
} else if (vCard.find('EXTVAL').length > 0) {
src = vCard.find('EXTVAL').text();
} else {
var img = vCard.find('BINVAL').text();
var type = vCard.find('TYPE').text();
src = 'data:' + type + ';base64,' + img;
}
// concat chunks
src = src.replace(/[\t\r\n\f]/gi, '');
jsxc.storage.setUserItem('avatar', aid, src);
setAvatar(src);
}, Strophe.getBareJidFromJid(jid), function(msg) {
@@ -1169,7 +1263,7 @@ var jsxc;
var settings = jsxc.prepareLogin();
jsxc.triggeredFromBox = true;
jsxc.triggeredFromForm = false;
jsxc.options.loginForm.triggered = false;
if (settings === false) {
jsxc.gui.showAuthFail();
@@ -1436,7 +1530,7 @@ var jsxc;
showAuthFail: function() {
jsxc.gui.dialog.open(jsxc.gui.template.get('authFailDialog'));
if (jsxc.triggeredFromBox) {
if (jsxc.options.loginForm.triggered !== false) {
$('#jsxc_dialog .jsxc_cancel').hide();
}
@@ -1627,7 +1721,17 @@ var jsxc;
var type = photo.find('TYPE').text();
var src = 'data:' + type + ';base64,' + img;
$('#jsxc_dialog h3').before('<img class="jsxc_vCard" src="' + src + '" alt="avatar" />');
if (photo.find('EXTVAL').length > 0) {
src = photo.find('EXTVAL').text();
}
// concat chunks
src = src.replace(/[\t\r\n\f]/gi, '');
var img_el = $('<img class="jsxc_vCard" alt="avatar" />');
img_el.attr('src', src);
$('#jsxc_dialog h3').before(img_el);
}
if ($(stanza).find('vCard').length === 0 || ($(stanza).find('vcard > *').length === 1 && photo.length === 1)) {
@@ -1701,6 +1805,10 @@ var jsxc;
var err = jsxc.options.saveSettinsPermanent.call(this, data);
if (typeof self.attr('data-onsubmit') === 'string') {
jsxc.exec(self.attr('data-onsubmit'), [ err ]);
}
setTimeout(function() {
self.find('input[type="submit"]').effect('highlight', {
color: (err) ? 'green' : 'red'
@@ -2010,10 +2118,6 @@ var jsxc;
$('#jsxc_presence > span').text($('#jsxc_presence > ul .jsxc_' + pres).text());
jsxc.gui.updatePresence('own', pres);
$(document).on('cloaded.roster.jsxc', function() {
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
jsxc.gui.tooltip('#jsxc_roster');
jsxc.notice.load();
@@ -2251,8 +2355,7 @@ var jsxc;
* Shows a text with link to a login box that no connection exists.
*/
noConnection: function() {
$('#jsxc_roster .slimScrollDiv').remove();
$('#jsxc_roster > .jsxc_bottom').remove();
$('#jsxc_roster').addClass('jsxc_noConnection');
$('#jsxc_roster').append($('<p>' + jsxc.l.no_connection + '</p>').append(' <a>' + jsxc.l.relogin + '</a>').click(function() {
jsxc.gui.showLoginBox();
@@ -2721,8 +2824,11 @@ var jsxc;
* @param {String} direction 'in' message is received or 'out' message is
* send
* @param {String} msg Message to display
* @param {boolean} encrypted Was this message encrypted? Default: false
* @param {boolean} forwarded Was this message forwarded? Default: false
* @param {integer} stamp Timestamp
*/
postMessage: function(bid, direction, msg) {
postMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
var data = jsxc.storage.getUserItem('buddy', bid);
var html_msg = msg;
@@ -2732,12 +2838,12 @@ var jsxc;
// exceptions:
if (direction === 'out' && data.msgstate === 2) {
if (direction === 'out' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED && forwarded !== true) {
direction = 'sys';
msg = jsxc.l.your_message_wasnt_send_please_end_your_private_conversation;
}
if (direction === 'in' && data.msgstate === 2) {
if (direction === 'in' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED) {
direction = 'sys';
msg = jsxc.l.unencrypted_message_received + ' ' + msg;
}
@@ -2747,13 +2853,14 @@ var jsxc;
msg = jsxc.l.your_message_wasnt_send_because_you_have_no_valid_subscription;
}
var post = jsxc.storage.saveMessage(bid, direction, msg);
encrypted = encrypted || data.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED;
var post = jsxc.storage.saveMessage(bid, direction, msg, encrypted, forwarded, stamp);
if (direction === 'in') {
$(document).trigger('postmessagein.jsxc', [ bid, html_msg ]);
}
if (direction === 'out' && jsxc.master) {
if (direction === 'out' && jsxc.master && forwarded !== true) {
jsxc.xmpp.sendMessage(bid, html_msg, post.uid);
}
@@ -2777,7 +2884,6 @@ var jsxc;
var msg = post.msg;
var direction = post.direction;
var uid = post.uid;
var received = post.received || false;
if (win.find('.jsxc_textinput').is(':not(:focus)') && jsxc.restoreCompleted && direction === 'in' && !restore) {
jsxc.gui.window.highlight(bid);
@@ -2816,17 +2922,29 @@ var jsxc;
});
});
var msgDiv = $("<div>");
var msgDiv = $("<div>"), msgTsDiv = $("<div>");
msgDiv.addClass('jsxc_chatmessage jsxc_' + direction);
msgDiv.attr('id', uid);
msgDiv.html(msg);
msgDiv.html('<div>' + msg + '</div>');
msgTsDiv.addClass('jsxc_timestamp');
msgTsDiv.html(jsxc.getFormattedTime(post.stamp));
if (received) {
if (post.received || false) {
msgDiv.addClass('jsxc_received');
}
if (post.forwarded) {
msgDiv.addClass('jsxc_forwarded');
}
if (post.encrypted) {
msgDiv.addClass('jsxc_encrypted');
}
if (direction === 'sys') {
jsxc.gui.window.get(bid).find('.jsxc_textarea').append('<div style="clear:both"/>');
} else if (typeof post.stamp !== 'undefined') {
msgDiv.append(msgTsDiv);
}
win.find('.jsxc_textarea').append(msgDiv);
@@ -3144,6 +3262,14 @@ var jsxc;
<label for="priority-dnd">%%dnd%%</label><input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/><br />\
<input type="submit" value="%%Save%%"/>\
</fieldset>\
</form>\
<p></p>\
<form data-onsubmit="xmpp.carbons.refresh">\
<fieldset class="jsxc_fieldsetCarbons jsxc_fieldset">\
<legend>%%Carbon copy%%</legend>\
<label for="carbons-enable">%%Enable%%</label><input type="checkbox" id="carbons-enable" /><br />\
<input type="submit" value="%%Save%%"/>\
</fieldset>\
</form>'
};
@@ -3158,13 +3284,50 @@ var jsxc;
/**
* Create new connection or attach to old
*
* @name login
* @memberOf jsxc.xmpp
*/
/**
* Create new connection with given parameters.
*
* @name login^2
* @param {string} jid
* @param {string} password
* @memberOf jsxc.xmpp
*/
/**
* Attach connection with given parameters.
*
* @name login^3
* @param {string} jid
* @param {string} sid
* @param {string} rid
* @memberOf jsxc.xmpp
*/
login: function() {
var sid = jsxc.storage.getItem('sid');
var rid = jsxc.storage.getItem('rid');
var jid = jsxc.storage.getItem('jid');
if (jsxc.xmpp.conn && jsxc.xmpp.conn.connected) {
return;
}
var jid = null, password = null, sid = null, rid = null;
switch (arguments.length) {
case 2:
jid = arguments[0];
password = arguments[1];
break;
case 3:
jid = arguments[0];
sid = arguments[1];
rid = arguments[2];
break;
default:
jid = jsxc.storage.getItem('jid');
sid = jsxc.storage.getItem('sid');
rid = jsxc.storage.getItem('rid');
}
var url = jsxc.options.get('xmpp').url;
// Register eventlistener
@@ -3172,6 +3335,8 @@ var jsxc;
$(document).on('attached.jsxc', jsxc.xmpp.attached);
$(document).on('disconnected.jsxc', jsxc.xmpp.disconnected);
$(document).on('ridChange', jsxc.xmpp.onRidChange);
$(document).on('connfail.jsxc', jsxc.xmpp.onConnfail);
$(document).on('authfail.jsxc', jsxc.xmpp.onAuthFail);
Strophe.addNamespace('RECEIPTS', 'urn:xmpp:receipts');
@@ -3212,10 +3377,10 @@ var jsxc;
$(document).trigger('disconnected.jsxc');
break;
case Strophe.Status.CONNFAIL:
jsxc.xmpp.onConnfail(condition);
$(document).trigger('connfail.jsxc');
break;
case Strophe.Status.AUTHFAIL:
jsxc.gui.showAuthFail();
$(document).trigger('authfail.jsxc');
break;
}
};
@@ -3231,7 +3396,23 @@ var jsxc;
} else {
jsxc.debug('New connection');
jsxc.xmpp.conn.connect(jsxc.options.xmpp.jid, jsxc.options.xmpp.password, callback);
if (jsxc.xmpp.conn.caps) {
// Add system handler, because user handler isn't called before
// we are authenticated
jsxc.xmpp.conn._addSysHandler(function(stanza) {
var from = jsxc.xmpp.conn.domain, c = stanza.querySelector('c'), ver = c.getAttribute('ver'), node = c.getAttribute('node');
var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
jsxc.xmpp.conn.caps._jidVerIndex[from] = ver;
_jidNodeIndex[from] = node;
localStorage.setItem('strophe.caps._jidVerIndex', JSON.stringify(jsxc.xmpp.conn.caps._jidVerIndex));
localStorage.setItem('strophe.caps._jidNodeIndex', JSON.stringify(_jidNodeIndex));
}, Strophe.NS.CAPS);
}
jsxc.xmpp.conn.connect(jid || jsxc.options.xmpp.jid, password || jsxc.options.xmpp.password, callback);
}
},
@@ -3266,11 +3447,11 @@ var jsxc;
jsxc.triggeredFromElement = true;
// restore all otr objects
$.each(jsxc.storage.getUserItem('otrlist'), function(i, val) {
$.each(jsxc.storage.getUserItem('otrlist') || {}, function(i, val) {
jsxc.otr.create(val);
});
var numOtr = Object.keys(jsxc.otr.objects).length + 1;
var numOtr = Object.keys(jsxc.otr.objects || {}).length + 1;
var disReady = function() {
if (--numOtr <= 0) {
jsxc.xmpp.conn.flush();
@@ -3282,7 +3463,7 @@ var jsxc;
};
// end all private conversations
$.each(jsxc.otr.objects, function(key, obj) {
$.each(jsxc.otr.objects || {}, function(key, obj) {
if (obj.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED) {
obj.endOtr.call(obj, function() {
obj.init.call(obj);
@@ -3326,20 +3507,25 @@ var jsxc;
jsxc.storage.removeUserItem('avatar', 'own');
jsxc.storage.removeUserItem('otrlist');
// submit login form
if (jsxc.triggeredFromForm) {
// Trigger normal submit
jsxc.submitLoginForm();
return;
if (jsxc.options.loginForm.triggered) {
switch (jsxc.options.loginForm.onConnected || 'submit') {
case 'submit':
jsxc.submitLoginForm();
/* falls through */
case false:
jsxc.xmpp.connectionReady();
return;
}
}
// reload page after login from login box
if (jsxc.triggeredFromBox) {
window.location.reload();
return;
}
// start chat
jsxc.xmpp.connectionReady();
jsxc.gui.init();
$('#jsxc_roster').removeClass('jsxc_noConnection');
jsxc.onMaster();
jsxc.xmpp.conn.resume();
jsxc.gui.dialog.close();
$(document).trigger('attached.jsxc');
},
/**
@@ -3354,6 +3540,37 @@ var jsxc;
jsxc.xmpp.conn.addHandler(jsxc.xmpp.onReceived, null, 'message');
jsxc.xmpp.conn.addHandler(jsxc.xmpp.onPresence, null, 'presence');
var caps = jsxc.xmpp.conn.caps;
var domain = jsxc.xmpp.conn.domain;
if (caps && jsxc.options.get('carbons').enable) {
var conditionalEnable = function() {
if (jsxc.xmpp.conn.caps.hasFeatureByJid(domain, jsxc.CONST.NS.CARBONS)) {
jsxc.xmpp.carbons.enable();
}
};
if (typeof caps._knownCapabilities[caps._jidVerIndex[domain]] === 'undefined') {
var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
$(document).on('caps.strophe', function onCaps(ev, from) {
if (from !== domain) {
return;
}
conditionalEnable();
$(document).off('caps.strophe', onCaps);
});
caps._requestCapabilities(jsxc.xmpp.conn.domain, _jidNodeIndex[domain], caps._jidVerIndex[domain]);
} else {
// We know server caps
conditionalEnable();
}
}
// Only load roaster if necessary
if (!jsxc.restore || !jsxc.storage.getUserItem('buddylist')) {
// in order to not overide existing presence information, we send
@@ -3435,6 +3652,13 @@ var jsxc;
jsxc.storage.removeUserItem('avatar', 'own');
jsxc.storage.removeUserItem('otrlist');
$(document).off('connected.jsxc', jsxc.xmpp.connected);
$(document).off('attached.jsxc', jsxc.xmpp.attached);
$(document).off('disconnected.jsxc', jsxc.xmpp.disconnected);
$(document).off('ridChange', jsxc.xmpp.onRidChange);
$(document).off('connfail.jsxc', jsxc.xmpp.onConnfail);
$(document).off('authfail.jsxc', jsxc.xmpp.onAuthFail);
jsxc.xmpp.conn = null;
$('#jsxc_windowList').remove();
@@ -3458,14 +3682,32 @@ var jsxc;
* @param {String} condition information why we lost the connection
* @private
*/
onConnfail: function(condition) {
onConnfail: function(ev, condition) {
jsxc.debug('XMPP connection failed: ' + condition);
if (jsxc.triggeredFromForm) {
if (jsxc.options.loginForm.triggered) {
jsxc.submitLoginForm();
}
},
/**
* Triggered on auth fail.
*
* @private
*/
onAuthFail: function() {
if (jsxc.options.loginForm.triggered) {
switch (jsxc.options.loginForm.onAuthFail || 'ask') {
case 'ask':
jsxc.gui.showAuthFail();
break;
case 'submit':
jsxc.submitLoginForm();
break;
}
}
},
/**
* Triggered on initial roster load
*
@@ -3613,8 +3855,6 @@ var jsxc;
var ptype = $(presence).attr('type');
var from = $(presence).attr('from');
var jid = Strophe.getBareJidFromJid(from).toLowerCase();
var to = $(presence).attr('to');
to = (to) ? Strophe.getBareJidFromJid(to).toLowerCase() : jid;
var r = Strophe.getResourceFromJid(from);
var bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
@@ -3622,7 +3862,7 @@ var jsxc;
var status = null;
var xVCard = $(presence).find('x[xmlns="vcard-temp:x:update"]');
if (jid === to) {
if (jid === Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))) {
return true;
}
@@ -3716,28 +3956,66 @@ var jsxc;
* @returns {Boolean}
* @private
*/
onMessage: function(message) {
/*
* <message xmlns='jabber:client' type='chat' to='' id='' from=''>
* <body>...</body> <active
* xmlns='http://jabber.org/protocol/chatstates'/> </message>
*/
onMessage: function(stanza) {
jsxc.debug('Incoming message', message);
var forwarded = $(stanza).find('forwarded[xmlns="' + jsxc.CONST.NS.FORWARD + '"]');
var message, carbon;
if (forwarded.length > 0) {
message = forwarded.find('> message');
forwarded = true;
carbon = $(stanza).find('> [xmlns="' + jsxc.CONST.NS.CARBONS + '"]');
if (carbon.length === 0) {
carbon = false;
}
jsxc.debug('Incoming forwarded message', message);
} else {
message = stanza;
forwarded = false;
carbon = false;
jsxc.debug('Incoming message', message);
}
var body = $(message).find('body:first').text();
if (!body || (body.match(/\?OTR/i) && forwarded)) {
return true;
}
var type = $(message).attr('type');
var from = $(message).attr('from');
var mid = $(message).attr('id');
var jid = Strophe.getBareJidFromJid(from);
var bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
var body = $(message).find('body:first').text();
var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
var bid;
var delay = $(message).find('delay[xmlns="urn:xmpp:delay"]');
var stamp = (delay.length > 0) ? new Date(delay.attr('stamp')) : new Date();
stamp = stamp.getTime();
if (carbon) {
var direction = (carbon.prop("tagName") === 'sent') ? 'out' : 'in';
bid = jsxc.jidToBid((direction === 'out') ? $(message).attr('to') : from);
jsxc.gui.window.postMessage(bid, direction, body, false, forwarded, stamp);
if (!body) {
return true;
} else if (forwarded) {
// Someone forwarded a message to us
body = from + jsxc.translate(' %%to%% ') + $(stanza).attr('to') + '"' + body + '"';
from = $(stanza).attr('from');
}
var jid = Strophe.getBareJidFromJid(from);
bid = jsxc.jidToBid(jid);
var data = jsxc.storage.getUserItem('buddy', bid);
var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
if (data === null) {
// jid not in roster
@@ -3750,7 +4028,7 @@ var jsxc;
var msg = jsxc.removeHTML(body);
msg = jsxc.escapeHTML(msg);
jsxc.storage.saveMessage(bid, 'in', msg);
jsxc.storage.saveMessage(bid, 'in', msg, false, forwarded, stamp);
return true;
}
@@ -3772,7 +4050,7 @@ var jsxc;
jsxc.otr.create(bid);
}
if (mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
if (!forwarded && mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
// Send received according to XEP-0184
jsxc.xmpp.conn.send($msg({
to: from
@@ -3783,9 +4061,12 @@ var jsxc;
}
if (jsxc.otr.objects.hasOwnProperty(bid)) {
jsxc.otr.objects[bid].receiveMsg(body);
jsxc.otr.objects[bid].receiveMsg(body, {
stamp: stamp,
forwarded: forwarded
});
} else {
jsxc.gui.window.postMessage(bid, 'in', body);
jsxc.gui.window.postMessage(bid, 'in', body, false, forwarded, stamp);
}
// preserve handler
@@ -3944,6 +4225,12 @@ var jsxc;
id: uid
}).c('body').t(msg);
if (jsxc.xmpp.carbons.enabled && msg.match(/^\?OTR/)) {
xmlMsg.up().c("private", {
xmlns: jsxc.CONST.NS.CARBONS
});
}
if (type === 'chat' && (isBar || jsxc.xmpp.conn.caps.hasFeatureByJid(jid, Strophe.NS.RECEIPTS))) {
// Add request according to XEP-0184
xmlMsg.up().c('request', {
@@ -4001,6 +4288,85 @@ var jsxc;
}
};
/**
* Handle carbons (XEP-0280);
*
* @namespace jsxc.xmpp.carbons
*/
jsxc.xmpp.carbons = {
enabled: false,
/**
* Enable carbons.
*
* @memberOf jsxc.xmpp.carbons
* @param cb callback
*/
enable: function(cb) {
var iq = $iq({
type: 'set'
}).c('enable', {
xmlns: jsxc.CONST.NS.CARBONS
});
jsxc.xmpp.conn.sendIQ(iq, function() {
jsxc.xmpp.carbons.enabled = true;
jsxc.debug('Carbons enabled');
if (cb) {
cb.call(this);
}
}, function(stanza) {
jsxc.warn('Could not enable carbons', stanza);
});
},
/**
* Disable carbons.
*
* @memberOf jsxc.xmpp.carbons
* @param cb callback
*/
disable: function(cb) {
var iq = $iq({
type: 'set'
}).c('disable', {
xmlns: jsxc.CONST.NS.CARBONS
});
jsxc.xmpp.conn.sendIQ(iq, function() {
jsxc.xmpp.carbons.enabled = false;
jsxc.debug('Carbons disabled');
if (cb) {
cb.call(this);
}
}, function(stanza) {
jsxc.warn('Could not disable carbons', stanza);
});
},
/**
* Enable/Disable carbons depending on options key.
*
* @memberOf jsxc.xmpp.carbons
* @param err error message
*/
refresh: function(err) {
if (err === false) {
return;
}
if (jsxc.options.get('carbons').enable) {
return jsxc.xmpp.carbons.enable();
}
return jsxc.xmpp.carbons.disable();
}
};
/**
* Handle long-live data
*
@@ -4540,9 +4906,11 @@ var jsxc;
* @param bid
* @param direction
* @param msg
* @param encrypted
* @param forwarded
* @return post
*/
saveMessage: function(bid, direction, msg) {
saveMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
var chat = jsxc.storage.getUserItem('chat', bid) || [];
var uid = new Date().getTime() + ':msg';
@@ -4555,7 +4923,10 @@ var jsxc;
direction: direction,
msg: msg,
uid: uid.replace(/:/, '-'),
received: false
received: false,
encrypted: encrypted || false,
forwarded: forwarded || false,
stamp: stamp || new Date().getTime()
};
chat.unshift(post);
@@ -4609,20 +4980,24 @@ var jsxc;
* Handler for otr receive event
*
* @memberOf jsxc.otr
* @param {string} bid
* @param {string} msg received message
* @param {string} encrypted True, if msg was encrypted.
* @param {Object} d
* @param {string} d.bid
* @param {string} d.msg received message
* @param {boolean} d.encrypted True, if msg was encrypted.
* @param {boolean} d.forwarded
* @param {string} d.stamp timestamp
*/
receiveMessage: function(bid, msg, encrypted) {
receiveMessage: function(d) {
var bid = d.bid;
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT) {
jsxc.otr.backup(bid);
}
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !encrypted) {
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Received an unencrypted message.%% [') + msg + ']');
if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !d.encrypted) {
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Received an unencrypted message.%% [') + d.msg + ']', d.encrypted, d.forwarded, d.stamp);
} else {
jsxc.gui.window.postMessage(bid, 'in', msg);
jsxc.gui.window.postMessage(bid, 'in', d.msg, d.encrypted, d.forwarded, d.stamp);
}
},
@@ -4757,8 +5132,14 @@ var jsxc;
});
// Receive message
jsxc.otr.objects[bid].on('ui', function(msg, encrypted) {
jsxc.otr.receiveMessage(bid, msg, encrypted === true);
jsxc.otr.objects[bid].on('ui', function(msg, encrypted, meta) {
jsxc.otr.receiveMessage({
bid: bid,
msg: msg,
encrypted: encrypted === true,
stamp: meta.stamp,
forwarded: meta.forwarded
});
});
// Send message
@@ -5349,16 +5730,7 @@ var jsxc;
notice.click(function() {
jsxc.notice.remove(nid);
var fnList = fnName.split('.');
var fn = jsxc[fnList[0]];
var i;
for (i = 1; i < fnList.length; i++) {
fn = fn[fnList[i]];
}
if (typeof fn === 'function') {
fn.apply(null, fnParams);
}
jsxc.exec(fnName, fnParams);
return false;
});
+5
Ver Arquivo
@@ -275,6 +275,11 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
jsxc.debug('Update icon', bid);
var self = jsxc.webrtc;
if (bid === jsxc.jidToBid(self.conn.jid)) {
return;
}
var win = jsxc.gui.window.get(bid);
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy', bid).jid;
-379
Ver Arquivo
@@ -1,379 +0,0 @@
.jsxc_webrtc {
width: 900px;
}
.jsxc_webrtc li .jsxc_name {
cursor: auto;
}
.jsxc_webrtc li .jsxc_name:hover {
color: #939393;
}
.jsxc_videoContainer {
width: 640px;
height: 480px;
position: relative;
background-color: #a4a4a4;
}
.jsxc_videoContainer video, .jsxc_videoContainer .jsxc_noRemoteVideo {
display: none;
}
.jsxc_remotevideo, .jsxc_noRemoteVideo {
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
z-index: 9000;
background-color: #a4a4a4;
}
.jsxc_localvideo {
width: 160px;
height: 120px;
position: absolute;
right: 10px;
bottom: 10px;
z-index: 9990;
background-color: black;
cursor: pointer;
}
.jsxc_noRemoteVideo p {
position: absolute;
bottom: 0px;
left:0px;
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: #717171;
}
.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_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;
}
.jsxc_webrtc .slimScrollDiv {
opacity: 1 !important;
}
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_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: 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;
float:right;
height: 480px;
width: 250px;
background-color: #A4A4A4;
}
.jsxc_chatarea > ul {
width: 250px;
height: 480px;
list-style: none;
padding: 0px;
}
.jsxc_chatarea .jsxc_settings {
display: none !important;
}
.jsxc_chatarea .jsxc_close {
display: none !important;
}
.jsxc_chatarea .jsxc_video {
display: none !important;
}
.jsxc_chatarea .jsxc_bar {
}
.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');
}
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
opacity: 0.2;
}
.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: #000000;
-moz-border-radius: 81px;
-moz-animation: bubblingG 1.3s infinite alternate;
-webkit-border-radius: 81px;
-webkit-animation: bubblingG 1.3s infinite alternate;
-ms-border-radius: 81px;
-ms-animation: bubblingG 1.3s infinite alternate;
-o-border-radius: 81px;
-o-animation: bubblingG 1.3s infinite alternate;
border-radius: 81px;
animation: bubblingG 1.3s infinite alternate;
}
#bubblingG_1 {
-moz-animation-delay: 0s;
-webkit-animation-delay: 0s;
-ms-animation-delay: 0s;
-o-animation-delay: 0s;
animation-delay: 0s;
}
#bubblingG_2 {
-moz-animation-delay: 0.39s;
-webkit-animation-delay: 0.39s;
-ms-animation-delay: 0.39s;
-o-animation-delay: 0.39s;
animation-delay: 0.39s;
}
#bubblingG_3 {
-moz-animation-delay: 0.78s;
-webkit-animation-delay: 0.78s;
-ms-animation-delay: 0.78s;
-o-animation-delay: 0.78s;
animation-delay: 0.78s;
}
@-moz-keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
-moz-transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
-moz-transform: translateY(-34px);
}
}
@-webkit-keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
-webkit-transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
-webkit-transform: translateY(-34px);
}
}
@-ms-keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
-ms-transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
-ms-transform: translateY(-34px);
}
}
@-o-keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
-o-transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
-o-transform: translateY(-34px);
}
}
@keyframes bubblingG {
0% {
width: 16px;
height: 16px;
background-color:#000000;
transform: translateY(0);
}
100% {
width: 39px;
height: 39px;
background-color:#FFFFFF;
transform: translateY(-34px);
}
}
+1 -1
Submodule lib/otr updated: 1b34e35691...5831c5d49a
+9 -3
Ver Arquivo
@@ -191,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') {
@@ -205,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) {
+8 -2
Ver Arquivo
@@ -1,6 +1,6 @@
{
"name": "jsxc",
"version": "1.0.0",
"version": "1.1.0a",
"description": "Real-time chat app",
"homepage": "http://www.jsxc.org/",
"bugs": "https://github.com/sualko/jsxc/issues",
@@ -11,18 +11,24 @@
"url": "https://github.com/sualko/jsxc"
},
"devDependencies": {
"autoprefixer-core": "^4.0.2",
"grunt": "~0.4.4",
"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-data-uri": "^0.2.0",
"grunt-jsdoc": "^0.5.7",
"grunt-postcss": "^0.2.0",
"grunt-sass": "^0.17.0",
"grunt-search": "^0.1.6",
"grunt-shell": "^1.1.1",
"grunt-text-replace": "~0.3.11"
"grunt-text-replace": "~0.4.0"
}
}
+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;
+681
Ver Arquivo
@@ -0,0 +1,681 @@
.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;
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_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;
}
.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_timestamp {
font-size: 8px;
color: $chatmessage_timestamp;
line-height: 8px;
}
.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;
}
+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;
}
}
+72
Ver Arquivo
@@ -0,0 +1,72 @@
.jsxc_emoticon {
width: 19px;
height: 19px;
background-size: 19px 19px !important;
border: 0;
}
.jsxc_angel {
background: image-url('emotions/angel.png');
}
.jsxc_angry {
background: image-url('emotions/angry.png');
}
.jsxc_smile {
background: image-url('emotions/smile.png');
}
.jsxc_grin {
background: image-url('/emotions/grin.png');
}
.jsxc_sad {
background: image-url('emotions/sad.png');
}
.jsxc_wink {
background: image-url('emotions/wink.png');
}
.jsxc_tonguesmile {
background: image-url('emotions/tonguesmile.png');
}
.jsxc_surprised {
background: image-url('emotions/surprised.png');
}
.jsxc_kiss {
background: image-url('emotions/kiss.png');
}
.jsxc_sunglassess {
background: image-url('emotions/sunglassess.png');
}
.jsxc_crysad {
background: image-url('emotions/crysad.png');
}
.jsxc_doubt {
background: image-url('emotions/doubt.png');
}
.jsxc_zip {
background: image-url('emotions/zip.png');
}
.jsxc_thumbsup {
background: image-url('emotions/thumbsup.png');
}
.jsxc_thumbsdown {
background: image-url('emotions/thumbsdown.png');
}
.jsxc_beer {
background: image-url('emotions/beer.png');
}
.jsxc_devil {
background: image-url('emotions/devil.png');
}
.jsxc_kissing {
background: image-url('emotions/kissing.png');
}
.jsxc_rose {
background: image-url('emotions/rose.png');
}
.jsxc_music {
background: image-url('emotions/music.png');
}
.jsxc_love {
background: image-url('emotions/love.png');
}
.jsxc_tired {
background: image-url('emotions/tired.png');
}
+13
Ver Arquivo
@@ -0,0 +1,13 @@
@import 'colors';
//fonts
$font_sans: Arial, sans-serif;
$font_serif: serif;
@import 'modules',
'buddylist',
'state',
'emoticons',
'roster';
@import 'jsxc';
+3
Ver Arquivo
@@ -0,0 +1,3 @@
@import 'colors';
@import 'webrtc';