Comparar commits
196 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| c2c35b303a | |||
| b9ef5b1a69 | |||
| 3e0c752a13 | |||
| cafbd71c74 | |||
| 423cea6d41 | |||
| 850febf328 | |||
| 5d1719b92e | |||
| d998e4cacb | |||
| eda9ab60de | |||
| 13a02fa692 | |||
| 36c0727828 | |||
| e1ffa79236 | |||
| e33e3b4853 | |||
| 62eacdc5ff | |||
| 40b5ff344b | |||
| d8ae158d24 | |||
| 5fdb292690 | |||
| a0a116901d | |||
| 5a34a0fd2e | |||
| 5435326fb9 | |||
| ff453821bf | |||
| 03ac47a264 | |||
| a17f046a92 | |||
| 1b0db86edf | |||
| 77863d7a27 | |||
| 03435fce9c | |||
| f9598604e2 | |||
| edd715b993 | |||
| a8b777e5b7 | |||
| 3282285b3c | |||
| 564aa7cd8a | |||
| 81047222c6 | |||
| 329f55978f | |||
| 01b14279b3 | |||
| 630bb45eb1 | |||
| 779103ed32 | |||
| fbd0511a76 | |||
| da0a7d7b5d | |||
| da020726ec | |||
| 79f05a0799 | |||
| 2d832d1752 | |||
| 550485c07c | |||
| 3566972527 | |||
| ca21753d73 | |||
| 70abb7121c | |||
| 4e9c802da9 | |||
| 651c138b97 | |||
| 318bd7ee7d | |||
| 7929b20516 | |||
| 20c8d0e2f6 | |||
| 3628cd751a | |||
| 996ae30df8 | |||
| 7b32d598e4 | |||
| 5edf4c2368 | |||
| 9bec4084d8 | |||
| 700e62c9d4 | |||
| 9fa16fca40 | |||
| 5f0b2c8a35 | |||
| f41faaf9af | |||
| 3dd2b14e5a | |||
| 3d2fa05b1f | |||
| f8888fdbb2 | |||
| 8e5e90032c | |||
| 86df085723 | |||
| b57ab86b8f | |||
| 79c1a76427 | |||
| 7acca71a45 | |||
| 925ff098d0 | |||
| 4edcc578aa | |||
| 153f045b00 | |||
| ba03261f1e | |||
| 50fe563e1a | |||
| 31c9b29521 | |||
| b1ce729ec9 | |||
| ffc3678cb9 | |||
| 5772868738 | |||
| 4529f71896 | |||
| 8b53842bcd | |||
| 5c2bc52b55 | |||
| e704f4d05a | |||
| fa3febf0b6 | |||
| 2814cfb36e | |||
| 8aa2736e4a | |||
| a2b216443a | |||
| 487e32a7b9 | |||
| 2950c747c9 | |||
| f39cc79dff | |||
| b62eb995d8 | |||
| e45aa41ae8 | |||
| ee1d70a1db | |||
| 66b5ebda32 | |||
| 08beae250b | |||
| 3de204d857 | |||
| a2fe0b9383 | |||
| e655247a01 | |||
| 27eefde3b3 | |||
| 708648e414 | |||
| 6e9fcf2518 | |||
| d7316e895a | |||
| 01c34f46dd | |||
| 65305f3609 | |||
| 2cd5b5764a | |||
| a52fe9884b | |||
| c95e117857 | |||
| 5f2d4ce7a6 | |||
| d988621b4d | |||
| 9d40ed8086 | |||
| 9750a558f2 | |||
| feb0c634a4 | |||
| 89c6e28970 | |||
| 5224cdf30c | |||
| c85ef77c21 | |||
| cebcc61496 | |||
| 7cf71a7c8b | |||
| 4bffcd665c | |||
| 4fb9938049 | |||
| 419eb17f65 | |||
| 20cc517457 | |||
| a30bcffeec | |||
| e1f4d1d811 | |||
| dea3a30149 | |||
| 2c2e13d966 | |||
| 65c0b7a57a | |||
| 2b6dd690f4 | |||
| 292e7646b6 | |||
| 9c137be6ae | |||
| c711167d3f | |||
| 4c388212eb | |||
| b843aa2f03 | |||
| 8d1fba000a | |||
| e9f0634d29 | |||
| a69b70af1e | |||
| 341db9e625 | |||
| 67d2c12640 | |||
| c0fae24dcd | |||
| 05d9aaa01d | |||
| 8cd97ec3e1 | |||
| 58e2fccf95 | |||
| 4b541d462a | |||
| 310ac4e0a6 | |||
| 53b44961ea | |||
| 8271e64cf7 | |||
| 27438984e1 | |||
| 0fb7de74ce | |||
| 3db02b0560 | |||
| e2dfb6bc94 | |||
| 55dbbdb636 | |||
| 308ccc1426 | |||
| 7f1a011b1b | |||
| d102d41f6b | |||
| 91def2febc | |||
| 7ea444276b | |||
| f810a8a28f | |||
| 2acf47a872 | |||
| 906136245a | |||
| a053753e10 | |||
| e996296b7f | |||
| d4a31dc8fc | |||
| c8ca2734e0 | |||
| 03e8ae8d1d | |||
| d626eb355f | |||
| 862c124366 | |||
| 3c2cf893be | |||
| ac8f014377 | |||
| d0e16c0a2a | |||
| cb926a1dec | |||
| 7aac1d6c28 | |||
| 25a982f9c3 | |||
| 76da9c0fd1 | |||
| a9d167acda | |||
| 32960f39b0 | |||
| 3e1c1ded67 | |||
| e19da058f6 | |||
| 80b5a4a350 | |||
| 5c10a738cb | |||
| 855b776ca2 | |||
| 735016e676 | |||
| 46897f0e66 | |||
| f1918e06cb | |||
| 3405d0e3c2 | |||
| c280251e3c | |||
| 0954c245c3 | |||
| 1aa44434b3 | |||
| c1bd08b3e4 | |||
| f298364a37 | |||
| e061670880 | |||
| 6680283cea | |||
| cb6b1345e0 | |||
| 09a83236ab | |||
| a68bae3288 | |||
| a7f4073f0b | |||
| 8248854ce7 | |||
| 88f225f564 | |||
| 8c1ba13449 | |||
| eb7cef099b | |||
| 8ae8d2f7bf |
@@ -1 +1,8 @@
|
||||
node_modules
|
||||
*.zip
|
||||
*.zip.sig
|
||||
bower_components
|
||||
archives/
|
||||
css/
|
||||
dev/
|
||||
.wti
|
||||
|
||||
@@ -4,3 +4,6 @@
|
||||
[submodule "lib/otr"]
|
||||
path = lib/otr
|
||||
url = https://github.com/sualko/otr.git
|
||||
[submodule "lib/i18next"]
|
||||
path = lib/i18next
|
||||
url = https://github.com/i18next/i18next.git
|
||||
|
||||
@@ -14,11 +14,15 @@
|
||||
"multistr": true,
|
||||
"devel": true,
|
||||
"globals": {
|
||||
"t":true,
|
||||
"i18n":true,
|
||||
"I18next":true,
|
||||
"OTR":true,
|
||||
"DSA":true,
|
||||
"Worker":true,
|
||||
"BigInt":true,
|
||||
"Notification":true,
|
||||
"$": true,
|
||||
"jQuery":true,
|
||||
"Strophe":true,
|
||||
"localStorage":true,
|
||||
@@ -29,6 +33,7 @@
|
||||
"jsxc":true,
|
||||
"getUserMediaWithConstraints":true,
|
||||
"setupRTC":true,
|
||||
"SDPUtil":true
|
||||
"SDPUtil":true,
|
||||
"getSelection":true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,66 @@
|
||||
v1.1.0a / 2015-02-25
|
||||
===
|
||||
- fix css url path
|
||||
|
||||
v1.1.0 / 2015-01-08
|
||||
===
|
||||
- move from plain css to sass
|
||||
- show avatar also by EXTVAL (url), not only by BINVAL
|
||||
- add XEP-0280 (Message Carbons)
|
||||
- add XEP-0297 (Stanza Forwarding)
|
||||
- add option to disable otr
|
||||
- add timestamp to messages
|
||||
- add ajax/prebind login
|
||||
- fix offline subscription request
|
||||
- fix hide offline contacts
|
||||
- fix error with multiple own resources
|
||||
- fix avatars with newlines
|
||||
|
||||
v1.0.0 / 2014-11-06
|
||||
===
|
||||
- add unread flag to roster and scroll to target window
|
||||
- add XEP-0147 URI Scheme Query support
|
||||
- add has-come-online notification
|
||||
- add silent notification request
|
||||
- add more information in vCard view
|
||||
- add resizable function to chat window
|
||||
- add vertical scrollbar to window list
|
||||
- add call information to chat window
|
||||
- add concatinated and uglified files
|
||||
- add translations
|
||||
- minor video call improvements
|
||||
- minor style improvements
|
||||
- generate dsa key complete in background
|
||||
- update caps node property to jsxc.org
|
||||
- update strophe.jingle
|
||||
- update otr
|
||||
- fix wrong avatars
|
||||
- fix minor message delivery errors
|
||||
- fix ff snapshot security error
|
||||
- fix case sensitive resource handling
|
||||
- fix non-square avatars
|
||||
- fix several video issues
|
||||
- fix messages from unknown (not in roster) jid
|
||||
- fix vcard retrieval from unknown (not in roster) jid
|
||||
- fix vcard in second tab
|
||||
- fix jids with non-word characters (replace user identifier)
|
||||
- improve video window design
|
||||
- improve user info
|
||||
- improve login box
|
||||
- improve smp user interaction
|
||||
- improve notifications (sync sound/message, icon)
|
||||
- minor chat window improvements
|
||||
- detect email in message
|
||||
- detect uri scheme in message
|
||||
- end all private conversations on logout
|
||||
- remove email pattern from contact dialog
|
||||
- disable video on second tab
|
||||
- add/require disco dtls feature for webrtc
|
||||
- move emoticons to css
|
||||
- handle loadSettings failure
|
||||
- change cursor for some elements
|
||||
- prevent event bubbling for dialog
|
||||
|
||||
v0.8.2 / 2014-08-20
|
||||
===
|
||||
- fix use of custom username
|
||||
|
||||
@@ -1,12 +1,18 @@
|
||||
/* global module:false */
|
||||
module.exports = function(grunt) {
|
||||
|
||||
var dep = grunt.file.readJSON('dep.json');
|
||||
var dep_files = dep.map(function(el) {
|
||||
return '<%= target %>/' + el.file;
|
||||
});
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
app: grunt.file.readJSON('package.json'),
|
||||
meta: {
|
||||
banner: grunt.file.read('banner.js')
|
||||
},
|
||||
target: 'dev',
|
||||
jshint: {
|
||||
options: {
|
||||
jshintrc: '.jshintrc'
|
||||
@@ -14,18 +20,23 @@ module.exports = function(grunt) {
|
||||
gruntfile: {
|
||||
src: 'Gruntfile.js'
|
||||
},
|
||||
files: [ 'jsxc.lib.webrtc.js', 'jsxc.lib.js' ]
|
||||
files: [ 'src/jsxc.lib.*' ]
|
||||
},
|
||||
copy: {
|
||||
main: {
|
||||
files: [ {
|
||||
expand: true,
|
||||
src: [ 'lib/strophe.jingle/*.js', 'lib/otr/build/**', 'lib/otr/lib/dsa-webworker.js', 'lib/otr/lib/sm-webworker.js', 'lib/otr/lib/const.js', 'lib/otr/lib/helpers.js', 'lib/otr/lib/dsa.js', 'lib/otr/vendor/*.js', 'lib/*.js', 'jsxc.lib.js', 'jsxc.lib.webrtc.js', '*.css', 'LICENSE', 'img/**', 'sound/**' ],
|
||||
dest: 'build/'
|
||||
src: [ 'lib/i18next/release/i18next-latest.min.js', 'lib/strophe.jingle/*.js', 'lib/otr/build/**', 'lib/otr/lib/dsa-webworker.js', 'lib/otr/lib/sm-webworker.js', 'lib/otr/lib/const.js', 'lib/otr/lib/helpers.js', 'lib/otr/lib/dsa.js', 'lib/otr/vendor/*.js', 'lib/*.js', 'LICENSE', 'img/**', 'sound/**' ],
|
||||
dest: '<%= target %>/'
|
||||
}, {
|
||||
expand: true,
|
||||
cwd: 'lib/',
|
||||
src: ['*.css'],
|
||||
dest: '<%= target %>/css/'
|
||||
} ]
|
||||
}
|
||||
},
|
||||
clean: [ 'build/' ],
|
||||
clean: [ '<%= target %>/' ],
|
||||
usebanner: {
|
||||
dist: {
|
||||
options: {
|
||||
@@ -33,24 +44,95 @@ module.exports = function(grunt) {
|
||||
banner: '<%= meta.banner %>'
|
||||
},
|
||||
files: {
|
||||
src: [ 'build/*.js' ]
|
||||
src: [ '<%= target %>/*.js' ]
|
||||
}
|
||||
}
|
||||
},
|
||||
replace: {
|
||||
version: {
|
||||
src: [ 'build/jsxc.lib.js' ],
|
||||
src: [ '<%= target %>/jsxc.js' ],
|
||||
overwrite: true,
|
||||
replacements: [ {
|
||||
from: '< $ app.version $ >',
|
||||
to: "<%= app.version %>"
|
||||
} ]
|
||||
replacements: [
|
||||
{
|
||||
from: '< $ app.version $ >',
|
||||
to: "<%= app.version %>"
|
||||
}
|
||||
]
|
||||
},
|
||||
locales: {
|
||||
src: [ '<%= target %>/lib/translation.js' ],
|
||||
overwrite: true,
|
||||
replacements: [
|
||||
{
|
||||
from: /^{/g,
|
||||
to: 'var I18next = {'
|
||||
},
|
||||
{
|
||||
from: /}$/g,
|
||||
to: '};'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
merge_data: {
|
||||
target: {
|
||||
src: ['locales/*.{json,y{,a}ml}'],
|
||||
dest: '<%= target %>/lib/translation.js'
|
||||
}
|
||||
},
|
||||
concat: {
|
||||
dep: {
|
||||
options: {
|
||||
banner: '/*!\n' +
|
||||
' * <%= app.name %> v<%= app.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n' +
|
||||
' * \n' +
|
||||
' * This file concatenates all dependencies of <%= app.name %>.\n' +
|
||||
' * \n' +
|
||||
' */\n\n',
|
||||
process: function(src, filepath) {
|
||||
filepath = filepath.replace(/^[a-z]+\//i, '');
|
||||
|
||||
if (filepath === 'lib/otr/build/dep/crypto.js') {
|
||||
src += ';';
|
||||
}
|
||||
|
||||
var data = dep[dep_files.indexOf(filepath)];
|
||||
|
||||
if (data) {
|
||||
return '/*!\n * Source: ' + filepath + ', license: ' + data.license + ', url: ' + data.url + ' */\n' + src;
|
||||
} else {
|
||||
return src;
|
||||
}
|
||||
}
|
||||
},
|
||||
src: dep_files,
|
||||
dest: '<%= target %>/lib/jsxc.dep.js'
|
||||
},
|
||||
jsxc: {
|
||||
options: {
|
||||
banner: '/*! This file is concatenated for the browser. */\n\n'
|
||||
},
|
||||
src: ['src/jsxc.intro.js', 'src/jsxc.lib.js', 'src/jsxc.lib.*.js', 'src/jsxc.outro.js'],
|
||||
dest: '<%= target %>/jsxc.js'
|
||||
}
|
||||
},
|
||||
uglify: {
|
||||
jsxc: {
|
||||
options: {
|
||||
mangle: false,
|
||||
sourceMap: true,
|
||||
preserveComments: 'some'
|
||||
},
|
||||
files: {
|
||||
'<%= target %>/lib/jsxc.dep.min.js': ['<%= target %>/lib/jsxc.dep.js'],
|
||||
'<%= target %>/jsxc.min.js': ['<%= target %>/jsxc.js']
|
||||
}
|
||||
}
|
||||
},
|
||||
search: {
|
||||
console: {
|
||||
files: {
|
||||
src: ['*.js']
|
||||
src: [ 'src/*.js' ]
|
||||
},
|
||||
options: {
|
||||
searchString: /console\.log\((?!'[<>]|msg)/g,
|
||||
@@ -60,18 +142,86 @@ module.exports = function(grunt) {
|
||||
},
|
||||
changelog: {
|
||||
files: {
|
||||
src: ['CHANGELOG.md']
|
||||
src: [ 'CHANGELOG.md' ]
|
||||
},
|
||||
options: {
|
||||
searchString: "<%= app.version %>",
|
||||
logFormat: 'console',
|
||||
onComplete: function(m) {
|
||||
if(m.numMatches === 0) {
|
||||
grunt.fail.fatal("No entry in README.md for current version found.");
|
||||
if (m.numMatches === 0) {
|
||||
grunt.fail.fatal("No entry in CHANGELOG.md for current version found.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
compress: {
|
||||
main: {
|
||||
options: {
|
||||
archive: "archives/jsxc-<%= app.version %>.zip"
|
||||
},
|
||||
files: [ {
|
||||
src: [ '**' ],
|
||||
expand: true,
|
||||
dest: 'jsxc/',
|
||||
cwd: 'build/'
|
||||
} ]
|
||||
}
|
||||
},
|
||||
dataUri: {
|
||||
dist: {
|
||||
src: '<%= target %>/css/*.css',
|
||||
dest: '<%= target %>/css/',
|
||||
options: {
|
||||
target: ['<%= target %>/img/*.*', '<%= target %>/img/**/*.*'],
|
||||
fixDirLevel: false,
|
||||
maxBytes: 2048
|
||||
}
|
||||
}
|
||||
},
|
||||
jsdoc: {
|
||||
dist: {
|
||||
src: ['src/jsxc.lib.*'],
|
||||
dest: 'doc'
|
||||
}
|
||||
},
|
||||
autoprefixer: {
|
||||
no_dest: {
|
||||
src: '<%= target %>/css/*.css'
|
||||
}
|
||||
},
|
||||
csslint: {
|
||||
strict: {
|
||||
options: {
|
||||
import: 2
|
||||
},
|
||||
src: ['<%= target %>/css/*.css']
|
||||
},
|
||||
},
|
||||
sass: {
|
||||
options: {
|
||||
imagePath: '../img'
|
||||
},
|
||||
dist: {
|
||||
files: {
|
||||
'<%= target %>/css/jsxc.css': 'scss/jsxc.scss',
|
||||
'<%= target %>/css/jsxc.webrtc.css': 'scss/jsxc.webrtc.scss'
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
locales: {
|
||||
files: ['locales/*'],
|
||||
tasks: ['merge_data', 'replace:locales', 'concat:dep']
|
||||
},
|
||||
css: {
|
||||
files: ['scss/*'],
|
||||
tasks: ['sass', 'autoprefixer']
|
||||
},
|
||||
js: {
|
||||
files: ['src/jsxc.lib.*'],
|
||||
tasks: ['concat:jsxc']
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -79,11 +229,40 @@ module.exports = function(grunt) {
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
grunt.loadNpmTasks('grunt-banner');
|
||||
grunt.loadNpmTasks('grunt-text-replace');
|
||||
grunt.loadNpmTasks('grunt-search');
|
||||
grunt.loadNpmTasks('grunt-contrib-compress');
|
||||
grunt.loadNpmTasks('grunt-jsdoc');
|
||||
grunt.loadNpmTasks('grunt-data-uri');
|
||||
grunt.loadNpmTasks('grunt-merge-data');
|
||||
grunt.loadNpmTasks('grunt-contrib-csslint');
|
||||
grunt.loadNpmTasks('grunt-sass');
|
||||
grunt.loadNpmTasks('grunt-autoprefixer');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
|
||||
// Default task.
|
||||
grunt.registerTask('default', [ 'jshint', 'search', 'clean', 'copy', 'usebanner', 'replace' ]);
|
||||
//Default task
|
||||
grunt.registerTask('default', [ 'build', 'watch' ]);
|
||||
|
||||
grunt.registerTask('build', ['jshint', 'clean', 'sass', 'autoprefixer', 'copy', 'merge_data', 'replace:locales', 'concat']);
|
||||
|
||||
grunt.registerTask('build:prerelease', 'Build a new pre-release', function(){
|
||||
grunt.config.set('target', 'build/');
|
||||
|
||||
grunt.task.run([ 'search:console', 'build', 'dataUri', 'usebanner', 'replace:version', 'uglify', 'compress' ]);
|
||||
});
|
||||
|
||||
grunt.registerTask('build:release', 'Build a new release', function(){
|
||||
grunt.config.set('target', 'build/');
|
||||
|
||||
grunt.task.run([ 'search:changelog', 'build:prerelease', 'jsdoc' ]);
|
||||
});
|
||||
|
||||
// Create alpha/beta build @deprecated
|
||||
grunt.registerTask('pre', [ 'build:prerelease' ]);
|
||||
|
||||
// before commit
|
||||
grunt.registerTask('commit', [ 'jshint', 'search:console' ]);
|
||||
};
|
||||
|
||||
@@ -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/).
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/**
|
||||
/*!
|
||||
* <%= app.name %> v<%= app.version %> - <%= grunt.template.today("yyyy-mm-dd") %>
|
||||
*
|
||||
* Copyright (c) <%= grunt.template.today("yyyy") %> <%= app.author %> <br>
|
||||
@@ -8,4 +8,5 @@
|
||||
*
|
||||
* @author <%= app.author %>
|
||||
* @version <%= app.version %>
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,239 @@
|
||||
.jsxc_remotevideo, .jsxc_noRemoteVideo {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 9000;
|
||||
background-color: #999999; }
|
||||
|
||||
.jsxc_webrtc {
|
||||
width: 900px; }
|
||||
.jsxc_webrtc .jsxc_status {
|
||||
z-index: 9999;
|
||||
border-radius: 20px;
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 30px;
|
||||
left: 50%;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
color: #fff;
|
||||
padding: 15px;
|
||||
font-weight: bold;
|
||||
text-align: center; }
|
||||
.jsxc_webrtc .slimScrollDiv {
|
||||
opacity: 1 !important; }
|
||||
.jsxc_webrtc li .jsxc_name {
|
||||
cursor: auto; }
|
||||
.jsxc_webrtc li .jsxc_name:hover {
|
||||
color: gray; }
|
||||
|
||||
.jsxc_videoContainer {
|
||||
width: 640px;
|
||||
height: 480px;
|
||||
position: relative;
|
||||
background-color: #999999; }
|
||||
.jsxc_videoContainer video {
|
||||
display: none; }
|
||||
.jsxc_videoContainer .jsxc_noRemoteVideo {
|
||||
display: none; }
|
||||
|
||||
.jsxc_noRemoteVideo p {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
width: 100%;
|
||||
z-index: 100; }
|
||||
.jsxc_noRemoteVideo > div {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin-top: -100px;
|
||||
left: 50%;
|
||||
margin-left: -100px; }
|
||||
.jsxc_noRemoteVideo > div > div {
|
||||
background-color: #4d4d4d; }
|
||||
.jsxc_noRemoteVideo > div > div:first-child {
|
||||
width: 50%;
|
||||
height: 50%;
|
||||
border-radius: 50%;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-left: -25%;
|
||||
top: 10%; }
|
||||
.jsxc_noRemoteVideo > div > div:last-child {
|
||||
position: absolute;
|
||||
bottom: -50%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%; }
|
||||
|
||||
.jsxc_localvideo {
|
||||
width: 160px;
|
||||
height: 120px;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
bottom: 10px;
|
||||
z-index: 9990;
|
||||
background-color: #000;
|
||||
cursor: pointer; }
|
||||
|
||||
div:full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #000; }
|
||||
div:full-screen.jsxc_localvideo {
|
||||
border: 1px solid #fff; }
|
||||
div:-webkit-full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #000; }
|
||||
div:-moz-full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #000; }
|
||||
div:-ms-fullscreen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #000; }
|
||||
div:fullscreen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #000; }
|
||||
div:-webkit-full-screen.jsxc_localvideo {
|
||||
border: 1px solid #fff; }
|
||||
div:-moz-full-screen.jsxc_localvideo {
|
||||
border: 1px solid #fff; }
|
||||
div:-ms-fullscreen.jsxc_localvideo {
|
||||
border: 1px solid #fff; }
|
||||
div:fullscreen.jsxc_localvideo {
|
||||
border: 1px solid #fff; }
|
||||
div.jsxc_video {
|
||||
background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMiIKICAgd2lkdGg9IjIwIgogICBoZWlnaHQ9IjIwIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExMCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczgiIC8+CiAgPGcKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMDM3ODg1OTQsMCwwLDAuMDM3ODg1OTQsLTAuNDEzNDA3OTMsLTIuNjMxMDcxNikiPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzkwNiIKICAgICAgIHN0eWxlPSJmaWxsOiM4MDgwODA7c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDM2MS42NTE0OCwzMTMuNTE3NjggMTc3LjE2MDc0LC0xMzEuNzg1MTYgMCwzMDIuMjI5OTkgTCAzNTguOTczMzgsMzUwLjE4NTE3IFogTSAxMC45MTE5MjIsMTgyLjQwNjM0IGwgMzc4LjM3MjY3OCwwIDAsMzAyLjY1NTgyIC0zNzguMzcyNjc4LDAgeiIgLz4KICA8L2c+Cjwvc3ZnPgo=");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
background-size: 15px 15px; }
|
||||
div.jsxc_video:not(.jsxc_disabled):hover {
|
||||
background-image: url("../img/camera_icon_white.svg"); }
|
||||
|
||||
.jsxc_controlbar {
|
||||
width: 640px; }
|
||||
.jsxc_controlbar .jsxc_showchat {
|
||||
float: right; }
|
||||
|
||||
.jsxc_multi > div {
|
||||
display: none; }
|
||||
|
||||
.jsxc_snapshotbar {
|
||||
width: 100%;
|
||||
display: none; }
|
||||
.jsxc_snapshotbar img {
|
||||
height: 50px; }
|
||||
|
||||
.jsxc_buttongroup {
|
||||
display: inline; }
|
||||
.jsxc_buttongroup button:first-child {
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
margin-right: 0; }
|
||||
.jsxc_buttongroup button:last-child {
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
margin-left: 0; }
|
||||
|
||||
.jsxc_chatarea {
|
||||
position: relative;
|
||||
float: right;
|
||||
height: 480px;
|
||||
width: 250px;
|
||||
background-color: #999999; }
|
||||
.jsxc_chatarea .jsxc_settings {
|
||||
display: none !important; }
|
||||
.jsxc_chatarea .jsxc_close {
|
||||
display: none !important; }
|
||||
.jsxc_chatarea .jsxc_video {
|
||||
display: none !important; }
|
||||
.jsxc_chatarea .jsxc_window {
|
||||
bottom: 0;
|
||||
box-shadow: none; }
|
||||
.jsxc_chatarea > ul {
|
||||
width: 250px;
|
||||
height: 480px;
|
||||
list-style: none;
|
||||
padding: 0; }
|
||||
|
||||
.bubblingG {
|
||||
text-align: center;
|
||||
width: 129px;
|
||||
height: 80px;
|
||||
position: absolute;
|
||||
top: 40%;
|
||||
left: 50%;
|
||||
margin-left: -64px; }
|
||||
.bubblingG span {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 40px auto;
|
||||
background: #000;
|
||||
border-radius: 81px;
|
||||
-webkit-animation: bubblingG 1.3s infinite alternate;
|
||||
animation: bubblingG 1.3s infinite alternate; }
|
||||
|
||||
#bubblingG_1 {
|
||||
-webkit-animation-delay: 0s;
|
||||
animation-delay: 0s; }
|
||||
|
||||
#bubblingG_2 {
|
||||
-webkit-animation-delay: 0.39s;
|
||||
animation-delay: 0.39s; }
|
||||
|
||||
#bubblingG_3 {
|
||||
-webkit-animation-delay: 0.78s;
|
||||
animation-delay: 0.78s; }
|
||||
|
||||
@-webkit-keyframes bubblingG {
|
||||
0% {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-color: #000;
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0); }
|
||||
|
||||
100% {
|
||||
width: 39px;
|
||||
height: 39px;
|
||||
background-color: #fff;
|
||||
-webkit-transform: translateY(-34px);
|
||||
transform: translateY(-34px); } }
|
||||
|
||||
@keyframes bubblingG {
|
||||
0% {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-color: #000;
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0); }
|
||||
|
||||
100% {
|
||||
width: 39px;
|
||||
height: 39px;
|
||||
background-color: #fff;
|
||||
-webkit-transform: translateY(-34px);
|
||||
transform: translateY(-34px); } }
|
||||
|
||||
.jsxc_fullscreen.jsxc_localvideo {
|
||||
border: 1px solid #fff; }
|
||||
|
||||
.jsxc_videoSuitable .jsxc_name {
|
||||
font-style: italic; }
|
||||
|
||||
#jsxc_buddylist .jsxc_options .jsxc_video {
|
||||
background-image: url("../img/camera_icon_white.svg"); }
|
||||
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
|
||||
opacity: 0.2; }
|
||||
|
Depois Largura: | Altura: | Tamanho: 9.3 KiB |
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="Layer_1"
|
||||
xml:space="preserve"
|
||||
height="147.22015"
|
||||
viewBox="0 0 192.89149 147.21771"
|
||||
width="192.89587"
|
||||
version="1.1"
|
||||
y="0px"
|
||||
x="0px"
|
||||
enable-background="new 0 0 176.486 181.437"
|
||||
inkscape:version="0.91pre2 r"
|
||||
sodipodi:docname="XMPP_logo.svg"><metadata
|
||||
id="metadata41"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs39" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="640"
|
||||
inkscape:window-height="480"
|
||||
id="namedview37"
|
||||
showgrid="false"
|
||||
fit-margin-top="10"
|
||||
fit-margin-left="10"
|
||||
fit-margin-right="10"
|
||||
fit-margin-bottom="10"
|
||||
inkscape:zoom="1.3007054"
|
||||
inkscape:cx="71.332001"
|
||||
inkscape:cy="72.501142"
|
||||
inkscape:window-x="75"
|
||||
inkscape:window-y="34"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="Layer_1" /><linearGradient
|
||||
id="SVGID_1_"
|
||||
y2="0.00048828"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-1807.2"
|
||||
gradientTransform="translate(1925.9953,9.9988343)"
|
||||
y1="125.86"
|
||||
x1="-1807.2"><stop
|
||||
stop-color="#1b3967"
|
||||
offset=".011"
|
||||
id="stop4" /><stop
|
||||
stop-color="#13b5ea"
|
||||
offset=".467"
|
||||
id="stop6" /><stop
|
||||
stop-color="#002b5c"
|
||||
offset=".9945"
|
||||
id="stop8" /></linearGradient><path
|
||||
d="m 146.28531,24.187835 c 0.077,1.313 -1.786,0.968 -1.786,2.293 0,38.551 -44.720002,96.831035 -89.847002,108.190035 l 0,1.182 C 114.60931,130.34287 181.38231,69.052835 182.89231,10.002834 l -36.6,14.189001 z"
|
||||
id="path10"
|
||||
style="fill:url(#SVGID_1_)"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 130.22531,27.958835 c 0.077,1.313 0.121,2.633 0.121,3.958 0,38.551 -30.700002,90.497035 -75.827002,101.860035 l 0,1.637 c 59.065002,-3.823 105.810002,-63.023035 105.810002,-109.200035 0,-2.375 -0.125,-4.729 -0.371,-7.056 l -29.73,8.796 z"
|
||||
id="path12"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e96d1f" /><linearGradient
|
||||
id="SVGID_2_"
|
||||
y2="1.279e-13"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-1073.2"
|
||||
gradientTransform="matrix(-1,0,0,1,-998.20465,9.9988343)"
|
||||
y1="126.85"
|
||||
x1="-1073.2"><stop
|
||||
stop-color="#1b3967"
|
||||
offset=".011"
|
||||
id="stop15" /><stop
|
||||
stop-color="#13b5ea"
|
||||
offset=".467"
|
||||
id="stop17" /><stop
|
||||
stop-color="#002b5c"
|
||||
offset=".9945"
|
||||
id="stop19" /></linearGradient><path
|
||||
d="m 46.594308,24.187835 c -0.077,1.313 1.787,0.968 1.787,2.293 0,38.551 46.558,97.366035 91.688002,108.730035 l 0,1.639 C 80.116308,131.32987 11.509308,69.049835 9.9993079,9.9998343 L 46.598308,24.188835 Z"
|
||||
id="path21"
|
||||
style="fill:url(#SVGID_2_)"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 64.726308,28.930835 c -0.076,1.313 -0.12,2.63 -0.12,3.957 0,38.551 30.699,90.497035 75.827002,101.860035 l 0,1.639 C 81.389308,133.59687 34.623308,73.362835 34.623308,27.186835 c 0,-2.375 0.128,-4.729 0.371,-7.056 l 29.73,8.798 z"
|
||||
id="path23"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a0ce67" /><path
|
||||
d="m 34.708308,19.581835 7.617,2.722 c -0.041,0.962 -0.066,2.254 -0.066,3.225 0,41.219 37.271,98.204035 87.272002,107.120035 3.245,1.088 7.538,2.077 10.932,2.931 l 0,1.638 C 75.209308,131.65787 29.363308,65.351835 34.703308,19.577835 Z"
|
||||
id="path25"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#439639" /><path
|
||||
d="m 160.33531,18.758835 -7.833,2.625 c 0.041,0.963 0.191,2.203 0.191,3.173 0,41.219 -37.272,98.205035 -87.274002,107.120035 -3.243,1.089 -7.538,2.077 -10.93,2.932 l 0,1.639 C 122.83331,127.58787 165.66931,64.528835 160.32931,18.757835 Z"
|
||||
id="path27"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#d9541e" /></svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 4.5 KiB |
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 1000 1000"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style="width: 512px; height: 512px;"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91+devel r"
|
||||
sodipodi:docname="group_grey.svg">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="980"
|
||||
inkscape:window-height="888"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.6675088"
|
||||
inkscape:cx="512.17823"
|
||||
inkscape:cy="480.21903"
|
||||
inkscape:window-x="889"
|
||||
inkscape:window-y="85"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
d="m 0.94630456,763.0963 c 0,22.21203 9.08673644,33.31804 27.26020844,33.31804 l 112.069747,0 0,-142.35887 c 0,-18.17347 4.54363,-34.83222 13.63088,-49.97627 9.08724,-15.14405 21.70797,-26.75512 37.86216,-34.83326 l 115.09866,-54.52042 c 10.09637,-6.05782 18.17347,-13.12528 24.23129,-21.20238 -12.11564,-18.17347 -22.21202,-39.37586 -30.28912,-63.60715 -8.0771,-24.2313 -12.11564,-49.47223 -12.11564,-75.7228 0,-16.1542 2.01927,-32.3084 6.05782,-48.46259 4.03855,-16.1542 9.08674,-31.29876 15.14456,-45.43368 -20.19275,-14.13493 -41.39513,-21.20239 -63.60715,-21.20239 -38.36622,2.01928 -68.65534,17.66839 -90.86736,46.94736 -22.21201,29.27897 -33.31803,62.09244 -33.31803,98.44042 2.01928,62.59751 24.2313,107.02155 66.63606,133.27212 L 16.092416,596.50615 C 5.9960421,602.56397 0.94785546,612.66034 0.94785546,626.79527 l 0,136.30103 z M 191.76775,796.41434 c -2.01927,42.40476 10.09637,64.61678 36.34695,66.63606 l 542.17524,0 c 12.11565,-4.03855 20.69783,-10.09637 25.74653,-18.17347 5.04869,-8.0771 7.57305,-14.63948 7.57305,-19.68716 l 0,-171.13275 c 0,-18.17347 -7.06746,-30.28912 -21.20238,-36.34694 L 637.01936,545.01619 573.41221,514.72707 c 38.36622,-22.21202 63.60715,-60.57824 75.7228,-115.09865 8.0771,-30.28912 8.0771,-61.58788 0,-93.89627 -10.09637,-36.34695 -28.7744,-67.14115 -56.0341,-92.38259 -27.25969,-25.24145 -59.06352,-38.87182 -95.4115,-40.89109 -36.34694,2.01927 -67.6457,15.64964 -93.89627,40.89109 -26.25057,25.24144 -44.42404,55.02601 -54.52042,89.35368 -12.11564,46.44331 -8.07709,93.89627 12.11565,142.35886 16.1542,30.28912 37.35658,54.52041 63.60715,72.69389 l -57.54932,27.2602 -151.4456,69.66498 c -16.1542,8.0771 -24.2313,21.20238 -24.2313,39.37585 l 0,142.35887 z m 475.53918,-302.8912 c 8.0771,8.0771 18.17347,16.1542 30.28912,24.23129 12.11565,8.0771 23.22166,14.13493 33.31803,18.17348 10.09638,4.03855 23.22166,9.59181 39.37586,16.65979 16.1542,7.06797 28.26984,12.62124 36.34694,16.65979 16.1542,8.0771 28.77493,19.68819 37.86218,34.83326 9.08724,15.14507 13.63088,31.80384 13.63088,49.97627 l 0,142.35887 115.09865,0 c 18.17347,-2.01928 27.26021,-13.12529 27.26021,-33.31803 l 0,-136.30104 c 0,-14.13493 -5.04819,-24.2313 -15.14456,-30.28912 L 815.72517,514.72707 c 42.40477,-30.28912 63.60715,-73.70352 63.60715,-130.24321 0,-38.36622 -12.11565,-72.18881 -36.34694,-101.46778 -24.2313,-29.27897 -53.51078,-43.91896 -87.83845,-43.92 -22.21202,0 -44.42404,7.06747 -66.63606,21.20239 12.11564,30.28912 18.17347,61.58787 18.17347,93.89627 0,50.48187 -13.12529,96.92518 -39.37586,139.32995 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscsscccsssccscccscccccssscccccscscccccscccssssssccssccssccscc"
|
||||
style="fill:#999999;stroke-width:1.55090213;fill-opacity:1" />
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 4.2 KiB |
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 1000 1000"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style="width: 512px; height: 512px;"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91+devel r"
|
||||
sodipodi:docname="group_white.svg">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1855"
|
||||
inkscape:window-height="1056"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.6675088"
|
||||
inkscape:cx="538.39511"
|
||||
inkscape:cy="480.21903"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
d="m 0.94630456,763.0963 c 0,22.21203 9.08673644,33.31804 27.26020844,33.31804 l 112.069747,0 0,-142.35887 c 0,-18.17347 4.54363,-34.83222 13.63088,-49.97627 9.08724,-15.14405 21.70797,-26.75512 37.86216,-34.83326 l 115.09866,-54.52042 c 10.09637,-6.05782 18.17347,-13.12528 24.23129,-21.20238 -12.11564,-18.17347 -22.21202,-39.37586 -30.28912,-63.60715 -8.0771,-24.2313 -12.11564,-49.47223 -12.11564,-75.7228 0,-16.1542 2.01927,-32.3084 6.05782,-48.46259 4.03855,-16.1542 9.08674,-31.29876 15.14456,-45.43368 -20.19275,-14.13493 -41.39513,-21.20239 -63.60715,-21.20239 -38.36622,2.01928 -68.65534,17.66839 -90.86736,46.94736 -22.21201,29.27897 -33.31803,62.09244 -33.31803,98.44042 2.01928,62.59751 24.2313,107.02155 66.63606,133.27212 L 16.092416,596.50615 C 5.9960421,602.56397 0.94785546,612.66034 0.94785546,626.79527 l 0,136.30103 z M 191.76775,796.41434 c -2.01927,42.40476 10.09637,64.61678 36.34695,66.63606 l 542.17524,0 c 12.11565,-4.03855 20.69783,-10.09637 25.74653,-18.17347 5.04869,-8.0771 7.57305,-14.63948 7.57305,-19.68716 l 0,-171.13275 c 0,-18.17347 -7.06746,-30.28912 -21.20238,-36.34694 L 637.01936,545.01619 573.41221,514.72707 c 38.36622,-22.21202 63.60715,-60.57824 75.7228,-115.09865 8.0771,-30.28912 8.0771,-61.58788 0,-93.89627 -10.09637,-36.34695 -28.7744,-67.14115 -56.0341,-92.38259 -27.25969,-25.24145 -59.06352,-38.87182 -95.4115,-40.89109 -36.34694,2.01927 -67.6457,15.64964 -93.89627,40.89109 -26.25057,25.24144 -44.42404,55.02601 -54.52042,89.35368 -12.11564,46.44331 -8.07709,93.89627 12.11565,142.35886 16.1542,30.28912 37.35658,54.52041 63.60715,72.69389 l -57.54932,27.2602 -151.4456,69.66498 c -16.1542,8.0771 -24.2313,21.20238 -24.2313,39.37585 l 0,142.35887 z m 475.53918,-302.8912 c 8.0771,8.0771 18.17347,16.1542 30.28912,24.23129 12.11565,8.0771 23.22166,14.13493 33.31803,18.17348 10.09638,4.03855 23.22166,9.59181 39.37586,16.65979 16.1542,7.06797 28.26984,12.62124 36.34694,16.65979 16.1542,8.0771 28.77493,19.68819 37.86218,34.83326 9.08724,15.14507 13.63088,31.80384 13.63088,49.97627 l 0,142.35887 115.09865,0 c 18.17347,-2.01928 27.26021,-13.12529 27.26021,-33.31803 l 0,-136.30104 c 0,-14.13493 -5.04819,-24.2313 -15.14456,-30.28912 L 815.72517,514.72707 c 42.40477,-30.28912 63.60715,-73.70352 63.60715,-130.24321 0,-38.36622 -12.11565,-72.18881 -36.34694,-101.46778 -24.2313,-29.27897 -53.51078,-43.91896 -87.83845,-43.92 -22.21202,0 -44.42404,7.06747 -66.63606,21.20239 12.11564,30.28912 18.17347,61.58787 18.17347,93.89627 0,50.48187 -13.12529,96.92518 -39.37586,139.32995 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscsscccsssccscccscccccssscccccscscccccscccssssssccssccssccscc"
|
||||
style="fill:#ffffff;stroke-width:1.55090213" />
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 4.2 KiB |
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="15"
|
||||
height="15"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="resize_gray.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3803">
|
||||
<rect
|
||||
style="stroke:none"
|
||||
id="rect3805"
|
||||
width="16.09375"
|
||||
height="14.71875"
|
||||
x="0.84375"
|
||||
y="1038.1434" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="6.9909088"
|
||||
inkscape:cy="6.5564812"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1865"
|
||||
inkscape:window-height="1056"
|
||||
inkscape:window-x="55"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1037.3622)">
|
||||
<path
|
||||
style="fill:none;stroke:#bfbfbf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 10.46875,1032.1747 -14.5,14.2813 z m 3.5,1.2501 -17.3125,17.3124 z"
|
||||
id="path2985"
|
||||
inkscape:connector-curvature="0"
|
||||
clip-path="url(#clipPath3803)"
|
||||
transform="translate(0.8125,0.6875)"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 2.2 KiB |
@@ -1,978 +0,0 @@
|
||||
.jsxc_online,.jsxc_chat {
|
||||
border-left: 4px solid #00BFFF !important;
|
||||
}
|
||||
|
||||
.jsxc_away,.jsxc_xa {
|
||||
border-left: 4px solid orange !important;
|
||||
}
|
||||
|
||||
.jsxc_dnd {
|
||||
border-left: 4px solid red !important;
|
||||
}
|
||||
|
||||
.jsxc_offline {
|
||||
border-left: 4px solid #A4A4A4 !important;
|
||||
}
|
||||
|
||||
.jsxc_hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_invalid {
|
||||
border: 2px solid red !important;
|
||||
}
|
||||
|
||||
p.jsxc_right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
p.jsxc_center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*########## Dialog ##########
|
||||
*############################*/
|
||||
#jsxc_dialog {
|
||||
padding: 10px;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
#jsxc_dialog p {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
#jsxc_dialog h3 {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#jsxc_dialog p input {
|
||||
margin-bottom: 5px;
|
||||
width: 60%;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#jsxc_dialog p input[type="submit"] {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#jsxc_dialog p label {
|
||||
display: block;
|
||||
width: 30%;
|
||||
float: left;
|
||||
padding: 6px 0px;
|
||||
}
|
||||
|
||||
#jsxc_dialog .jsxc_right {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#jsxc_dialog p.jsxc_maxWidth {
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
#jsxc_dialog fieldset {
|
||||
border: 2px solid #ccc;
|
||||
}
|
||||
|
||||
#jsxc_dialog legend {
|
||||
padding: 0px 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#jsxc_dialog input {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#jsxc_dialog input:invalid {
|
||||
border:1px solid red;
|
||||
}
|
||||
|
||||
#jsxc_dialog .jsxc_fieldset {
|
||||
width: 280px;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
#jsxc_dialog .jsxc_fieldset label {
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
#jsxc_dialog .jsxc_fieldset input[type="Number"] {
|
||||
display: inline-block;
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
#jsxc_dialog input[readonly] {
|
||||
background-color: #efefef;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*########## Overall #########
|
||||
*############################*/
|
||||
li .jsxc_name {
|
||||
overflow: hidden;
|
||||
height: 30px;
|
||||
cursor: pointer;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
li .jsxc_name:hover {
|
||||
color: #FAFAFA;
|
||||
}
|
||||
|
||||
.jsxc_avatar,ul#jsxc_buddylist li:hover .jsxc_avatar {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
margin-top: 2px;
|
||||
margin-right: 4px;
|
||||
background-color: #a3a3a3;
|
||||
border-radius: 2px;
|
||||
float: left;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 30px;
|
||||
color: #b1b1b1;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
font-family: Arial;
|
||||
}
|
||||
|
||||
.jsxc_avatar img {
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*########## Roster ##########
|
||||
*############################*/
|
||||
div#jsxc_roster {
|
||||
position: fixed;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
width: 200px;
|
||||
overflow: visible;
|
||||
border-left: 4px solid #A4A4A4;
|
||||
z-index: 80;
|
||||
margin-left: 10px;
|
||||
box-shadow: 0px 0px 7px #000000;
|
||||
background-color: #383C43;
|
||||
}
|
||||
|
||||
div#jsxc_roster .slimScrollDiv {
|
||||
left: -4px;
|
||||
margin-bottom: 30px;
|
||||
z-index: 40;
|
||||
}
|
||||
|
||||
div#jsxc_roster .jsxc_wait {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
bottom: 0px;
|
||||
width: 160px;
|
||||
padding: 20px;
|
||||
background-color: #fff;
|
||||
z-index: 60;
|
||||
}
|
||||
|
||||
div#jsxc_roster .jsxc_wait img {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
div#jsxc_roster .jsxc_wait h3 {
|
||||
margin-bottom: 5px;
|
||||
font-size: 1.13em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/** Input field for alias renaming */
|
||||
#jsxc_roster input {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 31px;
|
||||
width: 157px;
|
||||
height: 18px;
|
||||
margin-top: -11px;
|
||||
padding: 2px;
|
||||
border: 0px;
|
||||
background-image: none;
|
||||
background-color: #fff;
|
||||
border-radius: 3px;
|
||||
-moz-box-shadow: inset 0 0 5px #888;
|
||||
-webkit-box-shadow: inset 0 0 5px #888;
|
||||
box-shadow: inner 0 0 5px #888;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#jsxc_roster .jsxc_expand input {
|
||||
left: 51px;
|
||||
width: 137px;
|
||||
}
|
||||
|
||||
div#jsxc_roster p {
|
||||
color: #939393;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
div#jsxc_roster p a {
|
||||
color: #b1b1b1;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom {
|
||||
position: absolute;
|
||||
left: -4px;
|
||||
bottom: 0px;
|
||||
height: 30px;
|
||||
width: 200px;
|
||||
border-left: 4px solid #A4A4A4;
|
||||
border-top: 1px solid #939393;
|
||||
padding-left: 0px;
|
||||
background-color: #282323;
|
||||
color: #939393;
|
||||
cursor: pointer;
|
||||
line-height: 30px;
|
||||
z-index: 50;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom>div:hover {
|
||||
color: #FAFAFA;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom>div>span {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom ul {
|
||||
width: 190px;
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
left: 0px;
|
||||
display: none;
|
||||
border-top: 1px solid #939393;
|
||||
padding-left: 10px;
|
||||
background-color: #282323;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom li {
|
||||
height: 30px;
|
||||
background-color: #282323;
|
||||
color: #939393;
|
||||
cursor: pointer;
|
||||
width: 180px;
|
||||
padding-left: 10px;
|
||||
line-height: 30px;
|
||||
text-align: left;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom li:hover:not(.jsxc_disabled ) {
|
||||
color: #fff;
|
||||
background-color: #3F8FBA;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom li.jsxc_disabled {
|
||||
color: #595959;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom ul li:last-child {
|
||||
border-bottom: 1px solid #939393;
|
||||
}
|
||||
|
||||
#jsxc_menu,#jsxc_avatar,#jsxc_notice {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
/** own avatar */
|
||||
#jsxc_avatar {
|
||||
float: left;
|
||||
margin: 0px 2px;
|
||||
width: 25px;
|
||||
}
|
||||
|
||||
#jsxc_menu {
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
text-align: center;
|
||||
width: 25px;
|
||||
}
|
||||
|
||||
#jsxc_menu>span {
|
||||
opacity: 0.5;
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: 30px;
|
||||
background-image: url('img/gear_white.svg');
|
||||
background-size: 18px 18px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
}
|
||||
|
||||
#jsxc_menu:hover>span {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#jsxc_notice {
|
||||
float: right;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
#jsxc_notice>span:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#jsxc_notice span {
|
||||
background-color: #fbc14c;
|
||||
border-radius: 11px;
|
||||
color: black;
|
||||
font-size: 80%;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
#jsxc_presence {
|
||||
cursor: pointer;
|
||||
padding-left: 2px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/** List of all buddies inside the roster */
|
||||
ul#jsxc_buddylist {
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
width: 204px;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
height: 30px;
|
||||
border-bottom: 1px solid #939393;
|
||||
cursor: pointer;
|
||||
width: 200px;
|
||||
position: relative;
|
||||
color: #939393;
|
||||
font-family: Arial;
|
||||
line-height: 30px;
|
||||
padding-left: 3px;
|
||||
z-index: 85;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_name {
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li.jsxc_expand {
|
||||
height: 54px;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar, ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar img {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_control {
|
||||
position:absolute;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_control:after {
|
||||
content: '▾';
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 15px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
text-align: center;
|
||||
margin-left: -8px;
|
||||
margin-top: -8px;
|
||||
border-radius: 8px;
|
||||
color: #c1c1c1;
|
||||
background-color: rgba(150, 150, 150, 0.5);
|
||||
opacity: 0.6;
|
||||
-webkit-transition: -webkit-transform 0.5s;
|
||||
transition: transform 0.5s;
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_control:hover:after {
|
||||
color: #fff;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
#jsxc_buddylist li.jsxc_expand .jsxc_control:after {
|
||||
/* content: '▴'; */
|
||||
-ms-transform:rotate(180deg); /* IE 9 */
|
||||
-webkit-transform:rotate(180deg);
|
||||
transform:rotate(180deg);
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_options {
|
||||
height: 20px;
|
||||
float: left;
|
||||
border-radius:2px;
|
||||
background-color: rgba(150, 150, 150, 0.5);
|
||||
}
|
||||
#jsxc_buddylist .jsxc_options > div {
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
float: left;
|
||||
margin-right:0px 1px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
opacity: 0.6;
|
||||
cursor: pointer;
|
||||
}
|
||||
#jsxc_buddylist .jsxc_options > div:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
#jsxc_buddylist .jsxc_chaticon {
|
||||
background-image: url('img/speech_balloon_white.svg');
|
||||
background-size: 15px 15px;
|
||||
}
|
||||
#jsxc_buddylist .jsxc_videoicon {
|
||||
background-image: url('img/camera_icon_white.svg');
|
||||
background-size: 13px 13px;
|
||||
}
|
||||
#jsxc_buddylist .jsxc_vcardicon {
|
||||
font-size: 15px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
font-family: serif;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li:hover {
|
||||
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_oneway {
|
||||
opacity: 0.7;
|
||||
}
|
||||
.jsxc_oneway .jsxc_avatar {
|
||||
-webkit-filter: grayscale(100%);
|
||||
-moz-filter: grayscale(100%);
|
||||
-ms-filter: grayscale(100%);
|
||||
-o-filter: grayscale(100%);
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
ul#jsxc_buddylist .jsxc_right {
|
||||
float:left;
|
||||
}
|
||||
ul#jsxc_buddylist .jsxc_right {
|
||||
float: right;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_right div {
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
line-height: 20px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li[data-type!="chat"] .jsxc_right {
|
||||
display: none;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_right div:hover {
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_rename {
|
||||
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_delete {
|
||||
|
||||
}
|
||||
|
||||
#jsxc_roster .jsxc_avatar {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
#jsxc_roster .jsxc_avatar img {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div#jsxc_toggleRoster {
|
||||
width: 14px;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: -14px !important;
|
||||
top: 0px;
|
||||
z-index: 110;
|
||||
background-color: transparent;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#jsxc_toggleRoster:hover {
|
||||
background-color: #a4a4a4;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*###### Window List #########
|
||||
*############################*/
|
||||
div#jsxc_windowList {
|
||||
position: fixed;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
width: 100%;
|
||||
z-index: 50;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul {
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
padding-right: 210px;
|
||||
height: 30px;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul>li {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
display: block;
|
||||
float: right;
|
||||
width: 250px;
|
||||
background-color: #282323;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
margin-right: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul>li.jsxc_min {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*######### Window ###########
|
||||
*############################*/
|
||||
div.jsxc_bar {
|
||||
background-color: #282323;
|
||||
cursor: pointer;
|
||||
height: 30px;
|
||||
line-height: 26px;
|
||||
padding: 2px;
|
||||
color: #939393;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
div.jsxc_cycle {
|
||||
position: absolute;
|
||||
bottom: 9px;
|
||||
right: 5px;
|
||||
height: 12px;
|
||||
width: 12px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_name {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_cycle {
|
||||
background-color: orange;
|
||||
}
|
||||
|
||||
/** Contains text area */
|
||||
div.jsxc_window {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
height: auto;
|
||||
background-color: #A4A4A4;
|
||||
z-index: 80;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
position: absolute;
|
||||
top: 240px;
|
||||
right: 0px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons:after {
|
||||
content: ' ';
|
||||
background-image: url('img/smiley.png');
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
opacity: 0.3;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons:hover:after {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons ul {
|
||||
display: none;
|
||||
position: absolute;
|
||||
bottom: 33px;
|
||||
right: 3px;
|
||||
width: 210px;
|
||||
background-color: rgba(40, 35, 35, 0.8);
|
||||
padding: 3px;
|
||||
border-radius: 3px;
|
||||
z-index: 200;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons ul:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-left: 5px solid transparent;
|
||||
border-right: 5px solid transparent;
|
||||
border-top: 6px solid rgba(40, 35, 35, 0.8);
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
right: 6px;
|
||||
bottom: -6px;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons li {
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons img {
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons img:hover {
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
/** groups elements, which will be hidden, if the window is minimized. */
|
||||
.jsxc_window .jsxc_fade {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.jsxc_window .jsxc_gradient {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
height: 15px;
|
||||
z-index: 100;
|
||||
background: -moz-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
|
||||
rgba(40, 35, 35, 0) 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(164,
|
||||
164, 164, 1)), color-stop(100%, rgba(40, 35, 35, 0)));
|
||||
/* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
|
||||
rgba(40, 35, 35, 0) 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
|
||||
rgba(40, 35, 35, 0) 100%); /* Opera 11.10+ */
|
||||
background: -ms-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
|
||||
rgba(40, 35, 35, 0) 100%); /* IE10+ */
|
||||
background: linear-gradient(to bottom, #a4a4a4 0%, rgba(40, 35, 35, 0)
|
||||
100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4a4a4',
|
||||
endColorstr='#00282323', GradientType=0); /* IE6-9 */
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_avatar {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_textarea {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
div.jsxc_window .slimScrollDiv {
|
||||
margin: 0px 0px 6px 0px;
|
||||
}
|
||||
|
||||
div.jsxc_chatmessage {
|
||||
margin: 3px;
|
||||
padding: 4px;
|
||||
padding-right: 10px;
|
||||
max-width: 76%;
|
||||
word-wrap: break-word;
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
outline: none;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
div.jsxc_chatmessage a {
|
||||
color: blue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div.jsxc_chatmessage img {
|
||||
width: 19px;
|
||||
height: 19px;
|
||||
}
|
||||
|
||||
/** incoming message */
|
||||
div.jsxc_in {
|
||||
float: left;
|
||||
position: relative;
|
||||
margin-left: 10px;
|
||||
background: #f1f7fd;
|
||||
border: solid 1px #a6b8c9;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
div.jsxc_in:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-style: solid;
|
||||
border-width: 5px 6px 5px 0;
|
||||
border-color: transparent #f1f7fd;
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
left: -6px;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
div.jsxc_out.jsxc_received:before {
|
||||
content: '✓';
|
||||
position: absolute;
|
||||
bottom: 2px;
|
||||
right: 2px;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
color: green;
|
||||
}
|
||||
|
||||
/** outgoing message */
|
||||
div.jsxc_out {
|
||||
float: right;
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
background: #e6ffd1;
|
||||
border: solid 1px #b4d89f;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
div.jsxc_out:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-style: solid;
|
||||
border-width: 5px 0 5px 6px;
|
||||
border-color: transparent #e6ffd1;
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
right: -6px;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
/** system message */
|
||||
div.jsxc_sys {
|
||||
width: auto;
|
||||
max-width: none;
|
||||
padding-right: 4px;
|
||||
box-sizing: border-box;
|
||||
margin-right: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.jsxc_window input.jsxc_textinput {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
margin: 0px;
|
||||
padding: 3px;
|
||||
padding-right: 40px;
|
||||
outline: none;
|
||||
border-radius: 0px;
|
||||
box-sizing: border-box;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.jsxc_window ::-webkit-input-placeholder {
|
||||
color: #000;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.jsxc_window ::-moz-placeholder {
|
||||
color: #000;
|
||||
opacity: 0.3;
|
||||
} /* firefox 19+ */
|
||||
.jsxc_window :-ms-input-placeholder {
|
||||
color: rgba(0, 0, 0, 0.4);
|
||||
} /* ie */
|
||||
.jsxc_window input:-moz-placeholder {
|
||||
color: #000;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_tools {
|
||||
height: 26px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.jsxc_min .jsxc_tools {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_tools > div {
|
||||
width: 17px;
|
||||
height: 26px;
|
||||
display: block;
|
||||
float: left;
|
||||
color: #939393;
|
||||
font-family: Arial;
|
||||
line-height: 26px;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.jsxc_settings {
|
||||
background-image: url('img/gear_grey.svg');
|
||||
background-size: 15px 15px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
div.jsxc_settings:hover,div.jsxc_settings.hover {
|
||||
background-image: url('img/gear_white.svg');
|
||||
}
|
||||
|
||||
div.jsxc_settings ul {
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
position: absolute;
|
||||
top: 30px;
|
||||
left: 0px;
|
||||
box-shadow: 0px 5px 5px -5px #000;
|
||||
z-index: 110;
|
||||
overflow: visible;
|
||||
background-color: #282323;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.jsxc_settings li {
|
||||
width: 170px;
|
||||
margin-left: 20px;
|
||||
padding-left: 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.jsxc_settings li:first-child {
|
||||
border-top: 1px solid #ccc;
|
||||
}
|
||||
|
||||
div.jsxc_settings li:hover:not(.jsxc_disabled ){
|
||||
color: #fff;
|
||||
background-color: #3F8FBA;
|
||||
}
|
||||
|
||||
div.jsxc_settings li.jsxc_disabled {
|
||||
color: #595959;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
div.jsxc_transfer {
|
||||
background-image: url('img/padlock_open_grey.svg');
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
background-size: 12px 12px;
|
||||
}
|
||||
|
||||
div.jsxc_transfer:hover {
|
||||
background-image: url('img/padlock_open_white.svg');
|
||||
}
|
||||
|
||||
div.jsxc_transfer.jsxc_fin {
|
||||
background-image: url('img/padlock_close_grey.svg');
|
||||
}
|
||||
|
||||
div.jsxc_transfer.jsxc_enc {
|
||||
background-image: url('img/padlock_close_orange.svg');
|
||||
}
|
||||
|
||||
div.jsxc_transfer.jsxc_enc.jsxc_trust {
|
||||
background-image: url('img/padlock_close_green.svg');
|
||||
}
|
||||
|
||||
.jsxc_window .jsxc_close {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.jsxc_window .jsxc_close:hover {
|
||||
color: #FAFAFA;
|
||||
}
|
||||
|
||||
#colorbox,#cboxWrapper {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*######### Other ############
|
||||
*############################*/
|
||||
ul.jsxc_vCard {
|
||||
min-width: 400px;
|
||||
}
|
||||
|
||||
ul.jsxc_vCard ul {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
ul.jsxc_vCard li {
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
ul.jsxc_vCard strong {
|
||||
|
||||
}
|
||||
|
||||
img.jsxc_vCard {
|
||||
float: right;
|
||||
max-width: 200px;
|
||||
max-height: 200px;
|
||||
}
|
||||
@@ -1,173 +0,0 @@
|
||||
.jsxc_videoContainer {
|
||||
width: 640px;
|
||||
height: 480px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.jsxc_remotevideo {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
z-index: 9000;
|
||||
background-color: grey;
|
||||
}
|
||||
|
||||
.jsxc_localvideo {
|
||||
width: 160px;
|
||||
height: 120px;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
bottom: 10px;
|
||||
z-index: 9990;
|
||||
background-color: black;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.jsxc_webrtc .jsxc_status {
|
||||
z-index: 9999;
|
||||
border-radius: 20px;
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 30px;
|
||||
left: 50%;
|
||||
background-color: lightgrey;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
color: white;
|
||||
padding: 15px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div:-moz-full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
div:-ms-full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
div:-webkit-full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
div:fullscreen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
div:-moz-full-screen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
div:-webkit-full-screen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
div:-ms-full-screen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
div:fullscreen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
.jsxc_fullscreen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
.jsxc_multi>div {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_snapshotbar {
|
||||
width: 100%;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_snapshotbar img {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.jsxc_buttongroup {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.jsxc_buttongroup button:first-child {
|
||||
border-top-right-radius: 0px;
|
||||
border-bottom-right-radius: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.jsxc_buttongroup button:last-child {
|
||||
border-top-left-radius: 0px;
|
||||
border-bottom-left-radius: 0px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.jsxc_chatarea {
|
||||
position: relative;
|
||||
height: 270px;
|
||||
display: none;
|
||||
background-color: #A4A4A4;
|
||||
}
|
||||
|
||||
.jsxc_chatarea > ul {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 0px;
|
||||
width: 250px;
|
||||
height: 270px;
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px 0px 0px -100px;
|
||||
}
|
||||
|
||||
.jsxc_chatarea .jsxc_settings {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_chatarea .jsxc_close {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_chatarea .jsxc_bar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_chatarea .jsxc_window {
|
||||
bottom: 0px;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.jsxc_videoSuitable .jsxc_name {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div.jsxc_video {
|
||||
background-image: url('img/camera_icon_grey.svg');
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
background-size: 15px 15px;
|
||||
}
|
||||
|
||||
div.jsxc_video:not(.jsxc_disabled):hover, #jsxc_buddylist .jsxc_options .jsxc_video {
|
||||
background-image: url('img/camera_icon_white.svg');
|
||||
}
|
||||
|
||||
div.jsxc_video.jsxc_disabled {
|
||||
opacity: 0.5;
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
|
||||
opacity: 0.2;
|
||||
}
|
||||
@@ -2,35 +2,81 @@
|
||||
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
||||
*
|
||||
* Version: 1.0.0
|
||||
*
|
||||
* Version: 1.3.3 + pr#94
|
||||
*
|
||||
*/
|
||||
(function($) {
|
||||
|
||||
jQuery.fn.extend({
|
||||
$.fn.extend({
|
||||
slimScroll: function(options) {
|
||||
|
||||
var defaults = {
|
||||
wheelStep : 20,
|
||||
|
||||
// width in pixels of the visible scroll area
|
||||
width : 'auto',
|
||||
|
||||
// height in pixels of the visible scroll area
|
||||
height : '250px',
|
||||
|
||||
// width in pixels of the scrollbar and rail
|
||||
size : '7px',
|
||||
|
||||
// scrollbar color, accepts any hex/color value
|
||||
color: '#000',
|
||||
|
||||
// scrollbar position - left/right
|
||||
position : 'right',
|
||||
|
||||
// distance in pixels between the side edge and the scrollbar
|
||||
distance : '1px',
|
||||
|
||||
// default scroll position on load - top / bottom / $('selector')
|
||||
start : 'top',
|
||||
|
||||
// sets scrollbar opacity
|
||||
opacity : .4,
|
||||
|
||||
// enables always-on mode for the scrollbar
|
||||
alwaysVisible : false,
|
||||
disableFadeOut: false,
|
||||
|
||||
// check if we should hide the scrollbar when user is hovering over
|
||||
disableFadeOut : false,
|
||||
|
||||
// sets visibility of the rail
|
||||
railVisible : false,
|
||||
|
||||
// sets rail color
|
||||
railColor : '#333',
|
||||
railOpacity : '0.2',
|
||||
|
||||
// sets rail opacity
|
||||
railOpacity : .2,
|
||||
|
||||
// whether we should use jQuery UI Draggable to enable bar dragging
|
||||
railDraggable : true,
|
||||
|
||||
// defautlt CSS class of the slimscroll rail
|
||||
railClass : 'slimScrollRail',
|
||||
|
||||
// defautlt CSS class of the slimscroll bar
|
||||
barClass : 'slimScrollBar',
|
||||
|
||||
// defautlt CSS class of the slimscroll wrapper
|
||||
wrapperClass : 'slimScrollDiv',
|
||||
|
||||
// check if mousewheel should scroll the window if we reach top/bottom
|
||||
allowPageScroll : false,
|
||||
scroll : 0,
|
||||
touchScrollStep : 200
|
||||
|
||||
// scroll amount applied to each mouse wheel step
|
||||
wheelStep : 20,
|
||||
|
||||
// scroll amount applied when user is using gestures
|
||||
touchScrollStep : 200,
|
||||
|
||||
// sets border radius
|
||||
borderRadius: '7px',
|
||||
|
||||
// sets border radius of the rail
|
||||
railBorderRadius : '7px'
|
||||
};
|
||||
|
||||
var o = $.extend(defaults, options);
|
||||
@@ -38,7 +84,7 @@
|
||||
// do it for every element that matches selector
|
||||
this.each(function(){
|
||||
|
||||
var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
|
||||
var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
|
||||
barHeight, percentScroll, lastScroll,
|
||||
divS = '<div></div>',
|
||||
minBarHeight = 30,
|
||||
@@ -48,20 +94,33 @@
|
||||
var me = $(this);
|
||||
|
||||
// ensure we are not binding it again
|
||||
if (me.parent().hasClass('slimScrollDiv'))
|
||||
{
|
||||
if (me.parent().hasClass(o.wrapperClass))
|
||||
{
|
||||
// start from last bar position
|
||||
var offset = me.scrollTop();
|
||||
|
||||
// find bar and rail
|
||||
bar = me.parent().find('.slimScrollBar');
|
||||
rail = me.parent().find('.slimScrollRail');
|
||||
|
||||
bar = me.parent().find('.' + o.barClass);
|
||||
rail = me.parent().find('.' + o.railClass);
|
||||
|
||||
getBarHeight();
|
||||
|
||||
// check if we should scroll existing instance
|
||||
if (options)
|
||||
if ($.isPlainObject(options))
|
||||
{
|
||||
// Pass height: auto to an existing slimscroll object to force a resize after contents have changed
|
||||
if ( 'height' in options && options.height == 'auto' ) {
|
||||
me.parent().css('height', 'auto');
|
||||
me.css('height', 'auto');
|
||||
var height = me.parent().parent().height();
|
||||
me.parent().css('height', height);
|
||||
me.css('height', height);
|
||||
} else if ('height' in options) {
|
||||
var h = options.height;
|
||||
me.parent().css('height', h);
|
||||
me.css('height', h);
|
||||
}
|
||||
|
||||
if ('scrollTo' in options)
|
||||
{
|
||||
// jump to a static point
|
||||
@@ -72,6 +131,14 @@
|
||||
// jump by value pixels
|
||||
offset += parseInt(o.scrollBy);
|
||||
}
|
||||
else if ('destroy' in options)
|
||||
{
|
||||
// remove slimscroll elements
|
||||
bar.remove();
|
||||
rail.remove();
|
||||
me.unwrap();
|
||||
return;
|
||||
}
|
||||
|
||||
// scroll content by the given offset
|
||||
scrollContent(offset, false, true);
|
||||
@@ -79,9 +146,16 @@
|
||||
|
||||
return;
|
||||
}
|
||||
else if ($.isPlainObject(options))
|
||||
{
|
||||
if ('destroy' in options)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// optionally set height to the parent's height
|
||||
o.height = (o.height == 'auto') ? me.parent().innerHeight() : o.height;
|
||||
o.height = (o.height == 'auto') ? me.parent().height() : o.height;
|
||||
|
||||
// wrap content
|
||||
var wrapper = $(divS)
|
||||
@@ -101,7 +175,7 @@
|
||||
});
|
||||
|
||||
// create scrollbar rail
|
||||
var rail = $(divS)
|
||||
var rail = $(divS)
|
||||
.addClass(o.railClass)
|
||||
.css({
|
||||
width: o.size,
|
||||
@@ -109,7 +183,7 @@
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none',
|
||||
'border-radius': o.size,
|
||||
'border-radius': o.railBorderRadius,
|
||||
background: o.railColor,
|
||||
opacity: o.railOpacity,
|
||||
zIndex: 90
|
||||
@@ -125,10 +199,10 @@
|
||||
top: 0,
|
||||
opacity: o.opacity,
|
||||
display: o.alwaysVisible ? 'block' : 'none',
|
||||
'border-radius' : o.size,
|
||||
BorderRadius: o.size,
|
||||
MozBorderRadius: o.size,
|
||||
WebkitBorderRadius: o.size,
|
||||
'border-radius' : o.borderRadius,
|
||||
BorderRadius: o.borderRadius,
|
||||
MozBorderRadius: o.borderRadius,
|
||||
WebkitBorderRadius: o.borderRadius,
|
||||
zIndex: 99
|
||||
});
|
||||
|
||||
@@ -144,18 +218,31 @@
|
||||
me.parent().append(bar);
|
||||
me.parent().append(rail);
|
||||
|
||||
// make it draggable
|
||||
bar.draggable({
|
||||
axis: 'y',
|
||||
containment: 'parent',
|
||||
start: function() { isDragg = true; },
|
||||
stop: function() { isDragg = false; hideBar(); },
|
||||
drag: function(e)
|
||||
{
|
||||
// scroll content
|
||||
scrollContent(0, $(this).position().top, false);
|
||||
}
|
||||
});
|
||||
// make it draggable and no longer dependent on the jqueryUI
|
||||
if (o.railDraggable){
|
||||
bar.bind("mousedown", function(e) {
|
||||
var $doc = $(document);
|
||||
isDragg = true;
|
||||
t = parseFloat(bar.css('top'));
|
||||
pageY = e.pageY;
|
||||
|
||||
$doc.bind("mousemove.slimscroll", function(e){
|
||||
currTop = t + e.pageY - pageY;
|
||||
bar.css('top', currTop);
|
||||
scrollContent(0, bar.position().top, false);// scroll content
|
||||
});
|
||||
|
||||
$doc.bind("mouseup.slimscroll", function(e) {
|
||||
isDragg = false;hideBar();
|
||||
$doc.unbind('.slimscroll');
|
||||
});
|
||||
return false;
|
||||
}).bind("selectstart.slimscroll", function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// on rail over
|
||||
rail.hover(function(){
|
||||
@@ -191,18 +278,44 @@
|
||||
});
|
||||
|
||||
me.bind('touchmove', function(e){
|
||||
// prevent scrolling the page
|
||||
e.originalEvent.preventDefault();
|
||||
// prevent scrolling the page if necessary
|
||||
if(!releaseScroll)
|
||||
{
|
||||
e.originalEvent.preventDefault();
|
||||
}
|
||||
if (e.originalEvent.touches.length)
|
||||
{
|
||||
// see how far user swiped
|
||||
var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep;
|
||||
// scroll content
|
||||
scrollContent(diff, true);
|
||||
touchDif = e.originalEvent.touches[0].pageY;
|
||||
}
|
||||
});
|
||||
|
||||
var _onWheel = function(e)
|
||||
// set up initial height
|
||||
getBarHeight();
|
||||
|
||||
// check start position
|
||||
if (o.start === 'bottom')
|
||||
{
|
||||
// scroll content to bottom
|
||||
bar.css({ top: me.outerHeight() - bar.outerHeight() });
|
||||
scrollContent(0, true);
|
||||
}
|
||||
else if (o.start !== 'top')
|
||||
{
|
||||
// assume jQuery selector
|
||||
scrollContent($(o.start).position().top, null, true);
|
||||
|
||||
// make sure bar stays hidden
|
||||
if (!o.alwaysVisible) { bar.hide(); }
|
||||
}
|
||||
|
||||
// attach scroll events
|
||||
attachWheel();
|
||||
|
||||
function _onWheel(e)
|
||||
{
|
||||
// use mouse wheel only when mouse is over
|
||||
if (!isOverPanel) { return; }
|
||||
@@ -213,8 +326,11 @@
|
||||
if (e.wheelDelta) { delta = -e.wheelDelta/120; }
|
||||
if (e.detail) { delta = e.detail / 3; }
|
||||
|
||||
// scroll content
|
||||
scrollContent(delta, true);
|
||||
var target = e.target || e.srcTarget || e.srcElement;
|
||||
if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {
|
||||
// scroll content
|
||||
scrollContent(delta, true);
|
||||
}
|
||||
|
||||
// stop window scroll
|
||||
if (e.preventDefault && !releaseScroll) { e.preventDefault(); }
|
||||
@@ -223,16 +339,24 @@
|
||||
|
||||
function scrollContent(y, isWheel, isJump)
|
||||
{
|
||||
releaseScroll = false;
|
||||
var delta = y;
|
||||
var maxTop = me.outerHeight() - bar.outerHeight();
|
||||
|
||||
|
||||
if (isWheel)
|
||||
{
|
||||
// move bar with mouse wheel
|
||||
delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight();
|
||||
|
||||
// move bar, make sure it doesn't go out
|
||||
// move bar, make sure it doesn't go out
|
||||
delta = Math.min(Math.max(delta, 0), maxTop);
|
||||
|
||||
// if scrolling down, make sure a fractional change to the
|
||||
// scroll position isn't rounded away when the scrollbar's CSS is set
|
||||
// this flooring of delta would happened automatically when
|
||||
// bar.css is set below, but we floor here for clarity
|
||||
delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta);
|
||||
|
||||
// scroll the scrollbar
|
||||
bar.css({ top: delta + 'px' });
|
||||
}
|
||||
@@ -245,7 +369,6 @@
|
||||
{
|
||||
delta = y;
|
||||
var offsetTop = delta / me[0].scrollHeight * me.outerHeight();
|
||||
|
||||
offsetTop = Math.min(Math.max(offsetTop, 0), maxTop);
|
||||
bar.css({ top: offsetTop + 'px' });
|
||||
}
|
||||
@@ -253,6 +376,9 @@
|
||||
// scroll content
|
||||
me.scrollTop(delta);
|
||||
|
||||
// fire scrolling event
|
||||
me.trigger('slimscrolling', ~~delta);
|
||||
|
||||
// ensure bar is visible
|
||||
showBar();
|
||||
|
||||
@@ -260,31 +386,29 @@
|
||||
hideBar();
|
||||
}
|
||||
|
||||
var attachWheel = function()
|
||||
function attachWheel()
|
||||
{
|
||||
if (window.addEventListener)
|
||||
{
|
||||
this.addEventListener('DOMMouseScroll', _onWheel, false );
|
||||
this.addEventListener('mousewheel', _onWheel, false );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
document.attachEvent("onmousewheel", _onWheel)
|
||||
}
|
||||
}
|
||||
|
||||
// attach scroll events
|
||||
attachWheel();
|
||||
|
||||
function getBarHeight()
|
||||
{
|
||||
// calculate scrollbar height and make sure it is not too small
|
||||
barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);
|
||||
bar.css({ height: barHeight + 'px' });
|
||||
}
|
||||
|
||||
// set up initial height
|
||||
getBarHeight();
|
||||
// hide scrollbar if content is not long enough
|
||||
var display = barHeight == me.outerHeight() ? 'none' : 'block';
|
||||
bar.css({ display: display });
|
||||
}
|
||||
|
||||
function showBar()
|
||||
{
|
||||
@@ -293,18 +417,22 @@
|
||||
clearTimeout(queueHide);
|
||||
|
||||
// when bar reached top or bottom
|
||||
if (percentScroll == ~~ percentScroll)
|
||||
if (percentScroll == ~~percentScroll)
|
||||
{
|
||||
//release wheel
|
||||
//release wheel
|
||||
releaseScroll = o.allowPageScroll;
|
||||
|
||||
|
||||
// publish approporiate event
|
||||
if (lastScroll != percentScroll)
|
||||
{
|
||||
var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
|
||||
var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
|
||||
me.trigger('slimscroll', msg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
releaseScroll = false;
|
||||
}
|
||||
lastScroll = percentScroll;
|
||||
|
||||
// show only when required
|
||||
@@ -324,7 +452,7 @@
|
||||
{
|
||||
queueHide = setTimeout(function(){
|
||||
if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg)
|
||||
{
|
||||
{
|
||||
bar.fadeOut('slow');
|
||||
rail.fadeOut('slow');
|
||||
}
|
||||
@@ -332,30 +460,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
// check start position
|
||||
if (o.start == 'bottom')
|
||||
{
|
||||
// scroll content to bottom
|
||||
bar.css({ top: me.outerHeight() - bar.outerHeight() });
|
||||
scrollContent(0, true);
|
||||
}
|
||||
else if (typeof o.start == 'object')
|
||||
{
|
||||
// scroll content
|
||||
scrollContent($(o.start).position().top, null, true);
|
||||
|
||||
// make sure bar stays hidden
|
||||
if (!o.alwaysVisible) { bar.hide(); }
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// maintain chainability
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
jQuery.fn.extend({
|
||||
slimscroll: jQuery.fn.slimScroll
|
||||
$.fn.extend({
|
||||
slimscroll: $.fn.slimScroll
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
@@ -1,7 +1,7 @@
|
||||
/*!
|
||||
|
||||
otr.js v0.2.11 - 2014-03-24
|
||||
(c) 2014 - Arlo Breault <arlolra@gmail.com>
|
||||
otr.js v0.2.14 - 2015-01-16
|
||||
(c) 2015 - Arlo Breault <arlolra@gmail.com>
|
||||
Freely distributed under the MPL v2.0 license.
|
||||
|
||||
This file is concatenated for the browser.
|
||||
@@ -141,6 +141,17 @@
|
||||
child.__super__ = parent.prototype
|
||||
}
|
||||
|
||||
// assumes 32-bit
|
||||
function intCompare(x, y) {
|
||||
var z = ~(x ^ y)
|
||||
z &= z >> 16
|
||||
z &= z >> 8
|
||||
z &= z >> 4
|
||||
z &= z >> 2
|
||||
z &= z >> 1
|
||||
return z & 1
|
||||
}
|
||||
|
||||
// constant-time string comparison
|
||||
HLP.compare = function (str1, str2) {
|
||||
if (str1.length !== str2.length)
|
||||
@@ -148,7 +159,7 @@
|
||||
var i = 0, result = 0
|
||||
for (; i < str1.length; i++)
|
||||
result |= str1[i].charCodeAt(0) ^ str2[i].charCodeAt(0)
|
||||
return result === 0
|
||||
return intCompare(result, 0)
|
||||
}
|
||||
|
||||
HLP.randomExponent = function () {
|
||||
@@ -1160,7 +1171,7 @@
|
||||
HLP.debug.call(this.otr, 'success')
|
||||
|
||||
if (BigInt.equals(this.their_y, this.our_dh.publicKey))
|
||||
return this.otr.error('equal keys - we have a problem.', true)
|
||||
return this.otr.error('equal keys - we have a problem.')
|
||||
|
||||
this.otr.our_old_dh = this.our_dh
|
||||
this.otr.their_priv_pk = this.their_priv_pk
|
||||
@@ -1267,7 +1278,7 @@
|
||||
|
||||
// verify gy is legal 2 <= gy <= N-2
|
||||
if (!HLP.checkGroup(this.their_y, N_MINUS_2))
|
||||
return this.otr.error('Illegal g^y.', true)
|
||||
return this.otr.error('Illegal g^y.')
|
||||
|
||||
this.createKeys(this.their_y)
|
||||
|
||||
@@ -1303,11 +1314,11 @@
|
||||
var hash = CryptoJS.SHA256(CryptoJS.enc.Latin1.parse(gxmpi))
|
||||
|
||||
if (!HLP.compare(this.hashed, hash.toString(CryptoJS.enc.Latin1)))
|
||||
return this.otr.error('Hashed g^x does not match.', true)
|
||||
return this.otr.error('Hashed g^x does not match.')
|
||||
|
||||
// verify gx is legal 2 <= g^x <= N-2
|
||||
if (!HLP.checkGroup(this.their_y, N_MINUS_2))
|
||||
return this.otr.error('Illegal g^x.', true)
|
||||
return this.otr.error('Illegal g^x.')
|
||||
|
||||
this.createKeys(this.their_y)
|
||||
|
||||
@@ -1321,7 +1332,7 @@
|
||||
, this.m1
|
||||
, HLP.packCtr(0)
|
||||
)
|
||||
if (vsm[0]) return this.otr.error(vsm[0], true)
|
||||
if (vsm[0]) return this.otr.error(vsm[0])
|
||||
|
||||
// store their key
|
||||
this.their_keyid = vsm[1]
|
||||
@@ -1363,7 +1374,7 @@
|
||||
, this.m1_prime
|
||||
, HLP.packCtr(0)
|
||||
)
|
||||
if (vsm[0]) return this.otr.error(vsm[0], true)
|
||||
if (vsm[0]) return this.otr.error(vsm[0])
|
||||
|
||||
// store their key
|
||||
this.their_keyid = vsm[1]
|
||||
@@ -1609,10 +1620,12 @@
|
||||
|
||||
this.smpstate = CONST.SMPSTATE_EXPECT0
|
||||
|
||||
// assume utf8 question
|
||||
question = CryptoJS.enc.Latin1
|
||||
.parse(question)
|
||||
.toString(CryptoJS.enc.Utf8)
|
||||
if (question) {
|
||||
// assume utf8 question
|
||||
question = CryptoJS.enc.Latin1
|
||||
.parse(question)
|
||||
.toString(CryptoJS.enc.Utf8)
|
||||
}
|
||||
|
||||
// invoke question
|
||||
this.trigger('question', [question])
|
||||
@@ -1920,6 +1933,11 @@
|
||||
var MAX_INT = Math.pow(2, 53) - 1 // doubles
|
||||
var MAX_UINT = Math.pow(2, 31) - 1 // bitwise operators
|
||||
|
||||
// an internal callback
|
||||
function OTRCB(cb) {
|
||||
this.cb = cb
|
||||
}
|
||||
|
||||
// OTR contructor
|
||||
function OTR(options) {
|
||||
if (!(this instanceof OTR)) return new OTR(options)
|
||||
@@ -2090,9 +2108,10 @@
|
||||
})
|
||||
})
|
||||
this.sm.on('send', function (ssid, send) {
|
||||
if (self.ssid === ssid)
|
||||
if (self.ssid === ssid) {
|
||||
send = self.prepareMsg(send)
|
||||
self.io(send)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2108,8 +2127,13 @@
|
||||
;(function send(first) {
|
||||
if (!first) {
|
||||
if (!self.outgoing.length) return
|
||||
var elem = self.outgoing.shift()
|
||||
var elem = self.outgoing.shift(), cb = null
|
||||
if (elem.meta instanceof OTRCB) {
|
||||
cb = elem.meta.cb
|
||||
elem.meta = null
|
||||
}
|
||||
self.trigger('io', [elem.msg, elem.meta])
|
||||
if (cb) cb()
|
||||
}
|
||||
setTimeout(send, first ? 0 : self.send_interval)
|
||||
}(true))
|
||||
@@ -2142,7 +2166,7 @@
|
||||
this.sendenc = HLP.mask(HLP.h1(sendbyte, secbytes), 0, 128) // f16 bytes
|
||||
this.sendmac = CryptoJS.SHA1(CryptoJS.enc.Latin1.parse(this.sendenc))
|
||||
this.sendmac = this.sendmac.toString(CryptoJS.enc.Latin1)
|
||||
this.sendmacused = false
|
||||
|
||||
this.rcvenc = HLP.mask(HLP.h1(rcvbyte, secbytes), 0, 128)
|
||||
this.rcvmac = CryptoJS.SHA1(CryptoJS.enc.Latin1.parse(this.rcvenc))
|
||||
this.rcvmac = this.rcvmac.toString(CryptoJS.enc.Latin1)
|
||||
@@ -2161,7 +2185,6 @@
|
||||
// reveal old mac keys
|
||||
var self = this
|
||||
this.sessKeys[1].forEach(function (sk) {
|
||||
if (sk && sk.sendmacused) self.oldMacKeys.push(sk.sendmac)
|
||||
if (sk && sk.rcvmacused) self.oldMacKeys.push(sk.rcvmac)
|
||||
})
|
||||
|
||||
@@ -2189,7 +2212,6 @@
|
||||
// reveal old mac keys
|
||||
var self = this
|
||||
this.sessKeys.forEach(function (sk) {
|
||||
if (sk[1] && sk[1].sendmacused) self.oldMacKeys.push(sk[1].sendmac)
|
||||
if (sk[1] && sk[1].rcvmacused) self.oldMacKeys.push(sk[1].rcvmac)
|
||||
})
|
||||
|
||||
@@ -2207,12 +2229,12 @@
|
||||
|
||||
OTR.prototype.prepareMsg = function (msg, esk) {
|
||||
if (this.msgstate !== CONST.MSGSTATE_ENCRYPTED || this.their_keyid === 0)
|
||||
return this.error('Not ready to encrypt.')
|
||||
return this.notify('Not ready to encrypt.')
|
||||
|
||||
var sessKeys = this.sessKeys[1][0]
|
||||
|
||||
if (sessKeys.send_counter >= MAX_INT)
|
||||
return this.error('Should have rekeyed by now.')
|
||||
return this.notify('Should have rekeyed by now.')
|
||||
|
||||
sessKeys.send_counter += 1
|
||||
|
||||
@@ -2233,7 +2255,7 @@
|
||||
send += ctr.substring(0, 8)
|
||||
|
||||
if (Math.ceil(msg.length / 8) >= MAX_UINT) // * 16 / 128
|
||||
return this.error('Message is too long.')
|
||||
return this.notify('Message is too long.')
|
||||
|
||||
var aes = HLP.encryptAes(
|
||||
CryptoJS.enc.Latin1.parse(msg)
|
||||
@@ -2245,8 +2267,6 @@
|
||||
send += HLP.make1Mac(send, sessKeys.sendmac)
|
||||
send += HLP.packData(this.oldMacKeys.splice(0).join(''))
|
||||
|
||||
sessKeys.sendmacused = true
|
||||
|
||||
send = HLP.wrapMsg(
|
||||
send
|
||||
, this.fragment_size
|
||||
@@ -2254,7 +2274,7 @@
|
||||
, this.our_instance_tag
|
||||
, this.their_instance_tag
|
||||
)
|
||||
if (send[0]) return this.error(send[0])
|
||||
if (send[0]) return this.notify(send[0])
|
||||
|
||||
// emit extra symmetric key
|
||||
if (esk) this.trigger('file', ['send', sessKeys.extra_symkey, esk])
|
||||
@@ -2275,7 +2295,7 @@
|
||||
var ign = (msg[0] === '\x01')
|
||||
|
||||
if (this.msgstate !== CONST.MSGSTATE_ENCRYPTED || msg.length !== 8) {
|
||||
if (!ign) this.error('Received an unreadable encrypted message.', true)
|
||||
if (!ign) this.error('Received an unreadable encrypted message.')
|
||||
return
|
||||
}
|
||||
|
||||
@@ -2283,12 +2303,12 @@
|
||||
var their_keyid = this.their_keyid - HLP.readLen(msg[1])
|
||||
|
||||
if (our_keyid < 0 || our_keyid > 1) {
|
||||
if (!ign) this.error('Not of our latest keys.', true)
|
||||
if (!ign) this.error('Not of our latest keys.')
|
||||
return
|
||||
}
|
||||
|
||||
if (their_keyid < 0 || their_keyid > 1) {
|
||||
if (!ign) this.error('Not of your latest keys.', true)
|
||||
if (!ign) this.error('Not of your latest keys.')
|
||||
return
|
||||
}
|
||||
|
||||
@@ -2383,16 +2403,17 @@
|
||||
|
||||
OTR.prototype.smpSecret = function (secret, question) {
|
||||
if (this.msgstate !== CONST.MSGSTATE_ENCRYPTED)
|
||||
return this.error('Must be encrypted for SMP.')
|
||||
return this.notify('Must be encrypted for SMP.')
|
||||
|
||||
if (typeof secret !== 'string' || secret.length < 1)
|
||||
return this.error('Secret is required.')
|
||||
return this.notify('Secret is required.')
|
||||
|
||||
if (!this.sm) this._smInit()
|
||||
|
||||
// utf8 inputs
|
||||
secret = CryptoJS.enc.Utf8.parse(secret).toString(CryptoJS.enc.Latin1)
|
||||
question = CryptoJS.enc.Utf8.parse(question).toString(CryptoJS.enc.Latin1)
|
||||
if (question)
|
||||
question = CryptoJS.enc.Utf8.parse(question).toString(CryptoJS.enc.Latin1)
|
||||
|
||||
this.sm.rcvSecret(secret, question)
|
||||
}
|
||||
@@ -2443,7 +2464,7 @@
|
||||
break
|
||||
case CONST.MSGSTATE_FINISHED:
|
||||
this.storedMgs.push({msg: msg, meta: meta})
|
||||
this.error('Message cannot be sent at this time.')
|
||||
this.notify('Message cannot be sent at this time.', 'warn')
|
||||
return
|
||||
case CONST.MSGSTATE_ENCRYPTED:
|
||||
msg = this.prepareMsg(msg)
|
||||
@@ -2455,7 +2476,7 @@
|
||||
if (msg) this.io(msg, meta)
|
||||
}
|
||||
|
||||
OTR.prototype.receiveMsg = function (msg) {
|
||||
OTR.prototype.receiveMsg = function (msg, meta) {
|
||||
|
||||
// parse type
|
||||
msg = Parse.parseMsg(this, msg)
|
||||
@@ -2464,18 +2485,26 @@
|
||||
|
||||
switch (msg.cls) {
|
||||
case 'error':
|
||||
this.error(msg.msg)
|
||||
this.notify(msg.msg)
|
||||
return
|
||||
case 'ake':
|
||||
if ( msg.version === CONST.OTR_VERSION_3 &&
|
||||
this.checkInstanceTags(msg.instance_tags)
|
||||
) return // ignore
|
||||
) {
|
||||
this.notify(
|
||||
'Received a message intended for a different session.', 'warn')
|
||||
return // ignore
|
||||
}
|
||||
this.ake.handleAKE(msg)
|
||||
return
|
||||
case 'data':
|
||||
if ( msg.version === CONST.OTR_VERSION_3 &&
|
||||
this.checkInstanceTags(msg.instance_tags)
|
||||
) return // ignore
|
||||
) {
|
||||
this.notify(
|
||||
'Received a message intended for a different session.', 'warn')
|
||||
return // ignore
|
||||
}
|
||||
msg.msg = this.handleDataMsg(msg)
|
||||
msg.encrypted = true
|
||||
break
|
||||
@@ -2487,7 +2516,7 @@
|
||||
// check for encrypted
|
||||
if ( this.REQUIRE_ENCRYPTION ||
|
||||
this.msgstate !== CONST.MSGSTATE_PLAINTEXT
|
||||
) this.error('Received an unencrypted message.')
|
||||
) this.notify('Received an unencrypted message.', 'warn')
|
||||
|
||||
// received a plaintext message
|
||||
// stop sending the whitespace tag
|
||||
@@ -2498,7 +2527,7 @@
|
||||
this.doAKE(msg)
|
||||
}
|
||||
|
||||
if (msg.msg) this.trigger('ui', [msg.msg, !!msg.encrypted])
|
||||
if (msg.msg) this.trigger('ui', [msg.msg, !!msg.encrypted, meta])
|
||||
}
|
||||
|
||||
OTR.prototype.checkInstanceTags = function (it) {
|
||||
@@ -2522,20 +2551,19 @@
|
||||
} else if (this.ALLOW_V2 && ~msg.ver.indexOf(CONST.OTR_VERSION_2)) {
|
||||
this.ake.initiateAKE(CONST.OTR_VERSION_2)
|
||||
} else {
|
||||
// is this an error?
|
||||
this.error('OTR conversation requested, ' +
|
||||
'but no compatible protocol version found.')
|
||||
this.notify('OTR conversation requested, ' +
|
||||
'but no compatible protocol version found.', 'warn')
|
||||
}
|
||||
}
|
||||
|
||||
OTR.prototype.error = function (err, send) {
|
||||
if (send) {
|
||||
if (!this.debug) err = "An OTR error has occurred."
|
||||
err = '?OTR Error:' + err
|
||||
this.io(err)
|
||||
return
|
||||
}
|
||||
this.trigger('error', [err])
|
||||
OTR.prototype.error = function (err) {
|
||||
if (!this.debug) err = 'An OTR error has occurred.'
|
||||
this.io('?OTR Error:' + err)
|
||||
this.notify(err)
|
||||
}
|
||||
|
||||
OTR.prototype.notify = function (err, severity) {
|
||||
this.trigger('error', [err, severity || 'error'])
|
||||
}
|
||||
|
||||
OTR.prototype.sendStored = function () {
|
||||
@@ -2548,18 +2576,18 @@
|
||||
|
||||
OTR.prototype.sendFile = function (filename) {
|
||||
if (this.msgstate !== CONST.MSGSTATE_ENCRYPTED)
|
||||
return this.error('Not ready to encrypt.')
|
||||
return this.notify('Not ready to encrypt.')
|
||||
|
||||
if (this.ake.otr_version !== CONST.OTR_VERSION_3)
|
||||
return this.error('Protocol v3 required.')
|
||||
return this.notify('Protocol v3 required.')
|
||||
|
||||
if (!filename) return this.error('Please specify a filename.')
|
||||
if (!filename) return this.notify('Please specify a filename.')
|
||||
|
||||
// utf8 filenames
|
||||
var l1name = CryptoJS.enc.Utf8.parse(filename)
|
||||
l1name = l1name.toString(CryptoJS.enc.Latin1)
|
||||
|
||||
if (l1name.length >= 65532) return this.error('filename is too long.')
|
||||
if (l1name.length >= 65532) return this.notify('Filename is too long.')
|
||||
|
||||
var msg = '\x00' // null byte
|
||||
msg += '\x00\x08' // type 8 tlv
|
||||
@@ -2571,9 +2599,11 @@
|
||||
this.io(msg)
|
||||
}
|
||||
|
||||
OTR.prototype.endOtr = function () {
|
||||
OTR.prototype.endOtr = function (cb) {
|
||||
if (this.msgstate === CONST.MSGSTATE_ENCRYPTED) {
|
||||
this.sendMsg('\x00\x00\x01\x00\x00')
|
||||
if (typeof cb === 'function')
|
||||
cb = new OTRCB(cb)
|
||||
this.sendMsg('\x00\x00\x01\x00\x00', cb)
|
||||
if (this.sm) {
|
||||
if (this.smw) this.sm.worker.terminate() // destroy webworker
|
||||
this.sm = null
|
||||
|
||||
@@ -50,6 +50,17 @@
|
||||
child.__super__ = parent.prototype
|
||||
}
|
||||
|
||||
// assumes 32-bit
|
||||
function intCompare(x, y) {
|
||||
var z = ~(x ^ y)
|
||||
z &= z >> 16
|
||||
z &= z >> 8
|
||||
z &= z >> 4
|
||||
z &= z >> 2
|
||||
z &= z >> 1
|
||||
return z & 1
|
||||
}
|
||||
|
||||
// constant-time string comparison
|
||||
HLP.compare = function (str1, str2) {
|
||||
if (str1.length !== str2.length)
|
||||
@@ -57,7 +68,7 @@
|
||||
var i = 0, result = 0
|
||||
for (; i < str1.length; i++)
|
||||
result |= str1[i].charCodeAt(0) ^ str2[i].charCodeAt(0)
|
||||
return result === 0
|
||||
return intCompare(result, 0)
|
||||
}
|
||||
|
||||
HLP.randomExponent = function () {
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
*
|
||||
* Authors: - Michael Weibel <michael.weibel@gmail.com> - Klaus Herberth <klaus@jsxc.org>
|
||||
* Copyright: - Michael Weibel <michael.weibel@gmail.com>
|
||||
*
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
@@ -189,13 +191,18 @@
|
||||
* Returns: (Boolean) - false, to automatically remove the handler.
|
||||
*/
|
||||
_handleDiscoInfoReply: function(stanza) {
|
||||
var query = stanza.querySelector('query'), node = query.getAttribute('node').split('#'), ver = node[1], from = stanza.getAttribute('from');
|
||||
var query = stanza.querySelector('query');
|
||||
var from = stanza.getAttribute('from');
|
||||
var node = query.getAttribute('node');
|
||||
var ver = (node)? node.split('#')[1] : this._jidVerIndex[from]; //fix open prosody issue
|
||||
|
||||
if (!this._knownCapabilities[ver]) {
|
||||
var childNodes = query.childNodes, childNodesLen = childNodes.length;
|
||||
this._knownCapabilities[ver] = {
|
||||
features: [],
|
||||
identities: []
|
||||
};
|
||||
|
||||
for (var i = 0; i < childNodesLen; i++) {
|
||||
var node = childNodes[i];
|
||||
if (node.nodeName == 'feature') {
|
||||
@@ -203,10 +210,11 @@
|
||||
} else if (node.nodeName == 'identity') {
|
||||
this._knownCapabilities[ver]['identities'].push(this._attributesToJsObject(node.attributes));
|
||||
} else {
|
||||
if (_knownCapabilities[ver][node.nodeName])
|
||||
_knownCapabilities[ver][node.nodeName] = [];
|
||||
if (typeof this._knownCapabilities[ver][node.nodeName] === 'undefined')
|
||||
this._knownCapabilities[ver][node.nodeName] = [];
|
||||
this._knownCapabilities[ver][node.nodeName].push(this._attributesToJsObject(node.attributes));
|
||||
}
|
||||
|
||||
}
|
||||
this._jidVerIndex[from] = ver;
|
||||
} else if (!this._jidVerIndex[from] || !this._jidVerIndex[from] !== ver) {
|
||||
|
||||
@@ -7,6 +7,9 @@ TraceablePeerConnection = function(ice_config, constraints) {
|
||||
var RTCPeerconnection = navigator.mozGetUserMedia ? mozRTCPeerConnection : webkitRTCPeerConnection;
|
||||
this.peerconnection = new RTCPeerconnection(ice_config, constraints);
|
||||
this.updateLog = [];
|
||||
this.stats = {};
|
||||
this.statsinterval = null;
|
||||
this.maxstats = 300; // limit to 300 values, i.e. 5 minutes; set to 0 to disable
|
||||
|
||||
// override as desired
|
||||
this.trace = function(what, info) {
|
||||
@@ -14,47 +17,47 @@ TraceablePeerConnection = function(ice_config, constraints) {
|
||||
self.updateLog.push({
|
||||
time: new Date(),
|
||||
type: what,
|
||||
value: info
|
||||
value: info || ""
|
||||
});
|
||||
};
|
||||
this.onicecandidate = null;
|
||||
this.peerconnection.onicecandidate = function (event) {
|
||||
self.trace('onicecandidate', event.candidate);
|
||||
self.trace('onicecandidate', JSON.stringify(event.candidate, null, ' '));
|
||||
if (self.onicecandidate !== null) {
|
||||
self.onicecandidate(event);
|
||||
}
|
||||
};
|
||||
this.onaddstream = null;
|
||||
this.peerconnection.onaddstream = function (event) {
|
||||
self.trace('onaddstream', event.stream);
|
||||
self.trace('onaddstream', event.stream.id);
|
||||
if (self.onaddstream !== null) {
|
||||
self.onaddstream(event);
|
||||
}
|
||||
};
|
||||
this.onremovestream = null;
|
||||
this.peerconnection.onremovestream = function (event) {
|
||||
self.trace('onremovestream', event.stream);
|
||||
self.trace('onremovestream', event.stream.id);
|
||||
if (self.onremovestream !== null) {
|
||||
self.onremovestream(event);
|
||||
}
|
||||
};
|
||||
this.onsignalingstatechange = null;
|
||||
this.peerconnection.onsignalingstatechange = function (event) {
|
||||
self.trace('onsignalingstatechange', event);
|
||||
self.trace('onsignalingstatechange', self.signalingState);
|
||||
if (self.onsignalingstatechange !== null) {
|
||||
self.onsignalingstatechange(event);
|
||||
}
|
||||
};
|
||||
this.oniceconnectionstatechange = null;
|
||||
this.peerconnection.oniceconnectionstatechange = function (event) {
|
||||
self.trace('oniceconnectionstatechange', event);
|
||||
self.trace('oniceconnectionstatechange', self.iceConnectionState);
|
||||
if (self.oniceconnectionstatechange !== null) {
|
||||
self.oniceconnectionstatechange(event);
|
||||
}
|
||||
};
|
||||
this.onnegotiationneeded = null;
|
||||
this.peerconnection.onnegotiationneeded = function (event) {
|
||||
self.trace('onnegotiationneeded', event);
|
||||
self.trace('onnegotiationneeded');
|
||||
if (self.onnegotiationneeded !== null) {
|
||||
self.onnegotiationneeded(event);
|
||||
}
|
||||
@@ -66,20 +69,56 @@ TraceablePeerConnection = function(ice_config, constraints) {
|
||||
self.ondatachannel(event);
|
||||
}
|
||||
}
|
||||
if (!navigator.mozGetUserMedia) {
|
||||
this.statsinterval = window.setInterval(function() {
|
||||
self.peerconnection.getStats(function(stats) {
|
||||
var results = stats.result();
|
||||
for (var i = 0; i < results.length; ++i) {
|
||||
//console.log(results[i].type, results[i].id, results[i].names())
|
||||
var now = new Date();
|
||||
results[i].names().forEach(function (name) {
|
||||
var id = results[i].id + '-' + name;
|
||||
if (!self.stats[id]) {
|
||||
self.stats[id] = {
|
||||
startTime: now,
|
||||
endTime: now,
|
||||
values: [],
|
||||
times: []
|
||||
};
|
||||
}
|
||||
self.stats[id].values.push(results[i].stat(name));
|
||||
self.stats[id].times.push(now.getTime());
|
||||
if (self.stats[id].values.length > self.maxstats) {
|
||||
self.stats[id].values.shift();
|
||||
self.stats[id].times.shift();
|
||||
}
|
||||
self.stats[id].endTime = now;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}, 1000);
|
||||
}
|
||||
};
|
||||
|
||||
TraceablePeerConnection.prototype.__defineGetter__('signalingState', function() { return this.peerconnection.signalingState; });
|
||||
TraceablePeerConnection.prototype.__defineGetter__('iceConnectionState', function() { return this.peerconnection.iceConnectionState; });
|
||||
TraceablePeerConnection.prototype.__defineGetter__('localDescription', function() { return this.peerconnection.localDescription; });
|
||||
TraceablePeerConnection.prototype.__defineGetter__('remoteDescription', function() { return this.peerconnection.remoteDescription; });
|
||||
dumpSDP = function(description) {
|
||||
return 'type: ' + description.type + '\r\n' + description.sdp;
|
||||
}
|
||||
|
||||
if (TraceablePeerConnection.prototype.__defineGetter__ !== undefined) {
|
||||
TraceablePeerConnection.prototype.__defineGetter__('signalingState', function() { return this.peerconnection.signalingState; });
|
||||
TraceablePeerConnection.prototype.__defineGetter__('iceConnectionState', function() { return this.peerconnection.iceConnectionState; });
|
||||
TraceablePeerConnection.prototype.__defineGetter__('localDescription', function() { return this.peerconnection.localDescription; });
|
||||
TraceablePeerConnection.prototype.__defineGetter__('remoteDescription', function() { return this.peerconnection.remoteDescription; });
|
||||
}
|
||||
|
||||
TraceablePeerConnection.prototype.addStream = function (stream) {
|
||||
this.trace('addStream', stream);
|
||||
this.trace('addStream', stream.id);
|
||||
this.peerconnection.addStream(stream);
|
||||
};
|
||||
|
||||
TraceablePeerConnection.prototype.removeStream = function (stream) {
|
||||
this.trace('removeStream', stream);
|
||||
this.trace('removeStream', stream.id);
|
||||
this.peerconnection.removeStream(stream);
|
||||
};
|
||||
|
||||
@@ -90,7 +129,7 @@ TraceablePeerConnection.prototype.createDataChannel = function (label, opts) {
|
||||
|
||||
TraceablePeerConnection.prototype.setLocalDescription = function (description, successCallback, failureCallback) {
|
||||
var self = this;
|
||||
this.trace('setLocalDescription', description);
|
||||
this.trace('setLocalDescription', dumpSDP(description));
|
||||
this.peerconnection.setLocalDescription(description,
|
||||
function () {
|
||||
self.trace('setLocalDescriptionOnSuccess');
|
||||
@@ -101,11 +140,16 @@ TraceablePeerConnection.prototype.setLocalDescription = function (description, s
|
||||
failureCallback(err);
|
||||
}
|
||||
);
|
||||
/*
|
||||
if (this.statsinterval === null && this.maxstats > 0) {
|
||||
// start gathering stats
|
||||
}
|
||||
*/
|
||||
};
|
||||
|
||||
TraceablePeerConnection.prototype.setRemoteDescription = function (description, successCallback, failureCallback) {
|
||||
var self = this;
|
||||
this.trace('setRemoteDescription', description);
|
||||
this.trace('setRemoteDescription', dumpSDP(description));
|
||||
this.peerconnection.setRemoteDescription(description,
|
||||
function () {
|
||||
self.trace('setRemoteDescriptionOnSuccess');
|
||||
@@ -116,20 +160,29 @@ TraceablePeerConnection.prototype.setRemoteDescription = function (description,
|
||||
failureCallback(err);
|
||||
}
|
||||
);
|
||||
/*
|
||||
if (this.statsinterval === null && this.maxstats > 0) {
|
||||
// start gathering stats
|
||||
}
|
||||
*/
|
||||
};
|
||||
|
||||
TraceablePeerConnection.prototype.close = function () {
|
||||
this.trace('stop');
|
||||
if (this.statsinterval !== null) {
|
||||
window.clearInterval(this.statsinterval);
|
||||
this.statsinterval = null;
|
||||
}
|
||||
this.peerconnection.close();
|
||||
};
|
||||
|
||||
TraceablePeerConnection.prototype.createOffer = function (successCallback, failureCallback, constraints) {
|
||||
var self = this;
|
||||
this.trace('createOffer', constraints);
|
||||
this.trace('createOffer', JSON.stringify(constraints, null, ' '));
|
||||
this.peerconnection.createOffer(
|
||||
function (sdp) {
|
||||
self.trace('createOfferOnSuccess', sdp);
|
||||
successCallback(sdp);
|
||||
function (offer) {
|
||||
self.trace('createOfferOnSuccess', dumpSDP(offer));
|
||||
successCallback(offer);
|
||||
},
|
||||
function(err) {
|
||||
self.trace('createOfferOnFailure', err);
|
||||
@@ -141,11 +194,11 @@ TraceablePeerConnection.prototype.createOffer = function (successCallback, failu
|
||||
|
||||
TraceablePeerConnection.prototype.createAnswer = function (successCallback, failureCallback, constraints) {
|
||||
var self = this;
|
||||
this.trace('createAnswer', constraints);
|
||||
this.trace('createAnswer', JSON.stringify(constraints, null, ' '));
|
||||
this.peerconnection.createAnswer(
|
||||
function (sdp) {
|
||||
self.trace('createAnswerOnSuccess', sdp);
|
||||
successCallback(sdp);
|
||||
function (answer) {
|
||||
self.trace('createAnswerOnSuccess', dumpSDP(answer));
|
||||
successCallback(answer);
|
||||
},
|
||||
function(err) {
|
||||
self.trace('createAnswerOnFailure', err);
|
||||
@@ -157,7 +210,7 @@ TraceablePeerConnection.prototype.createAnswer = function (successCallback, fail
|
||||
|
||||
TraceablePeerConnection.prototype.addIceCandidate = function (candidate, successCallback, failureCallback) {
|
||||
var self = this;
|
||||
this.trace('addIceCandidate', candidate);
|
||||
this.trace('addIceCandidate', JSON.stringify(candidate, null, ' '));
|
||||
this.peerconnection.addIceCandidate(candidate);
|
||||
/* maybe later
|
||||
this.peerconnection.addIceCandidate(candidate,
|
||||
@@ -173,11 +226,14 @@ TraceablePeerConnection.prototype.addIceCandidate = function (candidate, success
|
||||
*/
|
||||
};
|
||||
|
||||
TraceablePeerConnection.prototype.getStats = function(callback) {
|
||||
this.peerconnection.getStats(callback);
|
||||
TraceablePeerConnection.prototype.getStats = function(callback, errback) {
|
||||
if (navigator.mozGetUserMedia) {
|
||||
// ignore for now...
|
||||
} else {
|
||||
this.peerconnection.getStats(callback);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// mozilla chrome compat layer -- very similar to adapter.js
|
||||
setupRTC = function (){
|
||||
var RTC = null;
|
||||
@@ -320,11 +376,11 @@ getUserMediaWithConstraints = function(um, resolution, bandwidth, fps) {
|
||||
},
|
||||
function (error) {
|
||||
console.warn('Failed to get access to local media. Error ', error);
|
||||
$(document).trigger('mediafailure.jingle');
|
||||
$(document).trigger('mediafailure.jingle', [error]);
|
||||
});
|
||||
} catch (e) {
|
||||
console.error('GUM failed: ', e);
|
||||
$(document).trigger('mediafailure.jingle');
|
||||
}
|
||||
}
|
||||
}(jQuery));
|
||||
}(jQuery));
|
||||
|
||||
@@ -91,9 +91,13 @@ Strophe.addConnectionPlugin('jingle', {
|
||||
sess.ice_config = this.ice_config;
|
||||
|
||||
sess.initiate($(iq).attr('from'), false);
|
||||
// FIXME: setRemoteDescription should only be done when this call is to be accepted
|
||||
sess.setRemoteDescription($(iq).find('>jingle'), 'offer');
|
||||
|
||||
if ($(iq).find('>jingle>muted[xmlns="http://jitsi.org/protocol/meet#startmuted"]').length) {
|
||||
console.log('got a request to start muted');
|
||||
sess.startmuted = true;
|
||||
}
|
||||
|
||||
this.sessions[sess.sid] = sess;
|
||||
this.jid2session[sess.peerjid] = sess;
|
||||
|
||||
@@ -209,6 +213,7 @@ Strophe.addConnectionPlugin('jingle', {
|
||||
// validity have to be fetched before creating the peerconnection
|
||||
// TODO: implement refresh via updateIce as described in
|
||||
// https://code.google.com/p/webrtc/issues/detail?id=1650
|
||||
var self = this;
|
||||
this.connection.sendIQ(
|
||||
$iq({type: 'get', to: this.connection.domain})
|
||||
.c('services', {xmlns: 'urn:xmpp:extdisco:1'}).c('service', {host: 'turn.' + this.connection.domain}),
|
||||
@@ -248,7 +253,7 @@ Strophe.addConnectionPlugin('jingle', {
|
||||
break;
|
||||
}
|
||||
});
|
||||
this.ice_config.iceServers = iceservers;
|
||||
self.ice_config.iceServers = iceservers;
|
||||
},
|
||||
function (err) {
|
||||
console.warn('getting turn credentials failed', err);
|
||||
|
||||
@@ -75,15 +75,7 @@ SDP.prototype.toJingle = function (elem, thecreator) {
|
||||
for (i = 0; i < lines.length; i++) {
|
||||
tmp = lines[i].split(' ');
|
||||
var semantics = tmp.shift().substr(8);
|
||||
// new plan
|
||||
elem.c('group', {xmlns: 'urn:xmpp:jingle:apps:grouping:0', type: semantics, semantics:semantics});
|
||||
for (j = 0; j < tmp.length; j++) {
|
||||
elem.c('content', {name: tmp[j]}).up();
|
||||
}
|
||||
elem.up();
|
||||
|
||||
// temporary plan, to be removed
|
||||
elem.c('group', {xmlns: 'urn:ietf:rfc:5888', type: semantics});
|
||||
elem.c('group', {xmlns: 'urn:xmpp:jingle:apps:grouping:0', semantics:semantics});
|
||||
for (j = 0; j < tmp.length; j++) {
|
||||
elem.c('content', {name: tmp[j]}).up();
|
||||
}
|
||||
@@ -620,6 +612,9 @@ SDPUtil = {
|
||||
case 'generation':
|
||||
candidate.generation = elems[i + 1];
|
||||
break;
|
||||
case 'tcptype':
|
||||
candidate.tcptype = elems[i + 1];
|
||||
break;
|
||||
default: // TODO
|
||||
console.log('parse_icecandidate not translating "' + elems[i] + '" = "' + elems[i + 1] + '"');
|
||||
}
|
||||
@@ -647,6 +642,12 @@ SDPUtil = {
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (cand.hasOwnAttribute('tcptype')) {
|
||||
line += 'tcptype';
|
||||
line += ' ';
|
||||
line += cand.tcptype;
|
||||
line += ' ';
|
||||
}
|
||||
line += 'generation';
|
||||
line += ' ';
|
||||
line += cand.hasOwnAttribute('generation') ? cand.generation : '0';
|
||||
@@ -729,8 +730,10 @@ SDPUtil = {
|
||||
candidateToJingle: function (line) {
|
||||
// a=candidate:2979166662 1 udp 2113937151 192.168.2.100 57698 typ host generation 0
|
||||
// <candidate component=... foundation=... generation=... id=... ip=... network=... port=... priority=... protocol=... type=.../>
|
||||
if (line.substring(0, 12) != 'a=candidate:') {
|
||||
console.log('parseCandidate called with a line that is not a candidate line');
|
||||
if (line.indexOf('candidate:') === 0) {
|
||||
line = 'a=' + line;
|
||||
} else if (line.substring(0, 12) != 'a=candidate:') {
|
||||
console.log('parseCandidate called with a line that is not a candidate line');
|
||||
console.log(line);
|
||||
return null;
|
||||
}
|
||||
@@ -752,6 +755,9 @@ SDPUtil = {
|
||||
candidate.port = elems[5];
|
||||
// elems[6] => "typ"
|
||||
candidate.type = elems[7];
|
||||
|
||||
candidate.generation = '0'; // fippo from jitsi-meet: default, may be overwritten below
|
||||
|
||||
for (i = 8; i < elems.length; i += 2) {
|
||||
switch (elems[i]) {
|
||||
case 'raddr':
|
||||
@@ -763,6 +769,9 @@ SDPUtil = {
|
||||
case 'generation':
|
||||
candidate.generation = elems[i + 1];
|
||||
break;
|
||||
case 'tcptype':
|
||||
candidate.tcptype = elems[i + 1];
|
||||
break;
|
||||
default: // TODO
|
||||
console.log('not translating "' + elems[i] + '" = "' + elems[i + 1] + '"');
|
||||
}
|
||||
@@ -810,4 +819,4 @@ SDPUtil = {
|
||||
return line + '\r\n';
|
||||
}
|
||||
};
|
||||
}(jQuery));
|
||||
}(jQuery));
|
||||
|
||||
@@ -23,7 +23,7 @@ JingleSession = function(me, sid, connection) {
|
||||
this.stopTime = null;
|
||||
this.media_constraints = null;
|
||||
this.pc_constraints = null;
|
||||
this.ice_config = {},
|
||||
this.ice_config = {};
|
||||
this.drip_container = [];
|
||||
|
||||
this.usetrickle = true;
|
||||
@@ -40,8 +40,18 @@ JingleSession = function(me, sid, connection) {
|
||||
|
||||
this.addssrc = [];
|
||||
this.removessrc = [];
|
||||
this.pendingop = null;
|
||||
|
||||
this.wait = true;
|
||||
|
||||
// XEP-0172 support, non-standard
|
||||
this.nickname = null;
|
||||
|
||||
// non-standard "please start muted" support for colibri/meet
|
||||
this.startmuted = false;
|
||||
|
||||
// Filter for testcases with ICE Candidates
|
||||
this.filter_candidates = null;
|
||||
}
|
||||
|
||||
JingleSession.prototype.initiate = function (peerjid, isInitiator) {
|
||||
@@ -159,6 +169,7 @@ JingleSession.prototype.accept = function () {
|
||||
this.peerconnection.setLocalDescription(new RTCSessionDescription({type: 'answer', sdp: sdp}),
|
||||
function () {
|
||||
//console.log('setLocalDescription success');
|
||||
$(document).trigger('setLocalDescription.jingle', [self.sid]);
|
||||
},
|
||||
function (e) {
|
||||
console.error('setLocalDescription failed', e);
|
||||
@@ -197,118 +208,50 @@ JingleSession.prototype.sendIceCandidate = function (candidate) {
|
||||
this.hadturncandidate = true;
|
||||
}
|
||||
|
||||
if (this.usetrickle) {
|
||||
if (this.usedrip) {
|
||||
if (this.drip_container.length === 0) {
|
||||
// start 10ms callout
|
||||
window.setTimeout(function () {
|
||||
if (self.drip_container.length === 0) return;
|
||||
var allcands = self.drip_container;
|
||||
self.drip_container = [];
|
||||
var cand = $iq({to: self.peerjid, type: 'set'})
|
||||
.c('jingle', {xmlns: 'urn:xmpp:jingle:1',
|
||||
action: 'transport-info',
|
||||
initiator: self.initiator,
|
||||
sid: self.sid});
|
||||
for (var mid = 0; mid < self.localSDP.media.length; mid++) {
|
||||
var cands = allcands.filter(function (el) { return el.sdpMLineIndex == mid; });
|
||||
if (cands.length > 0) {
|
||||
var ice = SDPUtil.iceparams(self.localSDP.media[mid], self.localSDP.session);
|
||||
ice.xmlns = 'urn:xmpp:jingle:transports:ice-udp:1';
|
||||
cand.c('content', {creator: self.initiator == self.me ? 'initiator' : 'responder',
|
||||
name: cands[0].sdpMid
|
||||
}).c('transport', ice);
|
||||
for (var i = 0; i < cands.length; i++) {
|
||||
cand.c('candidate', SDPUtil.candidateToJingle(cands[i].candidate)).up();
|
||||
}
|
||||
// add fingerprint
|
||||
if (SDPUtil.find_line(self.localSDP.media[mid], 'a=fingerprint:', self.localSDP.session)) {
|
||||
var tmp = SDPUtil.parse_fingerprint(SDPUtil.find_line(self.localSDP.media[mid], 'a=fingerprint:', self.localSDP.session));
|
||||
tmp.required = true;
|
||||
cand.c('fingerprint').t(tmp.fingerprint);
|
||||
delete tmp.fingerprint;
|
||||
cand.attrs(tmp);
|
||||
cand.up();
|
||||
}
|
||||
cand.up(); // transport
|
||||
cand.up(); // content
|
||||
}
|
||||
}
|
||||
// might merge last-candidate notification into this, but it is called alot later. See webrtc issue #2340
|
||||
//console.log('was this the last candidate', self.lasticecandidate);
|
||||
self.connection.sendIQ(cand,
|
||||
function () {
|
||||
var ack = {};
|
||||
ack.source = 'transportinfo';
|
||||
$(document).trigger('ack.jingle', [self.sid, ack]);
|
||||
},
|
||||
function (stanza) {
|
||||
var error = ($(stanza).find('error').length) ? {
|
||||
code: $(stanza).find('error').attr('code'),
|
||||
reason: $(stanza).find('error :first')[0].tagName,
|
||||
}:{};
|
||||
error.source = 'transportinfo';
|
||||
$(document).trigger('error.jingle', [self.sid, error]);
|
||||
},
|
||||
10000);
|
||||
}, 10);
|
||||
if(this.filter_candidates === null || jcand.type === this.filter_candidates) {
|
||||
if (this.usetrickle) {
|
||||
console.log('sendIceCandidate using trickle');
|
||||
if (this.usedrip) {
|
||||
if (this.drip_container.length === 0) {
|
||||
// start 20ms callout
|
||||
window.setTimeout(function () {
|
||||
console.log('sending drip container');
|
||||
if (self.drip_container.length === 0) return;
|
||||
self.sendIceCandidates(self.drip_container);
|
||||
self.drip_container = [];
|
||||
}, 20);
|
||||
|
||||
}
|
||||
this.drip_container.push(event.candidate);
|
||||
return;
|
||||
} else {
|
||||
console.log('sending single candidate');
|
||||
self.sendIceCandidates([event.candidate]);
|
||||
}
|
||||
this.drip_container.push(event.candidate);
|
||||
return;
|
||||
}
|
||||
// map to transport-info
|
||||
var cand = $iq({to: this.peerjid, type: 'set'})
|
||||
.c('jingle', {xmlns: 'urn:xmpp:jingle:1',
|
||||
action: 'transport-info',
|
||||
initiator: this.initiator,
|
||||
sid: this.sid})
|
||||
.c('content', {creator: this.initiator == this.me ? 'initiator' : 'responder',
|
||||
name: candidate.sdpMid
|
||||
})
|
||||
.c('transport', ice)
|
||||
.c('candidate', jcand);
|
||||
cand.up();
|
||||
// add fingerprint
|
||||
if (SDPUtil.find_line(this.localSDP.media[candidate.sdpMLineIndex], 'a=fingerprint:', this.localSDP.session)) {
|
||||
var tmp = SDPUtil.parse_fingerprint(SDPUtil.find_line(this.localSDP.media[candidate.sdpMLineIndex], 'a=fingerprint:', this.localSDP.session));
|
||||
tmp.required = true;
|
||||
cand.c('fingerprint').t(tmp.fingerprint);
|
||||
delete tmp.fingerprint;
|
||||
cand.attrs(tmp);
|
||||
cand.up();
|
||||
}
|
||||
this.connection.sendIQ(cand,
|
||||
function () {
|
||||
var ack = {};
|
||||
ack.source = 'transportinfo';
|
||||
$(document).trigger('ack.jingle', [self.sid, ack]);
|
||||
},
|
||||
function (stanza) {
|
||||
console.error('transport info error');
|
||||
var error = ($(stanza).find('error').length) ? {
|
||||
code: $(stanza).find('error').attr('code'),
|
||||
reason: $(stanza).find('error :first')[0].tagName,
|
||||
}:{};
|
||||
error.source = 'transportinfo';
|
||||
$(document).trigger('error.jingle', [self.sid, error]);
|
||||
},
|
||||
10000);
|
||||
}
|
||||
} else {
|
||||
//console.log('sendIceCandidate: last candidate.');
|
||||
console.log('sendIceCandidate: last candidate...');
|
||||
if (!this.usetrickle) {
|
||||
//console.log('should send full offer now...');
|
||||
console.log('should send full offer now...');
|
||||
var init = $iq({to: this.peerjid,
|
||||
type: 'set'})
|
||||
.c('jingle', {xmlns: 'urn:xmpp:jingle:1',
|
||||
action: this.peerconnection.localDescription.type == 'offer' ? 'session-initiate' : 'session-accept',
|
||||
initiator: this.initiator,
|
||||
sid: this.sid});
|
||||
if (this.nickname != null) {
|
||||
init.c('nick', {xmlns:'http://jabber.org/protocol/nick'}).t(this.nickname).up();
|
||||
}
|
||||
if (this.startmuted) {
|
||||
init.c('muted', {xmlns:'http://jitsi.org/protocol/meet#startmuted'}).up();
|
||||
}
|
||||
this.localSDP = new SDP(this.peerconnection.localDescription.sdp);
|
||||
this.localSDP.toJingle(init, this.initiator == this.me ? 'initiator' : 'responder');
|
||||
console.log('try to send ack(offer)...');
|
||||
this.connection.sendIQ(init,
|
||||
function () {
|
||||
//console.log('session initiate ack');
|
||||
console.log('Sent session initiate (ACK, offer)...');
|
||||
var ack = {};
|
||||
ack.source = 'offer';
|
||||
$(document).trigger('ack.jingle', [self.sid, ack]);
|
||||
@@ -330,11 +273,65 @@ JingleSession.prototype.sendIceCandidate = function (candidate) {
|
||||
console.log('Have we encountered any relay candidates? ' + this.hadturncandidate);
|
||||
|
||||
if (!(this.hadstuncandidate || this.hadturncandidate) && this.peerconnection.signalingState != 'closed') {
|
||||
console.log('no candidates found!');
|
||||
$(document).trigger('nostuncandidates.jingle', [this.sid]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JingleSession.prototype.sendIceCandidates = function (candidates) {
|
||||
console.log('sendIceCandidates', candidates);
|
||||
var cand = $iq({to: this.peerjid, type: 'set'})
|
||||
.c('jingle', {xmlns: 'urn:xmpp:jingle:1',
|
||||
action: 'transport-info',
|
||||
initiator: this.initiator,
|
||||
sid: this.sid});
|
||||
for (var mid = 0; mid < this.localSDP.media.length; mid++) {
|
||||
var cands = candidates.filter(function (el) { return el.sdpMLineIndex == mid; });
|
||||
if (cands.length > 0) {
|
||||
var ice = SDPUtil.iceparams(this.localSDP.media[mid], this.localSDP.session);
|
||||
ice.xmlns = 'urn:xmpp:jingle:transports:ice-udp:1';
|
||||
cand.c('content', {creator: this.initiator == this.me ? 'initiator' : 'responder',
|
||||
name: cands[0].sdpMid
|
||||
}).c('transport', ice);
|
||||
for (var i = 0; i < cands.length; i++) {
|
||||
cand.c('candidate', SDPUtil.candidateToJingle(cands[i].candidate)).up();
|
||||
}
|
||||
// add fingerprint
|
||||
if (SDPUtil.find_line(this.localSDP.media[mid], 'a=fingerprint:', this.localSDP.session)) {
|
||||
var tmp = SDPUtil.parse_fingerprint(SDPUtil.find_line(this.localSDP.media[mid], 'a=fingerprint:', this.localSDP.session));
|
||||
tmp.required = true;
|
||||
cand.c('fingerprint').t(tmp.fingerprint);
|
||||
delete tmp.fingerprint;
|
||||
cand.attrs(tmp);
|
||||
cand.up();
|
||||
}
|
||||
cand.up(); // transport
|
||||
cand.up(); // content
|
||||
}
|
||||
}
|
||||
// might merge last-candidate notification into this, but it is called alot later. See webrtc issue #2340
|
||||
//console.log('was this the last candidate', this.lasticecandidate);
|
||||
console.log('try to send ack(transportinfo)...');
|
||||
this.connection.sendIQ(cand,
|
||||
function () {
|
||||
var ack = {};
|
||||
ack.source = 'transportinfo';
|
||||
console.log('Sent session initiate (ACK, transportinfo)...');
|
||||
$(document).trigger('ack.jingle', [this.sid, ack]);
|
||||
},
|
||||
function (stanza) {
|
||||
var error = ($(stanza).find('error').length) ? {
|
||||
code: $(stanza).find('error').attr('code'),
|
||||
reason: $(stanza).find('error :first')[0].tagName,
|
||||
}:{};
|
||||
error.source = 'transportinfo';
|
||||
$(document).trigger('error.jingle', [this.sid, error]);
|
||||
},
|
||||
10000);
|
||||
};
|
||||
|
||||
|
||||
JingleSession.prototype.sendOffer = function () {
|
||||
//console.log('sendOffer...');
|
||||
var self = this;
|
||||
@@ -360,6 +357,12 @@ JingleSession.prototype.createdOffer = function (sdp) {
|
||||
action: 'session-initiate',
|
||||
initiator: this.initiator,
|
||||
sid: this.sid});
|
||||
if (this.nickname != null) {
|
||||
init.c('nick', {xmlns:'http://jabber.org/protocol/nick'}).t(this.nickname).up();
|
||||
}
|
||||
if (this.startmuted) {
|
||||
init.c('muted', {xmlns:'http://jitsi.org/protocol/meet#startmuted'}).up();
|
||||
}
|
||||
this.localSDP.toJingle(init, this.initiator == this.me ? 'initiator' : 'responder');
|
||||
this.connection.sendIQ(init,
|
||||
function () {
|
||||
@@ -382,6 +385,7 @@ JingleSession.prototype.createdOffer = function (sdp) {
|
||||
sdp.sdp = this.localSDP.raw;
|
||||
this.peerconnection.setLocalDescription(sdp,
|
||||
function () {
|
||||
$(document).trigger('setLocalDescription.jingle', [self.sid]);
|
||||
//console.log('setLocalDescription success');
|
||||
},
|
||||
function (e) {
|
||||
@@ -566,11 +570,31 @@ JingleSession.prototype.sendAnswer = function (provisional) {
|
||||
|
||||
JingleSession.prototype.createdAnswer = function (sdp, provisional) {
|
||||
//console.log('createAnswer callback');
|
||||
console.log(sdp);
|
||||
var self = this;
|
||||
this.localSDP = new SDP(sdp.sdp);
|
||||
//this.localSDP.mangle();
|
||||
this.usepranswer = provisional === true;
|
||||
|
||||
if (this.startmuted) {
|
||||
console.log('we got a request to start muted...');
|
||||
this.connection.jingle.localStream.getAudioTracks().forEach(function (track) {
|
||||
track.enabled = false;
|
||||
});
|
||||
// doing this freezes local video, too (which probably means it should be replaced
|
||||
// by a symbol
|
||||
this.connection.jingle.localStream.getVideoTracks().forEach(function (track) {
|
||||
track.enabled = false;
|
||||
});
|
||||
|
||||
// set video to recvonly
|
||||
this.localSDP.media[1] = this.localSDP.media[1].replace('a=sendrecv', 'a=recvonly');
|
||||
// and remove a=ssrc lines. Weird things happen otherwise
|
||||
SDPUtil.find_lines(this.localSDP.media[1], 'a=ssrc:').forEach(function (line) {
|
||||
self.localSDP.media[1] = self.localSDP.media[1].replace(line + '\r\n', '');
|
||||
});
|
||||
this.localSDP.raw = this.localSDP.session + this.localSDP.media.join('');
|
||||
}
|
||||
|
||||
if (this.usetrickle) {
|
||||
if (!this.usepranswer) {
|
||||
var accept = $iq({to: this.peerjid,
|
||||
@@ -601,12 +625,13 @@ JingleSession.prototype.createdAnswer = function (sdp, provisional) {
|
||||
for (var i = 0; i < this.localSDP.media.length; i++) {
|
||||
this.localSDP.media[i] = this.localSDP.media[i].replace('a=sendrecv\r\n', 'a=inactive\r\n');
|
||||
}
|
||||
this.localSDP.raw = this.localSDP.session + '\r\n' + this.localSDP.media.join('');
|
||||
this.localSDP.raw = this.localSDP.session + this.localSDP.media.join('');
|
||||
}
|
||||
}
|
||||
sdp.sdp = this.localSDP.raw;
|
||||
this.peerconnection.setLocalDescription(sdp,
|
||||
function () {
|
||||
$(document).trigger('setLocalDescription.jingle', [self.sid]);
|
||||
//console.log('setLocalDescription success');
|
||||
},
|
||||
function (e) {
|
||||
@@ -727,8 +752,8 @@ JingleSession.prototype.removeSource = function (elem) {
|
||||
|
||||
JingleSession.prototype.modifySources = function() {
|
||||
var self = this;
|
||||
if (!(this.addssrc.length || this.removessrc.length)) return;
|
||||
if (this.peerconnection.signalingState == 'closed') return;
|
||||
if (!(this.addssrc.length || this.removessrc.length || this.pendingop !== null)) return;
|
||||
if (!(this.peerconnection.signalingState == 'stable' && this.peerconnection.iceConnectionState == 'connected')) {
|
||||
console.warn('modifySources not yet', this.peerconnection.signalingState, this.peerconnection.iceConnectionState);
|
||||
this.wait = true;
|
||||
@@ -764,9 +789,28 @@ JingleSession.prototype.modifySources = function() {
|
||||
function() {
|
||||
self.peerconnection.createAnswer(
|
||||
function(modifiedAnswer) {
|
||||
// change video direction, see https://github.com/jitsi/jitmeet/issues/41
|
||||
if (self.pendingop !== null) {
|
||||
var sdp = new SDP(modifiedAnswer.sdp);
|
||||
if (sdp.media.length > 1) {
|
||||
switch(self.pendingop) {
|
||||
case 'mute':
|
||||
sdp.media[1] = sdp.media[1].replace('a=sendrecv', 'a=recvonly');
|
||||
break;
|
||||
case 'unmute':
|
||||
sdp.media[1] = sdp.media[1].replace('a=recvonly', 'a=sendrecv');
|
||||
break;
|
||||
}
|
||||
sdp.raw = sdp.session + sdp.media.join('');
|
||||
modifiedAnswer.sdp = sdp.raw;
|
||||
}
|
||||
self.pendingop = null;
|
||||
}
|
||||
|
||||
self.peerconnection.setLocalDescription(modifiedAnswer,
|
||||
function() {
|
||||
//console.log('modified setLocalDescription ok');
|
||||
$(document).trigger('setLocalDescription.jingle', [self.sid]);
|
||||
},
|
||||
function(error) {
|
||||
console.log('modified setLocalDescription failed');
|
||||
@@ -784,6 +828,17 @@ JingleSession.prototype.modifySources = function() {
|
||||
);
|
||||
};
|
||||
|
||||
// SDP-based mute by going recvonly/sendrecv
|
||||
// FIXME: should probably black out the screen as well
|
||||
JingleSession.prototype.hardMuteVideo = function (muted) {
|
||||
this.pendingop = muted ? 'mute' : 'unmute';
|
||||
this.modifySources();
|
||||
|
||||
this.connection.jingle.localStream.getVideoTracks().forEach(function (track) {
|
||||
track.enabled = !muted;
|
||||
});
|
||||
};
|
||||
|
||||
JingleSession.prototype.sendMute = function (muted, content) {
|
||||
var info = $iq({to: this.peerjid,
|
||||
type: 'set'})
|
||||
|
||||
@@ -3,9 +3,10 @@
|
||||
* Klaus Herberth, 2014
|
||||
*/
|
||||
|
||||
// This code was written by Tyler Akins and has been placed in the
|
||||
// public domain. It would be nice if you left this header intact.
|
||||
// Base64 code from Tyler Akins -- http://rumkin.com
|
||||
/*! This code was written by Tyler Akins and has been placed in the
|
||||
public domain. It would be nice if you left this header intact.
|
||||
Base64 code from Tyler Akins -- http://rumkin.com
|
||||
*/
|
||||
|
||||
var Base64 = (function () {
|
||||
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
@@ -84,7 +85,7 @@ var Base64 = (function () {
|
||||
return obj;
|
||||
})();
|
||||
|
||||
/*
|
||||
/*!
|
||||
* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
|
||||
* in FIPS PUB 180-1
|
||||
* Version 2.1a Copyright Paul Johnston 2000 - 2002.
|
||||
@@ -261,7 +262,7 @@ function binb2b64(binarray)
|
||||
return str;
|
||||
}
|
||||
|
||||
/*
|
||||
/*!
|
||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||
* Digest Algorithm, as defined in RFC 1321.
|
||||
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
|
||||
@@ -469,7 +470,7 @@ var MD5 = (function () {
|
||||
return obj;
|
||||
})();
|
||||
|
||||
/*
|
||||
/*!
|
||||
This program is distributed under the terms of the MIT license.
|
||||
Please see the LICENSE file for details.
|
||||
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
[
|
||||
{
|
||||
"file": "lib/strophe.js",
|
||||
"license": "multiple",
|
||||
"url": "http://strophe.im/strophejs/"
|
||||
},
|
||||
{
|
||||
"file": "lib/strophe.muc.js",
|
||||
"license": "MIT",
|
||||
"url": "https://github.com/strophe/strophejs-plugins"
|
||||
},
|
||||
{
|
||||
"file": "lib/strophe.disco.js",
|
||||
"license": "MIT",
|
||||
"url": "https://github.com/strophe/strophejs-plugins"
|
||||
},
|
||||
{
|
||||
"file": "lib/strophe.caps.js",
|
||||
"license": "MIT",
|
||||
"url": "https://github.com/strophe/strophejs-plugins"
|
||||
},
|
||||
{
|
||||
"file": "lib/strophe.vcard.js",
|
||||
"license": "MIT",
|
||||
"url": "https://github.com/strophe/strophejs-plugins"
|
||||
},
|
||||
{
|
||||
"file": "lib/strophe.jingle/strophe.jingle.js",
|
||||
"license": "MIT",
|
||||
"url": "https://github.com/ESTOS/strophe.jingle"
|
||||
},
|
||||
{
|
||||
"file": "lib/strophe.jingle/strophe.jingle.session.js",
|
||||
"license": "MIT",
|
||||
"url": "https://github.com/ESTOS/strophe.jingle"
|
||||
},
|
||||
{
|
||||
"file": "lib/strophe.jingle/strophe.jingle.sdp.js",
|
||||
"license": "MIT",
|
||||
"url": "https://github.com/ESTOS/strophe.jingle"
|
||||
},
|
||||
{
|
||||
"file": "lib/strophe.jingle/strophe.jingle.adapter.js",
|
||||
"license": "MIT",
|
||||
"url": "https://github.com/ESTOS/strophe.jingle"
|
||||
},
|
||||
{
|
||||
"file": "lib/otr/build/dep/salsa20.js",
|
||||
"license": "AGPL3",
|
||||
"url": "https://github.com/neoatlantis/node-salsa20"
|
||||
},
|
||||
{
|
||||
"file": "lib/otr/build/dep/bigint.js",
|
||||
"license": "public domain",
|
||||
"url": "www.leemon.com"
|
||||
},
|
||||
{
|
||||
"file": "lib/otr/build/dep/crypto.js",
|
||||
"license": "code.google.com/p/crypto-js/wiki/license",
|
||||
"url": "code.google.com/p/crypto-js"
|
||||
},
|
||||
{
|
||||
"file": "lib/otr/build/dep/eventemitter.js",
|
||||
"license": "MIT",
|
||||
"url": "http://git.io/ee"
|
||||
},
|
||||
{
|
||||
"file": "lib/otr/build/otr.js",
|
||||
"license": "MPL v2.0",
|
||||
"url": "https://arlolra.github.io/otr/"
|
||||
},
|
||||
{
|
||||
"file": "lib/i18next/release/i18next-latest.min.js",
|
||||
"license": "MIT",
|
||||
"url": "http://i18next.com/"
|
||||
},
|
||||
{
|
||||
"file": "lib/translation.js",
|
||||
"license": "MIT",
|
||||
"url": "https://webtranslateit.com/en/projects/10365-JSXC"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>JSDoc: Index</title>
|
||||
|
||||
<script src="scripts/prettify/prettify.js"> </script>
|
||||
<script src="scripts/prettify/lang-css.js"> </script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="main">
|
||||
|
||||
<h1 class="page-title">Index</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h3> </h3>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<nav>
|
||||
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
|
||||
</nav>
|
||||
|
||||
<br clear="both">
|
||||
|
||||
<footer>
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
|
||||
</footer>
|
||||
|
||||
<script> prettyPrint(); </script>
|
||||
<script src="scripts/linenumber.js"> </script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,556 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>JSDoc: Namespace: dialog</title>
|
||||
|
||||
<script src="scripts/prettify/prettify.js"> </script>
|
||||
<script src="scripts/prettify/lang-css.js"> </script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="main">
|
||||
|
||||
<h1 class="page-title">Namespace: dialog</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section>
|
||||
|
||||
<header>
|
||||
<h2>
|
||||
<span class="ancestors"><a href="jsxc.html">jsxc</a><a href="jsxc.gui.html">.gui</a>.</span>
|
||||
|
||||
dialog
|
||||
</h2>
|
||||
|
||||
</header>
|
||||
|
||||
<article>
|
||||
<div class="container-overview">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="description">Wrapper for dialog</div>
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2384">line 2384</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h3 class="subsection-title">Methods</h3>
|
||||
|
||||
<dl>
|
||||
|
||||
<dt>
|
||||
<h4 class="name" id="close"><span class="type-signature"><static> </span>close<span class="signature">()</span><span class="type-signature"></span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
<div class="description">
|
||||
Close current dialog.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2450">line 2450</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
|
||||
|
||||
<dt>
|
||||
<h4 class="name" id="open"><span class="type-signature"><static> </span>open<span class="signature">(data, <span class="optional">o</span>)</span><span class="type-signature"> → {jQuery}</span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
<div class="description">
|
||||
Open a Dialog.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h5>Parameters:</h5>
|
||||
|
||||
|
||||
<table class="params">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
<th>Name</th>
|
||||
|
||||
|
||||
<th>Type</th>
|
||||
|
||||
|
||||
<th>Argument</th>
|
||||
|
||||
|
||||
|
||||
|
||||
<th class="last">Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class="name"><code>data</code></td>
|
||||
|
||||
|
||||
<td class="type">
|
||||
|
||||
|
||||
<span class="param-type">String</span>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
<td class="attributes">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
<td class="description last">Data of the dialog</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class="name"><code>o</code></td>
|
||||
|
||||
|
||||
<td class="type">
|
||||
|
||||
|
||||
<span class="param-type">Object</span>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
<td class="attributes">
|
||||
|
||||
<optional><br>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
<td class="description last">Options for the dialog
|
||||
<h6>Properties</h6>
|
||||
|
||||
|
||||
<table class="params">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
<th>Name</th>
|
||||
|
||||
|
||||
<th>Type</th>
|
||||
|
||||
|
||||
<th>Argument</th>
|
||||
|
||||
|
||||
|
||||
|
||||
<th class="last">Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class="name"><code>noClose</code></td>
|
||||
|
||||
|
||||
<td class="type">
|
||||
|
||||
|
||||
<span class="param-type">Boolean</span>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
<td class="attributes">
|
||||
|
||||
<optional><br>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
<td class="description last">If true, hide all default close options</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2399">line 2399</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h5>Returns:</h5>
|
||||
|
||||
|
||||
<div class="param-desc">
|
||||
Dialog object
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<dl>
|
||||
<dt>
|
||||
Type
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<span class="param-type">jQuery</span>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
|
||||
|
||||
<dt>
|
||||
<h4 class="name" id="resize"><span class="type-signature"><static> </span>resize<span class="signature">(options)</span><span class="type-signature"></span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
<div class="description">
|
||||
Resizes current dialog.
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h5>Parameters:</h5>
|
||||
|
||||
|
||||
<table class="params">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
<th>Name</th>
|
||||
|
||||
|
||||
<th>Type</th>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<th class="last">Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class="name"><code>options</code></td>
|
||||
|
||||
|
||||
<td class="type">
|
||||
|
||||
|
||||
<span class="param-type">Object</span>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<td class="description last">e.g. width and height</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2460">line 2460</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<nav>
|
||||
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
|
||||
</nav>
|
||||
|
||||
<br clear="both">
|
||||
|
||||
<footer>
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
|
||||
</footer>
|
||||
|
||||
<script> prettyPrint(); </script>
|
||||
<script src="scripts/linenumber.js"> </script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,404 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>JSDoc: Namespace: queryActions</title>
|
||||
|
||||
<script src="scripts/prettify/prettify.js"> </script>
|
||||
<script src="scripts/prettify/lang-css.js"> </script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="main">
|
||||
|
||||
<h1 class="page-title">Namespace: queryActions</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section>
|
||||
|
||||
<header>
|
||||
<h2>
|
||||
<span class="ancestors"><a href="jsxc.html">jsxc</a><a href="jsxc.gui.html">.gui</a>.</span>
|
||||
|
||||
queryActions
|
||||
</h2>
|
||||
|
||||
</header>
|
||||
|
||||
<article>
|
||||
<div class="container-overview">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="description">Different uri query actions as defined in XEP-0147.</div>
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line902">line 902</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h3 class="subsection-title">Methods</h3>
|
||||
|
||||
<dl>
|
||||
|
||||
<dt>
|
||||
<h4 class="name" id="message"><span class="type-signature"><static> </span>message<span class="signature">()</span><span class="type-signature"></span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
<div class="description">
|
||||
xmpp:JID?message[;body=TEXT]
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line909">line 909</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
|
||||
|
||||
<dt>
|
||||
<h4 class="name" id="remove"><span class="type-signature"><static> </span>remove<span class="signature">()</span><span class="type-signature"></span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
<div class="description">
|
||||
xmpp:JID?remove
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line918">line 918</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
|
||||
|
||||
<dt>
|
||||
<h4 class="name" id="subscribe"><span class="type-signature"><static> </span>subscribe<span class="signature">()</span><span class="type-signature"></span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
<div class="description">
|
||||
xmpp:JID?subscribe[;name=NAME]
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line923">line 923</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
|
||||
|
||||
<dt>
|
||||
<h4 class="name" id="vcard"><span class="type-signature"><static> </span>vcard<span class="signature">()</span><span class="type-signature"></span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
<div class="description">
|
||||
xmpp:JID?vcard
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line932">line 932</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<nav>
|
||||
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
|
||||
</nav>
|
||||
|
||||
<br clear="both">
|
||||
|
||||
<footer>
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
|
||||
</footer>
|
||||
|
||||
<script> prettyPrint(); </script>
|
||||
<script src="scripts/linenumber.js"> </script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,124 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>JSDoc: Namespace: template</title>
|
||||
|
||||
<script src="scripts/prettify/prettify.js"> </script>
|
||||
<script src="scripts/prettify/lang-css.js"> </script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="main">
|
||||
|
||||
<h1 class="page-title">Namespace: template</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section>
|
||||
|
||||
<header>
|
||||
<h2>
|
||||
<span class="ancestors"><a href="jsxc.html">jsxc</a><a href="jsxc.gui.html">.gui</a>.</span>
|
||||
|
||||
template
|
||||
</h2>
|
||||
|
||||
</header>
|
||||
|
||||
<article>
|
||||
<div class="container-overview">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="description">Hold all HTML templates.</div>
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3001">line 3001</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<nav>
|
||||
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
|
||||
</nav>
|
||||
|
||||
<br clear="both">
|
||||
|
||||
<footer>
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
|
||||
</footer>
|
||||
|
||||
<script> prettyPrint(); </script>
|
||||
<script src="scripts/linenumber.js"> </script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,124 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>JSDoc: Namespace: l10n</title>
|
||||
|
||||
<script src="scripts/prettify/prettify.js"> </script>
|
||||
<script src="scripts/prettify/lang-css.js"> </script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="main">
|
||||
|
||||
<h1 class="page-title">Namespace: l10n</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section>
|
||||
|
||||
<header>
|
||||
<h2>
|
||||
<span class="ancestors"><a href="jsxc.html">jsxc</a>.</span>
|
||||
|
||||
l10n
|
||||
</h2>
|
||||
|
||||
</header>
|
||||
|
||||
<article>
|
||||
<div class="container-overview">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="description">Contains all available translations</div>
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source:</dt>
|
||||
<dd class="tag-source"><ul class="dummy"><li>
|
||||
<a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5777">line 5777</a>
|
||||
</li></ul></dd>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<nav>
|
||||
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
|
||||
</nav>
|
||||
|
||||
<br clear="both">
|
||||
|
||||
<footer>
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:14 GMT+0100 (CET)
|
||||
</footer>
|
||||
|
||||
<script> prettyPrint(); </script>
|
||||
<script src="scripts/linenumber.js"> </script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,43 +1,88 @@
|
||||
/* jsxc, Strophe, SDPUtil, getUserMediaWithConstraints, setupRTC, jQuery */
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>JSDoc: Source: jsxc.lib.webrtc.js</title>
|
||||
|
||||
<script src="scripts/prettify/prettify.js"> </script>
|
||||
<script src="scripts/prettify/lang-css.js"> </script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="main">
|
||||
|
||||
<h1 class="page-title">Source: jsxc.lib.webrtc.js</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section>
|
||||
<article>
|
||||
<pre class="prettyprint source"><code>/* global jsxc, Strophe, SDPUtil, getUserMediaWithConstraints, setupRTC, jQuery, MediaStreamTrack */
|
||||
|
||||
var RTC = null, RTCPeerconnection = null;
|
||||
|
||||
jsxc.gui.template.incomingCall = '<h3>%%Incoming_call%%</h3>\
|
||||
<p>%%Do_you_want_to_accept_the_call_from%% {{cid_name}}?</p>\
|
||||
<p class="jsxc_right">\
|
||||
<a href="#" class="button jsxc_reject">%%Reject%%</a> <a href="#" class="button creation jsxc_accept">%%Accept%%</a>\
|
||||
</p>';
|
||||
jsxc.gui.template.incomingCall = '<h3>%%Incoming_call%%</h3>\
|
||||
<p>%%Do_you_want_to_accept_the_call_from%% {{bid_name}}?</p>\
|
||||
<p class="jsxc_right">\
|
||||
<a href="#" class="button jsxc_reject">%%Reject%%</a> <a href="#" class="button creation jsxc_accept">%%Accept%%</a>\
|
||||
</p>';
|
||||
|
||||
jsxc.gui.template.allowMediaAccess = '<p>%%Please_allow_access_to_microphone_and_camera%%</p>';
|
||||
jsxc.gui.template.allowMediaAccess = '<p>%%Please_allow_access_to_microphone_and_camera%%</p>';
|
||||
|
||||
jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
<div class="jsxc_videoContainer">\
|
||||
<video class="jsxc_localvideo" autoplay></video>\
|
||||
<video class="jsxc_remotevideo" autoplay></video>\
|
||||
<div class="jsxc_status"></div>\
|
||||
</div>\
|
||||
<div class="jsxc_controlbar">\
|
||||
<button type="button" class="jsxc_hangUp">%%hang_up%%</button>\
|
||||
<input type="range" class="jsxc_volume" min="0.0" max="1.0" step="0.05" value="0.5" />\
|
||||
<div class="jsxc_buttongroup">\
|
||||
<button type="button" class="jsxc_snapshot">%%snapshot%%</button><button type="button" class="jsxc_snapshots">▼</button>\
|
||||
</div>\
|
||||
<!-- <button type="button" class="jsxc_mute_local">%%mute_my_audio%%</button>\
|
||||
<button type="button" class="jsxc_pause_local">%%pause_my_video%%</button> --> \
|
||||
<button type="button" class="jsxc_showchat">%%chat%%</button>\
|
||||
<button type="button" class="jsxc_fullscreen">%%fullscreen%%</button>\
|
||||
<button type="button" class="jsxc_info">%%Info%%</button>\
|
||||
</div>\
|
||||
<div class="jsxc_multi">\
|
||||
<div class="jsxc_snapshotbar">\
|
||||
<p>No pictures yet!</p>\
|
||||
</div>\n\
|
||||
<div class="jsxc_chatarea">\
|
||||
<ul></ul>\
|
||||
</div>\
|
||||
<div class="jsxc_infobar"></div>\
|
||||
</div>\
|
||||
</div>';
|
||||
jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
<div class="jsxc_chatarea">\
|
||||
<ul></ul>\
|
||||
</div>\
|
||||
<div class="jsxc_videoContainer">\
|
||||
<video class="jsxc_localvideo" autoplay></video>\
|
||||
<video class="jsxc_remotevideo" autoplay></video>\
|
||||
<div class="jsxc_status"></div>\
|
||||
<div class="bubblingG">\
|
||||
<span id="bubblingG_1">\
|
||||
</span>\
|
||||
<span id="bubblingG_2">\
|
||||
</span>\
|
||||
<span id="bubblingG_3">\
|
||||
</span>\
|
||||
</div>\
|
||||
<div class="jsxc_noRemoteVideo">\
|
||||
<div>\
|
||||
<div></div>\
|
||||
<p>%%No_video_signal%%</p>\
|
||||
<div></div>\
|
||||
</div>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="jsxc_controlbar">\
|
||||
<button type="button" class="jsxc_hangUp">%%hang_up%%</button>\
|
||||
<input type="range" class="jsxc_volume" min="0.0" max="1.0" step="0.05" value="0.5" />\
|
||||
<div class="jsxc_buttongroup">\
|
||||
<button type="button" class="jsxc_snapshot">%%snapshot%%</button><button type="button" class="jsxc_snapshots">▼</button>\
|
||||
</div>\
|
||||
<!-- <button type="button" class="jsxc_mute_local">%%mute_my_audio%%</button>\
|
||||
<button type="button" class="jsxc_pause_local">%%pause_my_video%%</button> --> \
|
||||
<button type="button" class="jsxc_showchat">%%chat%%</button>\
|
||||
<button type="button" class="jsxc_fullscreen">%%fullscreen%%</button>\
|
||||
<button type="button" class="jsxc_info">%%Info%%</button>\
|
||||
</div>\
|
||||
<div class="jsxc_multi">\
|
||||
<div class="jsxc_snapshotbar">\
|
||||
<p>No pictures yet!</p>\
|
||||
</div>\n\
|
||||
<!--<div class="jsxc_chatarea">\
|
||||
<ul></ul>\
|
||||
</div>-->\
|
||||
<div class="jsxc_infobar"></div>\
|
||||
</div>\
|
||||
</div>';
|
||||
|
||||
(function($) {
|
||||
"use strict";
|
||||
@@ -64,7 +109,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
AUTO_ACCEPT: false,
|
||||
|
||||
/** required disco features */
|
||||
reqVideoFeatures: [ 'urn:xmpp:jingle:apps:rtp:video', 'urn:xmpp:jingle:apps:rtp:audio', 'urn:xmpp:jingle:transports:ice-udp:1' ],
|
||||
reqVideoFeatures: [ 'urn:xmpp:jingle:apps:rtp:video', 'urn:xmpp:jingle:apps:rtp:audio', 'urn:xmpp:jingle:transports:ice-udp:1', 'urn:xmpp:jingle:apps:dtls:0' ],
|
||||
|
||||
/** bare jid to current jid mapping */
|
||||
chatJids: {},
|
||||
@@ -98,6 +143,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
self.conn.jingle.pc_constraints = RTC.pc_constraints;
|
||||
|
||||
$(document).on('message.jsxc', $.proxy(self.onMessage, self));
|
||||
$(document).on('presence.jsxc', $.proxy(self.onPresence, self));
|
||||
|
||||
$(document).on('mediaready.jingle', $.proxy(self.onMediaReady, self));
|
||||
$(document).on('mediafailure.jingle', $.proxy(self.onMediaFailure, self));
|
||||
@@ -114,6 +160,10 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
jsxc.error('[JINGLE]', error);
|
||||
});
|
||||
|
||||
if (self.conn.disco) {
|
||||
self.conn.disco.addFeature('urn:xmpp:jingle:apps:dtls:0');
|
||||
}
|
||||
|
||||
if (self.conn.caps) {
|
||||
$(document).on('caps.strophe', $.proxy(self.onCaps, self));
|
||||
}
|
||||
@@ -160,19 +210,49 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Return list of video capable resources.
|
||||
*
|
||||
* @memberOf jsxc.webrtc
|
||||
* @param jid
|
||||
* @returns {Array}
|
||||
*/
|
||||
getCapableRes: function(jid) {
|
||||
var self = jsxc.webrtc;
|
||||
var bid = jsxc.jidToBid(jid);
|
||||
var res = jsxc.storage.getUserItem('res', bid) || [];
|
||||
|
||||
var available = [];
|
||||
$.each(res, function(r) {
|
||||
if (self.conn.caps.hasFeatureByJid(bid + '/' + r, self.reqVideoFeatures)) {
|
||||
available.push(r);
|
||||
}
|
||||
});
|
||||
|
||||
return available;
|
||||
},
|
||||
|
||||
/**
|
||||
* Add "video" button to roster
|
||||
*
|
||||
* @private
|
||||
* @memberOf jsxc.webrtc
|
||||
* @param event
|
||||
* @param cid cid of roster item
|
||||
* @param data data wich belongs to cid
|
||||
* @param bid bid of roster item
|
||||
* @param data data wich belongs to bid
|
||||
* @param el the roster item
|
||||
*/
|
||||
onAddRosterItem: function(event, cid, data, el) {
|
||||
onAddRosterItem: function(event, bid, data, el) {
|
||||
var self = jsxc.webrtc;
|
||||
var videoIcon = $('<div class="jsxc_video jsxc_disabled" title="' + jsxc.l.Start_video_call + '"></div>');
|
||||
|
||||
if (!self.conn) {
|
||||
$(document).one('connectionReady.jsxc', function() {
|
||||
self.onAddRosterItem(null, bid, data, el);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var videoIcon = $('<div class="jsxc_video jsxc_disabled" title="' + jsxc.l.Start_video_call + '"></div>');
|
||||
|
||||
videoIcon.click(function() {
|
||||
self.startCall(data.jid);
|
||||
@@ -182,7 +262,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
el.find('.jsxc_options.jsxc_left').append(videoIcon);
|
||||
|
||||
el.on('extra.jsxc', function() {
|
||||
self.updateIcon(cid);
|
||||
self.updateIcon(bid);
|
||||
});
|
||||
},
|
||||
|
||||
@@ -197,6 +277,8 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
initWindow: function(event, win) {
|
||||
var self = jsxc.webrtc;
|
||||
|
||||
jsxc.debug('webrtc.initWindow');
|
||||
|
||||
if (!self.conn) {
|
||||
$(document).one('connectionReady.jsxc', function() {
|
||||
self.initWindow(null, win);
|
||||
@@ -204,42 +286,51 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
return;
|
||||
}
|
||||
|
||||
var div = $('<div>').addClass('jsxc_video');
|
||||
var div = $('<div>').addClass('jsxc_video');
|
||||
win.find('.jsxc_transfer:eq(1)').after(div);
|
||||
|
||||
self.updateIcon(jsxc.jidToCid(win.data('jid')));
|
||||
self.updateIcon(jsxc.jidToBid(win.data('jid')));
|
||||
},
|
||||
|
||||
/**
|
||||
* Enable or disable "video" icon and assign full jid.
|
||||
*
|
||||
* @memberOf jsxc.webrtc
|
||||
* @param cid CSS conform jid
|
||||
* @param bid CSS conform jid
|
||||
*/
|
||||
updateIcon: function(cid) {
|
||||
updateIcon: function(bid) {
|
||||
jsxc.debug('Update icon', bid);
|
||||
|
||||
var self = jsxc.webrtc;
|
||||
var win = jsxc.gui.getWindow(cid);
|
||||
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy_' + cid).jid;
|
||||
|
||||
var el = win.find('.jsxc_video').add('#' + cid + ' .jsxc_video');
|
||||
if (bid === jsxc.jidToBid(self.conn.jid)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// only start video call to a full jid
|
||||
if (Strophe.getResourceFromJid(jid) === null) {
|
||||
var win = jsxc.gui.window.get(bid);
|
||||
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy', bid).jid;
|
||||
|
||||
var res = jsxc.storage.getUserItem('buddy_' + cid).res;
|
||||
var el = win.find('.jsxc_video').add(jsxc.gui.roster.getItem(bid).find('.jsxc_video'));
|
||||
|
||||
if (Array.isArray(res) && res.length === 1) {
|
||||
jid += '/' + res[0];
|
||||
}
|
||||
var capableRes = self.getCapableRes(jid);
|
||||
var targetRes = Strophe.getResourceFromJid(jid);
|
||||
|
||||
if (targetRes === null) {
|
||||
$.each(jsxc.storage.getUserItem('buddy', bid).res, function(index, val) {
|
||||
if (capableRes.indexOf(val) > -1) {
|
||||
targetRes = val;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
el.off('click');
|
||||
|
||||
if (self.conn.caps.hasFeatureByJid(jid, self.reqVideoFeatures)) {
|
||||
if (capableRes.indexOf(targetRes) > -1) {
|
||||
el.click(function() {
|
||||
self.startCall(jid);
|
||||
self.startCall(jid + '/' + targetRes);
|
||||
});
|
||||
|
||||
el.removeClass('jsxc_disabled');
|
||||
|
||||
el.attr('title', jsxc.translate('%%Start video call%%'));
|
||||
@@ -260,14 +351,32 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
*/
|
||||
onMessage: function(e, from) {
|
||||
var self = jsxc.webrtc;
|
||||
var bJid = Strophe.getBareJidFromJid(from);
|
||||
var bid = jsxc.jidToBid(from);
|
||||
|
||||
if (self.chatJids[bJid] !== from) {
|
||||
self.updateIcon(jsxc.jidToCid(bJid));
|
||||
self.chatJids[bJid] = from;
|
||||
jsxc.debug('webrtc.onmessage', from);
|
||||
|
||||
if (self.chatJids[bid] !== from) {
|
||||
self.updateIcon(bid);
|
||||
self.chatJids[bid] = from;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Update icon on presence.
|
||||
*
|
||||
* @memberOf jsxc.webrtc
|
||||
* @param ev
|
||||
* @param status
|
||||
* @private
|
||||
*/
|
||||
onPresence: function(ev, jid) {
|
||||
var self = jsxc.webrtc;
|
||||
|
||||
jsxc.debug('webrtc.onpresence', jid);
|
||||
|
||||
self.updateIcon(jsxc.jidToBid(jid));
|
||||
},
|
||||
|
||||
/**
|
||||
* Display status message to user.
|
||||
*
|
||||
@@ -283,7 +392,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
|
||||
if (status.html()) {
|
||||
// attach old messages
|
||||
txt = status.html() + '<br />' + txt;
|
||||
txt = status.html() + '<br />' + txt;
|
||||
}
|
||||
|
||||
status.html(txt);
|
||||
@@ -326,7 +435,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
onCaps: function(event, jid) {
|
||||
var self = jsxc.webrtc;
|
||||
|
||||
self.updateIcon(jsxc.jidToCid(jid));
|
||||
self.updateIcon(jsxc.jidToBid(jid));
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -348,15 +457,16 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
jsxc.gui.showVideoWindow(self.last_caller);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < stream.getAudioTracks().length; i++) {
|
||||
for (i = 0; i < stream.getAudioTracks().length; i++) {
|
||||
self.setStatus((stream.getAudioTracks().length > 0) ? 'Use local audio device.' : 'No local audio device.');
|
||||
|
||||
jsxc.debug('using audio device "' + stream.getAudioTracks()[i].label + '"');
|
||||
}
|
||||
for (i = 0; i < stream.getVideoTracks().length; i++) {
|
||||
for (i = 0; i < stream.getVideoTracks().length; i++) {
|
||||
self.setStatus((stream.getVideoTracks().length > 0) ? 'Use local video device.' : 'No local video device.');
|
||||
|
||||
jsxc.debug('using video device "' + stream.getVideoTracks()[i].label + '"');
|
||||
$('#jsxc_dialog .jsxc_localvideo').show();
|
||||
}
|
||||
|
||||
$(document).one('cleanup.dialog.jsxc', $.proxy(self.hangUp, self));
|
||||
@@ -369,8 +479,11 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
* @private
|
||||
* @memberOf jsxc.webrtc
|
||||
*/
|
||||
onMediaFailure: function() {
|
||||
onMediaFailure: function(ev, err) {
|
||||
this.setStatus('media failure');
|
||||
|
||||
jsxc.gui.window.postMessage(jsxc.jidToBid(jsxc.webrtc.last_caller), 'sys', jsxc.translate('%%Media failure%%: ') + err.name);
|
||||
jsxc.debug('media failure: ' + err.name);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -386,10 +499,12 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
|
||||
var self = this;
|
||||
var sess = this.conn.jingle.sessions[sid];
|
||||
var jid = jsxc.jidToCid(sess.peerjid);
|
||||
var bid = jsxc.jidToBid(sess.peerjid);
|
||||
|
||||
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Incoming call.%%'));
|
||||
|
||||
// display notification
|
||||
jsxc.notification.notify(jsxc.translate('%%Incoming call%%'), jsxc.translate('%%from%% ' + jid));
|
||||
jsxc.notification.notify(jsxc.translate('%%Incoming call%%'), jsxc.translate('%%from%% ' + bid));
|
||||
|
||||
// send signal to partner
|
||||
sess.sendRinging();
|
||||
@@ -417,7 +532,9 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
return;
|
||||
}
|
||||
|
||||
var dialog = jsxc.gui.dialog.open(jsxc.gui.template.get('incomingCall', jsxc.jidToCid(jid)));
|
||||
var dialog = jsxc.gui.dialog.open(jsxc.gui.template.get('incomingCall', bid), {
|
||||
noClose: true
|
||||
});
|
||||
|
||||
dialog.find('.jsxc_accept').click(function() {
|
||||
$(document).trigger('accept.call.jsxc');
|
||||
@@ -447,22 +564,30 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
onCallTerminated: function(event, sid, reason, text) {
|
||||
this.setStatus('call terminated ' + sid + (reason ? (': ' + reason + ' ' + text) : ''));
|
||||
|
||||
var bid = jsxc.jidToBid(jsxc.webrtc.last_caller);
|
||||
|
||||
if (this.localStream) {
|
||||
this.localStream.stop();
|
||||
}
|
||||
|
||||
$('.jsxc_remotevideo')[0].src = "";
|
||||
$('.jsxc_localvideo')[0].src = "";
|
||||
if ($('.jsxc_videoContainer').length) {
|
||||
$('.jsxc_remotevideo')[0].src = "";
|
||||
$('.jsxc_localvideo')[0].src = "";
|
||||
}
|
||||
|
||||
this.conn.jingle.localStream = null;
|
||||
this.localStream = null;
|
||||
this.remoteStream = null;
|
||||
|
||||
$('#jsxc_windowList > ul').prepend($('#jsxc_dialog .jsxc_chatarea > ul > li').detach());
|
||||
var win = $('#jsxc_dialog .jsxc_chatarea > ul > li');
|
||||
$('#jsxc_windowList > ul').prepend(win.detach());
|
||||
win.find('.slimScrollDiv').resizable('enable');
|
||||
|
||||
$(document).off('cleanup.dialog.jsxc');
|
||||
$(document).off('error.jingle');
|
||||
jsxc.gui.dialog.close();
|
||||
|
||||
jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Call terminated%%' + (reason ? (': %%' + reason + '%%') : '') + '.'));
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -504,7 +629,9 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
this.setStatus(isAudioDevice ? 'Use remote audio device.' : 'No remote audio device');
|
||||
|
||||
if ($('.jsxc_remotevideo').length) {
|
||||
RTC.attachMediaStream($('.jsxc_remotevideo'), stream);
|
||||
RTC.attachMediaStream($('#jsxc_dialog .jsxc_remotevideo'), stream);
|
||||
|
||||
$('#jsxc_dialog .jsxc_' + (isVideoDevice ? 'remotevideo' : 'noRemoteVideo')).addClass('jsxc_deviceAvailable');
|
||||
}
|
||||
},
|
||||
|
||||
@@ -538,7 +665,11 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
jsxc.debug('iceCon state for ' + sid, iceCon);
|
||||
jsxc.debug('sig state for ' + sid, sigState);
|
||||
|
||||
if (sigState === 'stable' && iceCon === 'connected') {
|
||||
if (sigState === 'stable' && (iceCon === 'connected' || iceCon === 'completed')) {
|
||||
|
||||
$('#jsxc_dialog .jsxc_deviceAvailable').show();
|
||||
$('#jsxc_dialog .bubblingG').hide();
|
||||
|
||||
var localSDP = sess.peerconnection.localDescription.sdp;
|
||||
var remoteSDP = sess.peerconnection.remoteDescription.sdp;
|
||||
|
||||
@@ -559,14 +690,23 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
}
|
||||
}
|
||||
|
||||
var text = '<p>';
|
||||
text += '<b>' + jsxc.translate('%%Local IP%%: ') + '</b>' + sess.local_ip + '<br />';
|
||||
text += '<b>' + jsxc.translate('%%Remote IP%%: ') + '</b>' + sess.remote_ip + '<br />';
|
||||
text += '<b>' + jsxc.translate('%%Local Fingerprint%%: ') + '</b>' + sess.local_fp + '<br />';
|
||||
text += '<b>' + jsxc.translate('%%Remote Fingerprint%%: ') + '</b>' + sess.remote_fp;
|
||||
text += '</p>';
|
||||
var text = '<p>';
|
||||
text += '<b>' + jsxc.translate('%%Local IP%%: ') + '</b>' + sess.local_ip + '<br />';
|
||||
text += '<b>' + jsxc.translate('%%Remote IP%%: ') + '</b>' + sess.remote_ip + '<br />';
|
||||
text += '<b>' + jsxc.translate('%%Local Fingerprint%%: ') + '</b>' + sess.local_fp + '<br />';
|
||||
text += '<b>' + jsxc.translate('%%Remote Fingerprint%%: ') + '</b>' + sess.remote_fp;
|
||||
text += '</p>';
|
||||
|
||||
$('#jsxc_dialog .jsxc_infobar').html(text);
|
||||
} else if (iceCon === 'failed') {
|
||||
jsxc.gui.window.postMessage(jsxc.jidToBid(sess.peerjid), 'sys', jsxc.translate('%%ICE connection failure%%.'));
|
||||
|
||||
$(document).off('cleanup.dialog.jsxc');
|
||||
|
||||
sess.sendTerminate('failed-transport');
|
||||
sess.terminate();
|
||||
|
||||
$(document).trigger('callterminated.jingle');
|
||||
}
|
||||
},
|
||||
|
||||
@@ -585,8 +725,9 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
*
|
||||
* @memberOf jsxc.webrtc
|
||||
* @param jid full jid
|
||||
* @param um requested user media
|
||||
*/
|
||||
startCall: function(jid) {
|
||||
startCall: function(jid, um) {
|
||||
var self = this;
|
||||
|
||||
if (Strophe.getResourceFromJid(jid) === null) {
|
||||
@@ -600,6 +741,8 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
'finish.mediaready.jsxc': function() {
|
||||
self.setStatus('Initiate call');
|
||||
|
||||
jsxc.gui.window.postMessage(jsxc.jidToBid(jid), 'sys', jsxc.translate('%%Call started.%%'));
|
||||
|
||||
$(document).one('error.jingle', function(e, sid, error) {
|
||||
if (error.source !== 'offer') {
|
||||
return;
|
||||
@@ -618,7 +761,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
}
|
||||
});
|
||||
|
||||
this.reqUserMedia();
|
||||
self.reqUserMedia(um);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -626,10 +769,10 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
*
|
||||
* @memberOf jsxc.webrtc
|
||||
*/
|
||||
hangUp: function() {
|
||||
hangUp: function(reason, text) {
|
||||
$(document).off('cleanup.dialog.jsxc');
|
||||
|
||||
jsxc.webrtc.conn.jingle.terminate(null);
|
||||
jsxc.webrtc.conn.jingle.terminate(null, reason, text);
|
||||
$(document).trigger('callterminated.jingle');
|
||||
},
|
||||
|
||||
@@ -638,24 +781,41 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
*
|
||||
* @memberOf jsxc.webrtc
|
||||
*/
|
||||
reqUserMedia: function() {
|
||||
reqUserMedia: function(um) {
|
||||
if (this.localStream) {
|
||||
$(document).trigger('mediaready.jingle', [ this.localStream ]);
|
||||
return;
|
||||
}
|
||||
|
||||
um = um || [ 'video', 'audio' ];
|
||||
|
||||
jsxc.gui.dialog.open(jsxc.gui.template.get('allowMediaAccess'), {
|
||||
noClose: true
|
||||
});
|
||||
this.setStatus('please allow access to microphone and camera');
|
||||
|
||||
getUserMediaWithConstraints([ 'video', 'audio' ]);
|
||||
if (typeof MediaStreamTrack !== 'undefined' && typeof MediaStreamTrack.getSources !== 'undefined') {
|
||||
MediaStreamTrack.getSources(function(sourceInfo) {
|
||||
var availableDevices = sourceInfo.map(function(el) {
|
||||
|
||||
return el.kind;
|
||||
});
|
||||
|
||||
um = um.filter(function(el) {
|
||||
return availableDevices.indexOf(el) !== -1;
|
||||
});
|
||||
|
||||
getUserMediaWithConstraints(um);
|
||||
});
|
||||
} else {
|
||||
getUserMediaWithConstraints(um);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Make a snapshot from a video stream and display it.
|
||||
*
|
||||
* @memberOf
|
||||
* @memberOf jsxc.webrtc
|
||||
* @param video Video stream
|
||||
*/
|
||||
snapshot: function(video) {
|
||||
@@ -665,17 +825,25 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
|
||||
$('.jsxc_snapshotbar p').remove();
|
||||
|
||||
var canvas = $('<canvas/>').css('display', 'none').appendTo('body').attr({
|
||||
var canvas = $('<canvas/>').css('display', 'none').appendTo('body').attr({
|
||||
width: video.width(),
|
||||
height: video.height()
|
||||
}).get(0);
|
||||
var ctx = canvas.getContext('2d');
|
||||
|
||||
ctx.drawImage(video[0], 0, 0);
|
||||
var img = $('<img/>');
|
||||
var url = canvas.toDataURL('image/jpeg');
|
||||
var img = $('<img/>');
|
||||
var url = null;
|
||||
|
||||
try {
|
||||
url = canvas.toDataURL('image/jpeg');
|
||||
} catch (err) {
|
||||
jsxc.warn('Error', err);
|
||||
return;
|
||||
}
|
||||
|
||||
img[0].src = url;
|
||||
var link = $('<a/>').attr({
|
||||
var link = $('<a/>').attr({
|
||||
target: '_blank',
|
||||
href: url
|
||||
});
|
||||
@@ -731,6 +899,8 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
|
||||
if (self.remoteStream) {
|
||||
RTC.attachMediaStream(rv, self.remoteStream);
|
||||
|
||||
$('#jsxc_dialog .jsxc_' + (self.remoteStream.getVideoTracks().length > 0 ? 'remotevideo' : 'noRemoteVideo')).addClass('jsxc_deviceAvailable');
|
||||
}
|
||||
|
||||
var toggleMulti = function(elem, open) {
|
||||
@@ -747,7 +917,13 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
}
|
||||
};
|
||||
|
||||
var win = jsxc.gui.window.open(jsxc.jidToCid(jid));
|
||||
var win = jsxc.gui.window.open(jsxc.jidToBid(jid));
|
||||
|
||||
win.find('.slimScrollDiv').resizable('disable');
|
||||
win.find('.jsxc_textarea').slimScroll({
|
||||
height: 413
|
||||
});
|
||||
win.find('.jsxc_emoticons').css('top', (413 + 6) + 'px');
|
||||
|
||||
$('#jsxc_dialog .jsxc_chatarea ul').append(win.detach());
|
||||
|
||||
@@ -765,7 +941,21 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
});
|
||||
|
||||
$('#jsxc_dialog .jsxc_showchat').click(function() {
|
||||
toggleMulti($('#jsxc_dialog .jsxc_chatarea'));
|
||||
var chatarea = $('#jsxc_dialog .jsxc_chatarea');
|
||||
|
||||
if (chatarea.is(':hidden')) {
|
||||
chatarea.show();
|
||||
$('#jsxc_dialog .jsxc_webrtc').width('900');
|
||||
jsxc.gui.dialog.resize({
|
||||
width: '920px'
|
||||
});
|
||||
} else {
|
||||
chatarea.hide();
|
||||
$('#jsxc_dialog .jsxc_webrtc').width('650');
|
||||
jsxc.gui.dialog.resize({
|
||||
width: '660px'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#jsxc_dialog .jsxc_info').click(function() {
|
||||
@@ -832,7 +1022,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
Remote_IP: 'Remote IP',
|
||||
Local_Fingerprint: 'Local fingerprint',
|
||||
Remote_Fingerprint: 'Remote fingerprint',
|
||||
Video_call_not_possible: 'Video call not possible',
|
||||
Video_call_not_possible: 'Video call not possible. Your buddy does not support video calls.',
|
||||
Start_video_call: 'Start video call'
|
||||
});
|
||||
|
||||
@@ -853,7 +1043,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
Remote_IP: 'Remote IP',
|
||||
Local_Fingerprint: 'Lokaler Fingerprint',
|
||||
Remote_Fingerprint: 'Remote Fingerprint',
|
||||
Video_call_not_possible: 'Videoanruf nicht verfügbar',
|
||||
Video_call_not_possible: 'Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.',
|
||||
Start_video_call: 'Starte Videoanruf'
|
||||
});
|
||||
|
||||
@@ -878,3 +1068,26 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
|
||||
Start_video_call: 'Iniciar llamada de vídeo'
|
||||
});
|
||||
}(jQuery));
|
||||
</code></pre>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<nav>
|
||||
<h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
|
||||
</nav>
|
||||
|
||||
<br clear="both">
|
||||
|
||||
<footer>
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:12 GMT+0100 (CET)
|
||||
</footer>
|
||||
|
||||
<script> prettyPrint(); </script>
|
||||
<script src="scripts/linenumber.js"> </script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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"><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"><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"><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>
|
||||
@@ -0,0 +1,17 @@
|
||||
(function() {
|
||||
var counter = 0;
|
||||
var numbered;
|
||||
var source = document.getElementsByClassName('prettyprint source');
|
||||
|
||||
if (source && source[0]) {
|
||||
source = source[0].getElementsByTagName('code')[0];
|
||||
|
||||
numbered = source.innerHTML.split('\n');
|
||||
numbered = numbered.map(function(item) {
|
||||
counter++;
|
||||
return '<span id="line' + counter + '" class="line"></span>' + item;
|
||||
});
|
||||
|
||||
source.innerHTML = numbered.join('\n');
|
||||
}
|
||||
})();
|
||||
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -0,0 +1,2 @@
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n"]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com",
|
||||
/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]);
|
||||
@@ -0,0 +1,28 @@
|
||||
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
|
||||
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
|
||||
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
|
||||
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
|
||||
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
|
||||
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
|
||||
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
|
||||
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
|
||||
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
|
||||
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
|
||||
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
|
||||
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
|
||||
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
|
||||
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
|
||||
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
|
||||
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
|
||||
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
|
||||
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
|
||||
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
|
||||
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
|
||||
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
|
||||
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
|
||||
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
|
||||
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
|
||||
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
|
||||
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
|
||||
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
|
||||
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
|
||||
@@ -0,0 +1,290 @@
|
||||
html
|
||||
{
|
||||
overflow: auto;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
body
|
||||
{
|
||||
font: 14px "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans serif;
|
||||
line-height: 130%;
|
||||
color: #000;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
header
|
||||
{
|
||||
display: block;
|
||||
padding: 6px 4px;
|
||||
}
|
||||
|
||||
.class-description {
|
||||
font-style: italic;
|
||||
font-family: Palatino, 'Palatino Linotype', serif;
|
||||
font-size: 130%;
|
||||
line-height: 140%;
|
||||
margin-bottom: 1em;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
#main {
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
section
|
||||
{
|
||||
display: block;
|
||||
|
||||
background-color: #fff;
|
||||
padding: 12px 24px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
margin-right: 240px;
|
||||
}
|
||||
|
||||
.variation {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.optional:after {
|
||||
content: "opt";
|
||||
font-size: 60%;
|
||||
color: #aaa;
|
||||
font-style: italic;
|
||||
font-weight: lighter;
|
||||
}
|
||||
|
||||
nav
|
||||
{
|
||||
display: block;
|
||||
float: left;
|
||||
margin-left: -230px;
|
||||
margin-top: 28px;
|
||||
width: 220px;
|
||||
border-left: 1px solid #ccc;
|
||||
padding-left: 9px;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
|
||||
font-size: 100%;
|
||||
line-height: 17px;
|
||||
padding:0;
|
||||
margin:0;
|
||||
list-style-type:none;
|
||||
}
|
||||
|
||||
nav h2 a, nav h2 a:visited {
|
||||
color: #A35A00;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
nav h3 {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
nav li {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
nav a {
|
||||
color: #5C5954;
|
||||
}
|
||||
|
||||
nav a:visited {
|
||||
color: #5C5954;
|
||||
}
|
||||
|
||||
nav a:active {
|
||||
color: #5C5954;
|
||||
}
|
||||
|
||||
footer {
|
||||
display: block;
|
||||
padding: 6px;
|
||||
margin-top: 12px;
|
||||
font-style: italic;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
h1
|
||||
{
|
||||
font-size: 200%;
|
||||
font-weight: bold;
|
||||
letter-spacing: -0.01em;
|
||||
margin: 6px 0 9px 0;
|
||||
}
|
||||
|
||||
h2
|
||||
{
|
||||
font-size: 170%;
|
||||
font-weight: bold;
|
||||
letter-spacing: -0.01em;
|
||||
margin: 6px 0 3px 0;
|
||||
}
|
||||
|
||||
h3
|
||||
{
|
||||
font-size: 150%;
|
||||
font-weight: bold;
|
||||
letter-spacing: -0.01em;
|
||||
margin-top: 16px;
|
||||
margin: 6px 0 3px 0;
|
||||
}
|
||||
|
||||
h4
|
||||
{
|
||||
font-size: 130%;
|
||||
font-weight: bold;
|
||||
letter-spacing: -0.01em;
|
||||
margin-top: 16px;
|
||||
margin: 18px 0 3px 0;
|
||||
color: #A35A00;
|
||||
}
|
||||
|
||||
h5, .container-overview .subsection-title
|
||||
{
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
letter-spacing: -0.01em;
|
||||
margin: 8px 0 3px -16px;
|
||||
}
|
||||
|
||||
h6
|
||||
{
|
||||
font-size: 100%;
|
||||
letter-spacing: -0.01em;
|
||||
margin: 6px 0 3px 0;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.ancestors { color: #999; }
|
||||
.ancestors a
|
||||
{
|
||||
color: #999 !important;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.important
|
||||
{
|
||||
font-weight: bold;
|
||||
color: #950B02;
|
||||
}
|
||||
|
||||
.yes-def {
|
||||
text-indent: -1000px;
|
||||
}
|
||||
|
||||
.type-signature {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.name, .signature {
|
||||
font-family: Consolas, "Lucida Console", Monaco, monospace;
|
||||
}
|
||||
|
||||
.details { margin-top: 14px; border-left: 2px solid #DDD; }
|
||||
.details dt { width:100px; float:left; padding-left: 10px; padding-top: 6px; }
|
||||
.details dd { margin-left: 50px; }
|
||||
.details ul { margin: 0; }
|
||||
.details ul { list-style-type: none; }
|
||||
.details li { margin-left: 30px; padding-top: 6px; }
|
||||
.details pre.prettyprint { margin: 0 }
|
||||
.details .object-value { padding-top: 0; }
|
||||
|
||||
.description {
|
||||
margin-bottom: 1em;
|
||||
margin-left: -16px;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
.code-caption
|
||||
{
|
||||
font-style: italic;
|
||||
font-family: Palatino, 'Palatino Linotype', serif;
|
||||
font-size: 107%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.prettyprint
|
||||
{
|
||||
border: 1px solid #ddd;
|
||||
width: 80%;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.prettyprint.source {
|
||||
width: inherit;
|
||||
}
|
||||
|
||||
.prettyprint code
|
||||
{
|
||||
font-family: Consolas, 'Lucida Console', Monaco, monospace;
|
||||
font-size: 100%;
|
||||
line-height: 18px;
|
||||
display: block;
|
||||
padding: 4px 12px;
|
||||
margin: 0;
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
border-left: 3px #ddd solid;
|
||||
}
|
||||
|
||||
.prettyprint code span.line
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.params, .props
|
||||
{
|
||||
border-spacing: 0;
|
||||
border: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.params .name, .props .name, .name code {
|
||||
color: #A35A00;
|
||||
font-family: Consolas, 'Lucida Console', Monaco, monospace;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
.params td, .params th, .props td, .props th
|
||||
{
|
||||
border: 1px solid #ddd;
|
||||
margin: 0px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
padding: 4px 6px;
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
.params thead tr, .props thead tr
|
||||
{
|
||||
background-color: #ddd;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.params .params thead tr, .props .props thead tr
|
||||
{
|
||||
background-color: #fff;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.params th, .props th { border-right: 1px solid #aaa; }
|
||||
.params thead .last, .props thead .last { border-right: 1px solid #ddd; }
|
||||
|
||||
.disabled {
|
||||
color: #454545;
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
/* JSDoc prettify.js theme */
|
||||
|
||||
/* plain text */
|
||||
.pln {
|
||||
color: #000000;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* string content */
|
||||
.str {
|
||||
color: #006400;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* a keyword */
|
||||
.kwd {
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* a comment */
|
||||
.com {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* a type name */
|
||||
.typ {
|
||||
color: #000000;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* a literal value */
|
||||
.lit {
|
||||
color: #006400;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* punctuation */
|
||||
.pun {
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* lisp open bracket */
|
||||
.opn {
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* lisp close bracket */
|
||||
.clo {
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* a markup tag name */
|
||||
.tag {
|
||||
color: #006400;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* a markup attribute name */
|
||||
.atn {
|
||||
color: #006400;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* a markup attribute value */
|
||||
.atv {
|
||||
color: #006400;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* a declaration */
|
||||
.dec {
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* a variable name */
|
||||
.var {
|
||||
color: #000000;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* a function name */
|
||||
.fun {
|
||||
color: #000000;
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
/* Specify class=linenums on a pre to get line numbering */
|
||||
ol.linenums {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
/* Tomorrow Theme */
|
||||
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
|
||||
/* Pretty printing styles. Used with prettify.js. */
|
||||
/* SPAN elements with the classes below are added by prettyprint. */
|
||||
/* plain text */
|
||||
.pln {
|
||||
color: #4d4d4c; }
|
||||
|
||||
@media screen {
|
||||
/* string content */
|
||||
.str {
|
||||
color: #718c00; }
|
||||
|
||||
/* a keyword */
|
||||
.kwd {
|
||||
color: #8959a8; }
|
||||
|
||||
/* a comment */
|
||||
.com {
|
||||
color: #8e908c; }
|
||||
|
||||
/* a type name */
|
||||
.typ {
|
||||
color: #4271ae; }
|
||||
|
||||
/* a literal value */
|
||||
.lit {
|
||||
color: #f5871f; }
|
||||
|
||||
/* punctuation */
|
||||
.pun {
|
||||
color: #4d4d4c; }
|
||||
|
||||
/* lisp open bracket */
|
||||
.opn {
|
||||
color: #4d4d4c; }
|
||||
|
||||
/* lisp close bracket */
|
||||
.clo {
|
||||
color: #4d4d4c; }
|
||||
|
||||
/* a markup tag name */
|
||||
.tag {
|
||||
color: #c82829; }
|
||||
|
||||
/* a markup attribute name */
|
||||
.atn {
|
||||
color: #f5871f; }
|
||||
|
||||
/* a markup attribute value */
|
||||
.atv {
|
||||
color: #3e999f; }
|
||||
|
||||
/* a declaration */
|
||||
.dec {
|
||||
color: #f5871f; }
|
||||
|
||||
/* a variable name */
|
||||
.var {
|
||||
color: #c82829; }
|
||||
|
||||
/* a function name */
|
||||
.fun {
|
||||
color: #4271ae; } }
|
||||
/* Use higher contrast and text-weight for printable form. */
|
||||
@media print, projection {
|
||||
.str {
|
||||
color: #060; }
|
||||
|
||||
.kwd {
|
||||
color: #006;
|
||||
font-weight: bold; }
|
||||
|
||||
.com {
|
||||
color: #600;
|
||||
font-style: italic; }
|
||||
|
||||
.typ {
|
||||
color: #404;
|
||||
font-weight: bold; }
|
||||
|
||||
.lit {
|
||||
color: #044; }
|
||||
|
||||
.pun, .opn, .clo {
|
||||
color: #440; }
|
||||
|
||||
.tag {
|
||||
color: #006;
|
||||
font-weight: bold; }
|
||||
|
||||
.atn {
|
||||
color: #404; }
|
||||
|
||||
.atv {
|
||||
color: #060; } }
|
||||
/* Style */
|
||||
/*
|
||||
pre.prettyprint {
|
||||
background: white;
|
||||
font-family: Menlo, Monaco, Consolas, monospace;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
border: 1px solid #ccc;
|
||||
padding: 10px; }
|
||||
*/
|
||||
|
||||
/* Specify class=linenums on a pre to get line numbering */
|
||||
ol.linenums {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0; }
|
||||
|
||||
/* IE indents via margin-left */
|
||||
li.L0,
|
||||
li.L1,
|
||||
li.L2,
|
||||
li.L3,
|
||||
li.L4,
|
||||
li.L5,
|
||||
li.L6,
|
||||
li.L7,
|
||||
li.L8,
|
||||
li.L9 {
|
||||
/* */ }
|
||||
|
||||
/* Alternate shading for lines */
|
||||
li.L1,
|
||||
li.L3,
|
||||
li.L5,
|
||||
li.L7,
|
||||
li.L9 {
|
||||
/* */ }
|
||||
@@ -0,0 +1,50 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>JSXC example application</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
|
||||
<link href="../lib/jquery-ui.min.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../lib/jquery.mCustomScrollbar.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../lib/jquery.colorbox.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../dev/css/jsxc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../dev/css/jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
|
||||
<style type="text/css">
|
||||
body, * {font-size: 13px; font-family: "Helvetica Neue",Helvetica,Arial,FreeSans,sans-serif;}
|
||||
fieldset {float: left;}
|
||||
</style>
|
||||
|
||||
<script src="../dev/lib/jquery.min.js"></script>
|
||||
<script src="../dev/lib/jquery.ui.min.js"></script>
|
||||
<script src="../dev/lib/jquery.colorbox-min.js"></script>
|
||||
<script src="../dev/lib/jquery.slimscroll.js"></script>
|
||||
<script src="../dev/lib/jquery.fullscreen.js"></script>
|
||||
|
||||
<script src="../dev/lib/jsxc.dep.js"></script>
|
||||
<script src="../dev/jsxc.js"></script>
|
||||
|
||||
<script src="js/example.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<form id="form" method="post" action="login.html">
|
||||
<fieldset>
|
||||
<legend>Dual-Login</legend>
|
||||
<label for="username">Username:</label><input type="text" id="username" name="username" /><br />
|
||||
<label for="password">Password:</label><input type="password" id="password" name="password" /><br />
|
||||
<input type="submit" value="Log in chat and page" />
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<form id="form2" method="post">
|
||||
<fieldset>
|
||||
<legend>Chat Login</legend>
|
||||
<label for="username2">Username:</label><input type="text" id="username2" name="username2" /><br />
|
||||
<label for="password2">Password:</label><input type="password" id="password2" name="password2" /><br />
|
||||
<input type="submit" value="Log in chat" /> <button id="logout2" style="display:none;">Log out</button>
|
||||
</fieldset>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -7,35 +7,23 @@
|
||||
<link href="../lib/jquery-ui.min.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../lib/jquery.mCustomScrollbar.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../lib/jquery.colorbox.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../jsxc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../build/css/jsxc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../build/css/jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
|
||||
<style type="text/css">
|
||||
body, * {font-size: 13px; font-family: "Helvetica Neue",Helvetica,Arial,FreeSans,sans-serif;}
|
||||
fieldset {float: left;}
|
||||
</style>
|
||||
|
||||
<script src="../lib/jquery.min.js"></script>
|
||||
<script src="../lib/jquery.ui.min.js"></script>
|
||||
<script src="../lib/jquery.colorbox-min.js"></script>
|
||||
<script src="../lib/jquery.slimscroll.js"></script>
|
||||
<script src="../lib/jquery.fullscreen.js"></script>
|
||||
<script src="../lib/strophe.js"></script>
|
||||
<script src="../lib/strophe.muc.js"></script>
|
||||
<script src="../lib/strophe.disco.js"></script>
|
||||
<script src="../lib/strophe.caps.js"></script>
|
||||
<script src="../lib/strophe.vcard.js"></script>
|
||||
<script src="../lib/strophe.jingle/strophe.jingle.js"></script>
|
||||
<script src="../lib/strophe.jingle/strophe.jingle.session.js"></script>
|
||||
<script src="../lib/strophe.jingle/strophe.jingle.sdp.js"></script>
|
||||
<script src="../lib/strophe.jingle/strophe.jingle.adapter.js"></script>
|
||||
<script src="../lib/otr/build/dep/salsa20.js"></script>
|
||||
<script src="../lib/otr/build/dep/bigint.js"></script>
|
||||
<script src="../lib/otr/build/dep/crypto.js"></script>
|
||||
<script src="../lib/otr/build/dep/eventemitter.js"></script>
|
||||
<script src="../lib/otr/build/otr.js"></script>
|
||||
<script src="../jsxc.lib.js"></script>
|
||||
<script src="../jsxc.lib.webrtc.js"></script>
|
||||
<script src="../build/lib/jquery.min.js"></script>
|
||||
<script src="../build/lib/jquery.ui.min.js"></script>
|
||||
<script src="../build/lib/jquery.colorbox-min.js"></script>
|
||||
<script src="../build/lib/jquery.slimscroll.js"></script>
|
||||
<script src="../build/lib/jquery.fullscreen.js"></script>
|
||||
|
||||
<script src="../build/lib/jsxc.dep.js"></script>
|
||||
<script src="../build/jsxc.lib.js"></script>
|
||||
<script src="../build/jsxc.lib.webrtc.js"></script>
|
||||
|
||||
<script src="js/example.js"></script>
|
||||
|
||||
@@ -44,11 +32,20 @@
|
||||
<body>
|
||||
<form id="form" method="post" action="login.html">
|
||||
<fieldset>
|
||||
<legend>Login</legend>
|
||||
<legend>Dual-Login</legend>
|
||||
<label for="username">Username:</label><input type="text" id="username" name="username" /><br />
|
||||
<label for="password">Password:</label><input type="password" id="password" name="password" /><br />
|
||||
<input type="submit" value="Log in" />
|
||||
<input type="submit" value="Log in chat and page" />
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<form id="form2" method="post">
|
||||
<fieldset>
|
||||
<legend>Chat Login</legend>
|
||||
<label for="username2">Username:</label><input type="text" id="username2" name="username2" /><br />
|
||||
<label for="password2">Password:</label><input type="password" id="password2" name="password2" /><br />
|
||||
<input type="submit" value="Log in chat" /> <button id="logout2" style="display:none;">Log out</button>
|
||||
</fieldset>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
$(function() {
|
||||
var settings = {
|
||||
xmpp: {
|
||||
url: '/http-bind/',
|
||||
domain: 'localhost',
|
||||
resource: 'example',
|
||||
overwrite: true,
|
||||
onlogin: true
|
||||
}
|
||||
};
|
||||
|
||||
jsxc.init({
|
||||
loginForm: {
|
||||
form: '#form',
|
||||
jid: '#username',
|
||||
pass: '#password'
|
||||
},
|
||||
logoutElement: $('#logout'),
|
||||
checkFlash: false,
|
||||
rosterAppend: 'body',
|
||||
root: window.location.pathname.replace(/\/[^/]+$/, "/") + '../dev'
|
||||
turnCredentialsPath: 'ajax/getturncredentials.json',
|
||||
displayRosterMinimized: function() {
|
||||
return true;
|
||||
},
|
||||
otr: {
|
||||
debug: true,
|
||||
SEND_WHITESPACE_TAG: true,
|
||||
WHITESPACE_START_AKE: true
|
||||
},
|
||||
loadSettings: function(username, password) {
|
||||
return settings;
|
||||
},
|
||||
xmpp: {
|
||||
url: settings.xmpp.url
|
||||
}
|
||||
});
|
||||
|
||||
$('#form2').submit(function(ev) {
|
||||
ev.preventDefault();
|
||||
|
||||
$(document).on('connectionReady.jsxc', function() {
|
||||
$('#form2 input').prop('disabled', true);
|
||||
|
||||
$('#logout2').show().click(jsxc.xmpp.logout);
|
||||
});
|
||||
|
||||
jsxc.xmpp.login($('#username2').val() + '@' + settings.xmpp.domain, $('#password2').val());
|
||||
});
|
||||
});
|
||||
@@ -1,4 +1,14 @@
|
||||
$(function() {
|
||||
var settings = {
|
||||
xmpp: {
|
||||
url: '/http-bind/',
|
||||
domain: 'localhost',
|
||||
resource: 'example',
|
||||
overwrite: true,
|
||||
onlogin: true
|
||||
}
|
||||
};
|
||||
|
||||
jsxc.init({
|
||||
loginForm: {
|
||||
form: '#form',
|
||||
@@ -8,7 +18,7 @@ $(function() {
|
||||
logoutElement: $('#logout'),
|
||||
checkFlash: false,
|
||||
rosterAppend: 'body',
|
||||
root: '/jsxc/',
|
||||
root: window.location.pathname.replace(/\/[^/]+$/, '/') + '../build',
|
||||
turnCredentialsPath: 'ajax/getturncredentials.json',
|
||||
displayRosterMinimized: function() {
|
||||
return true;
|
||||
@@ -19,15 +29,22 @@ $(function() {
|
||||
WHITESPACE_START_AKE: true
|
||||
},
|
||||
loadSettings: function(username, password) {
|
||||
return {
|
||||
xmpp: {
|
||||
url: '/http-bind/',
|
||||
domain: 'localhost',
|
||||
resource: 'example',
|
||||
overwrite: true,
|
||||
onlogin: true
|
||||
}
|
||||
};
|
||||
return settings;
|
||||
},
|
||||
xmpp: {
|
||||
url: settings.xmpp.url
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#form2').submit(function(ev) {
|
||||
ev.preventDefault();
|
||||
|
||||
$(document).on('connectionReady.jsxc', function() {
|
||||
$('#form2 input').prop('disabled', true);
|
||||
|
||||
$('#logout2').show().click(jsxc.xmpp.logout);
|
||||
});
|
||||
|
||||
jsxc.xmpp.login($('#username2').val() + '@' + settings.xmpp.domain, $('#password2').val());
|
||||
});
|
||||
});
|
||||
|
||||
@@ -7,35 +7,23 @@
|
||||
<link href="../lib/jquery-ui.min.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../lib/jquery.mCustomScrollbar.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../lib/jquery.colorbox.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../jsxc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../build/css/jsxc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
<link href="../build/css/jsxc.webrtc.css" media="all" rel="stylesheet" type="text/css" />
|
||||
|
||||
<style type="text/css">
|
||||
body, * {font-size: 13px; font-family: "Helvetica Neue",Helvetica,Arial,FreeSans,sans-serif;}
|
||||
fieldset {float: left;}
|
||||
</style>
|
||||
|
||||
<script src="../lib/jquery.min.js"></script>
|
||||
<script src="../lib/jquery.ui.min.js"></script>
|
||||
<script src="../lib/jquery.colorbox-min.js"></script>
|
||||
<script src="../lib/jquery.slimscroll.js"></script>
|
||||
<script src="../lib/jquery.fullscreen.js"></script>
|
||||
<script src="../lib/strophe.js"></script>
|
||||
<script src="../lib/strophe.muc.js"></script>
|
||||
<script src="../lib/strophe.disco.js"></script>
|
||||
<script src="../lib/strophe.caps.js"></script>
|
||||
<script src="../lib/strophe.vcard.js"></script>
|
||||
<script src="../lib/strophe.jingle/strophe.jingle.js"></script>
|
||||
<script src="../lib/strophe.jingle/strophe.jingle.session.js"></script>
|
||||
<script src="../lib/strophe.jingle/strophe.jingle.sdp.js"></script>
|
||||
<script src="../lib/strophe.jingle/strophe.jingle.adapter.js"></script>
|
||||
<script src="../lib/otr/build/dep/salsa20.js"></script>
|
||||
<script src="../lib/otr/build/dep/bigint.js"></script>
|
||||
<script src="../lib/otr/build/dep/crypto.js"></script>
|
||||
<script src="../lib/otr/build/dep/eventemitter.js"></script>
|
||||
<script src="../lib/otr/build/otr.js"></script>
|
||||
<script src="../jsxc.lib.js"></script>
|
||||
<script src="../jsxc.lib.webrtc.js"></script>
|
||||
<script src="../build/lib/jquery.min.js"></script>
|
||||
<script src="../build/lib/jquery.ui.min.js"></script>
|
||||
<script src="../build/lib/jquery.colorbox-min.js"></script>
|
||||
<script src="../build/lib/jquery.slimscroll.js"></script>
|
||||
<script src="../build/lib/jquery.fullscreen.js"></script>
|
||||
|
||||
<script src="../build/lib/jsxc.dep.js"></script>
|
||||
<script src="../build/jsxc.lib.js"></script>
|
||||
<script src="../build/jsxc.lib.webrtc.js"></script>
|
||||
|
||||
<script src="js/example.js"></script>
|
||||
|
||||
@@ -46,4 +34,4 @@
|
||||
|
||||
<a href="index.html" id="logout">Log out</a>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
|
Depois Largura: | Altura: | Tamanho: 9.3 KiB |
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="Layer_1"
|
||||
xml:space="preserve"
|
||||
height="147.22015"
|
||||
viewBox="0 0 192.89149 147.21771"
|
||||
width="192.89587"
|
||||
version="1.1"
|
||||
y="0px"
|
||||
x="0px"
|
||||
enable-background="new 0 0 176.486 181.437"
|
||||
inkscape:version="0.91pre2 r"
|
||||
sodipodi:docname="XMPP_logo.svg"><metadata
|
||||
id="metadata41"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs39" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="640"
|
||||
inkscape:window-height="480"
|
||||
id="namedview37"
|
||||
showgrid="false"
|
||||
fit-margin-top="10"
|
||||
fit-margin-left="10"
|
||||
fit-margin-right="10"
|
||||
fit-margin-bottom="10"
|
||||
inkscape:zoom="1.3007054"
|
||||
inkscape:cx="71.332001"
|
||||
inkscape:cy="72.501142"
|
||||
inkscape:window-x="75"
|
||||
inkscape:window-y="34"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="Layer_1" /><linearGradient
|
||||
id="SVGID_1_"
|
||||
y2="0.00048828"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-1807.2"
|
||||
gradientTransform="translate(1925.9953,9.9988343)"
|
||||
y1="125.86"
|
||||
x1="-1807.2"><stop
|
||||
stop-color="#1b3967"
|
||||
offset=".011"
|
||||
id="stop4" /><stop
|
||||
stop-color="#13b5ea"
|
||||
offset=".467"
|
||||
id="stop6" /><stop
|
||||
stop-color="#002b5c"
|
||||
offset=".9945"
|
||||
id="stop8" /></linearGradient><path
|
||||
d="m 146.28531,24.187835 c 0.077,1.313 -1.786,0.968 -1.786,2.293 0,38.551 -44.720002,96.831035 -89.847002,108.190035 l 0,1.182 C 114.60931,130.34287 181.38231,69.052835 182.89231,10.002834 l -36.6,14.189001 z"
|
||||
id="path10"
|
||||
style="fill:url(#SVGID_1_)"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 130.22531,27.958835 c 0.077,1.313 0.121,2.633 0.121,3.958 0,38.551 -30.700002,90.497035 -75.827002,101.860035 l 0,1.637 c 59.065002,-3.823 105.810002,-63.023035 105.810002,-109.200035 0,-2.375 -0.125,-4.729 -0.371,-7.056 l -29.73,8.796 z"
|
||||
id="path12"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e96d1f" /><linearGradient
|
||||
id="SVGID_2_"
|
||||
y2="1.279e-13"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-1073.2"
|
||||
gradientTransform="matrix(-1,0,0,1,-998.20465,9.9988343)"
|
||||
y1="126.85"
|
||||
x1="-1073.2"><stop
|
||||
stop-color="#1b3967"
|
||||
offset=".011"
|
||||
id="stop15" /><stop
|
||||
stop-color="#13b5ea"
|
||||
offset=".467"
|
||||
id="stop17" /><stop
|
||||
stop-color="#002b5c"
|
||||
offset=".9945"
|
||||
id="stop19" /></linearGradient><path
|
||||
d="m 46.594308,24.187835 c -0.077,1.313 1.787,0.968 1.787,2.293 0,38.551 46.558,97.366035 91.688002,108.730035 l 0,1.639 C 80.116308,131.32987 11.509308,69.049835 9.9993079,9.9998343 L 46.598308,24.188835 Z"
|
||||
id="path21"
|
||||
style="fill:url(#SVGID_2_)"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
d="m 64.726308,28.930835 c -0.076,1.313 -0.12,2.63 -0.12,3.957 0,38.551 30.699,90.497035 75.827002,101.860035 l 0,1.639 C 81.389308,133.59687 34.623308,73.362835 34.623308,27.186835 c 0,-2.375 0.128,-4.729 0.371,-7.056 l 29.73,8.798 z"
|
||||
id="path23"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a0ce67" /><path
|
||||
d="m 34.708308,19.581835 7.617,2.722 c -0.041,0.962 -0.066,2.254 -0.066,3.225 0,41.219 37.271,98.204035 87.272002,107.120035 3.245,1.088 7.538,2.077 10.932,2.931 l 0,1.638 C 75.209308,131.65787 29.363308,65.351835 34.703308,19.577835 Z"
|
||||
id="path25"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#439639" /><path
|
||||
d="m 160.33531,18.758835 -7.833,2.625 c 0.041,0.963 0.191,2.203 0.191,3.173 0,41.219 -37.272,98.205035 -87.274002,107.120035 -3.243,1.089 -7.538,2.077 -10.93,2.932 l 0,1.639 C 122.83331,127.58787 165.66931,64.528835 160.32931,18.757835 Z"
|
||||
id="path27"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#d9541e" /></svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 4.5 KiB |
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 1000 1000"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style="width: 512px; height: 512px;"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91+devel r"
|
||||
sodipodi:docname="group_grey.svg">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="980"
|
||||
inkscape:window-height="888"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.6675088"
|
||||
inkscape:cx="512.17823"
|
||||
inkscape:cy="480.21903"
|
||||
inkscape:window-x="889"
|
||||
inkscape:window-y="85"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
d="m 0.94630456,763.0963 c 0,22.21203 9.08673644,33.31804 27.26020844,33.31804 l 112.069747,0 0,-142.35887 c 0,-18.17347 4.54363,-34.83222 13.63088,-49.97627 9.08724,-15.14405 21.70797,-26.75512 37.86216,-34.83326 l 115.09866,-54.52042 c 10.09637,-6.05782 18.17347,-13.12528 24.23129,-21.20238 -12.11564,-18.17347 -22.21202,-39.37586 -30.28912,-63.60715 -8.0771,-24.2313 -12.11564,-49.47223 -12.11564,-75.7228 0,-16.1542 2.01927,-32.3084 6.05782,-48.46259 4.03855,-16.1542 9.08674,-31.29876 15.14456,-45.43368 -20.19275,-14.13493 -41.39513,-21.20239 -63.60715,-21.20239 -38.36622,2.01928 -68.65534,17.66839 -90.86736,46.94736 -22.21201,29.27897 -33.31803,62.09244 -33.31803,98.44042 2.01928,62.59751 24.2313,107.02155 66.63606,133.27212 L 16.092416,596.50615 C 5.9960421,602.56397 0.94785546,612.66034 0.94785546,626.79527 l 0,136.30103 z M 191.76775,796.41434 c -2.01927,42.40476 10.09637,64.61678 36.34695,66.63606 l 542.17524,0 c 12.11565,-4.03855 20.69783,-10.09637 25.74653,-18.17347 5.04869,-8.0771 7.57305,-14.63948 7.57305,-19.68716 l 0,-171.13275 c 0,-18.17347 -7.06746,-30.28912 -21.20238,-36.34694 L 637.01936,545.01619 573.41221,514.72707 c 38.36622,-22.21202 63.60715,-60.57824 75.7228,-115.09865 8.0771,-30.28912 8.0771,-61.58788 0,-93.89627 -10.09637,-36.34695 -28.7744,-67.14115 -56.0341,-92.38259 -27.25969,-25.24145 -59.06352,-38.87182 -95.4115,-40.89109 -36.34694,2.01927 -67.6457,15.64964 -93.89627,40.89109 -26.25057,25.24144 -44.42404,55.02601 -54.52042,89.35368 -12.11564,46.44331 -8.07709,93.89627 12.11565,142.35886 16.1542,30.28912 37.35658,54.52041 63.60715,72.69389 l -57.54932,27.2602 -151.4456,69.66498 c -16.1542,8.0771 -24.2313,21.20238 -24.2313,39.37585 l 0,142.35887 z m 475.53918,-302.8912 c 8.0771,8.0771 18.17347,16.1542 30.28912,24.23129 12.11565,8.0771 23.22166,14.13493 33.31803,18.17348 10.09638,4.03855 23.22166,9.59181 39.37586,16.65979 16.1542,7.06797 28.26984,12.62124 36.34694,16.65979 16.1542,8.0771 28.77493,19.68819 37.86218,34.83326 9.08724,15.14507 13.63088,31.80384 13.63088,49.97627 l 0,142.35887 115.09865,0 c 18.17347,-2.01928 27.26021,-13.12529 27.26021,-33.31803 l 0,-136.30104 c 0,-14.13493 -5.04819,-24.2313 -15.14456,-30.28912 L 815.72517,514.72707 c 42.40477,-30.28912 63.60715,-73.70352 63.60715,-130.24321 0,-38.36622 -12.11565,-72.18881 -36.34694,-101.46778 -24.2313,-29.27897 -53.51078,-43.91896 -87.83845,-43.92 -22.21202,0 -44.42404,7.06747 -66.63606,21.20239 12.11564,30.28912 18.17347,61.58787 18.17347,93.89627 0,50.48187 -13.12529,96.92518 -39.37586,139.32995 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscsscccsssccscccscccccssscccccscscccccscccssssssccssccssccscc"
|
||||
style="fill:#999999;stroke-width:1.55090213;fill-opacity:1" />
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 4.2 KiB |
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 1000 1000"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style="width: 512px; height: 512px;"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91+devel r"
|
||||
sodipodi:docname="group_white.svg">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1855"
|
||||
inkscape:window-height="1056"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.6675088"
|
||||
inkscape:cx="538.39511"
|
||||
inkscape:cy="480.21903"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
d="m 0.94630456,763.0963 c 0,22.21203 9.08673644,33.31804 27.26020844,33.31804 l 112.069747,0 0,-142.35887 c 0,-18.17347 4.54363,-34.83222 13.63088,-49.97627 9.08724,-15.14405 21.70797,-26.75512 37.86216,-34.83326 l 115.09866,-54.52042 c 10.09637,-6.05782 18.17347,-13.12528 24.23129,-21.20238 -12.11564,-18.17347 -22.21202,-39.37586 -30.28912,-63.60715 -8.0771,-24.2313 -12.11564,-49.47223 -12.11564,-75.7228 0,-16.1542 2.01927,-32.3084 6.05782,-48.46259 4.03855,-16.1542 9.08674,-31.29876 15.14456,-45.43368 -20.19275,-14.13493 -41.39513,-21.20239 -63.60715,-21.20239 -38.36622,2.01928 -68.65534,17.66839 -90.86736,46.94736 -22.21201,29.27897 -33.31803,62.09244 -33.31803,98.44042 2.01928,62.59751 24.2313,107.02155 66.63606,133.27212 L 16.092416,596.50615 C 5.9960421,602.56397 0.94785546,612.66034 0.94785546,626.79527 l 0,136.30103 z M 191.76775,796.41434 c -2.01927,42.40476 10.09637,64.61678 36.34695,66.63606 l 542.17524,0 c 12.11565,-4.03855 20.69783,-10.09637 25.74653,-18.17347 5.04869,-8.0771 7.57305,-14.63948 7.57305,-19.68716 l 0,-171.13275 c 0,-18.17347 -7.06746,-30.28912 -21.20238,-36.34694 L 637.01936,545.01619 573.41221,514.72707 c 38.36622,-22.21202 63.60715,-60.57824 75.7228,-115.09865 8.0771,-30.28912 8.0771,-61.58788 0,-93.89627 -10.09637,-36.34695 -28.7744,-67.14115 -56.0341,-92.38259 -27.25969,-25.24145 -59.06352,-38.87182 -95.4115,-40.89109 -36.34694,2.01927 -67.6457,15.64964 -93.89627,40.89109 -26.25057,25.24144 -44.42404,55.02601 -54.52042,89.35368 -12.11564,46.44331 -8.07709,93.89627 12.11565,142.35886 16.1542,30.28912 37.35658,54.52041 63.60715,72.69389 l -57.54932,27.2602 -151.4456,69.66498 c -16.1542,8.0771 -24.2313,21.20238 -24.2313,39.37585 l 0,142.35887 z m 475.53918,-302.8912 c 8.0771,8.0771 18.17347,16.1542 30.28912,24.23129 12.11565,8.0771 23.22166,14.13493 33.31803,18.17348 10.09638,4.03855 23.22166,9.59181 39.37586,16.65979 16.1542,7.06797 28.26984,12.62124 36.34694,16.65979 16.1542,8.0771 28.77493,19.68819 37.86218,34.83326 9.08724,15.14507 13.63088,31.80384 13.63088,49.97627 l 0,142.35887 115.09865,0 c 18.17347,-2.01928 27.26021,-13.12529 27.26021,-33.31803 l 0,-136.30104 c 0,-14.13493 -5.04819,-24.2313 -15.14456,-30.28912 L 815.72517,514.72707 c 42.40477,-30.28912 63.60715,-73.70352 63.60715,-130.24321 0,-38.36622 -12.11565,-72.18881 -36.34694,-101.46778 -24.2313,-29.27897 -53.51078,-43.91896 -87.83845,-43.92 -22.21202,0 -44.42404,7.06747 -66.63606,21.20239 12.11564,30.28912 18.17347,61.58787 18.17347,93.89627 0,50.48187 -13.12529,96.92518 -39.37586,139.32995 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscsscccsssccscccscccccssscccccscscccccscccssssssccssccssccscc"
|
||||
style="fill:#ffffff;stroke-width:1.55090213" />
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 4.2 KiB |
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="15"
|
||||
height="15"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="resize_gray.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3803">
|
||||
<rect
|
||||
style="stroke:none"
|
||||
id="rect3805"
|
||||
width="16.09375"
|
||||
height="14.71875"
|
||||
x="0.84375"
|
||||
y="1038.1434" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="6.9909088"
|
||||
inkscape:cy="6.5564812"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1865"
|
||||
inkscape:window-height="1056"
|
||||
inkscape:window-x="55"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1037.3622)">
|
||||
<path
|
||||
style="fill:none;stroke:#bfbfbf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 10.46875,1032.1747 -14.5,14.2813 z m 3.5,1.2501 -17.3125,17.3124 z"
|
||||
id="path2985"
|
||||
inkscape:connector-curvature="0"
|
||||
clip-path="url(#clipPath3803)"
|
||||
transform="translate(0.8125,0.6875)"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 2.2 KiB |
@@ -1,978 +0,0 @@
|
||||
.jsxc_online,.jsxc_chat {
|
||||
border-left: 4px solid #00BFFF !important;
|
||||
}
|
||||
|
||||
.jsxc_away,.jsxc_xa {
|
||||
border-left: 4px solid orange !important;
|
||||
}
|
||||
|
||||
.jsxc_dnd {
|
||||
border-left: 4px solid red !important;
|
||||
}
|
||||
|
||||
.jsxc_offline {
|
||||
border-left: 4px solid #A4A4A4 !important;
|
||||
}
|
||||
|
||||
.jsxc_hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_invalid {
|
||||
border: 2px solid red !important;
|
||||
}
|
||||
|
||||
p.jsxc_right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
p.jsxc_center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*########## Dialog ##########
|
||||
*############################*/
|
||||
#jsxc_dialog {
|
||||
padding: 10px;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
#jsxc_dialog p {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
#jsxc_dialog h3 {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#jsxc_dialog p input {
|
||||
margin-bottom: 5px;
|
||||
width: 60%;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#jsxc_dialog p input[type="submit"] {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#jsxc_dialog p label {
|
||||
display: block;
|
||||
width: 30%;
|
||||
float: left;
|
||||
padding: 6px 0px;
|
||||
}
|
||||
|
||||
#jsxc_dialog .jsxc_right {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#jsxc_dialog p.jsxc_maxWidth {
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
#jsxc_dialog fieldset {
|
||||
border: 2px solid #ccc;
|
||||
}
|
||||
|
||||
#jsxc_dialog legend {
|
||||
padding: 0px 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#jsxc_dialog input {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#jsxc_dialog input:invalid {
|
||||
border:1px solid red;
|
||||
}
|
||||
|
||||
#jsxc_dialog .jsxc_fieldset {
|
||||
width: 280px;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
#jsxc_dialog .jsxc_fieldset label {
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
#jsxc_dialog .jsxc_fieldset input[type="Number"] {
|
||||
display: inline-block;
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
#jsxc_dialog input[readonly] {
|
||||
background-color: #efefef;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*########## Overall #########
|
||||
*############################*/
|
||||
li .jsxc_name {
|
||||
overflow: hidden;
|
||||
height: 30px;
|
||||
cursor: pointer;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
li .jsxc_name:hover {
|
||||
color: #FAFAFA;
|
||||
}
|
||||
|
||||
.jsxc_avatar,ul#jsxc_buddylist li:hover .jsxc_avatar {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
margin-top: 2px;
|
||||
margin-right: 4px;
|
||||
background-color: #a3a3a3;
|
||||
border-radius: 2px;
|
||||
float: left;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 30px;
|
||||
color: #b1b1b1;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
font-family: Arial;
|
||||
}
|
||||
|
||||
.jsxc_avatar img {
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*########## Roster ##########
|
||||
*############################*/
|
||||
div#jsxc_roster {
|
||||
position: fixed;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
width: 200px;
|
||||
overflow: visible;
|
||||
border-left: 4px solid #A4A4A4;
|
||||
z-index: 80;
|
||||
margin-left: 10px;
|
||||
box-shadow: 0px 0px 7px #000000;
|
||||
background-color: #383C43;
|
||||
}
|
||||
|
||||
div#jsxc_roster .slimScrollDiv {
|
||||
left: -4px;
|
||||
margin-bottom: 30px;
|
||||
z-index: 40;
|
||||
}
|
||||
|
||||
div#jsxc_roster .jsxc_wait {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
bottom: 0px;
|
||||
width: 160px;
|
||||
padding: 20px;
|
||||
background-color: #fff;
|
||||
z-index: 60;
|
||||
}
|
||||
|
||||
div#jsxc_roster .jsxc_wait img {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
div#jsxc_roster .jsxc_wait h3 {
|
||||
margin-bottom: 5px;
|
||||
font-size: 1.13em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/** Input field for alias renaming */
|
||||
#jsxc_roster input {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 31px;
|
||||
width: 157px;
|
||||
height: 18px;
|
||||
margin-top: -11px;
|
||||
padding: 2px;
|
||||
border: 0px;
|
||||
background-image: none;
|
||||
background-color: #fff;
|
||||
border-radius: 3px;
|
||||
-moz-box-shadow: inset 0 0 5px #888;
|
||||
-webkit-box-shadow: inset 0 0 5px #888;
|
||||
box-shadow: inner 0 0 5px #888;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#jsxc_roster .jsxc_expand input {
|
||||
left: 51px;
|
||||
width: 137px;
|
||||
}
|
||||
|
||||
div#jsxc_roster p {
|
||||
color: #939393;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
div#jsxc_roster p a {
|
||||
color: #b1b1b1;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom {
|
||||
position: absolute;
|
||||
left: -4px;
|
||||
bottom: 0px;
|
||||
height: 30px;
|
||||
width: 200px;
|
||||
border-left: 4px solid #A4A4A4;
|
||||
border-top: 1px solid #939393;
|
||||
padding-left: 0px;
|
||||
background-color: #282323;
|
||||
color: #939393;
|
||||
cursor: pointer;
|
||||
line-height: 30px;
|
||||
z-index: 50;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom>div:hover {
|
||||
color: #FAFAFA;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom>div>span {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom ul {
|
||||
width: 190px;
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
left: 0px;
|
||||
display: none;
|
||||
border-top: 1px solid #939393;
|
||||
padding-left: 10px;
|
||||
background-color: #282323;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom li {
|
||||
height: 30px;
|
||||
background-color: #282323;
|
||||
color: #939393;
|
||||
cursor: pointer;
|
||||
width: 180px;
|
||||
padding-left: 10px;
|
||||
line-height: 30px;
|
||||
text-align: left;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom li:hover:not(.jsxc_disabled ) {
|
||||
color: #fff;
|
||||
background-color: #3F8FBA;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom li.jsxc_disabled {
|
||||
color: #595959;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
div#jsxc_roster>.jsxc_bottom ul li:last-child {
|
||||
border-bottom: 1px solid #939393;
|
||||
}
|
||||
|
||||
#jsxc_menu,#jsxc_avatar,#jsxc_notice {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
/** own avatar */
|
||||
#jsxc_avatar {
|
||||
float: left;
|
||||
margin: 0px 2px;
|
||||
width: 25px;
|
||||
}
|
||||
|
||||
#jsxc_menu {
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
text-align: center;
|
||||
width: 25px;
|
||||
}
|
||||
|
||||
#jsxc_menu>span {
|
||||
opacity: 0.5;
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: 30px;
|
||||
background-image: url('img/gear_white.svg');
|
||||
background-size: 18px 18px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
}
|
||||
|
||||
#jsxc_menu:hover>span {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#jsxc_notice {
|
||||
float: right;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
#jsxc_notice>span:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#jsxc_notice span {
|
||||
background-color: #fbc14c;
|
||||
border-radius: 11px;
|
||||
color: black;
|
||||
font-size: 80%;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
#jsxc_presence {
|
||||
cursor: pointer;
|
||||
padding-left: 2px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/** List of all buddies inside the roster */
|
||||
ul#jsxc_buddylist {
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
width: 204px;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
height: 30px;
|
||||
border-bottom: 1px solid #939393;
|
||||
cursor: pointer;
|
||||
width: 200px;
|
||||
position: relative;
|
||||
color: #939393;
|
||||
font-family: Arial;
|
||||
line-height: 30px;
|
||||
padding-left: 3px;
|
||||
z-index: 85;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_name {
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li.jsxc_expand {
|
||||
height: 54px;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar, ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar img {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_control {
|
||||
position:absolute;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_control:after {
|
||||
content: '▾';
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 15px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
text-align: center;
|
||||
margin-left: -8px;
|
||||
margin-top: -8px;
|
||||
border-radius: 8px;
|
||||
color: #c1c1c1;
|
||||
background-color: rgba(150, 150, 150, 0.5);
|
||||
opacity: 0.6;
|
||||
-webkit-transition: -webkit-transform 0.5s;
|
||||
transition: transform 0.5s;
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_control:hover:after {
|
||||
color: #fff;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
#jsxc_buddylist li.jsxc_expand .jsxc_control:after {
|
||||
/* content: '▴'; */
|
||||
-ms-transform:rotate(180deg); /* IE 9 */
|
||||
-webkit-transform:rotate(180deg);
|
||||
transform:rotate(180deg);
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_options {
|
||||
height: 20px;
|
||||
float: left;
|
||||
border-radius:2px;
|
||||
background-color: rgba(150, 150, 150, 0.5);
|
||||
}
|
||||
#jsxc_buddylist .jsxc_options > div {
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
float: left;
|
||||
margin-right:0px 1px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
opacity: 0.6;
|
||||
cursor: pointer;
|
||||
}
|
||||
#jsxc_buddylist .jsxc_options > div:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
#jsxc_buddylist .jsxc_chaticon {
|
||||
background-image: url('img/speech_balloon_white.svg');
|
||||
background-size: 15px 15px;
|
||||
}
|
||||
#jsxc_buddylist .jsxc_videoicon {
|
||||
background-image: url('img/camera_icon_white.svg');
|
||||
background-size: 13px 13px;
|
||||
}
|
||||
#jsxc_buddylist .jsxc_vcardicon {
|
||||
font-size: 15px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
font-family: serif;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li:hover {
|
||||
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_oneway {
|
||||
opacity: 0.7;
|
||||
}
|
||||
.jsxc_oneway .jsxc_avatar {
|
||||
-webkit-filter: grayscale(100%);
|
||||
-moz-filter: grayscale(100%);
|
||||
-ms-filter: grayscale(100%);
|
||||
-o-filter: grayscale(100%);
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
ul#jsxc_buddylist .jsxc_right {
|
||||
float:left;
|
||||
}
|
||||
ul#jsxc_buddylist .jsxc_right {
|
||||
float: right;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_right div {
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
line-height: 20px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist li[data-type!="chat"] .jsxc_right {
|
||||
display: none;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_right div:hover {
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_rename {
|
||||
|
||||
}
|
||||
|
||||
ul#jsxc_buddylist .jsxc_delete {
|
||||
|
||||
}
|
||||
|
||||
#jsxc_roster .jsxc_avatar {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
#jsxc_roster .jsxc_avatar img {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div#jsxc_toggleRoster {
|
||||
width: 14px;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: -14px !important;
|
||||
top: 0px;
|
||||
z-index: 110;
|
||||
background-color: transparent;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#jsxc_toggleRoster:hover {
|
||||
background-color: #a4a4a4;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*###### Window List #########
|
||||
*############################*/
|
||||
div#jsxc_windowList {
|
||||
position: fixed;
|
||||
bottom: 0px;
|
||||
right: 0px;
|
||||
width: 100%;
|
||||
z-index: 50;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul {
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
padding-right: 210px;
|
||||
height: 30px;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul>li {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
display: block;
|
||||
float: right;
|
||||
width: 250px;
|
||||
background-color: #282323;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
margin-right: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul>li.jsxc_min {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*######### Window ###########
|
||||
*############################*/
|
||||
div.jsxc_bar {
|
||||
background-color: #282323;
|
||||
cursor: pointer;
|
||||
height: 30px;
|
||||
line-height: 26px;
|
||||
padding: 2px;
|
||||
color: #939393;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
div.jsxc_cycle {
|
||||
position: absolute;
|
||||
bottom: 9px;
|
||||
right: 5px;
|
||||
height: 12px;
|
||||
width: 12px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_name {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_cycle {
|
||||
background-color: orange;
|
||||
}
|
||||
|
||||
/** Contains text area */
|
||||
div.jsxc_window {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
height: auto;
|
||||
background-color: #A4A4A4;
|
||||
z-index: 80;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
position: absolute;
|
||||
top: 240px;
|
||||
right: 0px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons:after {
|
||||
content: ' ';
|
||||
background-image: url('img/smiley.png');
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
opacity: 0.3;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons:hover:after {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons ul {
|
||||
display: none;
|
||||
position: absolute;
|
||||
bottom: 33px;
|
||||
right: 3px;
|
||||
width: 210px;
|
||||
background-color: rgba(40, 35, 35, 0.8);
|
||||
padding: 3px;
|
||||
border-radius: 3px;
|
||||
z-index: 200;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons ul:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-left: 5px solid transparent;
|
||||
border-right: 5px solid transparent;
|
||||
border-top: 6px solid rgba(40, 35, 35, 0.8);
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
right: 6px;
|
||||
bottom: -6px;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons li {
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons img {
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_emoticons img:hover {
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
/** groups elements, which will be hidden, if the window is minimized. */
|
||||
.jsxc_window .jsxc_fade {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.jsxc_window .jsxc_gradient {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
height: 15px;
|
||||
z-index: 100;
|
||||
background: -moz-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
|
||||
rgba(40, 35, 35, 0) 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(164,
|
||||
164, 164, 1)), color-stop(100%, rgba(40, 35, 35, 0)));
|
||||
/* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
|
||||
rgba(40, 35, 35, 0) 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
|
||||
rgba(40, 35, 35, 0) 100%); /* Opera 11.10+ */
|
||||
background: -ms-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
|
||||
rgba(40, 35, 35, 0) 100%); /* IE10+ */
|
||||
background: linear-gradient(to bottom, #a4a4a4 0%, rgba(40, 35, 35, 0)
|
||||
100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4a4a4',
|
||||
endColorstr='#00282323', GradientType=0); /* IE6-9 */
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_avatar {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_textarea {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
div.jsxc_window .slimScrollDiv {
|
||||
margin: 0px 0px 6px 0px;
|
||||
}
|
||||
|
||||
div.jsxc_chatmessage {
|
||||
margin: 3px;
|
||||
padding: 4px;
|
||||
padding-right: 10px;
|
||||
max-width: 76%;
|
||||
word-wrap: break-word;
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
outline: none;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
div.jsxc_chatmessage a {
|
||||
color: blue;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div.jsxc_chatmessage img {
|
||||
width: 19px;
|
||||
height: 19px;
|
||||
}
|
||||
|
||||
/** incoming message */
|
||||
div.jsxc_in {
|
||||
float: left;
|
||||
position: relative;
|
||||
margin-left: 10px;
|
||||
background: #f1f7fd;
|
||||
border: solid 1px #a6b8c9;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
div.jsxc_in:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-style: solid;
|
||||
border-width: 5px 6px 5px 0;
|
||||
border-color: transparent #f1f7fd;
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
left: -6px;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
div.jsxc_out.jsxc_received:before {
|
||||
content: '✓';
|
||||
position: absolute;
|
||||
bottom: 2px;
|
||||
right: 2px;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
color: green;
|
||||
}
|
||||
|
||||
/** outgoing message */
|
||||
div.jsxc_out {
|
||||
float: right;
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
background: #e6ffd1;
|
||||
border: solid 1px #b4d89f;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
div.jsxc_out:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-style: solid;
|
||||
border-width: 5px 0 5px 6px;
|
||||
border-color: transparent #e6ffd1;
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
right: -6px;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
/** system message */
|
||||
div.jsxc_sys {
|
||||
width: auto;
|
||||
max-width: none;
|
||||
padding-right: 4px;
|
||||
box-sizing: border-box;
|
||||
margin-right: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.jsxc_window input.jsxc_textinput {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
margin: 0px;
|
||||
padding: 3px;
|
||||
padding-right: 40px;
|
||||
outline: none;
|
||||
border-radius: 0px;
|
||||
box-sizing: border-box;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.jsxc_window ::-webkit-input-placeholder {
|
||||
color: #000;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.jsxc_window ::-moz-placeholder {
|
||||
color: #000;
|
||||
opacity: 0.3;
|
||||
} /* firefox 19+ */
|
||||
.jsxc_window :-ms-input-placeholder {
|
||||
color: rgba(0, 0, 0, 0.4);
|
||||
} /* ie */
|
||||
.jsxc_window input:-moz-placeholder {
|
||||
color: #000;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_tools {
|
||||
height: 26px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.jsxc_min .jsxc_tools {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.jsxc_window .jsxc_tools > div {
|
||||
width: 17px;
|
||||
height: 26px;
|
||||
display: block;
|
||||
float: left;
|
||||
color: #939393;
|
||||
font-family: Arial;
|
||||
line-height: 26px;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.jsxc_settings {
|
||||
background-image: url('img/gear_grey.svg');
|
||||
background-size: 15px 15px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
div.jsxc_settings:hover,div.jsxc_settings.hover {
|
||||
background-image: url('img/gear_white.svg');
|
||||
}
|
||||
|
||||
div.jsxc_settings ul {
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
position: absolute;
|
||||
top: 30px;
|
||||
left: 0px;
|
||||
box-shadow: 0px 5px 5px -5px #000;
|
||||
z-index: 110;
|
||||
overflow: visible;
|
||||
background-color: #282323;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.jsxc_settings li {
|
||||
width: 170px;
|
||||
margin-left: 20px;
|
||||
padding-left: 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.jsxc_settings li:first-child {
|
||||
border-top: 1px solid #ccc;
|
||||
}
|
||||
|
||||
div.jsxc_settings li:hover:not(.jsxc_disabled ){
|
||||
color: #fff;
|
||||
background-color: #3F8FBA;
|
||||
}
|
||||
|
||||
div.jsxc_settings li.jsxc_disabled {
|
||||
color: #595959;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
div.jsxc_transfer {
|
||||
background-image: url('img/padlock_open_grey.svg');
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
background-size: 12px 12px;
|
||||
}
|
||||
|
||||
div.jsxc_transfer:hover {
|
||||
background-image: url('img/padlock_open_white.svg');
|
||||
}
|
||||
|
||||
div.jsxc_transfer.jsxc_fin {
|
||||
background-image: url('img/padlock_close_grey.svg');
|
||||
}
|
||||
|
||||
div.jsxc_transfer.jsxc_enc {
|
||||
background-image: url('img/padlock_close_orange.svg');
|
||||
}
|
||||
|
||||
div.jsxc_transfer.jsxc_enc.jsxc_trust {
|
||||
background-image: url('img/padlock_close_green.svg');
|
||||
}
|
||||
|
||||
.jsxc_window .jsxc_close {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.jsxc_window .jsxc_close:hover {
|
||||
color: #FAFAFA;
|
||||
}
|
||||
|
||||
#colorbox,#cboxWrapper {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/*############################
|
||||
*######### Other ############
|
||||
*############################*/
|
||||
ul.jsxc_vCard {
|
||||
min-width: 400px;
|
||||
}
|
||||
|
||||
ul.jsxc_vCard ul {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
ul.jsxc_vCard li {
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
ul.jsxc_vCard strong {
|
||||
|
||||
}
|
||||
|
||||
img.jsxc_vCard {
|
||||
float: right;
|
||||
max-width: 200px;
|
||||
max-height: 200px;
|
||||
}
|
||||
@@ -1,257 +0,0 @@
|
||||
/* global jsxc, Strophe, jQuery */
|
||||
|
||||
jsxc.l10n.en.Join_chat = 'Join chat';
|
||||
jsxc.l10n.de.Join_chat = 'Chat beitreten';
|
||||
jsxc.l10n.en.Join = 'Join';
|
||||
jsxc.l10n.de.Join = 'Beitreten';
|
||||
|
||||
jsxc.gui.template.joinChat = '<h3>%%Join_chat%%</h3>\
|
||||
<p class=".jsxc_explanation">Blub</p>\
|
||||
<p><label for="jsxc_room">%%Room%%:</label>\
|
||||
<input type="text" name="room" id="jsxc_room" required="required" /></p>\
|
||||
<p><label for="jsxc_nickname">%%Nickname%%:</label>\
|
||||
<input type="text" name="nickname" id="jsxc_nickname" /></p>\
|
||||
<p><label for="jsxc_password">%%Password%%:</label>\
|
||||
<input type="text" name="password" id="jsxc_password" /></p>\
|
||||
<p class="jsxc_right">\
|
||||
<a href="#" class="button jsxc_close">%%Close%%</a> <a href="#" class="button creation jsxc_join">%%Join%%</a>\
|
||||
</p>';
|
||||
|
||||
(function($) {
|
||||
"use strict";
|
||||
|
||||
jsxc.muc = {
|
||||
conn: null,
|
||||
initMenu: function() {
|
||||
var li = $('<li>').attr('class', 'jsxc_joinChat').text(jsxc.translate('%%Join_chat%%'));
|
||||
li.click(jsxc.muc.showJoinChat);
|
||||
$('#jsxc_menu ul').append(li);
|
||||
|
||||
},
|
||||
showJoinChat: function() {
|
||||
var dialog = jsxc.gui.dialog.open(jsxc.gui.template.get('joinChat'));
|
||||
|
||||
dialog.find('.jsxc_join').click(function() {
|
||||
var room = $('#jsxc_room').val() || null;
|
||||
var nickname = $('#jsxc_nickname').val() || Strophe.getNodeFromJid(jsxc.xmpp.conn.jid);
|
||||
var password = $('#jsxc_password').val() || null;
|
||||
|
||||
if (!room) {
|
||||
$('#jsxc_room').addClass('jsxc_invalid').keyup(function() {
|
||||
if ($(this).val()) {
|
||||
$(this).removeClass('jsxc_invalid');
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!room.match(/@(.*)$/)) {
|
||||
room += '@' + 'conference.localhost'; // @TODO: replace
|
||||
}
|
||||
|
||||
var cid = jsxc.jidToCid(room);
|
||||
|
||||
if (jsxc.xmpp.conn.muc.roomNames.indexOf(room) < 0) {
|
||||
jsxc.xmpp.conn.muc.join(room, nickname, null, null, null, password);
|
||||
|
||||
jsxc.storage.setUserItem('roomNames', jsxc.xmpp.conn.muc.roomNames);
|
||||
|
||||
var own = jsxc.storage.getUserItem('own') || [];
|
||||
own.push(jsxc.xmpp.conn.muc.test_append_nick(room, nickname));
|
||||
jsxc.storage.setUserItem('own', own);
|
||||
|
||||
jsxc.storage.setUserItem('buddy_' + cid, {
|
||||
jid: room,
|
||||
name: room,
|
||||
type: 'groupchat'
|
||||
});
|
||||
|
||||
var bl = jsxc.storage.getUserItem('buddylist');
|
||||
bl.push(cid);
|
||||
jsxc.storage.setUserItem('buddylist', bl);
|
||||
|
||||
jsxc.gui.roster.add(cid);
|
||||
}
|
||||
|
||||
jsxc.gui.window.open(cid);
|
||||
jsxc.gui.dialog.close();
|
||||
});
|
||||
|
||||
dialog.find('input').keydown(function(ev) {
|
||||
if (ev.which !== 13) {
|
||||
return;
|
||||
}
|
||||
|
||||
dialog.find('.jsxc_join').click();
|
||||
});
|
||||
},
|
||||
initWindow: function(event, win) {
|
||||
var self = jsxc.muc;
|
||||
var data = win.data();
|
||||
var cid = jsxc.jidToCid(data.jid);
|
||||
var sdata = jsxc.storage.getUserItem('window_' + cid);
|
||||
|
||||
if (!jsxc.xmpp.conn) {
|
||||
$(document).one('connectionReady.jsxc', function() {
|
||||
self.initWindow(null, win);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.conn.muc.roomNames.indexOf(data.jid) < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
win.addClass('jsxc_groupchat');
|
||||
win.find('.jsxc_tools > .jsxc_transfer').after('<div class="jsxc_members">M</div>');
|
||||
var ml = $('<div class="jsxc_memberlist"><ul></ul></div>');
|
||||
win.append(ml);
|
||||
|
||||
ml.find('ul').slimScroll({
|
||||
height: '255px',
|
||||
distance: '3px'
|
||||
});
|
||||
|
||||
var member = jsxc.storage.getUserItem('member_' + cid) || {};
|
||||
|
||||
$.each(member, function(index, val) {
|
||||
self.insertMember(cid, index, val.jid, val.status);
|
||||
});
|
||||
|
||||
if (sdata.minimize_ml || sdata.minimize_ml === null) {
|
||||
self.hideMemberList(win, 200, true);
|
||||
} else {
|
||||
setTimeout(function() {
|
||||
self.showMemberList(win, 200);
|
||||
}, 500);
|
||||
}
|
||||
|
||||
win.on('show', function() {
|
||||
ml.slideDown();
|
||||
ml.css('display', 'block');
|
||||
});
|
||||
win.on('hide', function() {
|
||||
ml.slideUp();
|
||||
});
|
||||
|
||||
win.trigger((sdata.minimize) ? 'hide' : 'show');
|
||||
},
|
||||
showMemberList: function(win, originalWidth, noani) {
|
||||
if (!noani) {
|
||||
win.animate({
|
||||
width: (originalWidth + 200) + 'px'
|
||||
}).css('overflow', 'visible');
|
||||
}
|
||||
|
||||
jsxc.storage
|
||||
.updateUserItem('window_' + jsxc.jidToCid(win.data().jid), 'minimize_ml', false);
|
||||
|
||||
win.find('.jsxc_members').off('click').one('click', function() {
|
||||
jsxc.muc.hideMemberList(win, originalWidth);
|
||||
});
|
||||
},
|
||||
hideMemberList: function(win, originalWidth, noani) {
|
||||
if (!noani) {
|
||||
win.animate({
|
||||
width: originalWidth + 'px'
|
||||
}).css('overflow', 'visible');
|
||||
}
|
||||
|
||||
jsxc.storage
|
||||
.updateUserItem('window_' + jsxc.jidToCid(win.data().jid), 'minimize_ml', true);
|
||||
|
||||
win.find('.jsxc_members').off('click').one('click', function() {
|
||||
jsxc.muc.showMemberList(win, originalWidth);
|
||||
});
|
||||
},
|
||||
onPresence: function(event, from, status, presence) {
|
||||
var self = jsxc.muc;
|
||||
var room = Strophe.getBareJidFromJid(from);
|
||||
var cid = jsxc.jidToCid(room);
|
||||
var nickname = Strophe.getResourceFromJid(from);
|
||||
var xdata = $(presence).find('x[xmlns^="' + Strophe.NS.MUC + '"]');
|
||||
|
||||
if (self.conn.muc.roomNames.indexOf(room) < 0 || xdata.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var jid = xdata.find('item').attr('jid');
|
||||
|
||||
var member = jsxc.storage.getUserItem('member_' + cid) || {};
|
||||
if (status === 0) {
|
||||
delete member[nickname];
|
||||
self.removeMember(cid, nickname);
|
||||
jsxc.gui.window.postMessage(cid, 'sys', nickname + ' left the building.');
|
||||
} else {
|
||||
if (!member[nickname]) {
|
||||
jsxc.gui.window.postMessage(cid, 'sys', nickname + ' entered the room.');
|
||||
}
|
||||
member[nickname] = {
|
||||
jid: jid,
|
||||
status: status,
|
||||
roomJid: from
|
||||
};
|
||||
self.insertMember(cid, nickname, jid, status);
|
||||
}
|
||||
|
||||
jsxc.storage.setUserItem('member_' + cid, member);
|
||||
|
||||
return true;
|
||||
},
|
||||
insertMember: function(cid, nickname, jid, status) {
|
||||
var win = jsxc.gui.getWindow(cid);
|
||||
var m = win.find('.jsxc_memberlist li[data-nickname="' + nickname + '"]');
|
||||
|
||||
if (m.length === 0) {
|
||||
m = $('<li title="' + jid + '">' + nickname + '</li>');
|
||||
m.attr('data-nickname', nickname);
|
||||
win.find('.jsxc_memberlist ul').append(m);
|
||||
}
|
||||
|
||||
if (status !== null) {
|
||||
m.removeClass('jsxc_' + jsxc.status.join(' jsxc_'))
|
||||
.addClass('jsxc_' + jsxc.status[status]);
|
||||
}
|
||||
},
|
||||
removeMember: function(cid, nickname) {
|
||||
var win = jsxc.gui.getWindow(cid);
|
||||
var m = win.find('.jsxc_memberlist li[data-nickname="' + nickname + '"]');
|
||||
|
||||
if (m.length > 0) {
|
||||
m.remove();
|
||||
}
|
||||
},
|
||||
onGroupchatMessage: function(message) {
|
||||
var from = $(message).attr('from');
|
||||
var body = $(message).find('body:first').text();
|
||||
body = Strophe.getResourceFromJid(from) + ': ' + body;
|
||||
$(message).find('body:first').text(body);
|
||||
|
||||
jsxc.xmpp.onMessage($(message)[0]);
|
||||
|
||||
return true;
|
||||
},
|
||||
onNormalMessage: function() {
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
$(document).one('ready.roster.jsxc', jsxc.muc.initMenu);
|
||||
$(document).one('attached', function() {
|
||||
var self = jsxc.muc;
|
||||
self.conn = jsxc.xmpp.conn;
|
||||
self.conn.addHandler(self.onGroupchatMessage, null, 'message', 'groupchat');
|
||||
self.conn.addHandler(self.onNormalMessage, null, 'message', 'normal');
|
||||
self.conn.muc.roomNames = jsxc.storage.getUserItem('roomNames') || [];
|
||||
});
|
||||
$(document).one('connected', function() {
|
||||
jsxc.storage.removeUserItem('roomNames');
|
||||
});
|
||||
$(document).on('init.window.jsxc', jsxc.muc.initWindow);
|
||||
$(document).on('presence.jsxc', jsxc.muc.onPresence);
|
||||
|
||||
$(function() {
|
||||
|
||||
});
|
||||
}(jQuery));
|
||||
@@ -1,173 +0,0 @@
|
||||
.jsxc_videoContainer {
|
||||
width: 640px;
|
||||
height: 480px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.jsxc_remotevideo {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
z-index: 9000;
|
||||
background-color: grey;
|
||||
}
|
||||
|
||||
.jsxc_localvideo {
|
||||
width: 160px;
|
||||
height: 120px;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
bottom: 10px;
|
||||
z-index: 9990;
|
||||
background-color: black;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.jsxc_webrtc .jsxc_status {
|
||||
z-index: 9999;
|
||||
border-radius: 20px;
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 30px;
|
||||
left: 50%;
|
||||
background-color: lightgrey;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
color: white;
|
||||
padding: 15px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div:-moz-full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
div:-ms-full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
div:-webkit-full-screen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
div:fullscreen {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
div:-moz-full-screen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
div:-webkit-full-screen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
div:-ms-full-screen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
div:fullscreen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
.jsxc_fullscreen.jsxc_localvideo {
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
.jsxc_multi>div {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_snapshotbar {
|
||||
width: 100%;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_snapshotbar img {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.jsxc_buttongroup {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.jsxc_buttongroup button:first-child {
|
||||
border-top-right-radius: 0px;
|
||||
border-bottom-right-radius: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.jsxc_buttongroup button:last-child {
|
||||
border-top-left-radius: 0px;
|
||||
border-bottom-left-radius: 0px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.jsxc_chatarea {
|
||||
position: relative;
|
||||
height: 270px;
|
||||
display: none;
|
||||
background-color: #A4A4A4;
|
||||
}
|
||||
|
||||
.jsxc_chatarea > ul {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 0px;
|
||||
width: 250px;
|
||||
height: 270px;
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px 0px 0px -100px;
|
||||
}
|
||||
|
||||
.jsxc_chatarea .jsxc_settings {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_chatarea .jsxc_close {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_chatarea .jsxc_bar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jsxc_chatarea .jsxc_window {
|
||||
bottom: 0px;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.jsxc_videoSuitable .jsxc_name {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div.jsxc_video {
|
||||
background-image: url('img/camera_icon_grey.svg');
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
background-size: 15px 15px;
|
||||
}
|
||||
|
||||
div.jsxc_video:not(.jsxc_disabled):hover, #jsxc_buddylist .jsxc_options .jsxc_video {
|
||||
background-image: url('img/camera_icon_white.svg');
|
||||
}
|
||||
|
||||
div.jsxc_video.jsxc_disabled {
|
||||
opacity: 0.5;
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
|
||||
opacity: 0.2;
|
||||
}
|
||||
@@ -2,35 +2,81 @@
|
||||
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
||||
*
|
||||
* Version: 1.0.0
|
||||
*
|
||||
* Version: 1.3.3 + pr#94
|
||||
*
|
||||
*/
|
||||
(function($) {
|
||||
|
||||
jQuery.fn.extend({
|
||||
$.fn.extend({
|
||||
slimScroll: function(options) {
|
||||
|
||||
var defaults = {
|
||||
wheelStep : 20,
|
||||
|
||||
// width in pixels of the visible scroll area
|
||||
width : 'auto',
|
||||
|
||||
// height in pixels of the visible scroll area
|
||||
height : '250px',
|
||||
|
||||
// width in pixels of the scrollbar and rail
|
||||
size : '7px',
|
||||
|
||||
// scrollbar color, accepts any hex/color value
|
||||
color: '#000',
|
||||
|
||||
// scrollbar position - left/right
|
||||
position : 'right',
|
||||
|
||||
// distance in pixels between the side edge and the scrollbar
|
||||
distance : '1px',
|
||||
|
||||
// default scroll position on load - top / bottom / $('selector')
|
||||
start : 'top',
|
||||
|
||||
// sets scrollbar opacity
|
||||
opacity : .4,
|
||||
|
||||
// enables always-on mode for the scrollbar
|
||||
alwaysVisible : false,
|
||||
disableFadeOut: false,
|
||||
|
||||
// check if we should hide the scrollbar when user is hovering over
|
||||
disableFadeOut : false,
|
||||
|
||||
// sets visibility of the rail
|
||||
railVisible : false,
|
||||
|
||||
// sets rail color
|
||||
railColor : '#333',
|
||||
railOpacity : '0.2',
|
||||
|
||||
// sets rail opacity
|
||||
railOpacity : .2,
|
||||
|
||||
// whether we should use jQuery UI Draggable to enable bar dragging
|
||||
railDraggable : true,
|
||||
|
||||
// defautlt CSS class of the slimscroll rail
|
||||
railClass : 'slimScrollRail',
|
||||
|
||||
// defautlt CSS class of the slimscroll bar
|
||||
barClass : 'slimScrollBar',
|
||||
|
||||
// defautlt CSS class of the slimscroll wrapper
|
||||
wrapperClass : 'slimScrollDiv',
|
||||
|
||||
// check if mousewheel should scroll the window if we reach top/bottom
|
||||
allowPageScroll : false,
|
||||
scroll : 0,
|
||||
touchScrollStep : 200
|
||||
|
||||
// scroll amount applied to each mouse wheel step
|
||||
wheelStep : 20,
|
||||
|
||||
// scroll amount applied when user is using gestures
|
||||
touchScrollStep : 200,
|
||||
|
||||
// sets border radius
|
||||
borderRadius: '7px',
|
||||
|
||||
// sets border radius of the rail
|
||||
railBorderRadius : '7px'
|
||||
};
|
||||
|
||||
var o = $.extend(defaults, options);
|
||||
@@ -38,7 +84,7 @@
|
||||
// do it for every element that matches selector
|
||||
this.each(function(){
|
||||
|
||||
var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
|
||||
var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
|
||||
barHeight, percentScroll, lastScroll,
|
||||
divS = '<div></div>',
|
||||
minBarHeight = 30,
|
||||
@@ -48,20 +94,33 @@
|
||||
var me = $(this);
|
||||
|
||||
// ensure we are not binding it again
|
||||
if (me.parent().hasClass('slimScrollDiv'))
|
||||
{
|
||||
if (me.parent().hasClass(o.wrapperClass))
|
||||
{
|
||||
// start from last bar position
|
||||
var offset = me.scrollTop();
|
||||
|
||||
// find bar and rail
|
||||
bar = me.parent().find('.slimScrollBar');
|
||||
rail = me.parent().find('.slimScrollRail');
|
||||
|
||||
bar = me.parent().find('.' + o.barClass);
|
||||
rail = me.parent().find('.' + o.railClass);
|
||||
|
||||
getBarHeight();
|
||||
|
||||
// check if we should scroll existing instance
|
||||
if (options)
|
||||
if ($.isPlainObject(options))
|
||||
{
|
||||
// Pass height: auto to an existing slimscroll object to force a resize after contents have changed
|
||||
if ( 'height' in options && options.height == 'auto' ) {
|
||||
me.parent().css('height', 'auto');
|
||||
me.css('height', 'auto');
|
||||
var height = me.parent().parent().height();
|
||||
me.parent().css('height', height);
|
||||
me.css('height', height);
|
||||
} else if ('height' in options) {
|
||||
var h = options.height;
|
||||
me.parent().css('height', h);
|
||||
me.css('height', h);
|
||||
}
|
||||
|
||||
if ('scrollTo' in options)
|
||||
{
|
||||
// jump to a static point
|
||||
@@ -72,6 +131,14 @@
|
||||
// jump by value pixels
|
||||
offset += parseInt(o.scrollBy);
|
||||
}
|
||||
else if ('destroy' in options)
|
||||
{
|
||||
// remove slimscroll elements
|
||||
bar.remove();
|
||||
rail.remove();
|
||||
me.unwrap();
|
||||
return;
|
||||
}
|
||||
|
||||
// scroll content by the given offset
|
||||
scrollContent(offset, false, true);
|
||||
@@ -79,9 +146,16 @@
|
||||
|
||||
return;
|
||||
}
|
||||
else if ($.isPlainObject(options))
|
||||
{
|
||||
if ('destroy' in options)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// optionally set height to the parent's height
|
||||
o.height = (o.height == 'auto') ? me.parent().innerHeight() : o.height;
|
||||
o.height = (o.height == 'auto') ? me.parent().height() : o.height;
|
||||
|
||||
// wrap content
|
||||
var wrapper = $(divS)
|
||||
@@ -101,7 +175,7 @@
|
||||
});
|
||||
|
||||
// create scrollbar rail
|
||||
var rail = $(divS)
|
||||
var rail = $(divS)
|
||||
.addClass(o.railClass)
|
||||
.css({
|
||||
width: o.size,
|
||||
@@ -109,7 +183,7 @@
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none',
|
||||
'border-radius': o.size,
|
||||
'border-radius': o.railBorderRadius,
|
||||
background: o.railColor,
|
||||
opacity: o.railOpacity,
|
||||
zIndex: 90
|
||||
@@ -125,10 +199,10 @@
|
||||
top: 0,
|
||||
opacity: o.opacity,
|
||||
display: o.alwaysVisible ? 'block' : 'none',
|
||||
'border-radius' : o.size,
|
||||
BorderRadius: o.size,
|
||||
MozBorderRadius: o.size,
|
||||
WebkitBorderRadius: o.size,
|
||||
'border-radius' : o.borderRadius,
|
||||
BorderRadius: o.borderRadius,
|
||||
MozBorderRadius: o.borderRadius,
|
||||
WebkitBorderRadius: o.borderRadius,
|
||||
zIndex: 99
|
||||
});
|
||||
|
||||
@@ -144,18 +218,31 @@
|
||||
me.parent().append(bar);
|
||||
me.parent().append(rail);
|
||||
|
||||
// make it draggable
|
||||
bar.draggable({
|
||||
axis: 'y',
|
||||
containment: 'parent',
|
||||
start: function() { isDragg = true; },
|
||||
stop: function() { isDragg = false; hideBar(); },
|
||||
drag: function(e)
|
||||
{
|
||||
// scroll content
|
||||
scrollContent(0, $(this).position().top, false);
|
||||
}
|
||||
});
|
||||
// make it draggable and no longer dependent on the jqueryUI
|
||||
if (o.railDraggable){
|
||||
bar.bind("mousedown", function(e) {
|
||||
var $doc = $(document);
|
||||
isDragg = true;
|
||||
t = parseFloat(bar.css('top'));
|
||||
pageY = e.pageY;
|
||||
|
||||
$doc.bind("mousemove.slimscroll", function(e){
|
||||
currTop = t + e.pageY - pageY;
|
||||
bar.css('top', currTop);
|
||||
scrollContent(0, bar.position().top, false);// scroll content
|
||||
});
|
||||
|
||||
$doc.bind("mouseup.slimscroll", function(e) {
|
||||
isDragg = false;hideBar();
|
||||
$doc.unbind('.slimscroll');
|
||||
});
|
||||
return false;
|
||||
}).bind("selectstart.slimscroll", function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// on rail over
|
||||
rail.hover(function(){
|
||||
@@ -191,18 +278,44 @@
|
||||
});
|
||||
|
||||
me.bind('touchmove', function(e){
|
||||
// prevent scrolling the page
|
||||
e.originalEvent.preventDefault();
|
||||
// prevent scrolling the page if necessary
|
||||
if(!releaseScroll)
|
||||
{
|
||||
e.originalEvent.preventDefault();
|
||||
}
|
||||
if (e.originalEvent.touches.length)
|
||||
{
|
||||
// see how far user swiped
|
||||
var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep;
|
||||
// scroll content
|
||||
scrollContent(diff, true);
|
||||
touchDif = e.originalEvent.touches[0].pageY;
|
||||
}
|
||||
});
|
||||
|
||||
var _onWheel = function(e)
|
||||
// set up initial height
|
||||
getBarHeight();
|
||||
|
||||
// check start position
|
||||
if (o.start === 'bottom')
|
||||
{
|
||||
// scroll content to bottom
|
||||
bar.css({ top: me.outerHeight() - bar.outerHeight() });
|
||||
scrollContent(0, true);
|
||||
}
|
||||
else if (o.start !== 'top')
|
||||
{
|
||||
// assume jQuery selector
|
||||
scrollContent($(o.start).position().top, null, true);
|
||||
|
||||
// make sure bar stays hidden
|
||||
if (!o.alwaysVisible) { bar.hide(); }
|
||||
}
|
||||
|
||||
// attach scroll events
|
||||
attachWheel();
|
||||
|
||||
function _onWheel(e)
|
||||
{
|
||||
// use mouse wheel only when mouse is over
|
||||
if (!isOverPanel) { return; }
|
||||
@@ -213,8 +326,11 @@
|
||||
if (e.wheelDelta) { delta = -e.wheelDelta/120; }
|
||||
if (e.detail) { delta = e.detail / 3; }
|
||||
|
||||
// scroll content
|
||||
scrollContent(delta, true);
|
||||
var target = e.target || e.srcTarget || e.srcElement;
|
||||
if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {
|
||||
// scroll content
|
||||
scrollContent(delta, true);
|
||||
}
|
||||
|
||||
// stop window scroll
|
||||
if (e.preventDefault && !releaseScroll) { e.preventDefault(); }
|
||||
@@ -223,16 +339,24 @@
|
||||
|
||||
function scrollContent(y, isWheel, isJump)
|
||||
{
|
||||
releaseScroll = false;
|
||||
var delta = y;
|
||||
var maxTop = me.outerHeight() - bar.outerHeight();
|
||||
|
||||
|
||||
if (isWheel)
|
||||
{
|
||||
// move bar with mouse wheel
|
||||
delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight();
|
||||
|
||||
// move bar, make sure it doesn't go out
|
||||
// move bar, make sure it doesn't go out
|
||||
delta = Math.min(Math.max(delta, 0), maxTop);
|
||||
|
||||
// if scrolling down, make sure a fractional change to the
|
||||
// scroll position isn't rounded away when the scrollbar's CSS is set
|
||||
// this flooring of delta would happened automatically when
|
||||
// bar.css is set below, but we floor here for clarity
|
||||
delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta);
|
||||
|
||||
// scroll the scrollbar
|
||||
bar.css({ top: delta + 'px' });
|
||||
}
|
||||
@@ -245,7 +369,6 @@
|
||||
{
|
||||
delta = y;
|
||||
var offsetTop = delta / me[0].scrollHeight * me.outerHeight();
|
||||
|
||||
offsetTop = Math.min(Math.max(offsetTop, 0), maxTop);
|
||||
bar.css({ top: offsetTop + 'px' });
|
||||
}
|
||||
@@ -253,6 +376,9 @@
|
||||
// scroll content
|
||||
me.scrollTop(delta);
|
||||
|
||||
// fire scrolling event
|
||||
me.trigger('slimscrolling', ~~delta);
|
||||
|
||||
// ensure bar is visible
|
||||
showBar();
|
||||
|
||||
@@ -260,31 +386,29 @@
|
||||
hideBar();
|
||||
}
|
||||
|
||||
var attachWheel = function()
|
||||
function attachWheel()
|
||||
{
|
||||
if (window.addEventListener)
|
||||
{
|
||||
this.addEventListener('DOMMouseScroll', _onWheel, false );
|
||||
this.addEventListener('mousewheel', _onWheel, false );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
document.attachEvent("onmousewheel", _onWheel)
|
||||
}
|
||||
}
|
||||
|
||||
// attach scroll events
|
||||
attachWheel();
|
||||
|
||||
function getBarHeight()
|
||||
{
|
||||
// calculate scrollbar height and make sure it is not too small
|
||||
barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);
|
||||
bar.css({ height: barHeight + 'px' });
|
||||
}
|
||||
|
||||
// set up initial height
|
||||
getBarHeight();
|
||||
// hide scrollbar if content is not long enough
|
||||
var display = barHeight == me.outerHeight() ? 'none' : 'block';
|
||||
bar.css({ display: display });
|
||||
}
|
||||
|
||||
function showBar()
|
||||
{
|
||||
@@ -293,18 +417,22 @@
|
||||
clearTimeout(queueHide);
|
||||
|
||||
// when bar reached top or bottom
|
||||
if (percentScroll == ~~ percentScroll)
|
||||
if (percentScroll == ~~percentScroll)
|
||||
{
|
||||
//release wheel
|
||||
//release wheel
|
||||
releaseScroll = o.allowPageScroll;
|
||||
|
||||
|
||||
// publish approporiate event
|
||||
if (lastScroll != percentScroll)
|
||||
{
|
||||
var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
|
||||
var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
|
||||
me.trigger('slimscroll', msg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
releaseScroll = false;
|
||||
}
|
||||
lastScroll = percentScroll;
|
||||
|
||||
// show only when required
|
||||
@@ -324,7 +452,7 @@
|
||||
{
|
||||
queueHide = setTimeout(function(){
|
||||
if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg)
|
||||
{
|
||||
{
|
||||
bar.fadeOut('slow');
|
||||
rail.fadeOut('slow');
|
||||
}
|
||||
@@ -332,30 +460,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
// check start position
|
||||
if (o.start == 'bottom')
|
||||
{
|
||||
// scroll content to bottom
|
||||
bar.css({ top: me.outerHeight() - bar.outerHeight() });
|
||||
scrollContent(0, true);
|
||||
}
|
||||
else if (typeof o.start == 'object')
|
||||
{
|
||||
// scroll content
|
||||
scrollContent($(o.start).position().top, null, true);
|
||||
|
||||
// make sure bar stays hidden
|
||||
if (!o.alwaysVisible) { bar.hide(); }
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// maintain chainability
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
jQuery.fn.extend({
|
||||
slimscroll: jQuery.fn.slimScroll
|
||||
$.fn.extend({
|
||||
slimscroll: $.fn.slimScroll
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
@@ -7,6 +7,8 @@
|
||||
*
|
||||
* Authors: - Michael Weibel <michael.weibel@gmail.com> - Klaus Herberth <klaus@jsxc.org>
|
||||
* Copyright: - Michael Weibel <michael.weibel@gmail.com>
|
||||
*
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
@@ -189,13 +191,18 @@
|
||||
* Returns: (Boolean) - false, to automatically remove the handler.
|
||||
*/
|
||||
_handleDiscoInfoReply: function(stanza) {
|
||||
var query = stanza.querySelector('query'), node = query.getAttribute('node').split('#'), ver = node[1], from = stanza.getAttribute('from');
|
||||
var query = stanza.querySelector('query');
|
||||
var from = stanza.getAttribute('from');
|
||||
var node = query.getAttribute('node');
|
||||
var ver = (node)? node.split('#')[1] : this._jidVerIndex[from]; //fix open prosody issue
|
||||
|
||||
if (!this._knownCapabilities[ver]) {
|
||||
var childNodes = query.childNodes, childNodesLen = childNodes.length;
|
||||
this._knownCapabilities[ver] = {
|
||||
features: [],
|
||||
identities: []
|
||||
};
|
||||
|
||||
for (var i = 0; i < childNodesLen; i++) {
|
||||
var node = childNodes[i];
|
||||
if (node.nodeName == 'feature') {
|
||||
@@ -203,10 +210,11 @@
|
||||
} else if (node.nodeName == 'identity') {
|
||||
this._knownCapabilities[ver]['identities'].push(this._attributesToJsObject(node.attributes));
|
||||
} else {
|
||||
if (_knownCapabilities[ver][node.nodeName])
|
||||
_knownCapabilities[ver][node.nodeName] = [];
|
||||
if (typeof this._knownCapabilities[ver][node.nodeName] === 'undefined')
|
||||
this._knownCapabilities[ver][node.nodeName] = [];
|
||||
this._knownCapabilities[ver][node.nodeName].push(this._attributesToJsObject(node.attributes));
|
||||
}
|
||||
|
||||
}
|
||||
this._jidVerIndex[from] = ver;
|
||||
} else if (!this._jidVerIndex[from] || !this._jidVerIndex[from] !== ver) {
|
||||
|
||||
@@ -3,9 +3,10 @@
|
||||
* Klaus Herberth, 2014
|
||||
*/
|
||||
|
||||
// This code was written by Tyler Akins and has been placed in the
|
||||
// public domain. It would be nice if you left this header intact.
|
||||
// Base64 code from Tyler Akins -- http://rumkin.com
|
||||
/*! This code was written by Tyler Akins and has been placed in the
|
||||
public domain. It would be nice if you left this header intact.
|
||||
Base64 code from Tyler Akins -- http://rumkin.com
|
||||
*/
|
||||
|
||||
var Base64 = (function () {
|
||||
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
@@ -84,7 +85,7 @@ var Base64 = (function () {
|
||||
return obj;
|
||||
})();
|
||||
|
||||
/*
|
||||
/*!
|
||||
* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
|
||||
* in FIPS PUB 180-1
|
||||
* Version 2.1a Copyright Paul Johnston 2000 - 2002.
|
||||
@@ -261,7 +262,7 @@ function binb2b64(binarray)
|
||||
return str;
|
||||
}
|
||||
|
||||
/*
|
||||
/*!
|
||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||
* Digest Algorithm, as defined in RFC 1321.
|
||||
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
|
||||
@@ -469,7 +470,7 @@ var MD5 = (function () {
|
||||
return obj;
|
||||
})();
|
||||
|
||||
/*
|
||||
/*!
|
||||
This program is distributed under the terms of the MIT license.
|
||||
Please see the LICENSE file for details.
|
||||
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": "Login läuft…",
|
||||
"your_connection_is_unencrypted": "Deine Verbindung ist Unverschlüsselt.",
|
||||
"your_connection_is_encrypted": "Deine Verbindung ist verschlüsselt.",
|
||||
"your_buddy_closed_the_private_connection": "Dein Kontakt hat die private Verbindung getrennt.",
|
||||
"start_private": "Privat starten",
|
||||
"close_private": "Privat abbrechen",
|
||||
"your_buddy_is_verificated": "Dein Kontakt ist verifiziert.",
|
||||
"you_have_only_a_subscription_in_one_way": "Der Kontaktstatus ist einseitig.",
|
||||
"authentication_query_sent": "Authentifizierungsanfrage gesendet.",
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": "Deine Nachricht wurde nicht gesendet. Bitte beende die private Konversation.",
|
||||
"unencrypted_message_received": "Unverschlüsselte Nachricht erhalten.",
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Deine Nachricht wurde nicht gesandt, da der Kontaktstatus einseitig ist.",
|
||||
"not_available": "Nicht verfügbar.",
|
||||
"no_connection": "Keine Verbindung.",
|
||||
"relogin": "Neu anmelden.",
|
||||
"trying_to_start_private_conversation": "Versuche private Konversation zu starten.",
|
||||
"Verified": "Verifiziert",
|
||||
"Unverified": "Unverifiziert",
|
||||
"private_conversation_started": "Private Konversation gestartet.",
|
||||
"private_conversation_aborted": "Private Konversation abgebrochen.",
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Dein Kontakt hat die private Konversation beendet. Das solltest du auch tun!",
|
||||
"conversation_is_now_verified": "Konversation ist jetzt verifiziert",
|
||||
"authentication_failed": "Authentifizierung fehlgeschlagen.",
|
||||
"your_buddy_is_attempting_to_determine_": "Dein Kontakt versucht herauszufinden ob er wirklich mit dir redet.",
|
||||
"to_authenticate_to_your_buddy": "Um dich gegenüber deinem Kontakt zu verifizieren ",
|
||||
"enter_the_answer_and_click_answer": "gib die Antwort ein und klick auf Antworten.",
|
||||
"enter_the_secret": "gib das Geheimnis ein.",
|
||||
"Creating_your_private_key_": "Wir werden jetzt deinen privaten Schlüssel generieren. Das kann einige Zeit in Anspruch nehmen.",
|
||||
"Authenticating_a_buddy_helps_": "Einen Kontakt zu authentifizieren hilft sicher zustellen, dass die Person mit der du sprichst auch die ist die sie sagt.",
|
||||
"How_do_you_want_to_authenticate_your_buddy": "Wie willst du {{bid_name}} (<b>{{bid_jid}}</b>) authentifizieren?",
|
||||
"Select_method": "Wähle...",
|
||||
"Manual": "Manual",
|
||||
"Question": "Frage",
|
||||
"Secret": "Geheimnis",
|
||||
"To_verify_the_fingerprint_": "Um den Fingerprint zu verifizieren kontaktiere dein Kontakt über einen anderen Kommunikationsweg. Zum Beispiel per Telefonanruf.",
|
||||
"Your_fingerprint": "Dein Fingerprint",
|
||||
"Buddy_fingerprint": "Sein/Ihr Fingerprint",
|
||||
"Close": "Schließen",
|
||||
"Compared": "Verglichen",
|
||||
"To_authenticate_using_a_question_": "Um die Authentifizierung per Frage durchzuführen, wähle eine Frage bei welcher nur dein Kontakt die Antwort weiß.",
|
||||
"Ask": "Frage",
|
||||
"To_authenticate_pick_a_secret_": "Um deinen Kontakt zu authentifizieren, wähle ein Geheimnis welches nur deinem Kontakt und dir bekannt ist.",
|
||||
"Compare": "Vergleiche",
|
||||
"Fingerprints": "Fingerprints",
|
||||
"Authentication": "Authentifizierung",
|
||||
"Message": "Nachricht",
|
||||
"Add_buddy": "Kontakt hinzufügen",
|
||||
"rename_buddy": "Kontakt umbenennen",
|
||||
"delete_buddy": "Kontakt löschen",
|
||||
"Login": "Anmeldung",
|
||||
"Username": "Benutzername",
|
||||
"Password": "Passwort",
|
||||
"Cancel": "Abbrechen",
|
||||
"Connect": "Verbinden",
|
||||
"Type_in_the_full_username_": "Gib bitte den vollen Benutzernamen und optional ein Alias an.",
|
||||
"Alias": "Alias",
|
||||
"Add": "Hinzufügen",
|
||||
"Subscription_request": "Kontaktanfrage",
|
||||
"You_have_a_request_from": "Du hast eine Anfrage von",
|
||||
"Deny": "Ablehnen",
|
||||
"Approve": "Bestätigen",
|
||||
"Remove_buddy": "Kontakt entfernen",
|
||||
"You_are_about_to_remove_": "Du bist gerade dabei {{bid_name}} (<b>{{bid_jid}}</b>) von deiner Kontaktliste zu entfernen. Alle Chats werden geschlossen.",
|
||||
"Continue_without_chat": "Weiter ohne Chat",
|
||||
"Please_wait": "Bitte warten",
|
||||
"Login_failed": "Chat-Anmeldung fehlgeschlagen",
|
||||
"Sorry_we_cant_authentikate_": "Der Chatserver hat die Anmeldung abgelehnt. Falsches Passwort?",
|
||||
"Retry": "Zurück",
|
||||
"clear_history": "Lösche Verlauf",
|
||||
"New_message_from": "Neue Nachricht von",
|
||||
"Should_we_notify_you_": "Sollen wir dich in Zukunft über eingehende Nachrichten informieren, auch wenn dieser Tab nicht im Vordergrund ist?",
|
||||
"Please_accept_": "Bitte klick auf den \"Zulassen\" Button oben.",
|
||||
"Hide_offline": "Offline ausblenden",
|
||||
"Show_offline": "Offline einblenden",
|
||||
"About": "Über",
|
||||
"dnd": "Beschäftigt",
|
||||
"Mute": "Ton aus",
|
||||
"Unmute": "Ton an",
|
||||
"Subscription": "Bezug",
|
||||
"both": "beidseitig",
|
||||
"Status": "Status",
|
||||
"online": "online",
|
||||
"chat": "chat",
|
||||
"away": "abwesend",
|
||||
"xa": "länger abwesend",
|
||||
"offline": "offline",
|
||||
"none": "keine",
|
||||
"Unknown_instance_tag": "Unbekannter instance tag.",
|
||||
"Not_one_of_our_latest_keys": "Nicht einer unserer letzten Schlüssel.",
|
||||
"Received_an_unreadable_encrypted_message": "Eine unlesbare verschlüsselte Nachricht erhalten.",
|
||||
"Online": "Online",
|
||||
"Chatty": "Gesprächig",
|
||||
"Away": "Abwesend",
|
||||
"Extended_away": "Länger abwesend",
|
||||
"Offline": "Offline",
|
||||
"Friendship_request": "Kontaktanfrage",
|
||||
"Confirm": "Bestätigen",
|
||||
"Dismiss": "Ablehnen",
|
||||
"Remove": "Löschen",
|
||||
"Online_help": "Online Hilfe",
|
||||
"FN": "Name",
|
||||
"N": " ",
|
||||
"FAMILY": "Familienname",
|
||||
"GIVEN": "Vorname",
|
||||
"NICKNAME": "Spitzname",
|
||||
"URL": "URL",
|
||||
"ADR": "Adresse",
|
||||
"STREET": "Straße",
|
||||
"EXTADD": "Zusätzliche Adresse",
|
||||
"LOCALITY": "Ortschaft",
|
||||
"REGION": "Region",
|
||||
"PCODE": "Postleitzahl",
|
||||
"CTRY": "Land",
|
||||
"TEL": "Telefon",
|
||||
"NUMBER": "Nummer",
|
||||
"EMAIL": "E-Mail",
|
||||
"USERID": " ",
|
||||
"ORG": "Organisation",
|
||||
"ORGNAME": "Name",
|
||||
"ORGUNIT": "Abteilung",
|
||||
"TITLE": "Titel",
|
||||
"ROLE": "Rolle",
|
||||
"BDAY": "Geburtstag",
|
||||
"DESC": "Beschreibung",
|
||||
"PHOTO": " ",
|
||||
"send_message": "Sende Nachricht",
|
||||
"get_info": "Benutzerinformationen",
|
||||
"Settings": "Einstellungen",
|
||||
"Priority": "Priorität",
|
||||
"Save": "Speichern",
|
||||
"User_settings": "Benutzereinstellungen",
|
||||
"A_fingerprint_": "Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.",
|
||||
"Your_roster_is_empty_add_a": "Deine Kontaktliste ist leer, füge einen neuen Kontakt ",
|
||||
"new_buddy": "hinzu",
|
||||
"is": "ist",
|
||||
"Login_options": "Anmeldeoptionen",
|
||||
"BOSH_url": "BOSH url",
|
||||
"Domain": "Domain",
|
||||
"Resource": "Ressource",
|
||||
"On_login": "Beim Anmelden",
|
||||
"Received_an_unencrypted_message": "Unverschlüsselte Nachricht empfangen",
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": "Dein Kontakt stellt leider keine Informationen bereit.",
|
||||
"Info_about": "Info über",
|
||||
"Authentication_aborted": "Authentifizierung abgebrochen.",
|
||||
"Authentication_request_received": "Authentifizierunganfrage empfangen.",
|
||||
"Do_you_want_to_display_them": "Möchtest du sie sehen?",
|
||||
"Log_in_without_chat": "Anmelden ohne Chat",
|
||||
"has_come_online": "ist online gekommen",
|
||||
"Unknown_sender": "Unbekannter Sender",
|
||||
"You_received_a_message_from_an_unknown_sender": "Du hast eine Nachricht von einem unbekannten Sender erhalten",
|
||||
"Please_allow_access_to_microphone_and_camera": "Bitte klick auf den \"Zulassen\" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.",
|
||||
"Incoming_call": "Eingehender Anruf",
|
||||
"from": "von",
|
||||
"Do_you_want_to_accept_the_call_from": "Möchtest Du den Anruf annehmen von",
|
||||
"Reject": "Ablehnen",
|
||||
"Accept": "Annehmen",
|
||||
"hang_up": "Auflegen",
|
||||
"snapshot": "Schnappschuss",
|
||||
"mute_my_audio": "Mein Ton aus",
|
||||
"pause_my_video": "Mein Video pausieren",
|
||||
"fullscreen": "Vollbild",
|
||||
"Info": "Info",
|
||||
"Local_IP": "Lokale IP",
|
||||
"Remote_IP": "Remote IP",
|
||||
"Local_Fingerprint": "Lokaler Fingerprint",
|
||||
"Remote_Fingerprint": "Remote Fingerprint",
|
||||
"Video_call_not_possible": "Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.",
|
||||
"Start_video_call": "Starte Videoanruf"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": null,
|
||||
"your_connection_is_unencrypted": null,
|
||||
"your_connection_is_encrypted": null,
|
||||
"your_buddy_closed_the_private_connection": null,
|
||||
"start_private": null,
|
||||
"close_private": null,
|
||||
"your_buddy_is_verificated": null,
|
||||
"you_have_only_a_subscription_in_one_way": null,
|
||||
"authentication_query_sent": null,
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": null,
|
||||
"unencrypted_message_received": null,
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": null,
|
||||
"not_available": null,
|
||||
"no_connection": null,
|
||||
"relogin": null,
|
||||
"trying_to_start_private_conversation": null,
|
||||
"Verified": null,
|
||||
"Unverified": null,
|
||||
"private_conversation_started": null,
|
||||
"private_conversation_aborted": null,
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": null,
|
||||
"conversation_is_now_verified": null,
|
||||
"authentication_failed": null,
|
||||
"your_buddy_is_attempting_to_determine_": null,
|
||||
"to_authenticate_to_your_buddy": null,
|
||||
"enter_the_answer_and_click_answer": null,
|
||||
"enter_the_secret": null,
|
||||
"Creating_your_private_key_": null,
|
||||
"Authenticating_a_buddy_helps_": null,
|
||||
"How_do_you_want_to_authenticate_your_buddy": null,
|
||||
"Select_method": null,
|
||||
"Manual": null,
|
||||
"Question": null,
|
||||
"Secret": null,
|
||||
"To_verify_the_fingerprint_": null,
|
||||
"Your_fingerprint": null,
|
||||
"Buddy_fingerprint": null,
|
||||
"Close": null,
|
||||
"Compared": null,
|
||||
"To_authenticate_using_a_question_": null,
|
||||
"Ask": null,
|
||||
"To_authenticate_pick_a_secret_": null,
|
||||
"Compare": null,
|
||||
"Fingerprints": null,
|
||||
"Authentication": null,
|
||||
"Message": null,
|
||||
"Add_buddy": null,
|
||||
"rename_buddy": null,
|
||||
"delete_buddy": null,
|
||||
"Login": null,
|
||||
"Username": null,
|
||||
"Password": null,
|
||||
"Cancel": null,
|
||||
"Connect": null,
|
||||
"Type_in_the_full_username_": null,
|
||||
"Alias": null,
|
||||
"Add": null,
|
||||
"Subscription_request": null,
|
||||
"You_have_a_request_from": null,
|
||||
"Deny": null,
|
||||
"Approve": null,
|
||||
"Remove_buddy": null,
|
||||
"You_are_about_to_remove_": null,
|
||||
"Continue_without_chat": null,
|
||||
"Please_wait": null,
|
||||
"Login_failed": null,
|
||||
"Sorry_we_cant_authentikate_": null,
|
||||
"Retry": null,
|
||||
"clear_history": null,
|
||||
"New_message_from": null,
|
||||
"Should_we_notify_you_": null,
|
||||
"Please_accept_": null,
|
||||
"Hide_offline": null,
|
||||
"Show_offline": null,
|
||||
"About": null,
|
||||
"dnd": null,
|
||||
"Mute": null,
|
||||
"Unmute": null,
|
||||
"Subscription": null,
|
||||
"both": null,
|
||||
"Status": null,
|
||||
"online": null,
|
||||
"chat": null,
|
||||
"away": null,
|
||||
"xa": null,
|
||||
"offline": null,
|
||||
"none": null,
|
||||
"Unknown_instance_tag": null,
|
||||
"Not_one_of_our_latest_keys": null,
|
||||
"Received_an_unreadable_encrypted_message": null,
|
||||
"Online": null,
|
||||
"Chatty": null,
|
||||
"Away": null,
|
||||
"Extended_away": null,
|
||||
"Offline": null,
|
||||
"Friendship_request": null,
|
||||
"Confirm": null,
|
||||
"Dismiss": null,
|
||||
"Remove": null,
|
||||
"Online_help": null,
|
||||
"FN": null,
|
||||
"N": null,
|
||||
"FAMILY": null,
|
||||
"GIVEN": null,
|
||||
"NICKNAME": null,
|
||||
"URL": null,
|
||||
"ADR": null,
|
||||
"STREET": null,
|
||||
"EXTADD": null,
|
||||
"LOCALITY": null,
|
||||
"REGION": null,
|
||||
"PCODE": null,
|
||||
"CTRY": null,
|
||||
"TEL": null,
|
||||
"NUMBER": null,
|
||||
"EMAIL": null,
|
||||
"USERID": null,
|
||||
"ORG": null,
|
||||
"ORGNAME": null,
|
||||
"ORGUNIT": null,
|
||||
"TITLE": null,
|
||||
"ROLE": null,
|
||||
"BDAY": null,
|
||||
"DESC": null,
|
||||
"PHOTO": null,
|
||||
"send_message": null,
|
||||
"get_info": null,
|
||||
"Settings": null,
|
||||
"Priority": null,
|
||||
"Save": null,
|
||||
"User_settings": null,
|
||||
"A_fingerprint_": null,
|
||||
"Your_roster_is_empty_add_a": null,
|
||||
"new_buddy": null,
|
||||
"is": null,
|
||||
"Login_options": null,
|
||||
"BOSH_url": null,
|
||||
"Domain": null,
|
||||
"Resource": null,
|
||||
"On_login": null,
|
||||
"Received_an_unencrypted_message": null,
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": null,
|
||||
"Info_about": null,
|
||||
"Authentication_aborted": null,
|
||||
"Authentication_request_received": null,
|
||||
"Do_you_want_to_display_them": null,
|
||||
"Log_in_without_chat": null,
|
||||
"has_come_online": null,
|
||||
"Unknown_sender": null,
|
||||
"You_received_a_message_from_an_unknown_sender": null,
|
||||
"Please_allow_access_to_microphone_and_camera": null,
|
||||
"Incoming_call": null,
|
||||
"from": null,
|
||||
"Do_you_want_to_accept_the_call_from": null,
|
||||
"Reject": null,
|
||||
"Accept": null,
|
||||
"hang_up": null,
|
||||
"snapshot": null,
|
||||
"mute_my_audio": null,
|
||||
"pause_my_video": null,
|
||||
"fullscreen": null,
|
||||
"Info": null,
|
||||
"Local_IP": null,
|
||||
"Remote_IP": null,
|
||||
"Local_Fingerprint": null,
|
||||
"Remote_Fingerprint": null,
|
||||
"Video_call_not_possible": null,
|
||||
"Start_video_call": null
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,263 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": "Logging in…",
|
||||
"your_connection_is_unencrypted": "Your connection is unencrypted.",
|
||||
"your_connection_is_encrypted": "Your connection is encrypted.",
|
||||
"your_buddy_closed_the_private_connection": "Your buddy closed the private connection.",
|
||||
"start_private": "Start private",
|
||||
"close_private": "Close private",
|
||||
"your_buddy_is_verificated": "Your buddy is verified.",
|
||||
"you_have_only_a_subscription_in_one_way": "You only have a one-way subscription.",
|
||||
"authentication_query_sent": "Authentication query sent.",
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": "Your message was not sent. Please end your private conversation.",
|
||||
"unencrypted_message_received": "Unencrypted message received",
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Your message was not sent because you have no valid subscription.",
|
||||
"not_available": "Not available",
|
||||
"no_connection": "No connection!",
|
||||
"relogin": "relogin",
|
||||
"trying_to_start_private_conversation": "Trying to start private conversation!",
|
||||
"Verified": "Verified",
|
||||
"Unverified": "Unverified",
|
||||
"private_conversation_started": "Private conversation started.",
|
||||
"private_conversation_aborted": "Private conversation aborted!",
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Your buddy closed the private conversation! You should do the same.",
|
||||
"conversation_is_now_verified": "Conversation is now verified.",
|
||||
"authentication_failed": "Authentication failed.",
|
||||
"your_buddy_is_attempting_to_determine_": "You buddy is attempting to determine if he or she is really talking to you.",
|
||||
"to_authenticate_to_your_buddy": "To authenticate to your buddy, ",
|
||||
"enter_the_answer_and_click_answer": "enter the answer and click Answer.",
|
||||
"enter_the_secret": "enter the secret.",
|
||||
"Creating_your_private_key_": "Creating your private key; this may take a while.",
|
||||
"Authenticating_a_buddy_helps_": "Authenticating a buddy helps ensure that the person you are talking to is really the one he or she claims to be.",
|
||||
"How_do_you_want_to_authenticate_your_buddy": "How do you want to authenticate {{bid_name}} (<b>{{bid_jid}}</b>)?",
|
||||
"Select_method": "Select method...",
|
||||
"Manual": "Manual",
|
||||
"Question": "Question",
|
||||
"Secret": "Secret",
|
||||
"To_verify_the_fingerprint_": "To verify the fingerprint, contact your buddy via some other trustworthy channel, such as the telephone.",
|
||||
"Your_fingerprint": "Your fingerprint",
|
||||
"Buddy_fingerprint": "Buddy fingerprint",
|
||||
"Close": "Close",
|
||||
"Compared": "Compared",
|
||||
"To_authenticate_using_a_question_": "To authenticate using a question, pick a question whose answer is known only you and your buddy.",
|
||||
"Ask": "Ask",
|
||||
"To_authenticate_pick_a_secret_": "To authenticate, pick a secret known only to you and your buddy.",
|
||||
"Compare": "Compare",
|
||||
"Fingerprints": "Fingerprints",
|
||||
"Authentication": "Authentication",
|
||||
"Message": "Message",
|
||||
"Add_buddy": "Add buddy",
|
||||
"rename_buddy": "rename buddy",
|
||||
"delete_buddy": "delete buddy",
|
||||
"Login": "Login",
|
||||
"Username": "Username",
|
||||
"Password": "Password",
|
||||
"Cancel": "Cancel",
|
||||
"Connect": "Connect",
|
||||
"Type_in_the_full_username_": "Type in the full username and an optional alias.",
|
||||
"Alias": "Alias",
|
||||
"Add": "Add",
|
||||
"Subscription_request": "Subscription request",
|
||||
"You_have_a_request_from": "You have a request from",
|
||||
"Deny": "Deny",
|
||||
"Approve": "Approve",
|
||||
"Remove_buddy": "Remove buddy",
|
||||
"You_are_about_to_remove_": "You are about to remove {{bid_name}} (<b>{{bid_jid}}</b>) from your buddy list. All related chats will be closed.",
|
||||
"Continue_without_chat": "Continue without chat",
|
||||
"Please_wait": "Please wait",
|
||||
"Login_failed": "Chat login failed",
|
||||
"Sorry_we_cant_authentikate_": "Authentication failed with the chat server. Maybe the password is wrong?",
|
||||
"Retry": "Back",
|
||||
"clear_history": "Clear history",
|
||||
"New_message_from": "New message from",
|
||||
"Should_we_notify_you_": "Should we notify you about new messages in the future?",
|
||||
"Please_accept_": "Please click the \"Allow\" button at the top.",
|
||||
"Hide_offline": "Hide offline contacts",
|
||||
"Show_offline": "Show offline contacts",
|
||||
"About": "About",
|
||||
"dnd": "Do Not Disturb",
|
||||
"Mute": "Mute",
|
||||
"Unmute": "Unmute",
|
||||
"Subscription": "Subscription",
|
||||
"both": "both",
|
||||
"Status": "Status",
|
||||
"online": "online",
|
||||
"chat": "chat",
|
||||
"away": "away",
|
||||
"xa": "extended away",
|
||||
"offline": "offline",
|
||||
"none": "none",
|
||||
"Unknown_instance_tag": "Unknown instance tag.",
|
||||
"Not_one_of_our_latest_keys": "Not one of our latest keys.",
|
||||
"Received_an_unreadable_encrypted_message": "Received an unreadable encrypted message.",
|
||||
"Online": "Online",
|
||||
"Chatty": "Chatty",
|
||||
"Away": "Away",
|
||||
"Extended_away": "Extended away",
|
||||
"Offline": "Offline",
|
||||
"Friendship_request": "Friendship request",
|
||||
"Confirm": "Confirm",
|
||||
"Dismiss": "Dismiss",
|
||||
"Remove": "Remove",
|
||||
"Online_help": "Online help",
|
||||
"FN": "Full name",
|
||||
"N": " ",
|
||||
"FAMILY": "Family name",
|
||||
"GIVEN": "Given name",
|
||||
"NICKNAME": "Nickname",
|
||||
"URL": "URL",
|
||||
"ADR": "Address",
|
||||
"STREET": "Street Address",
|
||||
"EXTADD": "Extended Address",
|
||||
"LOCALITY": "Locality",
|
||||
"REGION": "Region",
|
||||
"PCODE": "Postal Code",
|
||||
"CTRY": "Country",
|
||||
"TEL": "Telephone",
|
||||
"NUMBER": "Number",
|
||||
"EMAIL": "Email",
|
||||
"USERID": " ",
|
||||
"ORG": "Organization",
|
||||
"ORGNAME": "Name",
|
||||
"ORGUNIT": "Unit",
|
||||
"TITLE": "Job title",
|
||||
"ROLE": "Role",
|
||||
"BDAY": "Birthday",
|
||||
"DESC": "Description",
|
||||
"PHOTO": " ",
|
||||
"send_message": "Send message",
|
||||
"get_info": "Show information",
|
||||
"Settings": "Settings",
|
||||
"Priority": "Priority",
|
||||
"Save": "Save",
|
||||
"User_settings": "User settings",
|
||||
"A_fingerprint_": "A fingerprint is used to make sure that the person you are talking to is who he or she is saying.",
|
||||
"Your_roster_is_empty_add_a": "Your roster is empty, add a ",
|
||||
"new_buddy": "new buddy",
|
||||
"is": "is",
|
||||
"Login_options": "Login options",
|
||||
"BOSH_url": "BOSH URL",
|
||||
"Domain": "Domain",
|
||||
"Resource": "Resource",
|
||||
"On_login": "On login",
|
||||
"Received_an_unencrypted_message": "Received an unencrypted message",
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": "Sorry, your buddy does not provide any information.",
|
||||
"Info_about": "Info about",
|
||||
"Authentication_aborted": "Authentication aborted.",
|
||||
"Authentication_request_received": "Authentication request received.",
|
||||
"Do_you_want_to_display_them": "Do you want to display them?",
|
||||
"Log_in_without_chat": "Log in without chat",
|
||||
"has_come_online": "has come online",
|
||||
"Unknown_sender": "Unknown sender",
|
||||
"You_received_a_message_from_an_unknown_sender": "You received a message from an unknown sender",
|
||||
"Please_allow_access_to_microphone_and_camera": "Please click the \"Allow\" button at the top, to allow access to microphone and camera.",
|
||||
"Incoming_call": "Incoming call",
|
||||
"from": "from",
|
||||
"Do_you_want_to_accept_the_call_from": "Do you want to accept the call from",
|
||||
"Reject": "Reject",
|
||||
"Accept": "Accept",
|
||||
"hang_up": "hang up",
|
||||
"snapshot": "snapshot",
|
||||
"mute_my_audio": "mute my audio",
|
||||
"pause_my_video": "pause my video",
|
||||
"fullscreen": "fullscreen",
|
||||
"Info": "Info",
|
||||
"Local_IP": "Local IP",
|
||||
"Remote_IP": "Remote IP",
|
||||
"Local_Fingerprint": "Local fingerprint",
|
||||
"Remote_Fingerprint": "Remote fingerprint",
|
||||
"Video_call_not_possible": "Video call not possible. Your buddy does not support video calls.",
|
||||
"Start_video_call": "Start video call",
|
||||
"Join_chat": "Join chat",
|
||||
"Join": "Join",
|
||||
"Room": "Room",
|
||||
"Nickname": "Nickname",
|
||||
"left_the_building": "__nickname__ left the building",
|
||||
"entered_the_room": "__nickname__ entered the room",
|
||||
"is_now_known_as": "__oldNickname__ is now known as __newNickname__",
|
||||
"This_room_is": "This room is",
|
||||
"muc_hidden": {
|
||||
"keyword": "hidden",
|
||||
"description": "can not be found through search"
|
||||
},
|
||||
"muc_membersonly": {
|
||||
"keyword": "members-only",
|
||||
"description": "you need to be on the member list"
|
||||
},
|
||||
"muc_moderated": {
|
||||
"keyword": "moderated",
|
||||
"description": "only persons with \"voice\" are allowed to send messages"
|
||||
},
|
||||
"muc_nonanonymous": {
|
||||
"keyword": "non-anonymous",
|
||||
"description": "your jabber id is exposed to all other occupants"
|
||||
},
|
||||
"muc_open": {
|
||||
"keyword": "open",
|
||||
"description": "everyone is allowed to join"
|
||||
},
|
||||
"muc_passwordprotected": {
|
||||
"keyword": "password-protected",
|
||||
"description": "you need to provide the correct password"
|
||||
},
|
||||
"muc_persistent": {
|
||||
"keyword": "persistent",
|
||||
"description": "will not be destroyed if the last occupant left"
|
||||
},
|
||||
"muc_public": {
|
||||
"keyword": "public",
|
||||
"description": "can be found through search"
|
||||
},
|
||||
"muc_semianonymous": {
|
||||
"keyword": "semi-anonymous",
|
||||
"description": "your jabber id is only exposed to room admins"
|
||||
},
|
||||
"muc_temporary": {
|
||||
"keyword": "temporary",
|
||||
"description": "will be destroyed if the last occupant left"
|
||||
},
|
||||
"muc_unmoderated": {
|
||||
"keyword": "unmoderated",
|
||||
"description": "everyone is allowed to send messages"
|
||||
},
|
||||
"muc_unsecured": {
|
||||
"keyword": "unsecured",
|
||||
"description": "you need no password to enter"
|
||||
},
|
||||
"Continue": "Continue",
|
||||
"Server": "Server",
|
||||
"Rooms_are_loaded": "Rooms are loaded",
|
||||
"Could_load_only": "Could load only __count__ rooms for autocomplete",
|
||||
"muc_explanation": "Please enter room name and optional a nickname and password to join a chat",
|
||||
"You_already_joined_this_room": "You already joined this room",
|
||||
"This_room_will_be_closed": "This room will be closed",
|
||||
"Room_not_found_": "A new room will be created",
|
||||
"Loading_room_information": "Loading room information",
|
||||
"Destroy": "Destroy",
|
||||
"Leave": "Leave",
|
||||
"changed_subject_to": "__nickname__ changed the room subject to \"__subject__\"",
|
||||
"muc_removed_kicked": "You have been kicked from the room",
|
||||
"muc_removed_info_kicked": "__nickname__ has been kicked from the room",
|
||||
"muc_removed_banned": "You have been banned from the room",
|
||||
"muc_removed_info_banned": "__nickname__ has been banned from the room",
|
||||
"muc_removed_affiliation": "You have been removed from the room, because of an affiliation change",
|
||||
"muc_removed_info_affiliation": "__nickname__ has been removed from the room, because of an affiliation change",
|
||||
"muc_removed_membersonly": "You have been removed from the room, because the room has been changed to members-only and you are no member",
|
||||
"muc_removed_info_membersonly": "__nickname__ has been removed from the room, because the room has been changed to members-only and you are no member",
|
||||
"muc_removed_shutdown": "You have been removed from the room, because the MUC service is being shut down",
|
||||
"Reason": "Reason",
|
||||
"message_not_send": "Your message was not send because of an error",
|
||||
"message_not_send_item-not-found": "Your message was not send because this room does not exist",
|
||||
"message_not_send_forbidden": "Your message was not send because you have no voice in this room",
|
||||
"message_not_send_not-acceptable": "Your message was not send because you are no occupant of this room",
|
||||
"This_room_has_been_closed": "This room has been closed",
|
||||
"Room_logging_is_enabled": "Room logging is enabled",
|
||||
"A_password_is_required": "A password is required",
|
||||
"You_are_not_on_the_member_list": "You are not on the member list",
|
||||
"You_are_banned_from_this_room": "You are banned from this room",
|
||||
"Your_desired_nickname_": "Your desired nickname is already in use. Please choose another",
|
||||
"The_maximum_number_": "The maximum number of user is reached in this room",
|
||||
"This_room_is_locked_": "This room is locked",
|
||||
"You_are_not_allowed_to_create_": "You are not allowed to create a room"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": "Por favor, espere...",
|
||||
"your_connection_is_unencrypted": "Su conexión no está cifrada.",
|
||||
"your_connection_is_encrypted": "Su conexión está cifrada.",
|
||||
"your_buddy_closed_the_private_connection": "Su amigo ha cerrado la conexión privada.",
|
||||
"start_private": "Iniciar privado",
|
||||
"close_private": "Cerrar privado",
|
||||
"your_buddy_is_verificated": "Tu amigo está verificado.",
|
||||
"you_have_only_a_subscription_in_one_way": "Sólo tienes una suscripción de un modo.",
|
||||
"authentication_query_sent": "Consulta de verificación enviada.",
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": "Su mensaje no fue enviado. Por favor, termine su conversación privada.",
|
||||
"unencrypted_message_received": "Mensaje no cifrado recibido:",
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Su mensaje no se ha enviado, porque usted no tiene suscripción válida.",
|
||||
"not_available": "No disponible",
|
||||
"no_connection": "Sin conexión!",
|
||||
"relogin": "iniciar sesión nuevamente",
|
||||
"trying_to_start_private_conversation": "Intentando iniciar una conversación privada!",
|
||||
"Verified": "Verificado",
|
||||
"Unverified": "No verificado",
|
||||
"private_conversation_started": "se inició una conversación privada.",
|
||||
"private_conversation_aborted": "Conversación privada abortada!",
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Su amigo cerró la conversación privada! Usted debería hacer lo mismo.",
|
||||
"conversation_is_now_verified": "La conversación es ahora verificada.",
|
||||
"authentication_failed": "Fallo la verificación.",
|
||||
"your_buddy_is_attempting_to_determine_": "Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.",
|
||||
"to_authenticate_to_your_buddy": "Para autenticar a su amigo, ",
|
||||
"enter_the_answer_and_click_answer": "introduce la respuesta y haga clic en Contestar.",
|
||||
"enter_the_secret": "especifique el secreto.",
|
||||
"Creating_your_private_key_": "Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.",
|
||||
"Authenticating_a_buddy_helps_": "Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.",
|
||||
"How_do_you_want_to_authenticate_your_buddy": "¿Cómo desea autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?",
|
||||
"Select_method": "Escoja un método...",
|
||||
"Manual": "Manual",
|
||||
"Question": "Pregunta",
|
||||
"Secret": "Secreto",
|
||||
"To_verify_the_fingerprint_": "Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.",
|
||||
"Your_fingerprint": "Tu firma digital",
|
||||
"Buddy_fingerprint": "firma digital de tu amigo",
|
||||
"Close": "Cerrar",
|
||||
"Compared": "Comparado",
|
||||
"To_authenticate_using_a_question_": "Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.",
|
||||
"Ask": "Preguntar",
|
||||
"To_authenticate_pick_a_secret_": "Para autenticar, elija un secreto conocido sólo por usted y su amigo.",
|
||||
"Compare": "Comparar",
|
||||
"Fingerprints": "Firmas digitales",
|
||||
"Authentication": "Autenticación",
|
||||
"Message": "Mensaje",
|
||||
"Add_buddy": "Añadir amigo",
|
||||
"rename_buddy": "renombrar amigo",
|
||||
"delete_buddy": "eliminar amigo",
|
||||
"Login": "Iniciar Sesión",
|
||||
"Username": "Usuario",
|
||||
"Password": "Contraseña",
|
||||
"Cancel": "Cancelar",
|
||||
"Connect": "Conectar",
|
||||
"Type_in_the_full_username_": "Escriba el usuario completo y un alias opcional.",
|
||||
"Alias": "Alias",
|
||||
"Add": "Añadir",
|
||||
"Subscription_request": "Solicitud de suscripción",
|
||||
"You_have_a_request_from": "Tienes una petición de",
|
||||
"Deny": "Rechazar",
|
||||
"Approve": "Aprobar",
|
||||
"Remove_buddy": "Eliminar amigo",
|
||||
"You_are_about_to_remove_": "Vas a eliminar a {{bid_name}} (<b>{{bid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.",
|
||||
"Continue_without_chat": "Continuar",
|
||||
"Please_wait": "Espere por favor",
|
||||
"Login_failed": "Fallo el inicio de sesión",
|
||||
"Sorry_we_cant_authentikate_": "Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?",
|
||||
"Retry": "Reintentar",
|
||||
"clear_history": "Borrar el historial",
|
||||
"New_message_from": "Nuevo mensaje de",
|
||||
"Should_we_notify_you_": "¿Debemos notificarle sobre nuevos mensajes en el futuro?",
|
||||
"Please_accept_": "Por favor, haga clic en el botón \"Permitir\" en la parte superior.",
|
||||
"Hide_offline": "Ocultar contactos desconectados",
|
||||
"Show_offline": "Mostrar contactos desconectados",
|
||||
"About": "Acerca de",
|
||||
"dnd": "No Molestar",
|
||||
"Mute": "Desactivar sonido",
|
||||
"Unmute": "Activar sonido",
|
||||
"Subscription": "Suscripción",
|
||||
"both": "ambos",
|
||||
"Status": "Estado",
|
||||
"online": "en línea",
|
||||
"chat": "chat",
|
||||
"away": "ausente",
|
||||
"xa": "mas ausente",
|
||||
"offline": "desconectado",
|
||||
"none": "nadie",
|
||||
"Unknown_instance_tag": "Etiqueta de instancia desconocida.",
|
||||
"Not_one_of_our_latest_keys": "No de nuestra ultima tecla.",
|
||||
"Received_an_unreadable_encrypted_message": "Se recibió un mensaje cifrado ilegible.",
|
||||
"Online": "En linea",
|
||||
"Chatty": "Hablador",
|
||||
"Away": "Ausente",
|
||||
"Extended_away": "Mas ausente",
|
||||
"Offline": "Desconectado",
|
||||
"Friendship_request": "Solicitud de amistad",
|
||||
"Confirm": "Confirmar",
|
||||
"Dismiss": "Rechazar",
|
||||
"Remove": "Eliminar",
|
||||
"Online_help": "Ayuda en línea",
|
||||
"FN": "Nombre completo ",
|
||||
"N": " ",
|
||||
"FAMILY": "Apellido",
|
||||
"GIVEN": "Nombre",
|
||||
"NICKNAME": "Apodar",
|
||||
"URL": "URL",
|
||||
"ADR": "Dirección",
|
||||
"STREET": "Calle",
|
||||
"EXTADD": "Extendido dirección",
|
||||
"LOCALITY": "Población",
|
||||
"REGION": "Región",
|
||||
"PCODE": "Código postal",
|
||||
"CTRY": "País",
|
||||
"TEL": "Teléfono",
|
||||
"NUMBER": "Número",
|
||||
"EMAIL": "Emilio",
|
||||
"USERID": " ",
|
||||
"ORG": "Organización",
|
||||
"ORGNAME": "Nombre",
|
||||
"ORGUNIT": "Departamento",
|
||||
"TITLE": "Título",
|
||||
"ROLE": "Rol",
|
||||
"BDAY": "Cumpleaños",
|
||||
"DESC": "Descripción",
|
||||
"PHOTO": " ",
|
||||
"send_message": "mandar un texto",
|
||||
"get_info": "obtener información",
|
||||
"Settings": "Ajustes",
|
||||
"Priority": "Prioridad",
|
||||
"Save": "Guardar",
|
||||
"User_settings": "Configuración de usuario",
|
||||
"A_fingerprint_": "La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser",
|
||||
"Your_roster_is_empty_add_a": "Tu lista de amigos esta vacia",
|
||||
"new_buddy": "Nuevo amigo",
|
||||
"is": "es",
|
||||
"Login_options": "Opciones de login",
|
||||
"BOSH_url": "BOSH url",
|
||||
"Domain": "Dominio",
|
||||
"Resource": "Recurso",
|
||||
"On_login": "Iniciar sesión",
|
||||
"Received_an_unencrypted_message": "Recibe un mensaje no cifrado",
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": "Lo sentimos, su amigo no provee ninguna información.",
|
||||
"Info_about": "Info acerca de",
|
||||
"Authentication_aborted": "Autenticación abortada",
|
||||
"Authentication_request_received": "Pedido de autenticación recibido.",
|
||||
"Do_you_want_to_display_them": "¿Quiere mostrarlos?",
|
||||
"Log_in_without_chat": "Ingresar sin chat",
|
||||
"has_come_online": "se ha conectado",
|
||||
"Unknown_sender": "Remitente desconocido",
|
||||
"You_received_a_message_from_an_unknown_sender": "Ha recibido un mensaje de un remitente desconocido",
|
||||
"Please_allow_access_to_microphone_and_camera": "Por favor, permitir el acceso al micrófono y la cámara.",
|
||||
"Incoming_call": "Llamada entrante",
|
||||
"from": "de",
|
||||
"Do_you_want_to_accept_the_call_from": "Desea aceptar la llamada de",
|
||||
"Reject": "Rechazar",
|
||||
"Accept": "Aceptar",
|
||||
"hang_up": "colgar",
|
||||
"snapshot": "instantánea",
|
||||
"mute_my_audio": "silenciar mi audio",
|
||||
"pause_my_video": "pausar mi vídeo",
|
||||
"fullscreen": "pantalla completa",
|
||||
"Info": "Info",
|
||||
"Local_IP": "IP local",
|
||||
"Remote_IP": "IP remota",
|
||||
"Local_Fingerprint": "Firma digital local",
|
||||
"Remote_Fingerprint": "Firma digital remota",
|
||||
"Video_call_not_possible": "Llamada de vídeo no es posible",
|
||||
"Start_video_call": "Iniciar llamada de vídeo"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": "Connexion...",
|
||||
"your_connection_is_unencrypted": "Connexion non chiffrée.",
|
||||
"your_connection_is_encrypted": "Connexion chiffrée.",
|
||||
"your_buddy_closed_the_private_connection": "Votre ami a fermé la connexion privée.",
|
||||
"start_private": "Démarrer une conversation privé",
|
||||
"close_private": "Clôturer une conversation privée",
|
||||
"your_buddy_is_verificated": "Votre ami est vérifié.",
|
||||
"you_have_only_a_subscription_in_one_way": "Vous ne pouvez souscrire qu'une fois.",
|
||||
"authentication_query_sent": "Requête d’authentification envoyée.",
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": "Votre message n'a pas été envoyé. Veuillez terminer votre conversation privée.",
|
||||
"unencrypted_message_received": "Message non chiffré reçu",
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Votre message n'a pas été envoyé car votre abonnement n'est pas valide.",
|
||||
"not_available": "Pas disponible",
|
||||
"no_connection": "Pas de connexion !",
|
||||
"relogin": "Re-connexion",
|
||||
"trying_to_start_private_conversation": "Essai de démarrage d'une conversation privée !",
|
||||
"Verified": "Vérifié",
|
||||
"Unverified": "Non vérifié",
|
||||
"private_conversation_started": "Conversation privé démarrée.",
|
||||
"private_conversation_aborted": "Conversation privée interrompue !",
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Votre ami a fermé la conversation privée ! Vous devriez faire de même.",
|
||||
"conversation_is_now_verified": "La conversation est maintenant vérifiée.",
|
||||
"authentication_failed": "L'authentification a échoué.",
|
||||
"your_buddy_is_attempting_to_determine_": "Votre ami tente de déterminer si il ou elle parle vraiment à vous.",
|
||||
"to_authenticate_to_your_buddy": "Vous authentifier à votre ami, ",
|
||||
"enter_the_answer_and_click_answer": "Saisissez une réponse et cliquer sur Répondre.",
|
||||
"enter_the_secret": "Entrez le mot secret",
|
||||
"Creating_your_private_key_": "Création de votre clé privée; cela peut prendre un moment.",
|
||||
"Authenticating_a_buddy_helps_": "L'authentification d'un ami permet de s'assurer que la personne à qui vous parlez est vraiment celui qu'il ou elle prétend être.",
|
||||
"How_do_you_want_to_authenticate_your_buddy": "Comment voulez-vous vous authentifier {{bid_name}} (<b>{{bid_jid}}</b>)?",
|
||||
"Select_method": "Sélection de la méthode...",
|
||||
"Manual": "Manuel",
|
||||
"Question": "Question",
|
||||
"Secret": "Sécurité",
|
||||
"To_verify_the_fingerprint_": "Pour vérifier l'empreinte, contactez votre ami via un autre canal digne de confiance, tel que le téléphone.",
|
||||
"Your_fingerprint": "Votre empreinte",
|
||||
"Buddy_fingerprint": "Empreinte de l'ami",
|
||||
"Close": "Fermer",
|
||||
"Compared": "Comparé",
|
||||
"To_authenticate_using_a_question_": "Pour s'authentifier à l'aide d'une question, choisissez une question dont la réponse n'est connue que vous et de votre ami.",
|
||||
"Ask": "Demander",
|
||||
"To_authenticate_pick_a_secret_": "Pour vous authentifier, choisissez un secret connu seulement de vous et de votre ami.",
|
||||
"Compare": "Comparer",
|
||||
"Fingerprints": "Empreintes",
|
||||
"Authentication": "Authentification",
|
||||
"Message": "Message",
|
||||
"Add_buddy": "Ajouter comme ami",
|
||||
"rename_buddy": "Renommer l'ami",
|
||||
"delete_buddy": "Supprimer l'ami",
|
||||
"Login": "Connexion",
|
||||
"Username": "Nom d'utilisateur",
|
||||
"Password": "Mot de passe",
|
||||
"Cancel": "Annuler",
|
||||
"Connect": "Connecter",
|
||||
"Type_in_the_full_username_": "Tapez un nom d'utilisateur complet et un alias(optionnel).",
|
||||
"Alias": "Alias",
|
||||
"Add": "Ajouter",
|
||||
"Subscription_request": "Demande d'abonnement",
|
||||
"You_have_a_request_from": "Vous avez une requête de ",
|
||||
"Deny": "Refuser",
|
||||
"Approve": "Approuver",
|
||||
"Remove_buddy": "Supprimer l'ami",
|
||||
"You_are_about_to_remove_": "Vous allez retirer {{bid_name}} (<b>{{bid_jid}}</b>) de votre liste d'amis. Toutes les fenêtres de chat en lien avec celui-ci seront fermées.",
|
||||
"Continue_without_chat": "Continuer sans tchat",
|
||||
"Please_wait": "Merci de patienter",
|
||||
"Login_failed": "Authentification échouée",
|
||||
"Sorry_we_cant_authentikate_": "La connexion avec le serveur de tchat a échoué. Vérifiez le mot de passe.",
|
||||
"Retry": "Retour",
|
||||
"clear_history": "Effacer l’historique",
|
||||
"New_message_from": "Nouveau message de",
|
||||
"Should_we_notify_you_": "Dans le futur, devrons-nous vous notifier les nouveaux messages ?",
|
||||
"Please_accept_": "Merci de cliquer sur le bouton \"autoriser\" en haut de page",
|
||||
"Hide_offline": "Masquer les contacts non connectés",
|
||||
"Show_offline": "Afficher les contacts non connectés",
|
||||
"About": "À propos",
|
||||
"dnd": "Ne pas déranger",
|
||||
"Mute": "Muet",
|
||||
"Unmute": "Son actif",
|
||||
"Subscription": "Abonnement",
|
||||
"both": "Les deux",
|
||||
"Status": "Status",
|
||||
"online": "En ligne",
|
||||
"chat": "tchat",
|
||||
"away": "Absent",
|
||||
"xa": "Options étendues",
|
||||
"offline": "Hors ligne",
|
||||
"none": "Aucun",
|
||||
"Unknown_instance_tag": "Tag inconnu",
|
||||
"Not_one_of_our_latest_keys": "Ce n'est pas l'une des dernières touches",
|
||||
"Received_an_unreadable_encrypted_message": "Message chiffré non lisible",
|
||||
"Online": "En ligne",
|
||||
"Chatty": "tchatty",
|
||||
"Away": "Absent",
|
||||
"Extended_away": "Options étendues",
|
||||
"Offline": "Hors ligne",
|
||||
"Friendship_request": "Demande d'amitié",
|
||||
"Confirm": "Valider",
|
||||
"Dismiss": "Rejeter",
|
||||
"Remove": "Supprimer",
|
||||
"Online_help": "Aide en ligne",
|
||||
"FN": "Nom",
|
||||
"N": " N ",
|
||||
"FAMILY": "Nom de famille",
|
||||
"GIVEN": "prénom",
|
||||
"NICKNAME": "Surnom",
|
||||
"URL": "URL",
|
||||
"ADR": "Adresse",
|
||||
"STREET": "Rue",
|
||||
"EXTADD": "Adresse (suite)",
|
||||
"LOCALITY": "Localité",
|
||||
"REGION": "Région",
|
||||
"PCODE": "Code Postal",
|
||||
"CTRY": "Pays",
|
||||
"TEL": "Téléphone",
|
||||
"NUMBER": "Numéro",
|
||||
"EMAIL": "Courriel",
|
||||
"USERID": " USERID ",
|
||||
"ORG": "Organisation",
|
||||
"ORGNAME": "Nom",
|
||||
"ORGUNIT": "Unité",
|
||||
"TITLE": "Qualité:",
|
||||
"ROLE": "Rôle",
|
||||
"BDAY": "Date de naissance",
|
||||
"DESC": "Description",
|
||||
"PHOTO": "Photo",
|
||||
"send_message": "Envoyer le message",
|
||||
"get_info": "Montrer les informations",
|
||||
"Settings": "Réglages",
|
||||
"Priority": "Priorité",
|
||||
"Save": "Enregistrer",
|
||||
"User_settings": "Paramètres utilisateur",
|
||||
"A_fingerprint_": "Une empreinte est utilisée pour s'assurer de l'identité de la personne à qui vous parlez",
|
||||
"Your_roster_is_empty_add_a": "Votre liste est vide, ajouter ",
|
||||
"new_buddy": "Nouvel ami",
|
||||
"is": "est",
|
||||
"Login_options": "Options d'identification",
|
||||
"BOSH_url": "URL BOSH",
|
||||
"Domain": "Domaine",
|
||||
"Resource": "Ressource",
|
||||
"On_login": "Après authentification",
|
||||
"Received_an_unencrypted_message": "Reçu un message non chiffré",
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": "Désolé, votre ami n'a pas fourni d'informations",
|
||||
"Info_about": "A propos de",
|
||||
"Authentication_aborted": "Authentification interrompue.",
|
||||
"Authentication_request_received": "Requête d'authentification reçue.",
|
||||
"Do_you_want_to_display_them": "Voulez-vous les afficher ?",
|
||||
"Log_in_without_chat": "S'identifier sans tchat",
|
||||
"has_come_online": "vient d'arriver",
|
||||
"Unknown_sender": "Expéditeur inconnu",
|
||||
"You_received_a_message_from_an_unknown_sender": "Vous avez reçu un message d'un expéditeur inconnu",
|
||||
"Please_allow_access_to_microphone_and_camera": "Veuillez cliquez sur le bouton \"Autoriser\" en haut, pour permettre l'accès au micro et à la caméra.",
|
||||
"Incoming_call": "Appel entrant",
|
||||
"from": "de",
|
||||
"Do_you_want_to_accept_the_call_from": "Voulez-vous accepter l'appel de",
|
||||
"Reject": "Rejeté",
|
||||
"Accept": "Accepté",
|
||||
"hang_up": "Décrochez",
|
||||
"snapshot": "Capture d’écran",
|
||||
"mute_my_audio": "Couper l'audio",
|
||||
"pause_my_video": "Mettre ma vidéo en pause",
|
||||
"fullscreen": "Plein écran",
|
||||
"Info": "Info",
|
||||
"Local_IP": "IP locale",
|
||||
"Remote_IP": "IP distante",
|
||||
"Local_Fingerprint": "Empreinte locale",
|
||||
"Remote_Fingerprint": "Empreinte distante",
|
||||
"Video_call_not_possible": "L'appel vidéo n'est possible. Votre ami ne supporte pas les appels vidéo.",
|
||||
"Start_video_call": "Démarrer l'appel vidéo"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": "login…",
|
||||
"your_connection_is_unencrypted": "La sua connessione è non cifrata.",
|
||||
"your_connection_is_encrypted": "La sua connessione è cifrata.",
|
||||
"your_buddy_closed_the_private_connection": "La sua connessione privata è stato chiuso dal suo compagno.",
|
||||
"start_private": "Inizia privata",
|
||||
"close_private": "Chiude privata",
|
||||
"your_buddy_is_verificated": "Il tuo compagno è stato verificato",
|
||||
"you_have_only_a_subscription_in_one_way": "Hai solo una one-way inscrizione.",
|
||||
"authentication_query_sent": "Domanda d'autenticità inviata.",
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": "Il tuo messaggio non è stato inviato. Si prega di finire la sua conversazione privata.",
|
||||
"unencrypted_message_received": "Messaggio non cifrato ricevuto",
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Il tuo messaggio non è stato inviato perché non hai una sottoscrizione valida.",
|
||||
"not_available": "non disponibile",
|
||||
"no_connection": "nessun collegamento!",
|
||||
"relogin": "nuovo login",
|
||||
"trying_to_start_private_conversation": "Cercando di avviare una conversazione privata!",
|
||||
"Verified": "verificato",
|
||||
"Unverified": "non verificato",
|
||||
"private_conversation_started": "Conversazione privata iniziato.",
|
||||
"private_conversation_aborted": "Conversazione privata abortito!",
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Il tuo compagno ha chiuso la conversazione privata! Si dovrebbe fare lo stesso.",
|
||||
"conversation_is_now_verified": "Conversazione è ora verificato.",
|
||||
"authentication_failed": "autenticazione fallita.",
|
||||
"your_buddy_is_attempting_to_determine_": "Il tuo compagno sta cercando di determinare se lui o lei sta davvero parlando con te.",
|
||||
"to_authenticate_to_your_buddy": "Per autenticare a il tuo compagno. ",
|
||||
"enter_the_answer_and_click_answer": "inserisci la risposta e fare click su risposta.",
|
||||
"enter_the_secret": "inserire il segreto.",
|
||||
"Creating_your_private_key_": "Creare la propria chiave privata; questo potrebbe richiedere un po'.",
|
||||
"Authenticating_a_buddy_helps_": "Autenticazione un compagno aiuta a garantire che la persona si sta parlando è davvero quello che lui o lei sostiene di essere.",
|
||||
"How_do_you_want_to_authenticate_your_buddy": "Come si desidera autenticare {{bid_name}} (<b>{{bid_jid}}</b>)?",
|
||||
"Select_method": "Seleziona metodo ..",
|
||||
"Manual": "manuale",
|
||||
"Question": "domanda",
|
||||
"Secret": "segreto",
|
||||
"To_verify_the_fingerprint_": "Per verificare l'impronta digitale, contattare il proprio compagno attraverso qualche altro canale affidabile, come il telefono.",
|
||||
"Your_fingerprint": "il tuo impronta digitale",
|
||||
"Buddy_fingerprint": "impronta digitale da compagno",
|
||||
"Close": "chiude",
|
||||
"Compared": "comparato",
|
||||
"To_authenticate_using_a_question_": "Per autenticare tramite una questione, scegli una questione la cui risposta è nota solo voi e il tuo compagno",
|
||||
"Ask": "chiedi",
|
||||
"To_authenticate_pick_a_secret_": "Per autenticare, scegli un segreto noto solo a te e il tuo compagno.",
|
||||
"Compare": "Comparare",
|
||||
"Fingerprints": "Impronta digitale",
|
||||
"Authentication": "Autenticazione",
|
||||
"Message": "Messagio",
|
||||
"Add_buddy": "Aggiungi un compagno",
|
||||
"rename_buddy": "rinomina compagno",
|
||||
"delete_buddy": "elimina compagno",
|
||||
"Login": "Login",
|
||||
"Username": "Identificazione dell'utente",
|
||||
"Password": "Password",
|
||||
"Cancel": "Cancella",
|
||||
"Connect": "Collega",
|
||||
"Type_in_the_full_username_": "Digita l'identificazione utente completo e un alias opzionale.",
|
||||
"Alias": "Alias",
|
||||
"Add": "Aggiungi",
|
||||
"Subscription_request": "Rrichiesta di sottoscrizione",
|
||||
"You_have_a_request_from": "Hai una richiesta da",
|
||||
"Deny": "Refiuta",
|
||||
"Approve": "Approva",
|
||||
"Remove_buddy": "Rimuova il compagno",
|
||||
"You_are_about_to_remove_": "Stai rimovendo {{bid_name}} (<b>{{bid_jid}}</b>) del suo lista di compagni. Tutte le chat appartenente saranno chiuse.",
|
||||
"Continue_without_chat": "Continua senza chat",
|
||||
"Please_wait": "Si prega d'attendere",
|
||||
"Login_failed": "Chat login è fallito",
|
||||
"Sorry_we_cant_authentikate_": "Autenticazione non riuscita con il server di chat. Forse la password è sbagliata?",
|
||||
"Retry": "Indietro",
|
||||
"clear_history": "Cancella la cronologia",
|
||||
"New_message_from": "Nuovo messaggio da",
|
||||
"Should_we_notify_you_": "Vuoi ricevere una notifica di nuovi messaggi in futuro?",
|
||||
"Please_accept_": "Si prega di fare clic sul bottone \"Autorizzazione\" sopra.",
|
||||
"Hide_offline": "Nascondere i contatti non in linea",
|
||||
"Show_offline": "Mostra i contatti non in linea",
|
||||
"About": "Informazione legale",
|
||||
"dnd": "Non disturbare",
|
||||
"Mute": "Muto attivo",
|
||||
"Unmute": "Muto inattivo",
|
||||
"Subscription": "Sottoscrizione",
|
||||
"both": "etrambi",
|
||||
"Status": "Status",
|
||||
"online": "In linea",
|
||||
"chat": "chat",
|
||||
"away": "via",
|
||||
"xa": "via estensivo",
|
||||
"offline": "non in linea",
|
||||
"none": "nessuno",
|
||||
"Unknown_instance_tag": "Instance tag sconosciuta.",
|
||||
"Not_one_of_our_latest_keys": "Non è una delle nostre ultime chiavi.",
|
||||
"Received_an_unreadable_encrypted_message": "Ricevuto un messaggio crittografato illeggibile.",
|
||||
"Online": "In linea",
|
||||
"Chatty": "Chiacchierino",
|
||||
"Away": "Via",
|
||||
"Extended_away": "Via estensivo",
|
||||
"Offline": "Non in linea",
|
||||
"Friendship_request": "Amicizia richiesto",
|
||||
"Confirm": "Conferma",
|
||||
"Dismiss": "Rifiuta",
|
||||
"Remove": "Rimuovi",
|
||||
"Online_help": "Guida in linea",
|
||||
"FN": "Nome e cognome",
|
||||
"N": null,
|
||||
"FAMILY": "Cognome",
|
||||
"GIVEN": "Nome",
|
||||
"NICKNAME": "Soprannome",
|
||||
"URL": "URL",
|
||||
"ADR": "Indirizzo",
|
||||
"STREET": "Via",
|
||||
"EXTADD": "Esteso Indirizzo",
|
||||
"LOCALITY": "Località",
|
||||
"REGION": "Regione",
|
||||
"PCODE": "Codice Postale",
|
||||
"CTRY": "Paese",
|
||||
"TEL": "Telefono",
|
||||
"NUMBER": "Numero",
|
||||
"EMAIL": "E-mail",
|
||||
"USERID": null,
|
||||
"ORG": "Organizzazione",
|
||||
"ORGNAME": "Nome",
|
||||
"ORGUNIT": "Unità",
|
||||
"TITLE": "Titolo di lavoro",
|
||||
"ROLE": "Funzione",
|
||||
"BDAY": "Compleanno",
|
||||
"DESC": "Descrizione",
|
||||
"PHOTO": null,
|
||||
"send_message": "Messagio inviato",
|
||||
"get_info": "Mostra informazioni",
|
||||
"Settings": "Impostazione",
|
||||
"Priority": "Priorità",
|
||||
"Save": "Salva",
|
||||
"User_settings": "Impostazione dell'utente",
|
||||
"A_fingerprint_": "Una impronta digitale è usato per assicurarsi che la persona con cui stai parlando è lui o lei che sta dicendo.",
|
||||
"Your_roster_is_empty_add_a": "Il suo elenco è vuoto, aggiungi un ",
|
||||
"new_buddy": "compagno nuovo",
|
||||
"is": "è",
|
||||
"Login_options": "Opzioni di login",
|
||||
"BOSH_url": "BOSH URL",
|
||||
"Domain": "Domain",
|
||||
"Resource": "Risorsa",
|
||||
"On_login": "Login on",
|
||||
"Received_an_unencrypted_message": "Ricevuto un messaggio non crittografato",
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": "Spiace, il tuo compagno non fornisce alcuna informazione.",
|
||||
"Info_about": "Informazioni",
|
||||
"Authentication_aborted": "Autenticazione interrotta",
|
||||
"Authentication_request_received": "Richiesta di autenticazione ricevuto.",
|
||||
"Do_you_want_to_display_them": "Vuoi che venga visualizzato?",
|
||||
"Log_in_without_chat": "Log in senza chat",
|
||||
"has_come_online": "È venuto in linea",
|
||||
"Unknown_sender": "Mittente sconosciuto",
|
||||
"You_received_a_message_from_an_unknown_sender": "Hai ricevuto un messaggio da un mittente sconosciuto",
|
||||
"Please_allow_access_to_microphone_and_camera": "Si prega di fare clic sul bottone \"Autorizzazione\" sopra per autorizzazione del l'accesso al microfono e fotocamera.",
|
||||
"Incoming_call": "Chiamata in arrivo",
|
||||
"from": "di",
|
||||
"Do_you_want_to_accept_the_call_from": "Vuoi accettare la chiamata di",
|
||||
"Reject": "Rifiuta",
|
||||
"Accept": "Accetta",
|
||||
"hang_up": "Riattacca",
|
||||
"snapshot": "istantanea",
|
||||
"mute_my_audio": "disattiva il mio audio",
|
||||
"pause_my_video": "pausa il mio audio",
|
||||
"fullscreen": "schermo intero",
|
||||
"Info": "Informazione",
|
||||
"Local_IP": "IP locale",
|
||||
"Remote_IP": "IP remoto",
|
||||
"Local_Fingerprint": "Impronta digitale locale",
|
||||
"Remote_Fingerprint": "Impronta digitale remoto",
|
||||
"Video_call_not_possible": "Videochiamata non è possibile. Il tuo compagno non può effettuare videochiamate.",
|
||||
"Start_video_call": "Inizia videochiamata"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": null,
|
||||
"your_connection_is_unencrypted": null,
|
||||
"your_connection_is_encrypted": null,
|
||||
"your_buddy_closed_the_private_connection": null,
|
||||
"start_private": null,
|
||||
"close_private": null,
|
||||
"your_buddy_is_verificated": null,
|
||||
"you_have_only_a_subscription_in_one_way": null,
|
||||
"authentication_query_sent": null,
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": null,
|
||||
"unencrypted_message_received": null,
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": null,
|
||||
"not_available": null,
|
||||
"no_connection": null,
|
||||
"relogin": null,
|
||||
"trying_to_start_private_conversation": null,
|
||||
"Verified": null,
|
||||
"Unverified": null,
|
||||
"private_conversation_started": null,
|
||||
"private_conversation_aborted": null,
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": null,
|
||||
"conversation_is_now_verified": null,
|
||||
"authentication_failed": null,
|
||||
"your_buddy_is_attempting_to_determine_": null,
|
||||
"to_authenticate_to_your_buddy": null,
|
||||
"enter_the_answer_and_click_answer": null,
|
||||
"enter_the_secret": null,
|
||||
"Creating_your_private_key_": null,
|
||||
"Authenticating_a_buddy_helps_": null,
|
||||
"How_do_you_want_to_authenticate_your_buddy": null,
|
||||
"Select_method": null,
|
||||
"Manual": null,
|
||||
"Question": null,
|
||||
"Secret": null,
|
||||
"To_verify_the_fingerprint_": null,
|
||||
"Your_fingerprint": null,
|
||||
"Buddy_fingerprint": null,
|
||||
"Close": null,
|
||||
"Compared": null,
|
||||
"To_authenticate_using_a_question_": null,
|
||||
"Ask": null,
|
||||
"To_authenticate_pick_a_secret_": null,
|
||||
"Compare": null,
|
||||
"Fingerprints": null,
|
||||
"Authentication": null,
|
||||
"Message": null,
|
||||
"Add_buddy": null,
|
||||
"rename_buddy": null,
|
||||
"delete_buddy": null,
|
||||
"Login": null,
|
||||
"Username": null,
|
||||
"Password": null,
|
||||
"Cancel": null,
|
||||
"Connect": null,
|
||||
"Type_in_the_full_username_": null,
|
||||
"Alias": null,
|
||||
"Add": null,
|
||||
"Subscription_request": null,
|
||||
"You_have_a_request_from": null,
|
||||
"Deny": null,
|
||||
"Approve": null,
|
||||
"Remove_buddy": null,
|
||||
"You_are_about_to_remove_": null,
|
||||
"Continue_without_chat": null,
|
||||
"Please_wait": null,
|
||||
"Login_failed": null,
|
||||
"Sorry_we_cant_authentikate_": null,
|
||||
"Retry": null,
|
||||
"clear_history": null,
|
||||
"New_message_from": null,
|
||||
"Should_we_notify_you_": null,
|
||||
"Please_accept_": null,
|
||||
"Hide_offline": null,
|
||||
"Show_offline": null,
|
||||
"About": null,
|
||||
"dnd": null,
|
||||
"Mute": null,
|
||||
"Unmute": null,
|
||||
"Subscription": null,
|
||||
"both": null,
|
||||
"Status": null,
|
||||
"online": null,
|
||||
"chat": null,
|
||||
"away": null,
|
||||
"xa": null,
|
||||
"offline": null,
|
||||
"none": null,
|
||||
"Unknown_instance_tag": null,
|
||||
"Not_one_of_our_latest_keys": null,
|
||||
"Received_an_unreadable_encrypted_message": null,
|
||||
"Online": null,
|
||||
"Chatty": null,
|
||||
"Away": null,
|
||||
"Extended_away": null,
|
||||
"Offline": null,
|
||||
"Friendship_request": null,
|
||||
"Confirm": null,
|
||||
"Dismiss": null,
|
||||
"Remove": null,
|
||||
"Online_help": null,
|
||||
"FN": null,
|
||||
"N": null,
|
||||
"FAMILY": null,
|
||||
"GIVEN": null,
|
||||
"NICKNAME": null,
|
||||
"URL": null,
|
||||
"ADR": null,
|
||||
"STREET": null,
|
||||
"EXTADD": null,
|
||||
"LOCALITY": null,
|
||||
"REGION": null,
|
||||
"PCODE": null,
|
||||
"CTRY": null,
|
||||
"TEL": null,
|
||||
"NUMBER": null,
|
||||
"EMAIL": null,
|
||||
"USERID": null,
|
||||
"ORG": null,
|
||||
"ORGNAME": null,
|
||||
"ORGUNIT": null,
|
||||
"TITLE": null,
|
||||
"ROLE": null,
|
||||
"BDAY": null,
|
||||
"DESC": null,
|
||||
"PHOTO": null,
|
||||
"send_message": null,
|
||||
"get_info": null,
|
||||
"Settings": null,
|
||||
"Priority": null,
|
||||
"Save": null,
|
||||
"User_settings": null,
|
||||
"A_fingerprint_": null,
|
||||
"Your_roster_is_empty_add_a": null,
|
||||
"new_buddy": null,
|
||||
"is": null,
|
||||
"Login_options": null,
|
||||
"BOSH_url": null,
|
||||
"Domain": null,
|
||||
"Resource": null,
|
||||
"On_login": null,
|
||||
"Received_an_unencrypted_message": null,
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": null,
|
||||
"Info_about": null,
|
||||
"Authentication_aborted": null,
|
||||
"Authentication_request_received": null,
|
||||
"Do_you_want_to_display_them": null,
|
||||
"Log_in_without_chat": null,
|
||||
"has_come_online": null,
|
||||
"Unknown_sender": null,
|
||||
"You_received_a_message_from_an_unknown_sender": null,
|
||||
"Please_allow_access_to_microphone_and_camera": null,
|
||||
"Incoming_call": null,
|
||||
"from": null,
|
||||
"Do_you_want_to_accept_the_call_from": null,
|
||||
"Reject": null,
|
||||
"Accept": null,
|
||||
"hang_up": null,
|
||||
"snapshot": null,
|
||||
"mute_my_audio": null,
|
||||
"pause_my_video": null,
|
||||
"fullscreen": null,
|
||||
"Info": null,
|
||||
"Local_IP": null,
|
||||
"Remote_IP": null,
|
||||
"Local_Fingerprint": null,
|
||||
"Remote_Fingerprint": null,
|
||||
"Video_call_not_possible": null,
|
||||
"Start_video_call": null
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": "Logowanie...",
|
||||
"your_connection_is_unencrypted": "Twoje połączenie nie jest szyfrowane.",
|
||||
"your_connection_is_encrypted": "Twoje połączenie jest szyfrowane.",
|
||||
"your_buddy_closed_the_private_connection": "Twój rozmówca zamknął połączenie.",
|
||||
"start_private": "Rozpocznij rozmowę.",
|
||||
"close_private": "Zakończ rozmowę.",
|
||||
"your_buddy_is_verificated": "Twój rozmówca został zweryfikowany.",
|
||||
"you_have_only_a_subscription_in_one_way": "Masz jednostronną subskrypcję.",
|
||||
"authentication_query_sent": "Wysłano proźbę o autentykację.",
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": "Twoja wiadomość nie została wysłana. Proszę, zamknij rozmowę.",
|
||||
"unencrypted_message_received": "Zwrotna niezaszyfrowana wiadomość.",
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Wiadomość nie została wysłana ponieważ nie posiadasz subskrybcji u rozmówcy.",
|
||||
"not_available": "Niedostępny.",
|
||||
"no_connection": "Brak połączenia!",
|
||||
"relogin": "Połącz ponownie",
|
||||
"trying_to_start_private_conversation": "Rozpocznij rozmowę!",
|
||||
"Verified": "Zweryfikowano",
|
||||
"Unverified": "Niezweryfikowano",
|
||||
"private_conversation_started": "Rozmowa prywatna rozpoczęta.",
|
||||
"private_conversation_aborted": "Anulowano rozmowę!",
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Rozmówca przerwał połączenie!",
|
||||
"conversation_is_now_verified": "Zweryfikowano połączenie.",
|
||||
"authentication_failed": "Weryfikacja się nie powiodła.",
|
||||
"your_buddy_is_attempting_to_determine_": "Twój rozmówca próbuje się z Tobą połączyć.",
|
||||
"to_authenticate_to_your_buddy": "Autoryzacja z rozmówcą, ",
|
||||
"enter_the_answer_and_click_answer": "napisz odpowiedź.",
|
||||
"enter_the_secret": "wpisz hasło.",
|
||||
"Creating_your_private_key_": "Tworzenie klucza prywatnego; może to chwilę potrwać",
|
||||
"Authenticating_a_buddy_helps_": "Autoryzacja pomoże w ustaleniu faktycznej tożsamości rozmówcy ;).",
|
||||
"How_do_you_want_to_authenticate_your_buddy": "Jakiej autoryzacji chcesz użyć {{bid_name}} (<b>{{bid_jid}}</b>)?",
|
||||
"Select_method": "Wybierz sposób...",
|
||||
"Manual": "Ręcznie",
|
||||
"Question": "Pytanie",
|
||||
"Secret": "Hasło",
|
||||
"To_verify_the_fingerprint_": "Aby zweryfikować kod najpierw skontaktuj się z rozmówcą np. za pomocą telefonu.",
|
||||
"Your_fingerprint": "Twój kod:",
|
||||
"Buddy_fingerprint": "Kod rozmówcy",
|
||||
"Close": "Zamknij",
|
||||
"Compared": "Porównano",
|
||||
"To_authenticate_using_a_question_": "Aby autoryzować za pomocą pytania, wybierz pytanie na które tylko Twój rozmówca zna odpowiedź.",
|
||||
"Ask": "Zadaj pytanie",
|
||||
"To_authenticate_pick_a_secret_": "Aby autoryzować za pomocą hasła, wybierz hasło na które zna tylko Twój rozmówca.",
|
||||
"Compare": "Dopasuj",
|
||||
"Fingerprints": "Kody autoryzacyjne",
|
||||
"Authentication": "Autoryzacja",
|
||||
"Message": "Wiadomość",
|
||||
"Add_buddy": "Dodaj kontakt",
|
||||
"rename_buddy": "Zmień nazwę",
|
||||
"delete_buddy": "Usuń kontakt",
|
||||
"Login": "Login",
|
||||
"Username": "Nazwa Użytkownika",
|
||||
"Password": "Hasło",
|
||||
"Cancel": "Anuluj",
|
||||
"Connect": "Połączenie",
|
||||
"Type_in_the_full_username_": "Wpisz pełną nazwę użytkownika (np. <B>imię.nazwisko@zajezdnia.local</B>) oraz jego nazwę wyświetlaną (Alias).",
|
||||
"Alias": "Alias",
|
||||
"Add": "Dodaj",
|
||||
"Subscription_request": "Potwierdzenie subskrypcji",
|
||||
"You_have_a_request_from": "Masz potwierdzenie od",
|
||||
"Deny": "Odmów",
|
||||
"Approve": "Zatwierdź",
|
||||
"Remove_buddy": "Usuń rozmówcę",
|
||||
"You_are_about_to_remove_": "Twój rozmówca {{bid_name}} (<b>{{bid_jid}}</b>) usunął Cię ze swojej listy kontaktów.",
|
||||
"Continue_without_chat": "Kontynuuj bez komunikatora",
|
||||
"Please_wait": "Proszę czekać",
|
||||
"Login_failed": "Błędne logowanie",
|
||||
"Sorry_we_cant_authentikate_": "Błędna autoryzacja z serwerem. Może hasło jest nieprawidłowe?",
|
||||
"Retry": "Powrót",
|
||||
"clear_history": "Wyczyść historię",
|
||||
"New_message_from": "Nowa wiadomość od",
|
||||
"Should_we_notify_you_": "Czy chcesz otrzymywać powiadomienia o nowych wiadomościach w przyszłości?",
|
||||
"Please_accept_": "Kliknij \"Zezwól\" na górze.",
|
||||
"Hide_offline": "Schowaj niedostępne kontakty",
|
||||
"Show_offline": "Pokaż niedostępne kontakty",
|
||||
"About": "Info",
|
||||
"dnd": "Nie przeszkadzać",
|
||||
"Mute": "Wycisz",
|
||||
"Unmute": "Włącz dźwięk",
|
||||
"Subscription": "Subskrybcja",
|
||||
"both": "obustronna",
|
||||
"Status": "Status",
|
||||
"online": "Dostępny",
|
||||
"chat": "czat",
|
||||
"away": "z dala od kompa",
|
||||
"xa": "hen hen...",
|
||||
"offline": "niedostępny",
|
||||
"none": "brak",
|
||||
"Unknown_instance_tag": "Nieznany przypadek.",
|
||||
"Not_one_of_our_latest_keys": "Not one of our latest keys.",
|
||||
"Received_an_unreadable_encrypted_message": "Received an unreadable encrypted message.",
|
||||
"Online": "Połączony",
|
||||
"Chatty": "Pogawędzimy?",
|
||||
"Away": "Daleko",
|
||||
"Extended_away": "Hen Hen...",
|
||||
"Offline": "Niedostępny",
|
||||
"Friendship_request": "Zapytanie od znajomego?",
|
||||
"Confirm": "Potwierdzenie",
|
||||
"Dismiss": "Odwołaj",
|
||||
"Remove": "Usuń",
|
||||
"Online_help": "Pomoc Online",
|
||||
"FN": "Pełna nazwa",
|
||||
"N": " ",
|
||||
"FAMILY": "Nazwisko",
|
||||
"GIVEN": "Imię",
|
||||
"NICKNAME": "Pseudonim",
|
||||
"URL": "Strona WWW",
|
||||
"ADR": "Adres",
|
||||
"STREET": "Ulica",
|
||||
"EXTADD": "Extended Address",
|
||||
"LOCALITY": "Lokalizacja",
|
||||
"REGION": "Region",
|
||||
"PCODE": "Kod pocztowy",
|
||||
"CTRY": "Kraj",
|
||||
"TEL": "Telefon",
|
||||
"NUMBER": "Numer",
|
||||
"EMAIL": "Email",
|
||||
"USERID": " ",
|
||||
"ORG": "Organizacja",
|
||||
"ORGNAME": "Nazwa",
|
||||
"ORGUNIT": "Jednostka",
|
||||
"TITLE": "Stanowisko",
|
||||
"ROLE": "Rola",
|
||||
"BDAY": "Data urodzin",
|
||||
"DESC": "Opis",
|
||||
"PHOTO": " ",
|
||||
"send_message": "Wyślij wiadomość",
|
||||
"get_info": "Pokaż informację",
|
||||
"Settings": "Ustawienia",
|
||||
"Priority": "Priorytet",
|
||||
"Save": "Zapisz",
|
||||
"User_settings": "Ustawienia Użytkownika",
|
||||
"A_fingerprint_": "Kod służy do autoryzacji Twojego rozmówcy aby potwierdzić jego tożsamość.",
|
||||
"Your_roster_is_empty_add_a": "Twoja lista jest pusta, dodaj kontakty ",
|
||||
"new_buddy": "Nowy kontakt",
|
||||
"is": "jest",
|
||||
"Login_options": "opcje logowania",
|
||||
"BOSH_url": "Adres BOSH",
|
||||
"Domain": "Domena",
|
||||
"Resource": "Źródło",
|
||||
"On_login": "Na login",
|
||||
"Received_an_unencrypted_message": "Zatwierdzono nieszyfrowaną wiadomość.",
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": "Twój rozmówca nie posiada żadnych informacji.",
|
||||
"Info_about": "Informacja o...",
|
||||
"Authentication_aborted": "Autoryzacja anulowana.",
|
||||
"Authentication_request_received": "Prośba o autoryzację została przyjęta.",
|
||||
"Do_you_want_to_display_them": "Chcesz to wyświetlić?",
|
||||
"Log_in_without_chat": "Zaloguj bez komunikatora",
|
||||
"has_come_online": "jest teraz dostępny",
|
||||
"Unknown_sender": "Nieznany nadawca",
|
||||
"You_received_a_message_from_an_unknown_sender": "Masz wiadomość od nieznanego nadawcy.",
|
||||
"Please_allow_access_to_microphone_and_camera": "Kliknij \"Potwierdź\" na górze, aby móc korzystać z mikrofonu oraz kamery.",
|
||||
"Incoming_call": "Przychodzące połączenie",
|
||||
"from": "z",
|
||||
"Do_you_want_to_accept_the_call_from": "Akceptujesz połączenie od",
|
||||
"Reject": "Odrzuć",
|
||||
"Accept": "Zaakceptuj",
|
||||
"hang_up": "odbierz",
|
||||
"snapshot": "zrób zdjęcie",
|
||||
"mute_my_audio": "wycisz dźwięk",
|
||||
"pause_my_video": "zatrzymaj moje wideo",
|
||||
"fullscreen": "Pełny ekran",
|
||||
"Info": "Informacja",
|
||||
"Local_IP": "Adres IP",
|
||||
"Remote_IP": "Zdalny adres IP",
|
||||
"Local_Fingerprint": "Kod lokalny",
|
||||
"Remote_Fingerprint": "Zdalny kod",
|
||||
"Video_call_not_possible": "Rozmowa wideo jest niemożliwa. Twój rozmówca nie ma możliwości prowadzenia takich rozmów.",
|
||||
"Start_video_call": "Rozpocznij rozmowę wideo"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": "Entrando...",
|
||||
"your_connection_is_unencrypted": "Sua conexão não é encriptada",
|
||||
"your_connection_is_encrypted": "Sua conexão é encriptada",
|
||||
"your_buddy_closed_the_private_connection": "Seu contato fechou a conexão privada",
|
||||
"start_private": "Iniciar conversa privada",
|
||||
"close_private": "Fechar conversa privada",
|
||||
"your_buddy_is_verificated": "Seu contato está verificado",
|
||||
"you_have_only_a_subscription_in_one_way": "Você só tem a inscrição one-way",
|
||||
"authentication_query_sent": "Pergunta de autenticação enviada",
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": "Sua mensagem não foi enviada. Por favor finalize sua conversa privada",
|
||||
"unencrypted_message_received": "Mensagem não encriptada recebida",
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": "Sua mensagem não foi enviada porque sua inscrição não é válida",
|
||||
"not_available": "Indisponível",
|
||||
"no_connection": "Sem conexão!",
|
||||
"relogin": "reentrar",
|
||||
"trying_to_start_private_conversation": "Tentando iniciar conversa privada",
|
||||
"Verified": "Verificado",
|
||||
"Unverified": "Não verificado",
|
||||
"private_conversation_started": "Conversa privada iniciada.",
|
||||
"private_conversation_aborted": "Conversa privada abortada!",
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": "Seu contato encerrou a conversa privada! Você deveria fazer o mesmo.",
|
||||
"conversation_is_now_verified": "Conversa verificada.",
|
||||
"authentication_failed": "Autenticação falhou.",
|
||||
"your_buddy_is_attempting_to_determine_": "Seu contato está tentando determinar se ele realmente está falando contigo.",
|
||||
"to_authenticate_to_your_buddy": "Para autenticar seu contato, ",
|
||||
"enter_the_answer_and_click_answer": "entre com a resposta e clique em Responder.",
|
||||
"enter_the_secret": "escreva a senha.",
|
||||
"Creating_your_private_key_": "Criando sua chave privada: isso pode demorar um pouco.",
|
||||
"Authenticating_a_buddy_helps_": "Autenticar seu contato ajuda a garantir que a pessoa com a qual você está falando é realmente a pessoa que ela alega ser.",
|
||||
"How_do_you_want_to_authenticate_your_buddy": "Como você gostaria de se autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?",
|
||||
"Select_method": "Selecione o método...",
|
||||
"Manual": "Manual",
|
||||
"Question": "Pergunta",
|
||||
"Secret": "Senha",
|
||||
"To_verify_the_fingerprint_": "Para verificar o fingerprint, entre em contato com seu contato usando outro meio, de preferência seguro, como o telefone.",
|
||||
"Your_fingerprint": "Seu fingerprint",
|
||||
"Buddy_fingerprint": "Fingerprint do contato",
|
||||
"Close": "Fechar",
|
||||
"Compared": "Comparado",
|
||||
"To_authenticate_using_a_question_": "Para autenticar seu contato faça uma pergunta, mas escolha que só ele saiba a resposta.",
|
||||
"Ask": "Pergunta",
|
||||
"To_authenticate_pick_a_secret_": "Para autenticar, escolha um segredo que somente você e seu contato saibam.",
|
||||
"Compare": "Compare",
|
||||
"Fingerprints": "Fingerprints",
|
||||
"Authentication": "Autenticação",
|
||||
"Message": "Mensagem",
|
||||
"Add_buddy": "Adicionar contato",
|
||||
"rename_buddy": "renomear contato",
|
||||
"delete_buddy": "remover contato",
|
||||
"Login": "Entrar",
|
||||
"Username": "Usuário",
|
||||
"Password": "Senha",
|
||||
"Cancel": "Cancelar",
|
||||
"Connect": "Conectar",
|
||||
"Type_in_the_full_username_": "Digite seu nome completo e um apelido opcional.",
|
||||
"Alias": "Apelido",
|
||||
"Add": "Adicionar",
|
||||
"Subscription_request": "Pedido de inscrição",
|
||||
"You_have_a_request_from": "Você tem um pedido de",
|
||||
"Deny": "Negar",
|
||||
"Approve": "Aprovar",
|
||||
"Remove_buddy": "Remover contato",
|
||||
"You_are_about_to_remove_": "Você está prestes a remover {{bid_name}} (<b>{{bid_jid}}</b>) de sua lista de contatos. Todas as conversas serão fechadas.",
|
||||
"Continue_without_chat": "Continue sem converar",
|
||||
"Please_wait": "Por favor aguarde",
|
||||
"Login_failed": "Autenticação da conversa falhou",
|
||||
"Sorry_we_cant_authentikate_": "A autenticação com o servidor falhou. Talvez seja a senha errada?",
|
||||
"Retry": "Voltar",
|
||||
"clear_history": "Limpar histórico",
|
||||
"New_message_from": "Nova mensagem de",
|
||||
"Should_we_notify_you_": "Devemos continuar notificando sobre novas mensagens no futuro?",
|
||||
"Please_accept_": "Por favor clique no botão \"Permitir\" na parte superior.",
|
||||
"Hide_offline": "Esconder contatos desconectados",
|
||||
"Show_offline": "Mostrar contatos desconectados",
|
||||
"About": "Sobre",
|
||||
"dnd": "Não perturbe",
|
||||
"Mute": "Mudo",
|
||||
"Unmute": "Ligar",
|
||||
"Subscription": "Inscrição",
|
||||
"both": "ambos",
|
||||
"Status": "Status",
|
||||
"online": "online",
|
||||
"chat": "conversa",
|
||||
"away": "ausente",
|
||||
"xa": "ausente por mais tempo",
|
||||
"offline": "desativado",
|
||||
"none": "nenhum",
|
||||
"Unknown_instance_tag": "Marcação desconhecida da instância",
|
||||
"Not_one_of_our_latest_keys": "Nenhuma de nossas ultimas chaves.",
|
||||
"Received_an_unreadable_encrypted_message": "Mensagem encriptada ilegível foi recebida.",
|
||||
"Online": "Online",
|
||||
"Chatty": "Tagarela",
|
||||
"Away": "Ausente",
|
||||
"Extended_away": "Ausente por mais tempo",
|
||||
"Offline": "Desativado",
|
||||
"Friendship_request": "Pedido de amizade",
|
||||
"Confirm": "Confirmar",
|
||||
"Dismiss": "Ignorar",
|
||||
"Remove": "Remover",
|
||||
"Online_help": "Ajuda online",
|
||||
"FN": "Nome completo",
|
||||
"N": " ",
|
||||
"FAMILY": "Sobrenome",
|
||||
"GIVEN": "Nome",
|
||||
"NICKNAME": "Apelido",
|
||||
"URL": "URL",
|
||||
"ADR": "Endereço",
|
||||
"STREET": "Rua, Av, etc",
|
||||
"EXTADD": "Complemento",
|
||||
"LOCALITY": "Localidade",
|
||||
"REGION": "Região",
|
||||
"PCODE": "CEP",
|
||||
"CTRY": "País",
|
||||
"TEL": "Telefone",
|
||||
"NUMBER": "Número",
|
||||
"EMAIL": "Email",
|
||||
"USERID": " ",
|
||||
"ORG": "Empresa",
|
||||
"ORGNAME": "Nome",
|
||||
"ORGUNIT": "Unidade",
|
||||
"TITLE": "Cargo",
|
||||
"ROLE": "Rol",
|
||||
"BDAY": "Data de nascimento",
|
||||
"DESC": "Descrição",
|
||||
"PHOTO": " ",
|
||||
"send_message": "Enviar mensagem",
|
||||
"get_info": "Exibir informações",
|
||||
"Settings": "Configurações",
|
||||
"Priority": "Prioridade",
|
||||
"Save": "Salvar",
|
||||
"User_settings": "Configurações do usuário",
|
||||
"A_fingerprint_": "O fingerprint é usado para certificar que a pessoa com a qual se está falando é que ela diz ser.",
|
||||
"Your_roster_is_empty_add_a": "Sua lista está vazia, adicione um ",
|
||||
"new_buddy": "novo contato",
|
||||
"is": "é",
|
||||
"Login_options": "Opções de login",
|
||||
"BOSH_url": "BOSH URL",
|
||||
"Domain": "Domínio",
|
||||
"Resource": "Recurso",
|
||||
"On_login": "Ao autenticar",
|
||||
"Received_an_unencrypted_message": "Mensagem não encriptada recebida",
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": "Desculpe, seu contato não forneceu nenhuma informação",
|
||||
"Info_about": "Informações sobre",
|
||||
"Authentication_aborted": "Autenticação encerrada.",
|
||||
"Authentication_request_received": "Pedido de autenticação recebido",
|
||||
"Do_you_want_to_display_them": "Você quer mostrá-los?",
|
||||
"Log_in_without_chat": "Entrar sem conversar",
|
||||
"has_come_online": "ficou online",
|
||||
"Unknown_sender": "Emissor desconhecido",
|
||||
"You_received_a_message_from_an_unknown_sender": "Você recebeu uma mensagem de um emissor desconhecido",
|
||||
"Please_allow_access_to_microphone_and_camera": "Por favor clique no botão \"Permitir\" no topo, para conceder acesso ao seu microfone e câmera.",
|
||||
"Incoming_call": "Recebendo chamada",
|
||||
"from": "de",
|
||||
"Do_you_want_to_accept_the_call_from": "Você aceita a chamada de",
|
||||
"Reject": "Negar",
|
||||
"Accept": "Aceitar",
|
||||
"hang_up": "desligar",
|
||||
"snapshot": "registrar imagem",
|
||||
"mute_my_audio": "mudo",
|
||||
"pause_my_video": "pausar vídeo",
|
||||
"fullscreen": "tela cheia",
|
||||
"Info": "Informações",
|
||||
"Local_IP": "IP local",
|
||||
"Remote_IP": "IP remoto",
|
||||
"Local_Fingerprint": "Fingerprint local",
|
||||
"Remote_Fingerprint": "Fingerprint remoto",
|
||||
"Video_call_not_possible": "Chamada de vídeo impossível. Seu contato não suporta chamadas desse tipo.",
|
||||
"Start_video_call": "Iniciar chamada de vídeo"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"translation": {
|
||||
"Logging_in": null,
|
||||
"your_connection_is_unencrypted": null,
|
||||
"your_connection_is_encrypted": null,
|
||||
"your_buddy_closed_the_private_connection": null,
|
||||
"start_private": null,
|
||||
"close_private": null,
|
||||
"your_buddy_is_verificated": null,
|
||||
"you_have_only_a_subscription_in_one_way": null,
|
||||
"authentication_query_sent": null,
|
||||
"your_message_wasnt_send_please_end_your_private_conversation": null,
|
||||
"unencrypted_message_received": null,
|
||||
"your_message_wasnt_send_because_you_have_no_valid_subscription": null,
|
||||
"not_available": null,
|
||||
"no_connection": null,
|
||||
"relogin": null,
|
||||
"trying_to_start_private_conversation": null,
|
||||
"Verified": null,
|
||||
"Unverified": null,
|
||||
"private_conversation_started": null,
|
||||
"private_conversation_aborted": null,
|
||||
"your_buddy_closed_the_private_conversation_you_should_do_the_same": null,
|
||||
"conversation_is_now_verified": null,
|
||||
"authentication_failed": null,
|
||||
"your_buddy_is_attempting_to_determine_": null,
|
||||
"to_authenticate_to_your_buddy": null,
|
||||
"enter_the_answer_and_click_answer": null,
|
||||
"enter_the_secret": null,
|
||||
"Creating_your_private_key_": null,
|
||||
"Authenticating_a_buddy_helps_": null,
|
||||
"How_do_you_want_to_authenticate_your_buddy": null,
|
||||
"Select_method": null,
|
||||
"Manual": null,
|
||||
"Question": null,
|
||||
"Secret": null,
|
||||
"To_verify_the_fingerprint_": null,
|
||||
"Your_fingerprint": null,
|
||||
"Buddy_fingerprint": null,
|
||||
"Close": null,
|
||||
"Compared": null,
|
||||
"To_authenticate_using_a_question_": null,
|
||||
"Ask": null,
|
||||
"To_authenticate_pick_a_secret_": null,
|
||||
"Compare": null,
|
||||
"Fingerprints": null,
|
||||
"Authentication": null,
|
||||
"Message": null,
|
||||
"Add_buddy": null,
|
||||
"rename_buddy": null,
|
||||
"delete_buddy": null,
|
||||
"Login": null,
|
||||
"Username": null,
|
||||
"Password": null,
|
||||
"Cancel": null,
|
||||
"Connect": null,
|
||||
"Type_in_the_full_username_": null,
|
||||
"Alias": null,
|
||||
"Add": null,
|
||||
"Subscription_request": null,
|
||||
"You_have_a_request_from": null,
|
||||
"Deny": null,
|
||||
"Approve": null,
|
||||
"Remove_buddy": null,
|
||||
"You_are_about_to_remove_": null,
|
||||
"Continue_without_chat": null,
|
||||
"Please_wait": null,
|
||||
"Login_failed": null,
|
||||
"Sorry_we_cant_authentikate_": null,
|
||||
"Retry": null,
|
||||
"clear_history": null,
|
||||
"New_message_from": null,
|
||||
"Should_we_notify_you_": null,
|
||||
"Please_accept_": null,
|
||||
"Hide_offline": null,
|
||||
"Show_offline": null,
|
||||
"About": null,
|
||||
"dnd": null,
|
||||
"Mute": null,
|
||||
"Unmute": null,
|
||||
"Subscription": null,
|
||||
"both": null,
|
||||
"Status": null,
|
||||
"online": null,
|
||||
"chat": null,
|
||||
"away": null,
|
||||
"xa": null,
|
||||
"offline": null,
|
||||
"none": null,
|
||||
"Unknown_instance_tag": null,
|
||||
"Not_one_of_our_latest_keys": null,
|
||||
"Received_an_unreadable_encrypted_message": null,
|
||||
"Online": null,
|
||||
"Chatty": null,
|
||||
"Away": null,
|
||||
"Extended_away": null,
|
||||
"Offline": null,
|
||||
"Friendship_request": null,
|
||||
"Confirm": null,
|
||||
"Dismiss": null,
|
||||
"Remove": null,
|
||||
"Online_help": null,
|
||||
"FN": null,
|
||||
"N": null,
|
||||
"FAMILY": null,
|
||||
"GIVEN": null,
|
||||
"NICKNAME": null,
|
||||
"URL": null,
|
||||
"ADR": null,
|
||||
"STREET": null,
|
||||
"EXTADD": null,
|
||||
"LOCALITY": null,
|
||||
"REGION": null,
|
||||
"PCODE": null,
|
||||
"CTRY": null,
|
||||
"TEL": null,
|
||||
"NUMBER": null,
|
||||
"EMAIL": null,
|
||||
"USERID": null,
|
||||
"ORG": null,
|
||||
"ORGNAME": null,
|
||||
"ORGUNIT": null,
|
||||
"TITLE": null,
|
||||
"ROLE": null,
|
||||
"BDAY": null,
|
||||
"DESC": null,
|
||||
"PHOTO": null,
|
||||
"send_message": null,
|
||||
"get_info": null,
|
||||
"Settings": null,
|
||||
"Priority": null,
|
||||
"Save": null,
|
||||
"User_settings": null,
|
||||
"A_fingerprint_": null,
|
||||
"Your_roster_is_empty_add_a": null,
|
||||
"new_buddy": null,
|
||||
"is": null,
|
||||
"Login_options": null,
|
||||
"BOSH_url": null,
|
||||
"Domain": null,
|
||||
"Resource": null,
|
||||
"On_login": null,
|
||||
"Received_an_unencrypted_message": null,
|
||||
"Sorry_your_buddy_doesnt_provide_any_information": null,
|
||||
"Info_about": null,
|
||||
"Authentication_aborted": null,
|
||||
"Authentication_request_received": null,
|
||||
"Do_you_want_to_display_them": null,
|
||||
"Log_in_without_chat": null,
|
||||
"has_come_online": null,
|
||||
"Unknown_sender": null,
|
||||
"You_received_a_message_from_an_unknown_sender": null,
|
||||
"Please_allow_access_to_microphone_and_camera": null,
|
||||
"Incoming_call": null,
|
||||
"from": null,
|
||||
"Do_you_want_to_accept_the_call_from": null,
|
||||
"Reject": null,
|
||||
"Accept": null,
|
||||
"hang_up": null,
|
||||
"snapshot": null,
|
||||
"mute_my_audio": null,
|
||||
"pause_my_video": null,
|
||||
"fullscreen": null,
|
||||
"Info": null,
|
||||
"Local_IP": null,
|
||||
"Remote_IP": null,
|
||||
"Local_Fingerprint": null,
|
||||
"Remote_Fingerprint": null,
|
||||
"Video_call_not_possible": null,
|
||||
"Start_video_call": null
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,36 @@
|
||||
{
|
||||
"name": "jsxc",
|
||||
"version": "0.8.2",
|
||||
"version": "2.0.0-beta2",
|
||||
"description": "Real-time chat app",
|
||||
"homepage": "http://www.jsxc.org/",
|
||||
"bugs": "https://github.com/sualko/jsxc/issues",
|
||||
"bugs": "https://github.com/jsxc/jsxc/issues",
|
||||
"license": "MIT",
|
||||
"author": "Klaus Herberth <klaus@jsxc.org>",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sualko/jsxc"
|
||||
"url": "https://github.com/jsxc/jsxc"
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.4",
|
||||
"autoprefixer-core": "^4.0.2",
|
||||
"grunt": "^0.4.5",
|
||||
"grunt-autoprefixer": "^2.1.0",
|
||||
"grunt-banner": "~0.2.2",
|
||||
"grunt-cli": "~0.1.13",
|
||||
"grunt-contrib-clean": "~0.5.0",
|
||||
"grunt-contrib-compress": "^0.10.0",
|
||||
"grunt-contrib-concat": "^0.5.0",
|
||||
"grunt-contrib-copy": "~0.5.0",
|
||||
"grunt-contrib-csslint": "^0.3.1",
|
||||
"grunt-contrib-jshint": "~0.9.2",
|
||||
"grunt-contrib-uglify": "^0.6.0",
|
||||
"grunt-contrib-watch": "^0.6.1",
|
||||
"grunt-data-uri": "^0.2.0",
|
||||
"grunt-jsdoc": "^0.5.7",
|
||||
"grunt-merge-data": "^0.4.3",
|
||||
"grunt-postcss": "^0.2.0",
|
||||
"grunt-sass": "^0.17.0",
|
||||
"grunt-search": "^0.1.6",
|
||||
"grunt-text-replace": "~0.3.11"
|
||||
"grunt-shell": "^1.1.1",
|
||||
"grunt-text-replace": "~0.4.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
grunt commit
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,706 @@
|
||||
.jsxc_right {
|
||||
text-align: right;
|
||||
}
|
||||
.jsxc_center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.jsxc_sep {
|
||||
border-top: 1px solid $separator;
|
||||
}
|
||||
.jsxc_name {
|
||||
overflow: hidden;
|
||||
height: 30px;
|
||||
cursor: pointer;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
&:hover {
|
||||
color: $name_hover;
|
||||
}
|
||||
}
|
||||
|
||||
.jsxc_maxWidth {
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
#jsxc_dialog {
|
||||
padding: 10px;
|
||||
min-width: 300px;
|
||||
display: inline-block;
|
||||
ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
li {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
p {
|
||||
margin-bottom: 1em;
|
||||
input {
|
||||
margin-bottom: 5px;
|
||||
width: 60%;
|
||||
outline: none;
|
||||
}
|
||||
input[type="submit"] {
|
||||
width: auto;
|
||||
}
|
||||
label {
|
||||
display: block;
|
||||
width: 30%;
|
||||
float: left;
|
||||
padding: 6px 0;
|
||||
}
|
||||
}
|
||||
h3 {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.jsxc_right {
|
||||
margin-top: 20px;
|
||||
}
|
||||
fieldset {
|
||||
border: 2px solid $dialog_fieldset_border;
|
||||
}
|
||||
legend {
|
||||
padding: 0 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
input {
|
||||
outline: none;
|
||||
&:invalid {
|
||||
border: 1px solid $dialog_input_invalid;
|
||||
}
|
||||
}
|
||||
.jsxc_fieldset {
|
||||
width: 280px;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
label {
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
}
|
||||
input[type="Number"] {
|
||||
display: inline-block;
|
||||
width: 50px;
|
||||
}
|
||||
}
|
||||
input[readonly] {
|
||||
background-color: $dialog_input_readonly_bg;
|
||||
}
|
||||
.jsxc_inputinfo {
|
||||
padding-left: 30%;
|
||||
font-style: italic;
|
||||
margin-top: -1em;
|
||||
}
|
||||
.jsxc_waiting {
|
||||
&:before {
|
||||
content: " ";
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
display: inline-block;
|
||||
background-size: 100%;
|
||||
margin: 0 3px 0 0;
|
||||
background-image: image-url('loading.gif');
|
||||
}
|
||||
}
|
||||
}
|
||||
.jsxc_avatar {
|
||||
@extend %avatar-icon;
|
||||
img {
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ul.jsxc_vCard {
|
||||
min-width: 400px;
|
||||
ul {
|
||||
margin-left: 20px;
|
||||
}
|
||||
li {
|
||||
cursor: default !important;
|
||||
}
|
||||
strong {
|
||||
}
|
||||
}
|
||||
|
||||
.jsxc_spot {
|
||||
display: inline-block;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
background-color: $white;
|
||||
border-radius: 5px;
|
||||
text-indent: -99999em;
|
||||
margin-top: 3px;
|
||||
margin-right: 5px;
|
||||
border: 1px solid $spot_border !important;
|
||||
line-height: 100%;
|
||||
cursor: pointer;
|
||||
&.jsxc_online {
|
||||
background-color: $state_online;
|
||||
}
|
||||
&.jsxc_chat {
|
||||
background-color: $state_chat;
|
||||
}
|
||||
&.jsxc_away {
|
||||
background-color: $state_away;
|
||||
}
|
||||
&.jsxc_xa {
|
||||
background-color: $state_xa;
|
||||
}
|
||||
&.jsxc_dnd {
|
||||
background-color: $state_dnd;
|
||||
}
|
||||
&.jsxc_offline {
|
||||
background-color: $state_offline;
|
||||
}
|
||||
}
|
||||
|
||||
#jsxc_menu {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
text-align: center;
|
||||
&:hover>span {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
#jsxc_avatar {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
float: left;
|
||||
margin: 0 2px;
|
||||
}
|
||||
#jsxc_notice {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
float: right;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
span {
|
||||
background-color: $notice_bg;
|
||||
border-radius: 11px;
|
||||
color: $notice_color;
|
||||
font-size: 80%;
|
||||
padding: 2px;
|
||||
position: relative;
|
||||
animation: bounce 2s 1s infinite;
|
||||
}
|
||||
}
|
||||
#jsxc_menu>span {
|
||||
opacity: 0.5;
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: 30px;
|
||||
background-image: image-url('gear_white.svg');
|
||||
background-size: 18px 18px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
}
|
||||
@keyframes bounce {
|
||||
0% {
|
||||
bottom: 0;
|
||||
animation-timing-function: ease-in;
|
||||
}
|
||||
12% {
|
||||
bottom: 5px;
|
||||
animation-timing-function: ease-out;
|
||||
}
|
||||
25% {
|
||||
bottom: 0;
|
||||
animation-timing-function: ease-in;
|
||||
}
|
||||
37% {
|
||||
bottom: 5px;
|
||||
animation-timing-function: ease-out;
|
||||
}
|
||||
50% {
|
||||
bottom: 0;
|
||||
animation-timing-function: ease-in;
|
||||
}
|
||||
100% {
|
||||
bottom: 0;
|
||||
}
|
||||
}
|
||||
#jsxc_presence {
|
||||
cursor: pointer;
|
||||
padding-left: 2px;
|
||||
overflow: hidden;
|
||||
}
|
||||
#jsxc_windowList {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
right: 210px;
|
||||
left: 0;
|
||||
z-index: 50;
|
||||
clip: rect(-10000px, 10000px, 30px, 30px);
|
||||
&>ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
height: 30px;
|
||||
overflow: visible;
|
||||
white-space: nowrap;
|
||||
transition: right 0.5s;
|
||||
|
||||
&>li {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: inline-block;
|
||||
width: 250px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
margin-right: 5px;
|
||||
cursor: pointer;
|
||||
white-space: normal;
|
||||
&.jsxc_min {
|
||||
width: 200px !important;
|
||||
}
|
||||
&.jsxc_unreadMsg {
|
||||
.jsxc_name {
|
||||
font-style: italic;
|
||||
}
|
||||
.jsxc_cycle {
|
||||
background-color: $window_unread_cycle;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#jsxc_windowListSB {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
> {
|
||||
div {
|
||||
box-sizing: border-box;
|
||||
width: 14px;
|
||||
height: 100%;
|
||||
background-color: $windowListSB_bg;
|
||||
color: $windowListSB_color;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
&:hover {
|
||||
background-color: $windowListSB_bg_hover;
|
||||
}
|
||||
}
|
||||
.jsxc_disabled {
|
||||
background-color: $windowListSB_bg_disabled !important;
|
||||
color: $windowListSB_color_disabled;
|
||||
cursor: default !important;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.jsxc_bar {
|
||||
background-color: $window_bar_bg;
|
||||
cursor: pointer;
|
||||
height: 30px;
|
||||
line-height: 26px;
|
||||
padding: 2px;
|
||||
color: $window_bar_color;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
}
|
||||
.jsxc_cycle {
|
||||
position: absolute;
|
||||
bottom: 9px;
|
||||
right: 5px;
|
||||
height: 12px;
|
||||
width: 12px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.jsxc_window {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: auto;
|
||||
background-color: $window_bg;
|
||||
z-index: 80;
|
||||
cursor: default;
|
||||
.jsxc_emoticons {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
position: absolute;
|
||||
top: 240px;
|
||||
right: 0;
|
||||
cursor: pointer;
|
||||
&:after {
|
||||
content: ' ';
|
||||
background-image: image-url('smiley.png');
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
opacity: 0.3;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
ul {
|
||||
display: none;
|
||||
position: absolute;
|
||||
bottom: 33px;
|
||||
right: 3px;
|
||||
width: 210px;
|
||||
background-color: $emoticon_selection_bg;
|
||||
padding: 3px;
|
||||
border-radius: 3px;
|
||||
z-index: 200;
|
||||
list-style-type: none;
|
||||
&:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-left: 5px solid transparent;
|
||||
border-right: 5px solid transparent;
|
||||
border-top: 6px solid $emoticon_selection_bg;
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
right: 6px;
|
||||
bottom: -6px;
|
||||
}
|
||||
}
|
||||
li {
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
}
|
||||
div {
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
background-size: 30px 30px;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
&:hover {
|
||||
background-color: $emoticon_selection_hover;
|
||||
}
|
||||
}
|
||||
&:hover:after {
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
.jsxc_fade {
|
||||
position: relative;
|
||||
}
|
||||
.jsxc_gradient {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 15px;
|
||||
z-index: 100;
|
||||
background: linear-gradient(to bottom, $window_gradient 0, rgba(0, 0, 0, 0) 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$window_gradient', endColorstr='#00282323', GradientType=0);
|
||||
}
|
||||
.jsxc_avatar {
|
||||
margin-top: 1px;
|
||||
}
|
||||
.jsxc_textarea {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
padding: 3px;
|
||||
}
|
||||
.slimScrollDiv {
|
||||
margin: 0 0 6px 0;
|
||||
left: auto !important;
|
||||
top: auto !important;
|
||||
}
|
||||
input {
|
||||
&.jsxc_textinput {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
margin: 0;
|
||||
padding: 3px;
|
||||
padding-right: 40px;
|
||||
outline: none;
|
||||
border-radius: 0;
|
||||
box-sizing: border-box;
|
||||
text-align: right;
|
||||
}
|
||||
&::placeholder {
|
||||
color: $window_placeholder;
|
||||
opacity: 0.3;
|
||||
}
|
||||
}
|
||||
.jsxc_tools {
|
||||
height: 26px;
|
||||
float: right;
|
||||
> div {
|
||||
width: 17px;
|
||||
height: 26px;
|
||||
display: block;
|
||||
float: left;
|
||||
color: $tools_color;
|
||||
font-family: $font_sans;
|
||||
line-height: 26px;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.jsxc_close {
|
||||
font-size: 20px;
|
||||
&:hover {
|
||||
color: $window_close_hover;
|
||||
}
|
||||
}
|
||||
.ui-resizable-w {
|
||||
left: 0;
|
||||
}
|
||||
.ui-resizable-nw {
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
z-index: 95 !important;
|
||||
background-image: image-url('resize_gray.svg');
|
||||
}
|
||||
.ui-resizable-n {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 15px;
|
||||
z-index: 100;
|
||||
background: linear-gradient(to bottom, $window_gradient 0, rgba(40, 35, 35, 0) 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$window_gradient', endColorstr='#00282323', GradientType=0);
|
||||
}
|
||||
}
|
||||
.jsxc_chatmessage {
|
||||
margin: 3px;
|
||||
padding: 4px;
|
||||
padding-right: 10px;
|
||||
max-width: 76%;
|
||||
word-wrap: break-word;
|
||||
background-color: $chatmessage_bg;
|
||||
position: relative;
|
||||
outline: none;
|
||||
clear: both;
|
||||
a {
|
||||
color: $chatmessage_a;
|
||||
text-decoration: underline;
|
||||
}
|
||||
img {
|
||||
width: 19px;
|
||||
height: 19px;
|
||||
background-size: 19px 19px;
|
||||
}
|
||||
.jsxc_avatar {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.jsxc_timestamp {
|
||||
font-size: 8px;
|
||||
color: $chatmessage_timestamp;
|
||||
line-height: 8px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
max-width: 100%;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.jsxc_in {
|
||||
float: left;
|
||||
position: relative;
|
||||
margin-left: 10px;
|
||||
background: $chatmessage_in_bg;
|
||||
border: solid 1px $chatmessage_in_border;
|
||||
border-radius: 3px;
|
||||
&:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-style: solid;
|
||||
border-width: 5px 6px 5px 0;
|
||||
border-color: transparent $chatmessage_in_bg;
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
left: -6px;
|
||||
bottom: 10px;
|
||||
}
|
||||
.jsxc_timestamp {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
.jsxc_out {
|
||||
float: right;
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
background: $chatmessage_out_bg;
|
||||
border: solid 1px $chatmessage_out_border;
|
||||
border-radius: 3px;
|
||||
&:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-style: solid;
|
||||
border-width: 5px 0 5px 6px;
|
||||
border-color: transparent $chatmessage_out_bg;
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
right: -6px;
|
||||
bottom: 10px;
|
||||
}
|
||||
&.jsxc_received{
|
||||
&:before {
|
||||
content: '✓';
|
||||
position: absolute;
|
||||
bottom: 2px;
|
||||
right: 2px;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
color: $chatmessage_received;
|
||||
}
|
||||
.jsxc_timestamp {
|
||||
margin-right: 4px;
|
||||
}
|
||||
}
|
||||
.jsxc_timestamp {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
.jsxc_sys {
|
||||
width: auto;
|
||||
max-width: none;
|
||||
padding-right: 4px;
|
||||
box-sizing: border-box;
|
||||
margin-right: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
div.jsxc_settings {
|
||||
background-image: image-url('gear_grey.svg');
|
||||
background-size: 15px 15px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
overflow: visible;
|
||||
&:hover, .hover {
|
||||
background-image: image-url('gear_white.svg');
|
||||
}
|
||||
ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
top: 30px;
|
||||
left: 0;
|
||||
box-shadow: 0 5px 5px -5px $shadow;
|
||||
z-index: 110;
|
||||
overflow: visible;
|
||||
background-color: $window_settings_bg;
|
||||
display: none;
|
||||
}
|
||||
li {
|
||||
width: 170px;
|
||||
margin-left: 20px;
|
||||
padding-left: 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: left;
|
||||
cursor: pointer;
|
||||
&:first-child {
|
||||
border-top: 1px solid $window_settings_border_top;
|
||||
}
|
||||
&.jsxc_disabled {
|
||||
color: $window_settings_disabled;
|
||||
cursor: default;
|
||||
}
|
||||
&:hover:not(.jsxc_disabled ) {
|
||||
color: $window_settings_color_hover;
|
||||
background-color: $window_settings_bg_hover;
|
||||
}
|
||||
}
|
||||
}
|
||||
div.jsxc_transfer {
|
||||
@extend %padlock-icon;
|
||||
&:hover {
|
||||
background-image: image-url('padlock_open_white.svg');
|
||||
}
|
||||
&.jsxc_fin {
|
||||
background-image: image-url('padlock_close_grey.svg');
|
||||
}
|
||||
&.jsxc_enc {
|
||||
background-image: image-url('padlock_close_orange.svg');
|
||||
&.jsxc_trust {
|
||||
background-image: image-url('padlock_close_green.svg');
|
||||
}
|
||||
}
|
||||
&.jsxc_disabled:hover {
|
||||
@extend %padlock-icon;
|
||||
}
|
||||
}
|
||||
#colorbox {
|
||||
outline: none;
|
||||
}
|
||||
#cboxWrapper {
|
||||
outline: none;
|
||||
}
|
||||
.jsxc_loading {
|
||||
margin: 0 auto;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border: 0;
|
||||
background-size: 32px 32px !important;
|
||||
background: image-url('loading.gif');
|
||||
}
|
||||
/* @TODO: check */
|
||||
#jsxc_loginForm input[type="submit"] {
|
||||
height: 34px;
|
||||
display: inline-block;
|
||||
padding: 6px 12px;
|
||||
margin-bottom: 0;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
line-height: 1.428571429;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 4px;
|
||||
user-select: none;
|
||||
color: $white;
|
||||
background-color: $loginForm_bg;
|
||||
border-color: $loginForm_border;
|
||||
}
|
||||
#jsxc_notice>span:empty {
|
||||
display: none;
|
||||
}
|
||||
.jsxc_oneway .jsxc_avatar {
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
.jsxc_min .jsxc_tools {
|
||||
display: none;
|
||||
}
|
||||
.jsxc_tools > .jsxc_disabled {
|
||||
opacity: 0.5;
|
||||
cursor: default !important;
|
||||
}
|
||||
img.jsxc_vCard {
|
||||
float: right;
|
||||
max-width: 200px;
|
||||
max-height: 200px;
|
||||
border: 5px solid $white;
|
||||
border-radius: 2px;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
%muc-avatar-icon {
|
||||
text-indent: 999px;
|
||||
background-image: image-url('group_white.svg');
|
||||
background-size: 70% 70% !important;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.jsxc_windowItem {
|
||||
&.jsxc_groupchat {
|
||||
.jsxc_fade {
|
||||
padding-top: 30px;
|
||||
}
|
||||
.jsxc_video {
|
||||
display: none;
|
||||
}
|
||||
.jsxc_transfer {
|
||||
display: none;
|
||||
}
|
||||
.jsxc_fingerprints, jsxc_verification, jsxc_transfer {
|
||||
display: none;
|
||||
}
|
||||
.jsxc_members {
|
||||
background-image: image-url('group_grey.svg');
|
||||
background-size: 90%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
&:hover {
|
||||
background-image: image-url('group_white.svg');
|
||||
}
|
||||
}
|
||||
.jsxc_chatmessage.jsxc_in {
|
||||
margin-left: 40px;
|
||||
.jsxc_avatar {
|
||||
display: block;
|
||||
position:absolute;
|
||||
bottom: 0px;
|
||||
left: -37px;
|
||||
background-color: #777;
|
||||
}
|
||||
}
|
||||
.jsxc_bar {
|
||||
.jsxc_avatar {
|
||||
@extend %muc-avatar-icon;
|
||||
}
|
||||
}
|
||||
}
|
||||
.jsxc_memberlist {
|
||||
height: 30px;
|
||||
width: 100%;
|
||||
background-color: $window_bar_bg;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
transition: height 400ms;
|
||||
z-index: 100;
|
||||
ul {
|
||||
white-space: nowrap;
|
||||
position: absolute;
|
||||
background-color: $window_bar_bg;
|
||||
color: $window_bar_color;
|
||||
overflow: hidden;
|
||||
transition: left 400ms;
|
||||
&>li {
|
||||
display: inline-block;
|
||||
white-space: normal;
|
||||
&:last-child {
|
||||
margin-right: 2px;
|
||||
}
|
||||
.jsxc_name {
|
||||
display: none;
|
||||
}
|
||||
.jsxc_avatar {
|
||||
margin-left: 2px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.jsxc_expand {
|
||||
ul {
|
||||
white-space: normal;
|
||||
&>li {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 27px;
|
||||
line-height: 27px;
|
||||
.jsxc_name {
|
||||
display: block;
|
||||
cursor: default;
|
||||
&:hover {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
.jsxc_avatar {
|
||||
margin-right: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
li[data-type="groupchat"] {
|
||||
.jsxc_avatar {
|
||||
@extend %muc-avatar-icon;
|
||||
}
|
||||
.jsxc_video {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||