Commit d94fd7ca authored by JC Brand's avatar JC Brand

Merge branch '0.6.x' into gh-pages

Conflicts:
	docs/doctrees/index.doctree
	docs/html/searchindex.js
parents 095a0270 90be11ae
Changelog
=========
0.6.5 (2013-10-08)
------------------
* Fetch vCards asynchronously once a roster contact is added [jcbrand]
* Hungarian translation [w3host]
* Russian translation [bkocherov]
* Update CSS to avoid clash with bootstrap [seocam]
* New config option ``allow_muc`` toggles multi-user chat (MUC) [jcbrand]
* New config option ``allow_contact_requests`` toggles user adding [jcbrand]
* New config option ``show_only_online_users`` [jcbrand]
0.6.4 (2013-09-15)
------------------
- Add icon for the unavailable chat state. [jcbrand]
- Chat state descriptions weren't translation aware. [jcbrand]
- Clear messages from localStorage when user types "/clear". [jcbrand]
- The 'xa' chat state wasn't being handled properly. [jcbrand]
- Updated pt-BR translations [seocam]
- Updated af and de translations [jcbrand]
* Add icon for the unavailable chat state. [jcbrand]
* Chat state descriptions weren't translation aware. [jcbrand]
* Clear messages from localStorage when user types "/clear". [jcbrand]
* The 'xa' chat state wasn't being handled properly. [jcbrand]
* Updated pt-BR translations [seocam]
* Updated af and de translations [jcbrand]
0.6.3 (2013-09-12)
------------------
......@@ -17,100 +28,100 @@ Changelog
NB: This release contains an important security fix. Please don't use older
versions of the 0.6 branch.
- French translations. [tdesvenain]
- Bugfix: Messages were stored against buddy JID and not own JID. [jcbrand]
* French translations. [tdesvenain]
* Bugfix: Messages were stored against buddy JID and not own JID. [jcbrand]
0.6.2 (2013-08-29)
------------------
- Bugfix. The remove icon wasn't appearing in the contacts roster. [jcbrand]
- Bugfix. With auto_subscribe=True, the "Pending Contacts" header didn't disappear
* Bugfix. The remove icon wasn't appearing in the contacts roster. [jcbrand]
* Bugfix. With auto_subscribe=True, the "Pending Contacts" header didn't disappear
after a new user was accepted. [jcbrand]
0.6.1 (2013-08-28)
------------------
- IE9 and IE8 CSS fixes. [jcbrand]
- Bugfix: Pencil icon not visible (for setting status update). [jcbrand]
- Bugfix: RID, JID and SID initialization values were being ignored. [jcbrand]
- Bugfix: Fall back to English if a non-existing locale was specified. [jcbrand]
* IE9 and IE8 CSS fixes. [jcbrand]
* Bugfix: Pencil icon not visible (for setting status update). [jcbrand]
* Bugfix: RID, JID and SID initialization values were being ignored. [jcbrand]
* Bugfix: Fall back to English if a non-existing locale was specified. [jcbrand]
0.6.0 (2013-08-26)
------------------
- #39 Documentation for minifying JS is wrong. [jcbrand]
- #41 prebind and show_controlbox_by_default true fails. [jcbrand]
- With prebinding, attaching to the connection now happens inside Converse and
* #39 Documentation for minifying JS is wrong. [jcbrand]
* #41 prebind and show_controlbox_by_default true fails. [jcbrand]
* With prebinding, attaching to the connection now happens inside Converse and
not as a separate step after initialization. [jcbrand]
- Register presence and message handlers before fetching the roster. Otherwise
* Register presence and message handlers before fetching the roster. Otherwise
some presence notifications might be missed. [jcbrand]
- Add a debug option (logs to the browser console). [jcbrand]
- Use font icons from http://icomoon.io [jcbrand]
- Added a static mockup to aid CSS/design process. [jcbrand]
- Save language codes with hyphens. Thanks to @seocam. [jcbrand]
- The combined and minified JS file now uses almond and not require.js. [jcbrand]
* Add a debug option (logs to the browser console). [jcbrand]
* Use font icons from http://icomoon.io [jcbrand]
* Added a static mockup to aid CSS/design process. [jcbrand]
* Save language codes with hyphens. Thanks to @seocam. [jcbrand]
* The combined and minified JS file now uses almond and not require.js. [jcbrand]
0.5.2 (2013-08-05)
------------------
- Important security update. Don't expose the Strophe connection object globally. [jcbrand]
* Important security update. Don't expose the Strophe connection object globally. [jcbrand]
0.5.1 (2013-08-04)
------------------
- #13, #14: Messages sent between to GTalk accounts weren't being received. [jcbrand]
- #32: Default status was offline when user didn't have contacts. [jcbrand]
- Attach panels to the DOM upon initialize. [jcbrand]
* #13, #14: Messages sent between to GTalk accounts weren't being received. [jcbrand]
* #32: Default status was offline when user didn't have contacts. [jcbrand]
* Attach panels to the DOM upon initialize. [jcbrand]
0.5.0 (2013-07-30)
------------------
- #09 Remove dependency on AMD/require.js [jcbrand]
- #22 Fixed compare operator in strophe.muc [sonata82]
- #23 Add Italian translations [ctrlaltca]
- #24 Add Spanish translations [macagua]
- #25 Using span with css instead of img [matheus-morfi]
- #26 Only the first minute digit shown in chatbox. [jcbrand]
- #28 Add Brazilian Portuguese translations [matheus-morfi]
- Use Bower to manage 3rd party dependencies. [jcbrand]
* #09 Remove dependency on AMD/require.js [jcbrand]
* #22 Fixed compare operator in strophe.muc [sonata82]
* #23 Add Italian translations [ctrlaltca]
* #24 Add Spanish translations [macagua]
* #25 Using span with css instead of img [matheus-morfi]
* #26 Only the first minute digit shown in chatbox. [jcbrand]
* #28 Add Brazilian Portuguese translations [matheus-morfi]
* Use Bower to manage 3rd party dependencies. [jcbrand]
0.4.0 (2013-06-03)
------------------
- CSS tweaks: fixed overflowing text in status message and chatrooms list. [jcbrand]
- Bugfix: Couldn't join chatroom when clicking from a list of rooms. [jcbrand]
- Add better support for kicking or banning users from chatrooms. [jcbrand]
- Fixed alignment of chat messages in Firefox. [jcbrand]
- More intelligent fetching of vCards. [jcbrand]
- Fixed a race condition bug. Make sure that the roster is populated before sending initial presence. [jcbrand]
- Reconnect automatically when the connection drops. [jcbrand]
- Add support for internationalization. [jcbrand]
* CSS tweaks: fixed overflowing text in status message and chatrooms list. [jcbrand]
* Bugfix: Couldn't join chatroom when clicking from a list of rooms. [jcbrand]
* Add better support for kicking or banning users from chatrooms. [jcbrand]
* Fixed alignment of chat messages in Firefox. [jcbrand]
* More intelligent fetching of vCards. [jcbrand]
* Fixed a race condition bug. Make sure that the roster is populated before sending initial presence. [jcbrand]
* Reconnect automatically when the connection drops. [jcbrand]
* Add support for internationalization. [jcbrand]
0.3.0 (2013-05-21)
------------------
- Add vCard support [jcbrand]
- Remember custom status messages upon reload. [jcbrand]
- Remove jquery-ui dependency. [jcbrand]
- Use backbone.localStorage to store the contacts roster, open chatboxes and chat messages. [jcbrand]
- Fixed user status handling, which wasn't 100% according to the spec. [jcbrand]
- Separate messages according to day in chats. [jcbrand]
- Add support for specifying the BOSH bind URL as configuration setting. [jcbrand]
- #8 Improve the message counter to only increment when the window is not focused [witekdev]
- Make fetching of list of chatrooms on a server a configuration option. [jcbrand]
- Use service discovery to show all available features on a room. [jcbrand]
- Multi-user chatrooms are now configurable. [jcbrand]
* Add vCard support [jcbrand]
* Remember custom status messages upon reload. [jcbrand]
* Remove jquery-ui dependency. [jcbrand]
* Use backbone.localStorage to store the contacts roster, open chatboxes and chat messages. [jcbrand]
* Fixed user status handling, which wasn't 100% according to the spec. [jcbrand]
* Separate messages according to day in chats. [jcbrand]
* Add support for specifying the BOSH bind URL as configuration setting. [jcbrand]
* #8 Improve the message counter to only increment when the window is not focused [witekdev]
* Make fetching of list of chatrooms on a server a configuration option. [jcbrand]
* Use service discovery to show all available features on a room. [jcbrand]
* Multi-user chatrooms are now configurable. [jcbrand]
0.2.0 (2013-03-28)
------------------
- Performance enhancements and general script cleanup [ichim-david]
- Add "Connecting to chat..." info [alecghica]
- Various smaller improvements and bugfixes [jcbrand]
* Performance enhancements and general script cleanup [ichim-david]
* Add "Connecting to chat..." info [alecghica]
* Various smaller improvements and bugfixes [jcbrand]
0.1.0 (2012-06-12)
------------------
- Created [jcbrand]
* Created [jcbrand]
......@@ -28,45 +28,6 @@ module.exports = function(grunt) {
dest: 'converse.min.css',
src: ['converse.css']
}
},
requirejs: {
compile: {
options: {
baseUrl: ".",
name: "main",
out: "converse.min.js",
paths: {
"require": "components/requirejs/require",
"jquery": "components/jquery/jquery",
"jed": "components/jed/jed",
"locales": "locale/locales",
"af": "locale/af/LC_MESSAGES/af",
"en": "locale/en/LC_MESSAGES/en",
"de": "locale/de/LC_MESSAGES/de",
"es": "locale/es/LC_MESSAGES/es",
"it": "locale/it/LC_MESSAGES/it",
"pt_BR": "locale/pt_BR/LC_MESSAGES/pt_BR",
"tinysort": "components/tinysort/src/jquery.tinysort",
"underscore": "components/underscore/underscore",
"backbone": "components/backbone/backbone",
"localstorage": "components/backbone.localStorage/backbone.localStorage",
"strophe": "components/strophe/strophe",
"strophe.muc": "components/strophe.muc/index",
"strophe.roster": "components/strophe.roster/index",
"strophe.vcard": "components/strophe.vcard/index",
"strophe.disco": "components/strophe.disco/index"
},
done: function(done, output) {
var duplicates = require('rjs-build-analysis').duplicates(output);
if (duplicates.length > 0) {
grunt.log.subhead('Duplicates found in requirejs build:');
grunt.log.warn(duplicates);
done(new Error('r.js built duplicate modules, please check the excludes option.'));
}
done();
}
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-cssmin');
......@@ -105,7 +66,22 @@ module.exports = function(grunt) {
});
});
grunt.registerTask('minify', 'Create a new release', ['cssmin', 'requirejs']);
grunt.registerTask('jsmin', 'Create a new release', function () {
var done = this.async();
var child_process = require('child_process');
var exec = child_process.exec;
exec('./node_modules/requirejs/bin/r.js -o build.js',
function (err, stdout, stderr) {
if (err) {
grunt.log.write('build failed with error code '+err.code);
grunt.log.write(stderr);
}
grunt.log.write(stdout);
done();
});
});
grunt.registerTask('minify', 'Create a new release', ['cssmin', 'jsmin']);
grunt.registerTask('check', 'Perform all checks (e.g. before releasing)', function () {
grunt.task.run('jshint', 'test');
......
......@@ -40,7 +40,7 @@ pot:
merge:
find ./locale -maxdepth 1 -mindepth 1 -type d -exec msgmerge {}/LC_MESSAGES/converse.po ./locale/converse.pot -U \;
bump:
release:
sed -i s/\"version\":\ \"[0-9]\.[0-9]\.[0-9]\"/\"version\":\ \"$(VERSION)\"/ bower.json
sed -i s/\"version\":\ \"[0-9]\.[0-9]\.[0-9]\"/\"version\":\ \"$(VERSION)\"/ package.json
sed -i s/v[0-9]\.[0-9]\.[0-9]\.zip/v$(VERSION)\.zip/ index.html
......@@ -48,9 +48,7 @@ bump:
sed -i s/version\ =\ \'[0-9]\.[0-9]\.[0-9]\'/version\ =\ \'$(VERSION)\'/ docs/source/conf.py
sed -i s/release\ =\ \'[0-9]\.[0-9]\.[0-9]\'/release\ =\ \'$(VERSION)\'/ docs/source/conf.py
sed -i "s/(Unreleased)/(`date +%Y-%m-%d`)/" CHANGES.rst
release:
r.js -o build.js && grunt cssmin
grunt minify
clean:
-rm -rf $(BUILDDIR)/*
......
......@@ -31,7 +31,7 @@ It has the following features:
* Custom status messages
* Typing notifications
* Third person messages (/me )
* Translated into multiple languages (af, de, es, it, pt_BR)
* Translated into multiple languages (af, de, es, fr, it, hu, pt-BR, ru)
-----------
Screencasts
......
{
"name": "converse",
"version": "0.6.4",
"version": "0.6.5",
"devDependencies": {
"jasmine": "https://github.com/jcbrand/jasmine.git#1_3_x"
},
......
......@@ -8,12 +8,14 @@
"jed": "components/jed/jed",
"locales": "locale/locales",
"af": "locale/af/LC_MESSAGES/af",
"en": "locale/en/LC_MESSAGES/en",
"de": "locale/de/LC_MESSAGES/de",
"en": "locale/en/LC_MESSAGES/en",
"es": "locale/es/LC_MESSAGES/es",
"fr": "locale/fr/LC_MESSAGES/fr",
"hu": "locale/hu/LC_MESSAGES/hu",
"it": "locale/it/LC_MESSAGES/it",
"pt_BR": "locale/pt_BR/LC_MESSAGES/pt_BR",
"ru": "locale/ru/LC_MESSAGES/ru",
"jquery.tinysort": "components/tinysort/src/jquery.tinysort",
"underscore": "components/underscore/underscore",
"backbone": "components/backbone/backbone",
......
......@@ -8,20 +8,20 @@
@import url("fonticons/style.css");
#collective-xmpp-chat-data,
#collective-xmpp-chat-data input {
#chatpanel #collective-xmpp-chat-data,
#chatpanel #collective-xmpp-chat-data input {
color: rgb(79, 79, 79);
}
.hidden {
#chatpanel .hidden {
display: none
}
.locked {
#chatpanel .locked {
padding-right: 22px;
}
span.spinner {
#chatpanel span.spinner {
background: url(images/spinner.gif) no-repeat center;
width: 22px;
height: 22px;
......@@ -29,14 +29,14 @@ span.spinner {
display: block;
}
span.spinner.centered {
#chatpanel span.spinner.centered {
position: absolute;
top: 30%;
left: 50%;
margin: 0 0 0 -25%;
}
span.spinner.hor_centered {
#chatpanel span.spinner.hor_centered {
left: 40%;
position: absolute;
}
......@@ -49,7 +49,7 @@ span.spinner.hor_centered {
width: auto;
}
#toggle-controlbox {
#chatpanel #toggle-controlbox {
position: fixed;
font-size: 70%;
bottom: 0;
......@@ -64,12 +64,12 @@ span.spinner.hor_centered {
height: 16px;
}
#connecting-to-chat {
#chatpanel #connecting-to-chat {
background: url(images/spinner.gif) no-repeat left;
padding-left: 1.4em;
}
.chat-head {
#chatpanel .chat-head {
color: #ffffff;
margin: 0;
font-size: 100%;
......@@ -78,16 +78,16 @@ span.spinner.hor_centered {
padding: 3px 0 0 3px;
}
.chat-head-chatbox {
#chatpanel .chat-head-chatbox {
background-color: rgb(79, 106, 114);
background-color: rgba(79, 106, 114, 1);
}
.chat-head-chatroom {
#chatpanel .chat-head-chatroom {
background-color: #2D617A;
}
.chatroom .chat-body {
#chatpanel .chatroom .chat-body {
height: 274px;
background-color: white;
border-bottom-right-radius: 4px;
......@@ -95,17 +95,17 @@ span.spinner.hor_centered {
border-top: 0;
}
.chatroom .chat-area {
#chatpanel .chatroom .chat-area {
float: left;
width: 200px;
}
.chatroom .chat {
#chatpanel .chatroom .chat {
overflow: auto;
height: 400px;
}
.chatroom .participants {
#chatpanel .chatroom .participants {
float: left;
overflow: auto;
border-left: 1px solid #AAA;
......@@ -117,7 +117,7 @@ span.spinner.hor_centered {
border-bottom-right-radius: 4px;
}
.participants ul.participant-list li {
#chatpanel .participants ul.participant-list li {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
......@@ -127,21 +127,21 @@ span.spinner.hor_centered {
cursor: default;
}
ul.participant-list li.moderator {
#chatpanel ul.participant-list li.moderator {
color: #FE0007;
}
.chatroom .participant-list {
#chatpanel .chatroom .participant-list {
list-style: none;
}
.chat-blink {
#chatpanel .chat-blink {
background-color: #176679;
border-right:1px solid #176679;
border-left:1px solid #176679;
}
.chat-content {
#chatpanel .chat-content {
padding: 0.3em;
font-size: 13px;
color: rgb(79, 79, 79);
......@@ -153,32 +153,32 @@ ul.participant-list li.moderator {
line-height: 1.3em;
}
.chat-textarea {
#chatpanel .chat-textarea {
border: 0;
height: 50px;
}
.chat-textarea-chatbox-selected {
#chatpanel .chat-textarea-chatbox-selected {
border: 1px solid #578308;
margin:0;
}
.chat-textarea-chatroom-selected {
#chatpanel .chat-textarea-chatroom-selected {
border: 2px solid #2D617A;
margin:0;
}
.chatroom .chat-content {
#chatpanel .chatroom .chat-content {
height:200px;
}
.chat-info {
#chatpanel .chat-info {
color:#666666;
}
.chat-message-room,
.chat-message-them,
.chat-message-me {
#chatpanel .chat-message-room,
#chatpanel .chat-message-them,
#chatpanel .chat-message-me {
font-weight: bold;
white-space: nowrap;
max-width: 100px;
......@@ -189,75 +189,77 @@ ul.participant-list li.moderator {
padding-right: 3px;
}
.chat-message-content {
#chatpanel .chat-message-content {
word-wrap: break-word;
}
.chat-message-them {
#chatpanel .chat-message-them {
color: #F62817;
}
.chat-message-me {
#chatpanel .chat-message-me {
color: #436976;
}
.chat-message-room {
#chatpanel .chat-message-room {
color: #4B7003;
}
.chat-event, .chat-date, .chat-info {
#chatpanel .chat-event,
#chatpanel .chat-date,
#chatpanel .chat-info {
color: #808080;
}
li.chat-info {
#chatpanel li.chat-info {
padding-left: 10px;
}
.chat-date {
#chatpanel .chat-date {
display: inline-block;
padding-top: 10px;
}
div#settings,
div#chatrooms,
div#login-dialog {
#chatpanel div#settings,
#chatpanel div#chatrooms,
#chatpanel div#login-dialog {
height: 274px;
}
p.not-implemented {
#chatpanel p.not-implemented {
margin-top: 3em;
margin-left: 0.3em;
color: #808080;
}
div.delayed .chat-message-them {
#chatpanel div.delayed .chat-message-them {
color: #FB5D50;
}
div.delayed .chat-message-me {
#chatpanel div.delayed .chat-message-me {
color: #7EABBB;
}
input.error {
#chatpanel input.error {
border: 1px solid red;
}
.conn-feedback.error {
#chatpanel .conn-feedback.error {
color: red;
}
.chat-message-error {
#chatpanel .chat-message-error {
color:#76797C;
font-size:90%;
font-weight:normal;
}
.chat-head .avatar {
#chatpanel .chat-head .avatar {
float: left;
margin-right: 6px;
}
div.chat-title {
#chatpanel div.chat-title {
color: white;
font-weight: bold;
line-height: 15px;
......@@ -271,15 +273,15 @@ div.chat-title {
height: 1em;
}
.chat-head-chatbox,
.chat-head-chatroom {
#chatpanel .chat-head-chatbox,
#chatpanel .chat-head-chatroom {
background: linear-gradient(top, rgba(206,220,231,1) 0%,rgba(79,106,114,1) 100%);
height: 35px;
position: relative;
}
p.user-custom-message,
p.chatroom-topic {
#chatpanel p.user-custom-message,
#chatpanel p.chatroom-topic {
font-size: 80%;
font-style: italic;
height: 1.3em;
......@@ -289,30 +291,30 @@ p.chatroom-topic {
margin: 0;
}
.activated{
#chatpanel .activated{
display: block !important;
}
a.subscribe-to-user {
#chatpanel a.subscribe-to-user {
padding-left: 2em;
font-weight: bold;
}
dl.add-converse-contact {
#chatpanel dl.add-converse-contact {
margin: 0 0 0 0.5em;
}
.fancy-dropdown {
#chatpanel .fancy-dropdown {
border:1px solid #ddd;
height: 22px;
}
.fancy-dropdown a.choose-xmpp-status {
#chatpanel .fancy-dropdown a.choose-xmpp-status {
width: 155px;
}
.fancy-dropdown a.choose-xmpp-status,
.fancy-dropdown a.toggle-xmpp-contact-form {
#chatpanel .fancy-dropdown a.choose-xmpp-status,
#chatpanel .fancy-dropdown a.toggle-xmpp-contact-form {
text-shadow: 0 1px 0 rgba(255, 255, 255, 1);
overflow: hidden;
text-overflow: ellipsis;
......@@ -320,17 +322,17 @@ dl.add-converse-contact {
display: inline;
}
.fancy-dropdown a.toggle-xmpp-contact-form span {
#chatpanel .fancy-dropdown a.toggle-xmpp-contact-form span {
float: left;
}
.choose-xmpp-status span {
#chatpanel .choose-xmpp-status span {
padding-right: 5px;
padding-left: 5px;
float: left;
}
#fancy-xmpp-status-select a.change-xmpp-status-message {
#chatpanel #fancy-xmpp-status-select a.change-xmpp-status-message {
float: right;
clear: right;
height: 22px;
......@@ -338,22 +340,22 @@ dl.add-converse-contact {
color: rgb(79, 79, 79);
}
ul#found-users {
#chatpanel ul#found-users {
padding: 10px 0 5px 5px;
border: 0;
}
form.search-xmpp-contact {
#chatpanel form.search-xmpp-contact {
margin: 0;
padding-left: 5px;
padding: 0 0 5px 5px;
}
form.search-xmpp-contact input {
#chatpanel form.search-xmpp-contact input {
width: 8em;
}
.oc-chat-head {
#chatpanel .oc-chat-head {
margin: 0;
color: #FFF;
border-top-right-radius: 4px;
......@@ -364,8 +366,8 @@ form.search-xmpp-contact input {
padding: 3px 0 0 0;
}
a.configure-chatroom-button,
a.close-chatbox-button {
#chatpanel a.configure-chatroom-button,
#chatpanel a.close-chatbox-button {
font-size: 10px;
padding: 3px 3px 2px 3px;
margin-right: 3px;
......@@ -387,18 +389,18 @@ a.close-chatbox-button {
text-shadow:1px 1px 0 #ffffff;
}
a.configure-chatroom-button:active,
a.close-chatbox-button:active {
#chatpanel a.configure-chatroom-button:active,
#chatpanel a.close-chatbox-button:active {
position:relative;
top:1px;
}
.oc-chat-content dt {
#chatpanel .oc-chat-content dt {
margin: 0;
padding-top: 0.5em;
}
.chatroom-form-container {
#chatpanel .chatroom-form-container {
color: #666;
padding: 5px;
height: 262px;
......@@ -407,56 +409,56 @@ a.close-chatbox-button:active {
border-bottom-left-radius: 4px;
}
.chatroom-form {
#chatpanel .chatroom-form {
background: white;
font-size: 12px;
padding: 10px 5px;
}
.chat-body p {
#chatpanel .chat-body p {
font-size: 14px;
color: #666;
padding: 5px;
margin: 0;
}
.chatroom-form legend {
#chatpanel .chatroom-form legend {
font-size: 14px;
font-weight: bold;
margin-bottom: 5px;
}
.chatroom-form label {
#chatpanel .chatroom-form label {
font-weight: bold;
display: block;
clear: both;
}
.chatroom-form label input,
.chatroom-form label select {
#chatpanel .chatroom-form label input,
#chatpanel .chatroom-form label select {
float: right;
}
#converse-roster dd.odd {
#chatpanel #converse-roster dd.odd {
background-color: #DCEAC5; /* Make this difference */
}
#converse-roster dd.current-xmpp-contact {
#chatpanel #converse-roster dd.current-xmpp-contact {
clear: both;
}
#converse-roster dd.current-xmpp-contact span {
#chatpanel #converse-roster dd.current-xmpp-contact span {
font-size: 16px;
float: left;
color: rgb(79, 79, 79);
}
#converse-roster dd.requesting-xmpp-contact button{
#chatpanel #converse-roster dd.requesting-xmpp-contact button{
margin-left: 0.5em;
}
#converse-roster dd a,
#converse-roster dd span {
#chatpanel #converse-roster dd a,
#chatpanel #converse-roster dd span {
text-shadow: 0 1px 0 rgba(250, 250, 250, 1);
display: inline-block;
overflow: hidden;
......@@ -464,11 +466,11 @@ a.close-chatbox-button:active {
text-overflow: ellipsis;
}
#converse-roster dd span {
#chatpanel #converse-roster dd span {
padding: 2px 5px 0 0;
}
#converse-roster {
#chatpanel #converse-roster {
height: 200px;
overflow-y: auto;
overflow-x: hidden;
......@@ -480,16 +482,20 @@ a.close-chatbox-button:active {
margin-top: 0.5em;
}
#available-chatrooms dd {
#chatpanel dd.available-chatroom {
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-block;
width: 165px;
width: 175px;
}
#available-chatrooms dt,
#converse-roster dt {
#chatpanel dd.available-chatroom a.open-room {
width: 148px;
}
#chatpanel #available-chatrooms dt,
#chatpanel #converse-roster dt {
font-weight: normal;
font-size: 13px;
color: #666;
......@@ -498,12 +504,12 @@ a.close-chatbox-button:active {
text-shadow: 0 1px 0 rgba(250, 250, 250, 1);
}
#converse-roster dt {
#chatpanel #converse-roster dt {
display: none;
}
dd.available-chatroom,
#converse-roster dd {
#chatpanel dd.available-chatroom,
#chatpanel #converse-roster dd {
font-weight: bold;
border: none;
display: block;
......@@ -512,29 +518,29 @@ dd.available-chatroom,
text-shadow: 0 1px 0 rgba(250, 250, 250, 1);
}
.room-info {
#chatpanel .room-info {
font-size: 11px;
font-style: normal;
font-weight: normal;
}
li.room-info {
#chatpanel li.room-info {
display: block;
margin-left: 5px;
}
div.room-info {
#chatpanel div.room-info {
clear: left;
}
p.room-info {
#chatpanel p.room-info {
margin: 0;
padding: 0;
display: block;
white-space: normal;
}
a.room-info {
#chatpanel a.room-info {
width: 22px;
height: 22px;
float: right;
......@@ -542,20 +548,20 @@ a.room-info {
clear: right;
}
a.open-room {
#chatpanel a.open-room {
float: left;
white-space: nowrap;
text-overflow: ellipsis;
overflow-x: hidden;
}
dd.available-chatroom:hover a.room-info {
#chatpanel dd.available-chatroom:hover a.room-info {
display: inline-block;
margin-top: 3px;
font-size: 15px;
}
#converse-roster dd a.remove-xmpp-contact {
#chatpanel #converse-roster dd a.remove-xmpp-contact {
line-height: 21px;
float: right;
width: 22px;
......@@ -564,20 +570,20 @@ dd.available-chatroom:hover a.room-info {
color: rgb(79, 79, 79);
}
#converse-roster dd:hover a.remove-xmpp-contact {
#chatpanel #converse-roster dd:hover a.remove-xmpp-contact {
display: inline-block;
}
#converse-roster a.open-chat {
#chatpanel #converse-roster a.open-chat {
line-height: 21px;
width: 85%;
}
#converse-roster dd:hover a.open-chat {
#chatpanel #converse-roster dd:hover a.open-chat {
width: 70%;
}
.chatbox,
.chatroom {
#chatpanel .chatbox,
#chatpanel .chatroom {
box-shadow: 1px 1px 5px 1px rgba(0,0,0,0.4);
display:none;
float: right;
......@@ -586,32 +592,32 @@ dd.available-chatroom:hover a.room-info {
border-radius: 4px;
}
.chatbox {
#chatpanel .chatbox {
width: 200px;
}
.chatroom {
#chatpanel .chatroom {
width: 300px;
}
.oc-chat-content {
#chatpanel .oc-chat-content {
height:274px;
padding: 0;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
}
.oc-chat-content dd {
#chatpanel .oc-chat-content dd {
margin-left: 0;
margin-bottom: 0;
padding: 1em;
}
.oc-chat-content dd.odd {
#chatpanel .oc-chat-content dd.odd {
background-color: #DCEAC5;
}
div#controlbox-panes {
#chatpanel div.controlbox-panes {
background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(240,240,240,1) 100%); /* FF3.6+ */
background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(240,240,240,1) 100%); /* IE10+ */
background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(240,240,240,1) 100%); /* Opera 11.10+ */
......@@ -625,49 +631,49 @@ div#controlbox-panes {
}
form#converse-login {
#chatpanel form#converse-login {
background: white;
padding: 2em 0 0.3em 0.5em;
}
form#converse-login input {
#chatpanel form#converse-login input {
display: block;
width: 90%;
}
form#converse-login .login-submit {
#chatpanel form#converse-login .login-submit {
margin-top: 1em;
width: auto;
}
form.set-xmpp-status {
#chatpanel form.set-xmpp-status {
background: none;
padding: 0.5em 0 0.5em 0.5em;
}
form.add-chatroom {
#chatpanel form.add-chatroom {
background: none;
padding: 3px;
}
form.add-chatroom input[type=text] {
#chatpanel form.add-chatroom input[type=text] {
width: 95%;
margin: 3px;
}
form.add-chatroom input[type=button],
form.add-chatroom input[type=submit] {
#chatpanel form.add-chatroom input[type=button],
#chatpanel form.add-chatroom input[type=submit] {
width: 48%;
}
select#select-xmpp-status {
#chatpanel select#select-xmpp-status {
float: right;
margin-right: 0.5em;
}
/* @group Tabs */
.chat-head #controlbox-tabs {
#chatpanel .chat-head #controlbox-tabs {
text-align: center;
display: inline;
overflow: hidden;
......@@ -676,7 +682,7 @@ select#select-xmpp-status {
}
/* single tab */
.chat-head #controlbox-tabs li {
#chatpanel .chat-head #controlbox-tabs li {
float:left;
list-style: none;
padding-left: 0;
......@@ -684,7 +690,7 @@ select#select-xmpp-status {
width: 40%;
}
ul#controlbox-tabs li a {
#chatpanel ul#controlbox-tabs li a {
display:block;
font-size:12px;
height: 34px;
......@@ -698,17 +704,18 @@ ul#controlbox-tabs li a {
text-shadow: 0 1px 0 rgba(250, 250, 250, 1);
}
.chat-head #controlbox-tabs li a:hover {
#chatpanel .chat-head #controlbox-tabs li a:hover {
color: black;
}
.chat-head #controlbox-tabs li a {
#chatpanel .chat-head #controlbox-tabs li a {
background-color: white;
box-shadow: inset 0 4px 12px rgba(0,0,0,0.3);
border-bottom: 1px solid #CCC;
}
ul#controlbox-tabs a.current, ul#controlbox-tabs a.current:hover {
#chatpanel ul#controlbox-tabs a.current,
#chatpanel ul#controlbox-tabs a.current:hover {
box-shadow: none;
border-bottom: 0;
height: 35px;
......@@ -716,10 +723,10 @@ ul#controlbox-tabs a.current, ul#controlbox-tabs a.current:hover {
color: rgb(102,102,102);
}
div#users,
div#chatrooms,
div#login-dialog,
div#settings {
#chatpanel div#users,
#chatpanel div#chatrooms,
#chatpanel div#login-dialog,
#chatpanel div#settings {
border: 0;
font-size: 14px;
background-color: white;
......@@ -728,11 +735,11 @@ div#settings {
width: 100%;
}
div#chatrooms {
#chatpanel div#chatrooms {
overflow-y: auto;
}
form.sendXMPPMessage {
#chatpanel form.sendXMPPMessage {
background: white;
border: 0;
border-top: 1px solid #BBB;
......@@ -751,13 +758,13 @@ form.sendXMPPMessage {
width: 200px;
}
.chatroom form.sendXMPPMessage {
#chatpanel .chatroom form.sendXMPPMessage {
-webkit-border-bottom-right-radius: 0;
border-bottom-right-radius: 0;
height: 65px;
}
.chat-textarea {
#chatpanel .chat-textarea {
box-sizing: border-box;
-moz-box-sizing: border-box;
border: 0;
......@@ -768,7 +775,7 @@ form.sendXMPPMessage {
height: 65px;
}
ul.chat-toolbar {
#chatpanel ul.chat-toolbar {
font-size: 14px;
margin: 0;
padding: 0 5px 0 0;
......@@ -777,70 +784,74 @@ ul.chat-toolbar {
height: 20px;
}
ul.chat-toolbar li {
#chatpanel ul.chat-toolbar li {
display: inline-block;
list-style: none;
padding: 0 3px 0 3px;
}
ul.chat-toolbar li:hover {
#chatpanel ul.chat-toolbar li:hover {
cursor: pointer;
color: rgb(39, 39, 39);
}
form#set-custom-xmpp-status {
#chatpanel form#set-custom-xmpp-status {
float: left;
padding: 0;
}
.chat-textarea-chatbox-selected {
#chatpanel .chat-textarea-chatbox-selected {
border: 1px solid #578308;
margin:0;
}
.chat-textarea-chatroom-selected {
#chatpanel .chat-textarea-chatroom-selected {
border: 2px solid #2D617A;
margin:0;
}
#set-custom-xmpp-status button {
#chatpanel #set-custom-xmpp-status button {
padding: 1px 2px 1px 1px;
}
#controlbox div.xmpp-status {
#chatpanel #controlbox div.xmpp-status {
display: inline;
}
/* status dropdown styles */
.chatbox dl.dropdown {
#chatpanel .chatbox dl.dropdown {
margin-right: 0.5em;
margin-bottom: 0;
background-color: rgb(240, 240, 240);
}
.chatbox .dropdown dd, .dropdown dt, .dropdown ul { margin:0px; padding:0px; }
.chatbox .dropdown dd { position:relative; }
#chatpanel .chatbox .dropdown dd,
#chatpanel .dropdown dt,
#chatpanel .dropdown ul {
margin:0px; padding:0px;
}
#chatpanel .chatbox .dropdown dd { position:relative; }
input.custom-xmpp-status {
#chatpanel input.custom-xmpp-status {
width: 138px;
}
form.add-xmpp-contact {
#chatpanel form.add-xmpp-contact {
background: none;
padding: 5px;
}
form.add-xmpp-contact input {
#chatpanel form.add-xmpp-contact input {
width: 120px;
}
.chatbox .dropdown dt a span {
#chatpanel .chatbox .dropdown dt a span {
cursor:pointer;
display:block;
padding: 4px 7px 0 5px;
color: rgb(79, 79, 79);
}
.chatbox .dropdown dd ul {
#chatpanel .chatbox .dropdown dd ul {
padding: 5px 0 5px 0;
list-style:none;
position:absolute; left:0; top:0;
......@@ -851,30 +862,30 @@ form.add-xmpp-contact input {
background-color: rgb(240, 240, 240);
}
.chatbox .dropdown li {
#chatpanel .chatbox .dropdown li {
list-style: none;
padding-left: 0;
}
.set-xmpp-status .dropdown dd ul {
#chatpanel .set-xmpp-status .dropdown dd ul {
z-index: 22;
}
.chatbox .dropdown a {
#chatpanel .chatbox .dropdown a {
height: 22px;
display: inline-block;
line-height: 24px;
}
.chatbox .dropdown dd ul a:hover {
#chatpanel .chatbox .dropdown dd ul a:hover {
background-color: #bed6e5;
}
.xmpp-status-menu li a {
#chatpanel .xmpp-status-menu li a {
width: 100%;
}
.xmpp-status-menu li a span {
#chatpanel .xmpp-status-menu li a span {
padding: 0 5px 0 5px;
color: rgb(79, 79, 79);
}
......@@ -41,8 +41,13 @@
}(this, function ($, _, console) {
var converse = {};
converse.initialize = function (settings, callback) {
// Default values
var converse = this;
// Default configuration values
// ----------------------------
this.allow_contact_requests = true;
this.allow_muc = true;
this.allow_otr = true;
this.animate = true;
this.auto_list_rooms = false;
this.auto_subscribe = false;
......@@ -52,34 +57,37 @@
this.i18n = locales.en;
this.prebind = false;
this.show_controlbox_by_default = false;
this.xhr_user_search = false;
this.xhr_custom_status = false;
this.show_only_online_users = false;
this.testing = false; // Exposes sensitive data for testing. Never set to true in production systems!
this.callback = callback || function () {};
this.xhr_custom_status = false;
this.xhr_user_search = false;
// Allow only the whitelisted settings attributes to be overwritten,
// nothing else.
whitelist = [
// Allow only whitelisted configuration attributes to be overwritten
_.extend(this, _.pick(settings, [
'allow_contact_requests',
'allow_muc',
'animate',
'auto_list_rooms',
'auto_subscribe',
'bosh_service_url',
'fullname',
'connection',
'debug',
'fullname',
'hide_muc_server',
'i18n',
'jid',
'prebind',
'rid',
'show_controlbox_by_default',
'xhr_user_search',
'xhr_custom_status',
'connection',
'testing',
'jid',
'show_only_online_users',
'sid',
'rid'
];
_.extend(this, _.pick(settings, whitelist));
'testing',
'xhr_custom_status',
'xhr_user_search'
]));
// Translation machinery
// ---------------------
var __ = $.proxy(function (str) {
/* Translation factory
*/
......@@ -105,7 +113,24 @@
return str;
};
// Translation aware constants
// ---------------------------
var STATUSES = {
'dnd': __('This contact is busy'),
'online': __('This contact is online'),
'offline': __('This contact is offline'),
'unavailable': __('This contact is unavailable'),
'xa': __('This contact is away for an extended period'),
'away': __('This contact is away')
};
// Module-level variables
// ----------------------
this.callback = callback || function () {};
this.msg_counter = 0;
// Module-level functions
// ----------------------
this.autoLink = function (text) {
// Convert URLs into hyperlinks
var re = /((http|https|ftp):\/\/[\w?=&.\/\-;#~%\-]+(?![\w\s?&.\/;#~%"=\-]*>))/g;
......@@ -126,15 +151,64 @@
}
};
this.getVCard = function (jid, callback, errback) {
converse.connection.vcard.get(
$.proxy(function (iq) {
// Successful callback
$vcard = $(iq).find('vCard');
var fullname = $vcard.find('FN').text(),
img = $vcard.find('BINVAL').text(),
img_type = $vcard.find('TYPE').text(),
url = $vcard.find('URL').text();
if (jid) {
var rosteritem = converse.roster.get(jid);
if (rosteritem) {
rosteritem.save({
'fullname': fullname || jid,
'image_type': img_type,
'image': img,
'url': url,
'vcard_updated': converse.toISOString(new Date())
});
}
}
if (callback) {
callback(jid, fullname, img, img_type, url);
}
}, this),
jid,
function (iq) {
// Error callback
var rosteritem = converse.roster.get(jid);
if (rosteritem) {
rosteritem.save({
'vcard_updated': converse.toISOString(new Date())
});
}
if (errback) {
errback(iq);
}
});
};
this.onConnect = function (status) {
var $button, $form;
if (status === Strophe.Status.CONNECTED) {
converse.log('Connected');
converse.onConnected();
} else if (status === Strophe.Status.DISCONNECTED) {
$form = $('#converse-login');
$button = $form.find('input[type=submit]');
if ($button) { $button.show().siblings('span').remove(); }
converse.giveFeedback(__('Disconnected'), 'error');
converse.connection.connect(connection.jid, connection.pass, converse.onConnect);
converse.connection.connect(
converse.connection.jid,
converse.connection.pass,
converse.onConnect
);
} else if (status === Strophe.Status.Error) {
$form = $('#converse-login');
$button = $form.find('input[type=submit]');
if ($button) { $button.show().siblings('span').remove(); }
converse.giveFeedback(__('Error'), 'error');
} else if (status === Strophe.Status.CONNECTING) {
......@@ -149,6 +223,11 @@
converse.giveFeedback(__('Authentication Failed'), 'error');
} else if (status === Strophe.Status.DISCONNECTING) {
converse.giveFeedback(__('Disconnecting'), 'error');
converse.connection.connect(
converse.connection.jid,
converse.connection.pass,
converse.onConnect
);
} else if (status === Strophe.Status.ATTACHED) {
converse.log('Attached');
converse.onConnected();
......@@ -221,51 +300,101 @@
this.updateMsgCounter();
};
this.collections = {
/* FIXME: XEP-0136 specifies 'urn:xmpp:archive' but the mod_archive_odbc
* add-on for ejabberd wants the URL below. This might break for other
* Jabber servers.
*/
'URI': 'http://www.xmpp.org/extensions/xep-0136.html#ns'
this.showControlBox = function () {
var controlbox = this.chatboxes.get('controlbox');
if (!controlbox) {
this.chatboxes.add({
id: 'controlbox',
box_id: 'controlbox',
visible: true
});
if (this.connection) {
this.chatboxes.get('controlbox').save();
}
} else {
controlbox.trigger('show');
}
};
this.collections.getLastCollection = function (jid, callback) {
var bare_jid = Strophe.getBareJidFromJid(jid),
iq = $iq({'type':'get'})
.c('list', {'xmlns': this.URI,
'with': bare_jid
})
.c('set', {'xmlns': 'http://jabber.org/protocol/rsm'})
.c('before').up()
.c('max')
.t('1');
this.toggleControlBox = function () {
if ($("div#controlbox").is(':visible')) {
var controlbox = this.chatboxes.get('controlbox');
if (this.connection) {
controlbox.destroy();
} else {
controlbox.trigger('hide');
}
} else {
this.showControlBox();
}
};
converse.connection.sendIQ(iq,
callback,
function () {
converse.log('Error while retrieving collections');
});
this.initStatus = function (callback) {
this.xmppstatus = new this.XMPPStatus();
var id = hex_sha1('converse.xmppstatus-'+this.bare_jid);
this.xmppstatus.id = id; // This appears to be necessary for backbone.localStorage
this.xmppstatus.localStorage = new Backbone.LocalStorage(id);
this.xmppstatus.fetch({success: callback, error: callback});
};
this.collections.getLastMessages = function (jid, callback) {
var that = this;
this.getLastCollection(jid, function (result) {
// Retrieve the last page of a collection (max 30 elements).
var $collection = $(result).find('chat'),
jid = $collection.attr('with'),
start = $collection.attr('start'),
iq = $iq({'type':'get'})
.c('retrieve', {'start': start,
'xmlns': that.URI,
'with': jid
})
.c('set', {'xmlns': 'http://jabber.org/protocol/rsm'})
.c('max')
.t('30');
converse.connection.sendIQ(iq, callback);
});
this.initRoster = function () {
// Set up the roster
this.roster = new this.RosterItems();
this.roster.localStorage = new Backbone.LocalStorage(
hex_sha1('converse.rosteritems-'+converse.bare_jid));
// Register callbacks that depend on the roster
this.connection.roster.registerCallback(
$.proxy(this.roster.rosterHandler, this.roster),
null, 'presence', null);
this.connection.addHandler(
$.proxy(this.roster.subscribeToSuggestedItems, this.roster),
'http://jabber.org/protocol/rosterx', 'message', null);
this.connection.addHandler(
$.proxy(function (presence) {
this.presenceHandler(presence);
return true;
}, this.roster), null, 'presence', null);
// No create the view which will fetch roster items from
// localStorage
this.rosterview = new this.RosterView({'model':this.roster});
};
this.onConnected = function () {
if (this.debug) {
this.connection.xmlInput = function (body) { console.log(body); };
this.connection.xmlOutput = function (body) { console.log(body); };
Strophe.log = function (level, msg) { console.log(level+' '+msg); };
Strophe.error = function (msg) { console.log('ERROR: '+msg); };
}
this.bare_jid = Strophe.getBareJidFromJid(this.connection.jid);
this.domain = Strophe.getDomainFromJid(this.connection.jid);
this.features = new this.Features();
this.initStatus($.proxy(function () {
this.initRoster();
this.chatboxes.onConnected();
this.connection.roster.get(function () {});
$(window).on("blur focus", $.proxy(function(e) {
if ((this.windowState != e.type) && (e.type == 'focus')) {
converse.clearMsgCounter();
}
this.windowState = e.type;
},this));
this.giveFeedback(__('Online Contacts'));
if (this.testing) {
this.callback(this);
} else {
this.callback();
}
}, this));
};
// Backbone Models and Views
// -------------------------
this.Message = Backbone.Model.extend();
this.Messages = Backbone.Collection.extend({
......@@ -555,7 +684,7 @@
updateVCard: function () {
var jid = this.model.get('jid'),
rosteritem = converse.roster.get(jid);
if ((rosteritem)&&(!rosteritem.get('vcard_updated'))) {
if ((rosteritem) && (!rosteritem.get('vcard_updated'))) {
converse.getVCard(
jid,
$.proxy(function (jid, fullname, image, image_type, url) {
......@@ -563,8 +692,7 @@
'fullname' : fullname || jid,
'url': url,
'image_type': image_type,
'image': image,
'vcard_updated': converse.toISOString(new Date())
'image': image
});
}, this),
$.proxy(function (stanza) {
......@@ -685,7 +813,10 @@
'<option value="offline">'+__('Offline')+'</option>'+
'</select>'+
'</span>'+
'</form>'+
'</form>'
),
add_contact_dropdown_template: _.template(
'<dl class="add-converse-contact dropdown">' +
'<dt id="xmpp-contact-search" class="fancy-dropdown">' +
'<a class="toggle-xmpp-contact-form" href="#"'+
......@@ -696,7 +827,7 @@
'</dl>'
),
add_contact_template: _.template(
add_contact_form_template: _.template(
'<li>'+
'<form class="add-xmpp-contact">' +
'<input type="text" name="identifier" class="username" placeholder="'+__('Contact username')+'"/>' +
......@@ -721,13 +852,20 @@
render: function () {
var markup;
var widgets = this.template();
this.$tabs.append(this.tab_template());
if (converse.xhr_user_search) {
markup = this.search_contact_template();
} else {
markup = this.add_contact_template();
markup = this.add_contact_form_template();
}
if (converse.allow_contact_requests) {
widgets += this.add_contact_dropdown_template();
}
this.$el.html(this.template());
this.$el.html(widgets);
this.$el.find('.search-xmpp ul').append(markup);
this.$el.append(converse.rosterview.$el);
return this;
......@@ -1079,7 +1217,7 @@
},
featureAdded: function (feature) {
if (feature.get('var') == 'http://jabber.org/protocol/muc') {
if ((feature.get('var') == 'http://jabber.org/protocol/muc') && (converse.allow_muc)) {
this.roomspanel.muc_domain = feature.get('from');
var $server= this.$el.find('input.new-chatroom-server');
if (! $server.is(':focus')) {
......@@ -1096,7 +1234,7 @@
'<ul id="controlbox-tabs"></ul>'+
'<a class="close-chatbox-button icon-close"></a>'+
'</div>'+
'<div id="controlbox-panes"></div>'
'<div class="controlbox-panes"></div>'
),
switchTab: function (ev) {
......@@ -1123,17 +1261,19 @@
if ((!converse.prebind) && (!converse.connection)) {
// Add login panel if the user still has to authenticate
this.$el.html(this.template(this.model.toJSON()));
this.loginpanel = new converse.LoginPanel({'$parent': this.$el.find('#controlbox-panes'), 'model': this});
this.loginpanel = new converse.LoginPanel({'$parent': this.$el.find('.controlbox-panes'), 'model': this});
this.loginpanel.render();
} else if (!this.contactspanel) {
this.$el.html(this.template(this.model.toJSON()));
this.contactspanel = new converse.ContactsPanel({'$parent': this.$el.find('#controlbox-panes')});
this.contactspanel = new converse.ContactsPanel({'$parent': this.$el.find('.controlbox-panes')});
this.contactspanel.render();
converse.xmppstatusview = new converse.XMPPStatusView({'model': converse.xmppstatus});
converse.xmppstatusview.render();
this.roomspanel = new converse.RoomsPanel({'$parent': this.$el.find('#controlbox-panes')});
if (converse.allow_muc) {
this.roomspanel = new converse.RoomsPanel({'$parent': this.$el.find('.controlbox-panes')});
this.roomspanel.render();
}
}
return this;
}
});
......@@ -1678,6 +1818,14 @@
}
// This will make sure the Roster is set up
this.get('controlbox').set({connected:true});
// Register message handler
converse.connection.addHandler(
$.proxy(function (message) {
this.messageReceived(message);
return true;
}, this), null, 'message', 'chat');
// Get cached chatboxes from localstorage
this.fetch({
add: true,
......@@ -1715,6 +1863,11 @@
}
chatbox = this.get(partner_jid);
roster_item = converse.roster.get(partner_jid);
if (!roster_item) {
// The buddy was likely removed
return true;
}
if (!chatbox) {
chatbox = this.create({
'id': partner_jid,
......@@ -1865,6 +2018,20 @@
var item = this.model,
ask = item.get('ask'),
subscription = item.get('subscription');
var classes_to_remove = [
'current-xmpp-contact',
'pending-xmpp-contact',
'requesting-xmpp-contact'
].concat(_.keys(STATUSES));
_.each(classes_to_remove,
function (cls) {
if (this.el.className.indexOf(cls) !== -1) {
this.$el.removeClass(cls);
}
}, this);
this.$el.addClass(item.get('chat_status'));
if (ask === 'subscribe') {
......@@ -1875,57 +2042,14 @@
this.$el.html(this.request_template(item.toJSON()));
converse.showControlBox();
} else if (subscription === 'both' || subscription === 'to') {
_.each(['pending-xmpp-contact', 'requesting-xmpp-contact'],
function (cls) {
if (this.el.className.indexOf(cls) !== -1) {
this.$el.removeClass(cls);
}
}, this);
this.$el.addClass('current-xmpp-contact');
var status_desc = {
'dnd': __('This contact is busy'),
'online': __('This contact is online'),
'offline': __('This contact is offline'),
'unavailable': __('This contact is unavailable'),
'xa': __('This contact is away for an extended period'),
'away': __('This contact is away')
}[item.get('chat_status')||'offline'];
this.$el.html(this.template(
_.extend(item.toJSON(), {'status_desc': status_desc})
_.extend(item.toJSON(), {'status_desc': STATUSES[item.get('chat_status')||'offline']})
));
}
return this;
},
initialize: function () {
this.options.model.on('change', function (item, changed) {
if (_.has(item.changed, 'chat_status')) {
this.$el.attr('class', item.changed.chat_status);
}
}, this);
}
});
this.getVCard = function (jid, callback, errback) {
converse.connection.vcard.get($.proxy(function (iq) {
$vcard = $(iq).find('vCard');
var fullname = $vcard.find('FN').text(),
img = $vcard.find('BINVAL').text(),
img_type = $vcard.find('TYPE').text(),
url = $vcard.find('URL').text();
var rosteritem = converse.roster.get(jid);
if (rosteritem) {
rosteritem.save({
'fullname': fullname || jid,
'image_type': img_type,
'image': img,
'url': url,
'vcard_updated': converse.toISOString(new Date())
});
}
callback(jid, fullname, img, img_type, url);
}, this), jid, errback);
};
this.RosterItems = Backbone.Collection.extend({
model: converse.RosterItem,
......@@ -1974,12 +2098,8 @@
return (Strophe.getBareJidFromJid(jid) === Strophe.getBareJidFromJid(converse.connection.jid));
},
getItem: function (id) {
return Backbone.Collection.prototype.get.call(this, id);
},
addResource: function (bare_jid, resource) {
var item = this.getItem(bare_jid),
var item = this.get(bare_jid),
resources;
if (item) {
resources = item.get('resources');
......@@ -1995,7 +2115,7 @@
},
removeResource: function (bare_jid, resource) {
var item = this.getItem(bare_jid),
var item = this.get(bare_jid),
resources,
idx;
if (item) {
......@@ -2064,7 +2184,7 @@
for (i=0; i < this.models.length; ++i) {
id = this.models[i].get('id');
if (_.indexOf(roster_ids, id) === -1) {
this.getItem(id).destroy();
this.get(id).destroy();
}
}
},
......@@ -2073,7 +2193,7 @@
this.cleanCache(items);
_.each(items, function (item, index, items) {
if (this.isSelf(item.jid)) { return; }
var model = this.getItem(item.jid);
var model = this.get(item.jid);
if (!model) {
is_last = false;
if (index === (items.length-1)) { is_last = true; }
......@@ -2098,40 +2218,14 @@
}, this);
},
presenceHandler: function (presence) {
var $presence = $(presence),
presence_type = $presence.attr('type');
if (presence_type === 'error') {
// TODO
// error presence stanzas don't necessarily have a 'from' attr.
return true;
}
var jid = $presence.attr('from'),
bare_jid = Strophe.getBareJidFromJid(jid),
resource = Strophe.getResourceFromJid(jid),
$show = $presence.find('show'),
chat_status = $show.text() || 'online',
status_message = $presence.find('status'),
item;
handleIncomingSubscription: function (jid) {
var bare_jid = Strophe.getBareJidFromJid(jid);
var item = this.get(bare_jid);
if (this.isSelf(bare_jid)) {
if ((converse.connection.jid !== jid)&&(presence_type !== 'unavailable')) {
// Another resource has changed it's status, we'll update ours as well.
// FIXME: We should ideally differentiate between converse.js using
// resources and other resources (i.e Pidgin etc.)
converse.xmppstatus.save({'status': chat_status});
}
if (!converse.allow_contact_requests) {
converse.connection.roster.unauthorize(bare_jid);
return true;
} else if (($presence.find('x').attr('xmlns') || '').indexOf(Strophe.NS.MUC) === 0) {
return true; // Ignore MUC
}
item = this.getItem(bare_jid);
if (item && (status_message.text() != item.get('status'))) {
item.save({'status': status_message.text()});
}
if ((presence_type === 'subscribed') || (presence_type === 'unsubscribe')) {
return true;
} else if (presence_type === 'subscribe') {
if (converse.auto_subscribe) {
if ((!item) || (item.get('subscription') != 'to')) {
this.subscribeBack(jid);
......@@ -2142,6 +2236,7 @@
if ((item) && (item.get('subscription') != 'none')) {
converse.connection.roster.authorize(bare_jid);
} else {
if (!this.get(bare_jid)) {
converse.getVCard(
bare_jid,
$.proxy(function (jid, fullname, img, img_type, url) {
......@@ -2153,16 +2248,60 @@
image: img,
image_type: img_type,
url: url,
vcard_updated: converse.toISOString(new Date()),
is_last: true
});
}, this),
$.proxy(function (jid, fullname, img, img_type, url) {
converse.log("Error while retrieving vcard");
// XXX: Should vcard_updated be set here as
// well?
this.add({jid: bare_jid, subscription: 'none', ask: 'request', fullname: jid, is_last: true});
}, this)
);
} else {
return true;
}
}
}
return true;
},
presenceHandler: function (presence) {
var $presence = $(presence),
presence_type = $presence.attr('type');
if (presence_type === 'error') {
// TODO
// error presence stanzas don't necessarily have a 'from' attr.
return true;
}
var jid = $presence.attr('from'),
bare_jid = Strophe.getBareJidFromJid(jid),
resource = Strophe.getResourceFromJid(jid),
$show = $presence.find('show'),
chat_status = $show.text() || 'online',
status_message = $presence.find('status'),
item;
if (this.isSelf(bare_jid)) {
if ((converse.connection.jid !== jid)&&(presence_type !== 'unavailable')) {
// Another resource has changed it's status, we'll update ours as well.
// FIXME: We should ideally differentiate between converse.js using
// resources and other resources (i.e Pidgin etc.)
converse.xmppstatus.save({'status': chat_status});
}
return true;
} else if (($presence.find('x').attr('xmlns') || '').indexOf(Strophe.NS.MUC) === 0) {
return true; // Ignore MUC
}
item = this.get(bare_jid);
if (item && (status_message.text() != item.get('status'))) {
item.save({'status': status_message.text()});
}
if ((presence_type === 'subscribed') || (presence_type === 'unsubscribe')) {
return true;
} else if (presence_type === 'subscribe') {
return this.handleIncomingSubscription(jid);
} else if (presence_type === 'unsubscribed') {
this.unsubscribe(bare_jid);
} else if (presence_type === 'unavailable') {
......@@ -2185,34 +2324,41 @@
id: 'converse-roster',
rosteritemviews: {},
removeRosterItem: function (item) {
var view = this.rosteritemviews[item.id];
if (view) {
view.$el.remove();
delete this.rosteritemviews[item.id];
this.render();
}
},
requesting_contacts_template: _.template(
'<dt id="xmpp-contact-requests">'+__('Contact requests')+'</dt>'),
contacts_template: _.template(
'<dt id="xmpp-contacts">'+__('My contacts')+'</dt>'),
pending_contacts_template: _.template(
'<dt id="pending-xmpp-contacts">'+__('Pending contacts')+'</dt>'),
initialize: function () {
this.model.on("add", function (item) {
var view = new converse.RosterItemView({model: item});
this.rosteritemviews[item.id] = view;
this.render(item);
this.addRosterItemView(item).render(item);
if (!item.get('vcard_updated')) {
// This will update the vcard, which triggers a change
// request which will rerender the roster item.
converse.getVCard(item.get('jid'));
}
}, this);
this.model.on('change', function (item, changed) {
this.model.on('change', function (item) {
if ((_.size(item.changed) === 1) && _.contains(_.keys(item.changed), 'sorted')) {
return;
}
this.updateChatBox(item, changed);
this.render(item);
this.updateChatBox(item).render(item);
}, this);
this.model.on("remove", function (item) { this.removeRosterItem(item); }, this);
this.model.on("destroy", function (item) { this.removeRosterItem(item); }, this);
this.model.on("remove", function (item) { this.removeRosterItemView(item); }, this);
this.model.on("destroy", function (item) { this.removeRosterItemView(item); }, this);
var roster_markup = this.contacts_template();
if (converse.allow_contact_requests) {
roster_markup = this.requesting_contacts_template() + roster_markup + this.pending_contacts_template();
}
this.$el.hide().html(roster_markup);
this.$el.hide().html(this.template());
this.model.fetch({
add: true,
success: function (model, resp, options) {
......@@ -2225,14 +2371,16 @@
// want to send a presence stanza, so we do it here.
converse.xmppstatus.sendPresence();
}
},
}
}); // Get the cached roster items from localstorage
},
updateChatBox: function (item, changed) {
var chatbox = converse.chatboxes.get(item.get('jid')),
changes = {};
if (!chatbox) { return; }
if (!chatbox) {
return this;
}
if (_.has(item.changed, 'chat_status')) {
changes.chat_status = item.get('chat_status');
}
......@@ -2240,11 +2388,37 @@
changes.status = item.get('status');
}
chatbox.save(changes);
return this;
},
template: _.template('<dt id="xmpp-contact-requests">'+__('Contact requests')+'</dt>' +
'<dt id="xmpp-contacts">'+__('My contacts')+'</dt>' +
'<dt id="pending-xmpp-contacts">'+__('Pending contacts')+'</dt>'),
addRosterItemView: function (item) {
var view = new converse.RosterItemView({model: item});
this.rosteritemviews[item.id] = view;
return this;
},
removeRosterItemView: function (item) {
var view = this.rosteritemviews[item.id];
if (view) {
view.$el.remove();
delete this.rosteritemviews[item.id];
this.render();
}
return this;
},
renderRosterItem: function (item, view) {
if ((converse.show_only_online_users) && (item.get('chat_status') !== 'online')) {
view.$el.remove();
view.delegateEvents();
return this;
}
if ($.contains(document.documentElement, view.el)) {
view.render();
} else {
this.$el.find('#xmpp-contacts').after(view.render().el);
}
},
render: function (item) {
var $my_contacts = this.$el.find('#xmpp-contacts'),
......@@ -2266,13 +2440,9 @@
$contact_requests.after(view.render().el);
$contact_requests.after($contact_requests.siblings('dd.requesting-xmpp-contact').tsort(crit));
} else if (subscription === 'both' || subscription === 'to') {
if ($.contains(document.documentElement, view.el)) {
view.render();
} else {
$my_contacts.after(view.render().el);
}
this.renderRosterItem(item, view);
}
changed_presence = view.model.changed.chat_status;
changed_presence = item.changed.chat_status;
if (changed_presence) {
this.sortRoster(changed_presence);
sorted = true;
......@@ -2593,7 +2763,7 @@
showConnectButton: function () {
var $form = this.$el.find('#converse-login');
var $button = $form.find('input[type=submit]')
var $button = $form.find('input[type=submit]');
if ($button.length) {
$button.show().siblings('span').remove();
}
......@@ -2648,99 +2818,8 @@
}
});
this.showControlBox = function () {
var controlbox = this.chatboxes.get('controlbox');
if (!controlbox) {
this.chatboxes.add({
id: 'controlbox',
box_id: 'controlbox',
visible: true
});
if (this.connection) {
this.chatboxes.get('controlbox').save();
}
} else {
controlbox.trigger('show');
}
};
this.toggleControlBox = function () {
if ($("div#controlbox").is(':visible')) {
var controlbox = this.chatboxes.get('controlbox');
if (this.connection) {
controlbox.destroy();
} else {
controlbox.trigger('hide');
}
} else {
this.showControlBox();
}
};
this.initStatus = function (callback) {
this.xmppstatus = new this.XMPPStatus();
var id = hex_sha1('converse.xmppstatus-'+this.bare_jid);
this.xmppstatus.id = id; // This appears to be necessary for backbone.localStorage
this.xmppstatus.localStorage = new Backbone.LocalStorage(id);
this.xmppstatus.fetch({success: callback, error: callback});
};
this.initRoster = function () {
// Set up the roster
this.roster = new this.RosterItems();
this.roster.localStorage = new Backbone.LocalStorage(
hex_sha1('converse.rosteritems-'+converse.bare_jid));
this.connection.roster.registerCallback(
$.proxy(this.roster.rosterHandler, this.roster),
null, 'presence', null);
this.rosterview = new this.RosterView({'model':this.roster});
};
this.onConnected = function () {
if (this.debug) {
this.connection.xmlInput = function (body) { console.log(body); };
this.connection.xmlOutput = function (body) { console.log(body); };
Strophe.log = function (level, msg) { console.log(level+' '+msg); };
Strophe.error = function (msg) { console.log('ERROR: '+msg); };
}
this.bare_jid = Strophe.getBareJidFromJid(this.connection.jid);
this.domain = Strophe.getDomainFromJid(this.connection.jid);
this.features = new this.Features();
this.initStatus($.proxy(function () {
this.initRoster();
this.chatboxes.onConnected();
this.connection.addHandler(
$.proxy(this.roster.subscribeToSuggestedItems, this.roster),
'http://jabber.org/protocol/rosterx', 'message', null);
this.connection.addHandler(
$.proxy(function (presence) {
this.presenceHandler(presence);
return true;
}, this.roster), null, 'presence', null);
this.connection.addHandler(
$.proxy(function (message) {
this.chatboxes.messageReceived(message);
return true;
}, this), null, 'message', 'chat');
this.connection.roster.get(function () {});
$(window).on("blur focus", $.proxy(function(e) {
if ((this.windowState != e.type) && (e.type == 'focus')) {
converse.clearMsgCounter();
}
this.windowState = e.type;
},this));
this.giveFeedback(__('Online Contacts'));
if (this.testing) {
this.callback(this);
} else {
this.callback();
}
}, this));
};
// Initialization
// --------------
// This is the end of the initialize method.
this.chatboxes = new this.ChatBoxes();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 3cbbfab63ff6ab75d6a8455d9c72e0ee
config: 083755f35f9ab853ad615aefaae02f0e
tags: fbb0d17656682115ca4d033fb2f83ba1
......@@ -465,17 +465,35 @@ JS file so that it will include the new settings. Please refer to the
Configuration variables
=======================
allow_contact_requests
----------------------
Default = ``true``
Allow users to add one another as contacts. If this is set to false, the
**Add a contact** widget, **Contact Requests** and **Pending Contacts** roster
sections will all not appear. Additionally, all incoming contact requests will be
ignored.
allow_muc
---------
Default = ``true``
Allow multi-user chat (muc) in chatrooms. Setting this to ``false`` will remove
the ``Chatrooms`` tab from the control box.
animate
-------
Default = True
Default = ``true``
Show animations, for example when opening and closing chat boxes.
auto_list_rooms
---------------
Default = False
Default = ``false``
If true, and the XMPP server on which the current user is logged in supports
multi-user chat, then a list of rooms on that server will be fetched.
......@@ -489,7 +507,7 @@ option will create lots of extra connection traffic.
auto_subscribe
--------------
Default = False
Default = ``false``
If true, the user will automatically subscribe back to any contact requests.
......@@ -504,6 +522,8 @@ See `here <http://metajack.im/2008/09/08/which-bosh-server-do-you-need>`_ for mo
debug
-----
Default = ``false``
If set to true, debugging output will be logged to the browser console.
fullname
......@@ -515,7 +535,7 @@ logged in user, otherwise the user's vCard will be fetched.
hide_muc_server
---------------
Default = false
Default = ``false``
Hide the ``server`` input field of the form inside the ``Room`` panel of the
controlbox. Useful if you want to restrict users to a specific XMPP server of
......@@ -530,7 +550,7 @@ Specify the locale/language. The language must be in the ``locales`` object. Ref
prebind
--------
Default = false
Default = ``false``
Use this option when you want to attach to an existing XMPP connection that was
already authenticated (usually on the backend before page load).
......@@ -550,7 +570,7 @@ Additionally, you have to specify ``bosh_service_url``.
show_controlbox_by_default
--------------------------
Default = false
Default = ``false``
The "controlbox" refers to the special chatbox containing your contacts roster,
status widget, chatrooms and other controls.
......@@ -561,11 +581,18 @@ the page with class *toggle-online-users*.
If this options is set to true, the controlbox will by default be shown upon
page load.
show_only_online_users
----------------------
Default = ``false``
If set to ``true``, only online users will be shown in the contacts roster.
Users with any other status (e.g. away, busy etc.) will not be shown.
xhr_user_search
---------------
Default = False
Default = ``false``
There are two ways to add users.
......
......@@ -9,7 +9,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Index &mdash; Converse.js 0.6.4 documentation</title>
<title>Index &mdash; Converse.js 0.6.5 documentation</title>
<link rel="stylesheet" href="_static/stylesheet.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
......@@ -17,7 +17,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '0.6.4',
VERSION: '0.6.5',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
......@@ -26,7 +26,7 @@
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="Converse.js 0.6.4 documentation" href="index.html" />
<link rel="top" title="Converse.js 0.6.5 documentation" href="index.html" />
</head>
<body>
<div id="header_wrap" class="outer">
......@@ -51,7 +51,7 @@
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
accesskey="I">index</a></li>
<li><a href="index.html">Converse.js 0.6.4 documentation</a> &raquo;</li>
<li><a href="index.html">Converse.js 0.6.5 documentation</a> &raquo;</li>
</ul>
</div>
<section id="main_content" class="inner">
......@@ -80,7 +80,7 @@
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
>index</a></li>
<li><a href="index.html">Converse.js 0.6.4 documentation</a> &raquo;</li>
<li><a href="index.html">Converse.js 0.6.5 documentation</a> &raquo;</li>
</ul>
</div>
</div>
......
......@@ -7,7 +7,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Quickstart (to get a demo up and running) &mdash; Converse.js 0.6.4 documentation</title>
<title>Quickstart (to get a demo up and running) &mdash; Converse.js 0.6.5 documentation</title>
<link rel="stylesheet" href="_static/stylesheet.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
......@@ -15,7 +15,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '0.6.4',
VERSION: '0.6.5',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
......@@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="Converse.js 0.6.4 documentation" href="#" />
<link rel="top" title="Converse.js 0.6.5 documentation" href="#" />
</head>
<body>
<div id="header_wrap" class="outer">
......@@ -49,7 +49,7 @@
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li><a href="#">Converse.js 0.6.4 documentation</a> &raquo;</li>
<li><a href="#">Converse.js 0.6.5 documentation</a> &raquo;</li>
</ul>
</div>
<section id="main_content" class="inner">
......@@ -95,26 +95,29 @@
</li>
<li><a class="reference internal" href="#configuration" id="id21">Configuration</a><ul>
<li><a class="reference internal" href="#configuration-variables" id="id22">Configuration variables</a><ul>
<li><a class="reference internal" href="#animate" id="id23">animate</a></li>
<li><a class="reference internal" href="#auto-list-rooms" id="id24">auto_list_rooms</a></li>
<li><a class="reference internal" href="#auto-subscribe" id="id25">auto_subscribe</a></li>
<li><a class="reference internal" href="#bosh-service-url" id="id26">bosh_service_url</a></li>
<li><a class="reference internal" href="#debug" id="id27">debug</a></li>
<li><a class="reference internal" href="#fullname" id="id28">fullname</a></li>
<li><a class="reference internal" href="#hide-muc-server" id="id29">hide_muc_server</a></li>
<li><a class="reference internal" href="#i18n" id="id30">i18n</a></li>
<li><a class="reference internal" href="#prebind" id="id31">prebind</a></li>
<li><a class="reference internal" href="#show-controlbox-by-default" id="id32">show_controlbox_by_default</a></li>
<li><a class="reference internal" href="#xhr-user-search" id="id33">xhr_user_search</a></li>
<li><a class="reference internal" href="#allow-contact-requests" id="id23">allow_contact_requests</a></li>
<li><a class="reference internal" href="#allow-muc" id="id24">allow_muc</a></li>
<li><a class="reference internal" href="#animate" id="id25">animate</a></li>
<li><a class="reference internal" href="#auto-list-rooms" id="id26">auto_list_rooms</a></li>
<li><a class="reference internal" href="#auto-subscribe" id="id27">auto_subscribe</a></li>
<li><a class="reference internal" href="#bosh-service-url" id="id28">bosh_service_url</a></li>
<li><a class="reference internal" href="#debug" id="id29">debug</a></li>
<li><a class="reference internal" href="#fullname" id="id30">fullname</a></li>
<li><a class="reference internal" href="#hide-muc-server" id="id31">hide_muc_server</a></li>
<li><a class="reference internal" href="#i18n" id="id32">i18n</a></li>
<li><a class="reference internal" href="#prebind" id="id33">prebind</a></li>
<li><a class="reference internal" href="#show-controlbox-by-default" id="id34">show_controlbox_by_default</a></li>
<li><a class="reference internal" href="#show-only-online-users" id="id35">show_only_online_users</a></li>
<li><a class="reference internal" href="#xhr-user-search" id="id36">xhr_user_search</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#minification" id="id34">Minification</a><ul>
<li><a class="reference internal" href="#minifying-javascript-and-css" id="id35">Minifying Javascript and CSS</a></li>
<li><a class="reference internal" href="#minification" id="id37">Minification</a><ul>
<li><a class="reference internal" href="#minifying-javascript-and-css" id="id38">Minifying Javascript and CSS</a></li>
</ul>
</li>
<li><a class="reference internal" href="#translations" id="id36">Translations</a></li>
<li><a class="reference internal" href="#translations" id="id39">Translations</a></li>
</ul>
</div>
<div class="section" id="quickstart-to-get-a-demo-up-and-running">
......@@ -453,14 +456,28 @@ JS file so that it will include the new settings. Please refer to the
<a class="reference internal" href="#minification">Minification</a> section for more info on how to do this.</p>
<div class="section" id="configuration-variables">
<h2><a class="toc-backref" href="#id22">Configuration variables</a><a class="headerlink" href="#configuration-variables" title="Permalink to this headline"></a></h2>
<div class="section" id="allow-contact-requests">
<h3><a class="toc-backref" href="#id23">allow_contact_requests</a><a class="headerlink" href="#allow-contact-requests" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">true</span></tt></p>
<p>Allow users to add one another as contacts. If this is set to false, the
<strong>Add a contact</strong> widget, <strong>Contact Requests</strong> and <strong>Pending Contacts</strong> roster
sections will all not appear. Additionally, all incoming contact requests will be
ignored.</p>
</div>
<div class="section" id="allow-muc">
<h3><a class="toc-backref" href="#id24">allow_muc</a><a class="headerlink" href="#allow-muc" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">true</span></tt></p>
<p>Allow multi-user chat (muc) in chatrooms. Setting this to <tt class="docutils literal"><span class="pre">false</span></tt> will remove
the <tt class="docutils literal"><span class="pre">Chatrooms</span></tt> tab from the control box.</p>
</div>
<div class="section" id="animate">
<h3><a class="toc-backref" href="#id23">animate</a><a class="headerlink" href="#animate" title="Permalink to this headline"></a></h3>
<p>Default = True</p>
<h3><a class="toc-backref" href="#id25">animate</a><a class="headerlink" href="#animate" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">true</span></tt></p>
<p>Show animations, for example when opening and closing chat boxes.</p>
</div>
<div class="section" id="auto-list-rooms">
<h3><a class="toc-backref" href="#id24">auto_list_rooms</a><a class="headerlink" href="#auto-list-rooms" title="Permalink to this headline"></a></h3>
<p>Default = False</p>
<h3><a class="toc-backref" href="#id26">auto_list_rooms</a><a class="headerlink" href="#auto-list-rooms" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">false</span></tt></p>
<p>If true, and the XMPP server on which the current user is logged in supports
multi-user chat, then a list of rooms on that server will be fetched.</p>
<p>Not recommended for servers with lots of chat rooms.</p>
......@@ -469,40 +486,41 @@ features, number of occupants etc.), so on servers with many rooms this
option will create lots of extra connection traffic.</p>
</div>
<div class="section" id="auto-subscribe">
<h3><a class="toc-backref" href="#id25">auto_subscribe</a><a class="headerlink" href="#auto-subscribe" title="Permalink to this headline"></a></h3>
<p>Default = False</p>
<h3><a class="toc-backref" href="#id27">auto_subscribe</a><a class="headerlink" href="#auto-subscribe" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">false</span></tt></p>
<p>If true, the user will automatically subscribe back to any contact requests.</p>
</div>
<div class="section" id="bosh-service-url">
<h3><a class="toc-backref" href="#id26">bosh_service_url</a><a class="headerlink" href="#bosh-service-url" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id28">bosh_service_url</a><a class="headerlink" href="#bosh-service-url" title="Permalink to this headline"></a></h3>
<p>Connections to an XMPP server depend on a BOSH connection manager which acts as
a middle man between HTTP and XMPP.</p>
<p>See <a class="reference external" href="http://metajack.im/2008/09/08/which-bosh-server-do-you-need">here</a> for more information.</p>
</div>
<div class="section" id="debug">
<h3><a class="toc-backref" href="#id27">debug</a><a class="headerlink" href="#debug" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id29">debug</a><a class="headerlink" href="#debug" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">false</span></tt></p>
<p>If set to true, debugging output will be logged to the browser console.</p>
</div>
<div class="section" id="fullname">
<h3><a class="toc-backref" href="#id28">fullname</a><a class="headerlink" href="#fullname" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id30">fullname</a><a class="headerlink" href="#fullname" title="Permalink to this headline"></a></h3>
<p>If you are using prebinding, can specify the fullname of the currently
logged in user, otherwise the user&#8217;s vCard will be fetched.</p>
</div>
<div class="section" id="hide-muc-server">
<h3><a class="toc-backref" href="#id29">hide_muc_server</a><a class="headerlink" href="#hide-muc-server" title="Permalink to this headline"></a></h3>
<p>Default = false</p>
<h3><a class="toc-backref" href="#id31">hide_muc_server</a><a class="headerlink" href="#hide-muc-server" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">false</span></tt></p>
<p>Hide the <tt class="docutils literal"><span class="pre">server</span></tt> input field of the form inside the <tt class="docutils literal"><span class="pre">Room</span></tt> panel of the
controlbox. Useful if you want to restrict users to a specific XMPP server of
your choosing.</p>
</div>
<div class="section" id="i18n">
<h3><a class="toc-backref" href="#id30">i18n</a><a class="headerlink" href="#i18n" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id32">i18n</a><a class="headerlink" href="#i18n" title="Permalink to this headline"></a></h3>
<p>Specify the locale/language. The language must be in the <tt class="docutils literal"><span class="pre">locales</span></tt> object. Refer to
<tt class="docutils literal"><span class="pre">./locale/locales.js</span></tt> to see which locales are supported.</p>
</div>
<div class="section" id="prebind">
<h3><a class="toc-backref" href="#id31">prebind</a><a class="headerlink" href="#prebind" title="Permalink to this headline"></a></h3>
<p>Default = false</p>
<h3><a class="toc-backref" href="#id33">prebind</a><a class="headerlink" href="#prebind" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">false</span></tt></p>
<p>Use this option when you want to attach to an existing XMPP connection that was
already authenticated (usually on the backend before page load).</p>
<p>This is useful when you don&#8217;t want to render the login form on the chat control
......@@ -514,8 +532,8 @@ values as <tt class="docutils literal"><span class="pre">jid</span></tt>, <tt cl
<p>Additionally, you have to specify <tt class="docutils literal"><span class="pre">bosh_service_url</span></tt>.</p>
</div>
<div class="section" id="show-controlbox-by-default">
<h3><a class="toc-backref" href="#id32">show_controlbox_by_default</a><a class="headerlink" href="#show-controlbox-by-default" title="Permalink to this headline"></a></h3>
<p>Default = false</p>
<h3><a class="toc-backref" href="#id34">show_controlbox_by_default</a><a class="headerlink" href="#show-controlbox-by-default" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">false</span></tt></p>
<p>The &#8220;controlbox&#8221; refers to the special chatbox containing your contacts roster,
status widget, chatrooms and other controls.</p>
<p>By default this box is hidden and can be toggled by clicking on any element in
......@@ -523,9 +541,15 @@ the page with class <em>toggle-online-users</em>.</p>
<p>If this options is set to true, the controlbox will by default be shown upon
page load.</p>
</div>
<div class="section" id="show-only-online-users">
<h3><a class="toc-backref" href="#id35">show_only_online_users</a><a class="headerlink" href="#show-only-online-users" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">false</span></tt></p>
<p>If set to <tt class="docutils literal"><span class="pre">true</span></tt>, only online users will be shown in the contacts roster.
Users with any other status (e.g. away, busy etc.) will not be shown.</p>
</div>
<div class="section" id="xhr-user-search">
<h3><a class="toc-backref" href="#id33">xhr_user_search</a><a class="headerlink" href="#xhr-user-search" title="Permalink to this headline"></a></h3>
<p>Default = False</p>
<h3><a class="toc-backref" href="#id36">xhr_user_search</a><a class="headerlink" href="#xhr-user-search" title="Permalink to this headline"></a></h3>
<p>Default = <tt class="docutils literal"><span class="pre">false</span></tt></p>
<p>There are two ways to add users.</p>
<ul class="simple">
<li>The user inputs a valid JID (Jabber ID), and the user is added as a pending contact.</li>
......@@ -537,9 +561,9 @@ be used.</p>
</div>
</div>
<div class="section" id="minification">
<h1><a class="toc-backref" href="#id34">Minification</a><a class="headerlink" href="#minification" title="Permalink to this headline"></a></h1>
<h1><a class="toc-backref" href="#id37">Minification</a><a class="headerlink" href="#minification" title="Permalink to this headline"></a></h1>
<div class="section" id="minifying-javascript-and-css">
<h2><a class="toc-backref" href="#id35">Minifying Javascript and CSS</a><a class="headerlink" href="#minifying-javascript-and-css" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id38">Minifying Javascript and CSS</a><a class="headerlink" href="#minifying-javascript-and-css" title="Permalink to this headline"></a></h2>
<p>Please make sure to read the section <a class="reference internal" href="#development">Development</a> and that you have installed
all development dependencies (long story short, you can run <tt class="docutils literal"><span class="pre">npm</span> <span class="pre">install</span></tt>
and then <tt class="docutils literal"><span class="pre">grunt</span> <span class="pre">fetch</span></tt>).</p>
......@@ -564,7 +588,7 @@ You can <a class="reference external" href="http://requirejs.org/docs/optimizati
</div>
</div>
<div class="section" id="translations">
<h1><a class="toc-backref" href="#id36">Translations</a><a class="headerlink" href="#translations" title="Permalink to this headline"></a></h1>
<h1><a class="toc-backref" href="#id39">Translations</a><a class="headerlink" href="#translations" title="Permalink to this headline"></a></h1>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Translations take up a lot of space and will bloat your minified file.
......@@ -653,7 +677,7 @@ those hoops you had to jump through.</p>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li><a href="#">Converse.js 0.6.4 documentation</a> &raquo;</li>
<li><a href="#">Converse.js 0.6.5 documentation</a> &raquo;</li>
</ul>
</div>
</div>
......
# Sphinx inventory version 2
# Project: Converse.js
# Version: 0.6.4
# Version: 0.6.5
# The remainder of this file is compressed using zlib.
xm
{"];
......
......@@ -7,7 +7,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search &mdash; Converse.js 0.6.4 documentation</title>
<title>Search &mdash; Converse.js 0.6.5 documentation</title>
<link rel="stylesheet" href="_static/stylesheet.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
......@@ -15,7 +15,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '0.6.4',
VERSION: '0.6.5',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
......@@ -25,7 +25,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/searchtools.js"></script>
<link rel="top" title="Converse.js 0.6.4 documentation" href="index.html" />
<link rel="top" title="Converse.js 0.6.5 documentation" href="index.html" />
<script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
......@@ -55,7 +55,7 @@
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li><a href="index.html">Converse.js 0.6.4 documentation</a> &raquo;</li>
<li><a href="index.html">Converse.js 0.6.5 documentation</a> &raquo;</li>
</ul>
</div>
<section id="main_content" class="inner">
......@@ -100,7 +100,7 @@
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li><a href="index.html">Converse.js 0.6.4 documentation</a> &raquo;</li>
<li><a href="index.html">Converse.js 0.6.5 documentation</a> &raquo;</li>
</ul>
</div>
</div>
......
Search.setIndex({objects:{},terms:{all:0,code:0,partial:0,queri:0,global:0,webchat:0,follow:0,middl:0,depend:0,sensit:0,punjab:0,present:0,under:0,spec:0,string:0,fals:0,than:0,account:0,facebook:0,jack:0,veri:0,tri:0,chatpanel:0,list:0,sane:0,div:0,pleas:0,prevent:0,almond:0,past:0,second:0,pass:0,download:0,further:0,fullnam:0,click:0,even:0,index:0,what:0,hide:0,section:0,access:0,"public":0,version:0,"new":0,net:0,method:0,widget:0,themselv:0,gener:0,here:0,bodi:0,let:0,path:0,strong:0,modifi:0,sinc:0,valu:0,box:0,great:0,convers:0,mysit:0,ajax:0,fetch:0,implement:0,sorri:0,via:0,repositori:0,extra:0,solut:0,prefer:0,put:0,href:0,org:0,auto_list_room:0,instal:0,getsess:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,few:0,stylesheet:0,call:0,recommend:0,type:0,until:0,toggl:0,more:0,peopl:0,notic:0,site:0,particular:0,vcard:0,must:0,none:0,room:0,work:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,quickstart:0,give:0,share:0,templat:0,tag:0,proprietari:0,explor:0,onlin:0,occup:0,end:0,goal:0,thing:0,write:0,how:0,sid:0,roster:0,instead:0,css:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,befor:0,underscor:0,data:0,demonstr:0,man:0,"short":0,practic:0,bind:0,show_controlbox_by_default:0,element:0,caus:0,inform:0,parti:0,mechan:0,order:0,feedback:0,chatbox:0,xmpp:0,over:0,becaus:0,through:0,streamlin:0,snippet:0,jid:0,"8147a27e4a7f9b55ffc85c2683f9529a":0,directli:0,fit:0,fix:0,"static":0,pend:0,hidden:0,therefor:0,might:0,them:0,anim:0,"return":0,thei:0,initi:0,rewriterul:0,front:0,now:0,introduct:0,edit:0,revers:0,authent:0,separ:0,token:0,ejabberd:0,each:0,debug:0,side:0,mean:0,domain:0,individu:0,realli:0,contrib:0,legwork:0,connect:0,happen:0,extract:0,special:0,variabl:0,shown:0,"3rd":0,space:0,miss:0,proxy_pass:0,content:0,rel:0,internet:0,plural:0,factori:0,po2json:0,proxi:0,insid:0,standard:0,standalon:0,reason:0,releas:0,succesfulli:0,afterward:0,rewriteengin:0,could:0,ask:0,keep:0,turn:0,first:0,origin:0,softwar:0,render:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,restrict:0,instruct:0,alreadi:0,done:0,submit:0,owner:0,custom:0,jabber:0,differ:0,script:0,top:0,attack:0,messag:0,attach:0,stori:0,master:0,jed:0,jcbrand:0,"final":0,listen:0,luckili:0,consol:0,option:0,tool:0,specifi:0,github:0,pars:0,grunt:0,haven:0,serv:0,jump:0,kind:0,bloat:0,provid:0,remov:0,exampl:0,bridg:0,someothersit:0,browser:0,pre:0,"function":0,saa:0,modern:0,ani:0,packag:0,have:0,tabl:0,need:0,moffitt:0,django:0,bosh_service_url:0,prebind:0,min:0,latter:0,port:0,note:0,also:0,contact:0,take:0,which:0,singl:0,sure:0,though:0,unsur:0,who:0,most:0,deploi:0,homepag:0,"class":0,don:0,url:0,request:0,doe:0,part:0,runtim:0,bower:0,usual:0,xdomainrequest:0,devdepend:0,show:0,german:0,text:0,server_nam:0,session:0,fine:0,find:0,help:0,current:0,onli:0,exactli:0,locat:0,just:0,configur:0,apach:0,should:0,folder:0,local:0,meant:0,count:0,get:0,soon:0,opkod:0,nativ:0,cannot:0,requir:0,enabl:0,emb:0,mainspec:0,patch:0,reload:0,bad:0,integr:0,contain:0,where:0,set:0,habit:0,stroph:0,see:0,result:0,close:0,page:0,statu:0,said:0,extend:0,state:0,between:0,experi:0,jasmin:0,screen:0,attribut:0,appreci:0,kei:0,hide_muc_serv:0,javascript:0,style:0,job:0,bosh:0,"5e64a30272af065bd72258c565a03f2f":0,both:0,cor:0,instant:0,shortliv:0,conversej:0,myself:0,etc:0,grain:0,mani:0,login:0,com:0,load:0,node_modul:0,pot:0,assum:0,backend:0,quit:0,sucessfulli:0,addition:0,rebuild:0,compon:0,json:0,much:0,subscrib:0,blob:0,session_kei:0,convert:0,minifi:0,togeth:0,i18n:0,those:0,multi:0,main:0,look:0,servic:0,plugin:0,defin:0,abov:0,error:0,howev:0,hightlight:0,chat:0,helper:0,demo:0,auto_subscrib:0,non:0,rid:0,conn:0,develop:0,open:0,minim:0,receiv:0,media:0,make:0,minif:0,cross:0,same:0,read:0,onconnectfacebook:0,html:0,chatroom:0,document:0,medit:0,complet:0,signon:0,http:0,webserv:0,optim:0,upon:0,someon:0,hand:0,"50kb":0,user:0,xhr_user_search:0,cssmin:0,recent:0,stateless:0,markup:0,well:0,without:0,command:0,wherebi:0,thi:0,choos:0,latest:0,plural_form:0,protocol:0,firstnam:0,when:0,jshint:0,languag:0,web:0,xmlhttprequest:0,had:0,add:0,other:0,non_amd:0,input:0,match:0,build:0,bin:0,applic:0,format:0,webpag:0,amd:0,nginx:0,traffic:0,know:0,background:0,like:0,xss:0,backbon:0,specif:0,manual:0,server:0,collect:0,benefit:0,either:0,output:0,manag:0,facebookconnect:0,old:0,deal:0,nplural:0,some:0,back:0,librari:0,bottom:0,deploy:0,achiev:0,track:0,overcom:0,localhost:0,refer:0,object:0,run:0,host:0,although:0,panel:0,src:0,about:0,controlbox:0,unfortun:0,act:0,own:0,curiou:0,encod:0,automat:0,wrap:0,your:0,merg:0,log:0,wai:0,transfer:0,support:0,"long":0,happi:0,avail:0,includ:0,lot:0,suit:0,analysi:0,head:0,properli:0,form:0,bundl:0,link:0,translat:0,synonym:0,line:0,inlin:0,"true":0,bug:0,congratul:0,longer:0,info:0,pull:0,made:0,dirti:0,locale_data:0,possibl:0,"default":0,bugfix:0,displai:0,asynchron:0,below:0,tightli:0,otherwis:0,problem:0,expect:0,featur:0,creat:0,doesn:0,msgmerg:0,exist:0,file:0,face:0,check:0,again:0,want:0,tip:0,detail:0,gettext:0,field:0,valid:0,rememb:0,test:0,you:0,servernam:0,nice:0,node:0,intend:0,stai:0,lang:0,requirej:0,directori:0,virtualhost:0,getjson:0,potenti:0,time:0},objtypes:{},titles:["Quickstart (to get a demo up and running)"],objnames:{},filenames:["index"]})
\ No newline at end of file
Search.setIndex({objects:{},terms:{all:0,code:0,partial:0,queri:0,global:0,webchat:0,follow:0,middl:0,depend:0,sensit:0,punjab:0,present:0,under:0,spec:0,string:0,fals:0,than:0,account:0,facebook:0,jack:0,veri:0,tri:0,chatpanel:0,list:0,sane:0,div:0,pleas:0,prevent:0,almond:0,past:0,second:0,pass:0,download:0,further:0,fullnam:0,click:0,even:0,index:0,what:0,hide:0,appear:0,section:0,access:0,"public":0,version:0,"new":0,net:0,method:0,widget:0,themselv:0,gener:0,here:0,bodi:0,let:0,path:0,strong:0,modifi:0,sinc:0,valu:0,box:0,great:0,convers:0,mysit:0,ajax:0,fetch:0,implement:0,sorri:0,via:0,repositori:0,extra:0,solut:0,prefer:0,put:0,href:0,org:0,auto_list_room:0,instal:0,getsess:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,few:0,stylesheet:0,call:0,recommend:0,type:0,until:0,toggl:0,more:0,peopl:0,notic:0,site:0,particular:0,vcard:0,must:0,none:0,room:0,work:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,quickstart:0,give:0,share:0,templat:0,tag:0,proprietari:0,explor:0,onlin:0,occup:0,end:0,goal:0,thing:0,anoth:0,write:0,how:0,sid:0,roster:0,instead:0,css:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,befor:0,allow_contact_request:0,underscor:0,data:0,demonstr:0,man:0,"short":0,practic:0,bind:0,show_controlbox_by_default:0,element:0,caus:0,inform:0,show_only_online_us:0,allow:0,parti:0,mechan:0,order:0,feedback:0,chatbox:0,xmpp:0,over:0,becaus:0,through:0,streamlin:0,snippet:0,jid:0,"8147a27e4a7f9b55ffc85c2683f9529a":0,directli:0,fit:0,fix:0,"static":0,pend:0,hidden:0,therefor:0,might:0,them:0,anim:0,"return":0,thei:0,initi:0,rewriterul:0,front:0,now:0,introduct:0,edit:0,revers:0,authent:0,separ:0,token:0,ejabberd:0,each:0,debug:0,side:0,mean:0,domain:0,individu:0,realli:0,contrib:0,legwork:0,connect:0,happen:0,extract:0,special:0,variabl:0,shown:0,"3rd":0,space:0,miss:0,proxy_pass:0,content:0,rel:0,internet:0,plural:0,factori:0,po2json:0,proxi:0,insid:0,standard:0,standalon:0,reason:0,releas:0,succesfulli:0,afterward:0,rewriteengin:0,could:0,ask:0,keep:0,turn:0,first:0,origin:0,softwar:0,render:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,restrict:0,instruct:0,alreadi:0,done:0,submit:0,owner:0,custom:0,jabber:0,differ:0,script:0,top:0,attack:0,messag:0,attach:0,stori:0,master:0,jed:0,jcbrand:0,"final":0,listen:0,luckili:0,consol:0,option:0,tool:0,specifi:0,github:0,pars:0,grunt:0,haven:0,serv:0,jump:0,kind:0,bloat:0,provid:0,remov:0,exampl:0,bridg:0,someothersit:0,browser:0,pre:0,"function":0,saa:0,modern:0,ani:0,packag:0,have:0,tabl:0,need:0,moffitt:0,django:0,bosh_service_url:0,prebind:0,min:0,latter:0,port:0,note:0,also:0,contact:0,take:0,which:0,singl:0,sure:0,though:0,unsur:0,who:0,most:0,deploi:0,homepag:0,"class":0,don:0,url:0,request:0,doe:0,part:0,runtim:0,bower:0,usual:0,xdomainrequest:0,devdepend:0,show:0,german:0,text:0,server_nam:0,session:0,fine:0,find:0,help:0,current:0,onli:0,exactli:0,locat:0,just:0,configur:0,apach:0,should:0,busi:0,folder:0,local:0,meant:0,count:0,get:0,soon:0,opkod:0,nativ:0,cannot:0,requir:0,enabl:0,emb:0,mainspec:0,patch:0,reload:0,bad:0,integr:0,contain:0,where:0,set:0,habit:0,stroph:0,see:0,result:0,close:0,page:0,statu:0,said:0,extend:0,state:0,muc:0,between:0,awai:0,experi:0,jasmin:0,screen:0,attribut:0,appreci:0,kei:0,hide_muc_serv:0,javascript:0,style:0,job:0,bosh:0,"5e64a30272af065bd72258c565a03f2f":0,both:0,cor:0,instant:0,shortliv:0,conversej:0,myself:0,etc:0,grain:0,mani:0,login:0,com:0,load:0,node_modul:0,pot:0,assum:0,backend:0,quit:0,sucessfulli:0,addition:0,rebuild:0,compon:0,json:0,much:0,subscrib:0,blob:0,session_kei:0,convert:0,minifi:0,togeth:0,i18n:0,those:0,multi:0,main:0,look:0,servic:0,plugin:0,defin:0,abov:0,error:0,howev:0,hightlight:0,chat:0,helper:0,demo:0,auto_subscrib:0,non:0,incom:0,rid:0,conn:0,develop:0,open:0,minim:0,receiv:0,media:0,make:0,minif:0,cross:0,same:0,read:0,onconnectfacebook:0,html:0,chatroom:0,document:0,medit:0,complet:0,signon:0,http:0,webserv:0,optim:0,upon:0,someon:0,hand:0,"50kb":0,user:0,xhr_user_search:0,cssmin:0,recent:0,stateless:0,markup:0,well:0,without:0,command:0,wherebi:0,thi:0,choos:0,latest:0,plural_form:0,protocol:0,firstnam:0,when:0,jshint:0,languag:0,web:0,xmlhttprequest:0,had:0,add:0,other:0,non_amd:0,input:0,match:0,build:0,bin:0,applic:0,format:0,webpag:0,amd:0,nginx:0,traffic:0,know:0,background:0,like:0,xss:0,backbon:0,specif:0,manual:0,server:0,collect:0,benefit:0,either:0,output:0,manag:0,facebookconnect:0,old:0,deal:0,nplural:0,some:0,back:0,librari:0,bottom:0,deploy:0,achiev:0,track:0,overcom:0,localhost:0,refer:0,object:0,run:0,host:0,although:0,panel:0,src:0,about:0,controlbox:0,unfortun:0,act:0,own:0,curiou:0,encod:0,automat:0,wrap:0,your:0,merg:0,log:0,wai:0,transfer:0,support:0,"long":0,happi:0,avail:0,includ:0,lot:0,suit:0,analysi:0,head:0,properli:0,form:0,bundl:0,link:0,translat:0,synonym:0,line:0,inlin:0,"true":0,bug:0,congratul:0,longer:0,info:0,pull:0,made:0,dirti:0,tab:0,possibl:0,"default":0,bugfix:0,displai:0,asynchron:0,below:0,tightli:0,otherwis:0,problem:0,expect:0,featur:0,creat:0,doesn:0,msgmerg:0,exist:0,file:0,face:0,check:0,again:0,want:0,tip:0,detail:0,gettext:0,field:0,valid:0,rememb:0,test:0,you:0,servernam:0,nice:0,node:0,intend:0,stai:0,lang:0,requirej:0,directori:0,virtualhost:0,getjson:0,allow_muc:0,ignor:0,locale_data:0,potenti:0,time:0},objtypes:{},titles:["Quickstart (to get a demo up and running)"],objnames:{},filenames:["index"]})
\ No newline at end of file
......@@ -48,9 +48,9 @@ copyright = u'2013, JC Brand'
# built documents.
#
# The short X.Y version.
version = '0.6.4'
version = '0.6.5'
# The full version, including alpha/beta/rc tags.
release = '0.6.4'
release = '0.6.5'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
......
......@@ -465,17 +465,35 @@ JS file so that it will include the new settings. Please refer to the
Configuration variables
=======================
allow_contact_requests
----------------------
Default = ``true``
Allow users to add one another as contacts. If this is set to false, the
**Add a contact** widget, **Contact Requests** and **Pending Contacts** roster
sections will all not appear. Additionally, all incoming contact requests will be
ignored.
allow_muc
---------
Default = ``true``
Allow multi-user chat (muc) in chatrooms. Setting this to ``false`` will remove
the ``Chatrooms`` tab from the control box.
animate
-------
Default = True
Default = ``true``
Show animations, for example when opening and closing chat boxes.
auto_list_rooms
---------------
Default = False
Default = ``false``
If true, and the XMPP server on which the current user is logged in supports
multi-user chat, then a list of rooms on that server will be fetched.
......@@ -489,7 +507,7 @@ option will create lots of extra connection traffic.
auto_subscribe
--------------
Default = False
Default = ``false``
If true, the user will automatically subscribe back to any contact requests.
......@@ -504,6 +522,8 @@ See `here <http://metajack.im/2008/09/08/which-bosh-server-do-you-need>`_ for mo
debug
-----
Default = ``false``
If set to true, debugging output will be logged to the browser console.
fullname
......@@ -515,7 +535,7 @@ logged in user, otherwise the user's vCard will be fetched.
hide_muc_server
---------------
Default = false
Default = ``false``
Hide the ``server`` input field of the form inside the ``Room`` panel of the
controlbox. Useful if you want to restrict users to a specific XMPP server of
......@@ -530,7 +550,7 @@ Specify the locale/language. The language must be in the ``locales`` object. Ref
prebind
--------
Default = false
Default = ``false``
Use this option when you want to attach to an existing XMPP connection that was
already authenticated (usually on the backend before page load).
......@@ -550,7 +570,7 @@ Additionally, you have to specify ``bosh_service_url``.
show_controlbox_by_default
--------------------------
Default = false
Default = ``false``
The "controlbox" refers to the special chatbox containing your contacts roster,
status widget, chatrooms and other controls.
......@@ -561,11 +581,18 @@ the page with class *toggle-online-users*.
If this options is set to true, the controlbox will by default be shown upon
page load.
show_only_online_users
----------------------
Default = ``false``
If set to ``true``, only online users will be shown in the contacts roster.
Users with any other status (e.g. away, busy etc.) will not be shown.
xhr_user_search
---------------
Default = False
Default = ``false``
There are two ways to add users.
......
......@@ -18,8 +18,8 @@
<h1 id="project_title"><a href="http://conversejs.org">Converse.js</a></h1>
<h2 id="project_tagline">An XMPP chat client for your website</h2>
<section id="downloads">
<a class="zip_download_link" href="https://github.com/jcbrand/converse.js/archive/v0.6.4.zip">Download the latest release as a .zip file</a>
<a class="tar_download_link" href="https://github.com/jcbrand/converse.js/archive/v0.6.4.tar.gz">Download the latest release as a tar.gz file</a>
<a class="zip_download_link" href="https://github.com/jcbrand/converse.js/archive/v0.6.5.zip">Download the latest release as a .zip file</a>
<a class="tar_download_link" href="https://github.com/jcbrand/converse.js/archive/v0.6.5.tar.gz">Download the latest release as a tar.gz file</a>
</section>
</header>
</div>
......@@ -53,7 +53,7 @@
<li>Custom status messages</li>
<li>Typing notifications</li>
<li>Third person messages (/me )</li>
<li>Translated into multiple languages (af, de, es, fr, it, pt-BR)</li>
<li>Translated into multiple languages (af, de, es, fr, it, hu, pt-BR, ru)</li>
</ul>
<h2>Screencasts</h2>
......
{
"converse": {
"": {
"Project-Id-Version": "Converse.js 0.4",
"Report-Msgid-Bugs-To": "",
"POT-Creation-Date": "2013-09-24 23:22+0200",
"PO-Revision-Date": "2013-09-25 22:42+0200",
"Last-Translator": "Krisztian Kompar <w3host@w3host.hu>",
"Language-Team": "Hungarian",
"Language": "hu",
"MIME-Version": "1.0",
"Content-Type": "text/plain; charset=UTF-8",
"Content-Transfer-Encoding": "8bit",
"domain": "converse",
"lang": "hu",
"plural_forms": "nplurals=2; plural=(n != 1);"
},
"Disconnected": [
null,
"Szétkapcsolva"
],
"Error": [
null,
"Hiba"
],
"Connecting": [
null,
"Kapcsolódás"
],
"Connection Failed": [
null,
"Kapcsolódási hiba"
],
"Authenticating": [
null,
"Azonosítás"
],
"Authentication Failed": [
null,
"Azonosítási hiba"
],
"Disconnecting": [
null,
"Szétkapcsolás"
],
"me": [
null,
"én"
],
"%1$s is typing": [
null,
"%1$s gépel"
],
"Show this menu": [
null,
"Mutasd ezt a menüt"
],
"Write in the third person": [
null,
""
],
"Remove messages": [
null,
"Üzenet törlése"
],
"Personal message": [
null,
"Saját üzenet"
],
"Contacts": [
null,
"Kapcsolatok"
],
"Online": [
null,
"Elérhető"
],
"Busy": [
null,
"Foglalt"
],
"Away": [
null,
"Távol"
],
"Offline": [
null,
"Nem elérhető"
],
"Click to add new chat contacts": [
null,
"Új kapcsolatok hozzáadása"
],
"Add a contact": [
null,
"Új kapcsolat"
],
"Contact username": [
null,
"Felhasználónév"
],
"Add": [
null,
"Hozzáadás"
],
"Contact name": [
null,
"Kapcsolat neve"
],
"Search": [
null,
"Keresés"
],
"No users found": [
null,
"Nincs találat"
],
"Click to add as a chat contact": [
null,
"Csevegő kapcsolatként hozzáad"
],
"Click to open this room": [
null,
"Belépés a csevegő szobába"
],
"Show more information on this room": [
null,
"További információk a csevegő szobáról"
],
"Description:": [
null,
"Leírás:"
],
"Occupants:": [
null,
"Jelenlevők:"
],
"Features:": [
null,
"Tulajdonságok"
],
"Requires authentication": [
null,
"Azonosítás szükséges"
],
"Hidden": [
null,
"Rejtett"
],
"Requires an invitation": [
null,
"Meghívás szükséges"
],
"Moderated": [
null,
"Moderált"
],
"Non-anonymous": [
null,
"NEM névtelen"
],
"Open room": [
null,
"Nyitott szoba"
],
"Permanent room": [
null,
"Állandó szoba"
],
"Public": [
null,
"Nyílvános"
],
"Semi-anonymous": [
null,
"Félig névtelen"
],
"Temporary room": [
null,
"Ideiglenes szoba"
],
"Unmoderated": [
null,
"Moderálatlan"
],
"Rooms": [
null,
"Szobák"
],
"Room name": [
null,
"A szoba neve"
],
"Nickname": [
null,
"Becenév"
],
"Server": [
null,
"Szerver"
],
"Join": [
null,
"Csatlakozás"
],
"Show rooms": [
null,
"Létező szobák"
],
"No rooms on %1$s": [
null,
"Nincs csevegő szoba a(z) %1$s szerveren"
],
"Rooms on %1$s": [
null,
"Csevegő szobák a(z) %1$s szerveren"
],
"Set chatroom topic": [
null,
"Csevegőszoba téma beállítás"
],
"Kick user from chatroom": [
null,
"Felhasználó kiléptetése a csevegő szobából"
],
"Ban user from chatroom": [
null,
"Felhasználó kitíltása a csevegő szobából"
],
"Message": [
null,
"Üzenet"
],
"Save": [
null,
"Mentés"
],
"Cancel": [
null,
"Mégsem"
],
"An error occurred while trying to save the form.": [
null,
"Hiba történt az adatok mentése közben."
],
"This chatroom requires a password": [
null,
"A csevegő szoba belépéshez jelszó szükséges"
],
"Password: ": [
null,
"Jelszó:"
],
"Submit": [
null,
"Küldés"
],
"This room is not anonymous": [
null,
"Ez a szoba NEM névtelen"
],
"This room now shows unavailable members": [
null,
"Ez a szoba mutatja az elérhetetlen tagokat"
],
"This room does not show unavailable members": [
null,
"Ez a szoba nem mutatja az elérhetetlen tagokat"
],
"Non-privacy-related room configuration has changed": [
null,
"A szoba általános konfigurációja módosult"
],
"Room logging is now enabled": [
null,
"A szobába a belépés lehetséges"
],
"Room logging is now disabled": [
null,
"A szobába a belépés szünetel"
],
"This room is now non-anonymous": [
null,
"Ez a szoba most NEM névtelen"
],
"This room is now semi-anonymous": [
null,
"Ez a szoba most félig névtelen"
],
"This room is now fully-anonymous": [
null,
"Ez a szoba most teljesen névtelen"
],
"A new room has been created": [
null,
"Létrejött egy új csevegő szoba"
],
"Your nickname has been changed": [
null,
"A beceneved módosításra került"
],
"<strong>%1$s</strong> has been banned": [
null,
"A szobából kitíltva: <strong>%1$s</strong>"
],
"<strong>%1$s</strong> has been kicked out": [
null,
"A szobából kidobva: <strong>%1$s</strong>"
],
"<strong>%1$s</strong> has been removed because of an affiliation change": [
null,
"Taglista módosítás miatt a szobából kiléptetve: <strong>%1$s</strong>"
],
"<strong>%1$s</strong> has been removed for not being a member": [
null,
"A taglistán nem szerepel így a szobából kiléptetve: <strong>%1$s</strong>"
],
"You have been banned from this room": [
null,
"Ki lettél tíltva ebből a szobából"
],
"You have been kicked from this room": [
null,
"Ki lettél dobva ebből a szobából"
],
"You have been removed from this room because of an affiliation change": [
null,
"Taglista módosítás miatt kiléptettünk a csevegő szobából"
],
"You have been removed from this room because the room has changed to members-only and you're not a member": [
null,
"Kiléptettünk a csevegő szobából, mert mostantól csak a taglistán szereplők lehetnek jelen."
],
"You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
null,
"Kiléptettünk a csevegő szobából, mert a MUC (Multi-User Chat) szolgáltatás leállításra került."
],
"You are not on the member list of this room": [
null,
"Nem szerepelsz a csevegő szoba taglistáján"
],
"No nickname was specified": [
null,
"Nem lett megadva becenév"
],
"You are not allowed to create new rooms": [
null,
"Nem lehet új csevegő szobát létrehozni"
],
"Your nickname doesn't conform to this room's policies": [
null,
"A beceneved ütközik a csevegő szoba szabályzataival"
],
"Your nickname is already taken": [
null,
"A becenevedet már valaki használja"
],
"This room does not (yet) exist": [
null,
"Ez a szoba (még) nem létezik"
],
"This room has reached it's maximum number of occupants": [
null,
"Ez a csevegő szoba elérte a maximális jelenlevők számát"
],
"Topic set by %1$s to: %2$s": [
null,
"A következő témát állította be %1$s: %2$s"
],
"This user is a moderator": [
null,
"Ez a felhasználó egy moderátor"
],
"This user can send messages in this room": [
null,
"Ez a felhasználó küldhet üzenetet ebbe a szobába"
],
"This user can NOT send messages in this room": [
null,
"Ez a felhasználó NEM küldhet üzenetet ebbe a szobába"
],
"Click to chat with this contact": [
null,
"Csevegés indítása ezzel a kapcsolatunkkal"
],
"Click to remove this contact": [
null,
"A kapcsolat törlése"
],
"This contact is busy": [
null,
"Elfoglalt"
],
"This contact is online": [
null,
"Online"
],
"This contact is offline": [
null,
"Nincs bejelentkezve"
],
"This contact is unavailable": [
null,
"Elérhetetlen"
],
"This contact is away for an extended period": [
null,
"Hosszabb ideje távol"
],
"This contact is away": [
null,
"Távol"
],
"Contact requests": [
null,
"Kapcsolat felvételi kérés"
],
"My contacts": [
null,
"Kapcsolatok:"
],
"Pending contacts": [
null,
"Függőben levő kapcsolatok"
],
"Custom status": [
null,
"Egyedi státusz"
],
"Click to change your chat status": [
null,
"Saját státusz beállítása"
],
"Click here to write a custom status message": [
null,
"Egyedi státusz üzenet írása"
],
"online": [
null,
"online"
],
"busy": [
null,
"elfoglalt"
],
"away for long": [
null,
"hosszú ideje távol"
],
"away": [
null,
"távol"
],
"I am %1$s": [
null,
"%1$s vagyok"
],
"Sign in": [
null,
"Belépés"
],
"XMPP/Jabber Username:": [
null,
"XMPP/Jabber azonosító:"
],
"Password:": [
null,
"Jelszó:"
],
"Log In": [
null,
"Belépés"
],
"BOSH Service URL:": [
null,
"BOSH szerver URL"
],
"Online Contacts": [
null,
"Online kapcsolatok"
]
}
}
# Hungarian translations for Converse.js package.
# Copyright (C) YEAR Jan-Carel Brand
# This file is distributed under the same license as the Converse.js package.
# JC Brand <jc@opkode.com>, 2013.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Converse.js 0.4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-24 23:22+0200\n"
"PO-Revision-Date: 2013-09-25 22:42+0200\n"
"Last-Translator: Krisztian Kompar <w3host@w3host.hu>\n"
"Language-Team: Hungarian\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"domain: converse\n"
"lang: hu\n"
"plural_forms: nplurals=2; plural=(n != 1);\n"
#: converse.js:135
msgid "Disconnected"
msgstr "Szétkapcsolva"
#: converse.js:139
msgid "Error"
msgstr "Hiba"
#: converse.js:141
msgid "Connecting"
msgstr "Kapcsolódás"
#: converse.js:144
msgid "Connection Failed"
msgstr "Kapcsolódási hiba"
#: converse.js:146
msgid "Authenticating"
msgstr "Azonosítás"
#: converse.js:149
msgid "Authentication Failed"
msgstr "Azonosítási hiba"
#: converse.js:151
msgid "Disconnecting"
msgstr "Szétkapcsolás"
#: converse.js:373
msgid "me"
msgstr "én"
#: converse.js:417
msgid "%1$s is typing"
msgstr "%1$s gépel"
#: converse.js:461 converse.js:1180
msgid "Show this menu"
msgstr "Mutasd ezt a menüt"
#: converse.js:462 converse.js:1181
msgid "Write in the third person"
msgstr ""
#: converse.js:463 converse.js:1185
msgid "Remove messages"
msgstr "Üzenet törlése"
#: converse.js:603
msgid "Personal message"
msgstr "Saját üzenet"
#: converse.js:677
msgid "Contacts"
msgstr "Kapcsolatok"
#: converse.js:682
msgid "Online"
msgstr "Elérhető"
#: converse.js:683
msgid "Busy"
msgstr "Foglalt"
#: converse.js:684
msgid "Away"
msgstr "Távol"
#: converse.js:685
msgid "Offline"
msgstr "Nem elérhető"
#: converse.js:692
msgid "Click to add new chat contacts"
msgstr "Új kapcsolatok hozzáadása"
#: converse.js:693
msgid "Add a contact"
msgstr "Új kapcsolat"
#: converse.js:702
msgid "Contact username"
msgstr "Felhasználónév"
#: converse.js:703
msgid "Add"
msgstr "Hozzáadás"
#: converse.js:711
msgid "Contact name"
msgstr "Kapcsolat neve"
#: converse.js:712
msgid "Search"
msgstr "Keresés"
#: converse.js:752
msgid "No users found"
msgstr "Nincs találat"
#: converse.js:759
msgid "Click to add as a chat contact"
msgstr "Csevegő kapcsolatként hozzáad"
#: converse.js:819
msgid "Click to open this room"
msgstr "Belépés a csevegő szobába"
#: converse.js:821
msgid "Show more information on this room"
msgstr "További információk a csevegő szobáról"
#: converse.js:827
msgid "Description:"
msgstr "Leírás:"
#: converse.js:828
msgid "Occupants:"
msgstr "Jelenlevők:"
#: converse.js:829
msgid "Features:"
msgstr "Tulajdonságok"
#: converse.js:831
msgid "Requires authentication"
msgstr "Azonosítás szükséges"
#: converse.js:834
msgid "Hidden"
msgstr "Rejtett"
#: converse.js:837
msgid "Requires an invitation"
msgstr "Meghívás szükséges"
#: converse.js:840
msgid "Moderated"
msgstr "Moderált"
#: converse.js:843
msgid "Non-anonymous"
msgstr "NEM névtelen"
#: converse.js:846
msgid "Open room"
msgstr "Nyitott szoba"
#: converse.js:849
msgid "Permanent room"
msgstr "Állandó szoba"
#: converse.js:852
msgid "Public"
msgstr "Nyílvános"
#: converse.js:855
msgid "Semi-anonymous"
msgstr "Félig névtelen"
#: converse.js:858
msgid "Temporary room"
msgstr "Ideiglenes szoba"
#: converse.js:861
msgid "Unmoderated"
msgstr "Moderálatlan"
#: converse.js:867
msgid "Rooms"
msgstr "Szobák"
#: converse.js:871
msgid "Room name"
msgstr "A szoba neve"
#: converse.js:872
msgid "Nickname"
msgstr "Becenév"
#: converse.js:873
msgid "Server"
msgstr "Szerver"
#: converse.js:874
msgid "Join"
msgstr "Csatlakozás"
#: converse.js:875
msgid "Show rooms"
msgstr "Létező szobák"
#. For translators: %1$s is a variable and will be replaced with the XMPP server name
#: converse.js:910
msgid "No rooms on %1$s"
msgstr "Nincs csevegő szoba a(z) %1$s szerveren"
#. For translators: %1$s is a variable and will be
#. replaced with the XMPP server name
#: converse.js:925
msgid "Rooms on %1$s"
msgstr "Csevegő szobák a(z) %1$s szerveren"
#: converse.js:1182
msgid "Set chatroom topic"
msgstr "Csevegőszoba téma beállítás"
#: converse.js:1183
msgid "Kick user from chatroom"
msgstr "Felhasználó kiléptetése a csevegő szobából"
#: converse.js:1184
msgid "Ban user from chatroom"
msgstr "Felhasználó kitíltása a csevegő szobából"
#: converse.js:1211
msgid "Message"
msgstr "Üzenet"
#: converse.js:1325 converse.js:2406
msgid "Save"
msgstr "Mentés"
#: converse.js:1326
msgid "Cancel"
msgstr "Mégsem"
#: converse.js:1373
msgid "An error occurred while trying to save the form."
msgstr "Hiba történt az adatok mentése közben."
#: converse.js:1419
msgid "This chatroom requires a password"
msgstr "A csevegő szoba belépéshez jelszó szükséges"
#: converse.js:1420
msgid "Password: "
msgstr "Jelszó:"
#: converse.js:1421
msgid "Submit"
msgstr "Küldés"
#: converse.js:1435
msgid "This room is not anonymous"
msgstr "Ez a szoba NEM névtelen"
#: converse.js:1436
msgid "This room now shows unavailable members"
msgstr "Ez a szoba mutatja az elérhetetlen tagokat"
#: converse.js:1437
msgid "This room does not show unavailable members"
msgstr "Ez a szoba nem mutatja az elérhetetlen tagokat"
#: converse.js:1438
msgid "Non-privacy-related room configuration has changed"
msgstr "A szoba általános konfigurációja módosult"
#: converse.js:1439
msgid "Room logging is now enabled"
msgstr "A szobába a belépés lehetséges"
#: converse.js:1440
msgid "Room logging is now disabled"
msgstr "A szobába a belépés szünetel"
#: converse.js:1441
msgid "This room is now non-anonymous"
msgstr "Ez a szoba most NEM névtelen"
#: converse.js:1442
msgid "This room is now semi-anonymous"
msgstr "Ez a szoba most félig névtelen"
#: converse.js:1443
msgid "This room is now fully-anonymous"
msgstr "Ez a szoba most teljesen névtelen"
#: converse.js:1444
msgid "A new room has been created"
msgstr "Létrejött egy új csevegő szoba"
#: converse.js:1445
msgid "Your nickname has been changed"
msgstr "A beceneved módosításra került"
#: converse.js:1459
msgid "<strong>%1$s</strong> has been banned"
msgstr "A szobából kitíltva: <strong>%1$s</strong>"
#: converse.js:1460
msgid "<strong>%1$s</strong> has been kicked out"
msgstr "A szobából kidobva: <strong>%1$s</strong>"
#: converse.js:1461
msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
msgstr "Taglista módosítás miatt a szobából kiléptetve: <strong>%1$s</strong>"
#: converse.js:1462
msgid "<strong>%1$s</strong> has been removed for not being a member"
msgstr "A taglistán nem szerepel így a szobából kiléptetve: <strong>%1$s</strong>"
#: converse.js:1466 converse.js:1526
msgid "You have been banned from this room"
msgstr "Ki lettél tíltva ebből a szobából"
#: converse.js:1467
msgid "You have been kicked from this room"
msgstr "Ki lettél dobva ebből a szobából"
#: converse.js:1468
msgid "You have been removed from this room because of an affiliation change"
msgstr "Taglista módosítás miatt kiléptettünk a csevegő szobából"
#: converse.js:1469
msgid ""
"You have been removed from this room because the room has changed to members-"
"only and you're not a member"
msgstr "Kiléptettünk a csevegő szobából, mert mostantól csak a taglistán "
"szereplők lehetnek jelen."
#: converse.js:1470
msgid ""
"You have been removed from this room because the MUC (Multi-user chat) "
"service is being shut down."
msgstr "Kiléptettünk a csevegő szobából, mert a MUC (Multi-User Chat) "
"szolgáltatás leállításra került."
#: converse.js:1524
msgid "You are not on the member list of this room"
msgstr "Nem szerepelsz a csevegő szoba taglistáján"
#: converse.js:1530
msgid "No nickname was specified"
msgstr "Nem lett megadva becenév"
#: converse.js:1534
msgid "You are not allowed to create new rooms"
msgstr "Nem lehet új csevegő szobát létrehozni"
#: converse.js:1536
msgid "Your nickname doesn't conform to this room's policies"
msgstr "A beceneved ütközik a csevegő szoba szabályzataival"
#: converse.js:1538
msgid "Your nickname is already taken"
msgstr "A becenevedet már valaki használja"
#: converse.js:1540
msgid "This room does not (yet) exist"
msgstr "Ez a szoba (még) nem létezik"
#: converse.js:1542
msgid "This room has reached it's maximum number of occupants"
msgstr "Ez a csevegő szoba elérte a maximális jelenlevők számát"
#. For translators: the %1$s and %2$s parts will get replaced by the user and topic text respectively
#. Example: Topic set by JC Brand to: Hello World!
#: converse.js:1619
msgid "Topic set by %1$s to: %2$s"
msgstr "A következő témát állította be %1$s: %2$s"
#: converse.js:1635
msgid "This user is a moderator"
msgstr "Ez a felhasználó egy moderátor"
#: converse.js:1638
msgid "This user can send messages in this room"
msgstr "Ez a felhasználó küldhet üzenetet ebbe a szobába"
#: converse.js:1641
msgid "This user can NOT send messages in this room"
msgstr "Ez a felhasználó NEM küldhet üzenetet ebbe a szobába"
#: converse.js:1848
msgid "Click to chat with this contact"
msgstr "Csevegés indítása ezzel a kapcsolatunkkal"
#: converse.js:1851 converse.js:1855
msgid "Click to remove this contact"
msgstr "A kapcsolat törlése"
#: converse.js:1886
msgid "This contact is busy"
msgstr "Elfoglalt"
#: converse.js:1887
msgid "This contact is online"
msgstr "Online"
#: converse.js:1888
msgid "This contact is offline"
msgstr "Nincs bejelentkezve"
#: converse.js:1889
msgid "This contact is unavailable"
msgstr "Elérhetetlen"
#: converse.js:1890
msgid "This contact is away for an extended period"
msgstr "Hosszabb ideje távol"
#: converse.js:1891
msgid "This contact is away"
msgstr "Távol"
#: converse.js:2245
msgid "Contact requests"
msgstr "Kapcsolat felvételi kérés"
#: converse.js:2246
msgid "My contacts"
msgstr "Kapcsolatok:"
#: converse.js:2247
msgid "Pending contacts"
msgstr "Függőben levő kapcsolatok"
#: converse.js:2405
msgid "Custom status"
msgstr "Egyedi státusz"
#: converse.js:2411
msgid "Click to change your chat status"
msgstr "Saját státusz beállítása"
#: converse.js:2415
msgid "Click here to write a custom status message"
msgstr "Egyedi státusz üzenet írása"
#: converse.js:2444 converse.js:2452
msgid "online"
msgstr "online"
#: converse.js:2446
msgid "busy"
msgstr "elfoglalt"
#: converse.js:2448
msgid "away for long"
msgstr "hosszú ideje távol"
#: converse.js:2450
msgid "away"
msgstr "távol"
#. For translators: the %1$s part gets replaced with the status
#. Example, I am online
#: converse.js:2464 converse.js:2501
msgid "I am %1$s"
msgstr "%1$s vagyok"
#: converse.js:2572
msgid "Sign in"
msgstr "Belépés"
#: converse.js:2575
msgid "XMPP/Jabber Username:"
msgstr "XMPP/Jabber azonosító:"
#: converse.js:2577
msgid "Password:"
msgstr "Jelszó:"
#: converse.js:2579
msgid "Log In"
msgstr "Belépés"
#: converse.js:2583
msgid "BOSH Service URL:"
msgstr "BOSH szerver URL"
#: converse.js:2736
msgid "Online Contacts"
msgstr "Online kapcsolatok"
(function(root, factory) {
var translations = {
"domain" : "converse",
"locale_data" : {
"converse" : {
"" : {
"Project-Id-Version" : "Converse.js 0.4",
"Report-Msgid-Bugs-To" : "",
"POT-Creation-Date" : "2013-09-24 23:22+0200",
"PO-Revision-Date" : "2013-09-25 22:42+0200",
"Last-Translator" : "Krisztian Kompar <w3host@w3host.hu>",
"Language-Team" : "Hungarian",
"Language" : "hu",
"MIME-Version" : "1.0",
"Content-Type" : "text/plain; charset=UTF-8",
"Content-Transfer-Encoding" : "8bit",
"domain" : "converse",
"lang" : "hu",
"plural_forms" : "nplurals=2; plural=(n != 1);"
},
"Disconnected" : [ null, "Szétkapcsolva" ],
"Error" : [ null, "Hiba" ],
"Connecting" : [ null, "Kapcsolódás" ],
"Connection Failed" : [ null, "Kapcsolódási hiba" ],
"Authenticating" : [ null, "Azonosítás" ],
"Authentication Failed" : [ null, "Azonosítási hiba" ],
"Disconnecting" : [ null, "Szétkapcsolás" ],
"me" : [ null, "én" ],
"%1$s is typing" : [ null, "%1$s gépel" ],
"Show this menu" : [ null, "Mutasd ezt a menüt" ],
"Write in the third person" : [ null, "" ],
"Remove messages" : [ null, "Üzenet törlése" ],
"Personal message" : [ null, "Saját üzenet" ],
"Contacts" : [ null, "Kapcsolatok" ],
"Online" : [ null, "Elérhető" ],
"Busy" : [ null, "Foglalt" ],
"Away" : [ null, "Távol" ],
"Offline" : [ null, "Nem elérhető" ],
"Click to add new chat contacts" : [ null,
"Új kapcsolatok hozzáadása" ],
"Add a contact" : [ null, "Új kapcsolat" ],
"Contact username" : [ null, "Felhasználónév" ],
"Add" : [ null, "Hozzáadás" ],
"Contact name" : [ null, "Kapcsolat neve" ],
"Search" : [ null, "Keresés" ],
"No users found" : [ null, "Nincs találat" ],
"Click to add as a chat contact" : [ null,
"Csevegő kapcsolatként hozzáad" ],
"Click to open this room" : [ null, "Belépés a csevegő szobába" ],
"Show more information on this room" : [ null,
"További információk a csevegő szobáról" ],
"Description:" : [ null, "Leírás:" ],
"Occupants:" : [ null, "Jelenlevők:" ],
"Features:" : [ null, "Tulajdonságok" ],
"Requires authentication" : [ null, "Azonosítás szükséges" ],
"Hidden" : [ null, "Rejtett" ],
"Requires an invitation" : [ null, "Meghívás szükséges" ],
"Moderated" : [ null, "Moderált" ],
"Non-anonymous" : [ null, "NEM névtelen" ],
"Open room" : [ null, "Nyitott szoba" ],
"Permanent room" : [ null, "Állandó szoba" ],
"Public" : [ null, "Nyílvános" ],
"Semi-anonymous" : [ null, "Félig névtelen" ],
"Temporary room" : [ null, "Ideiglenes szoba" ],
"Unmoderated" : [ null, "Moderálatlan" ],
"Rooms" : [ null, "Szobák" ],
"Room name" : [ null, "A szoba neve" ],
"Nickname" : [ null, "Becenév" ],
"Server" : [ null, "Szerver" ],
"Join" : [ null, "Csatlakozás" ],
"Show rooms" : [ null, "Létező szobák" ],
"No rooms on %1$s" : [ null,
"Nincs csevegő szoba a(z) %1$s szerveren" ],
"Rooms on %1$s" : [ null, "Csevegő szobák a(z) %1$s szerveren" ],
"Set chatroom topic" : [ null, "Csevegőszoba téma beállítás" ],
"Kick user from chatroom" : [ null,
"Felhasználó kiléptetése a csevegő szobából" ],
"Ban user from chatroom" : [ null,
"Felhasználó kitíltása a csevegő szobából" ],
"Message" : [ null, "Üzenet" ],
"Save" : [ null, "Mentés" ],
"Cancel" : [ null, "Mégsem" ],
"An error occurred while trying to save the form." : [ null,
"Hiba történt az adatok mentése közben." ],
"This chatroom requires a password" : [ null,
"A csevegő szoba belépéshez jelszó szükséges" ],
"Password: " : [ null, "Jelszó:" ],
"Submit" : [ null, "Küldés" ],
"This room is not anonymous" : [ null,
"Ez a szoba NEM névtelen" ],
"This room now shows unavailable members" : [ null,
"Ez a szoba mutatja az elérhetetlen tagokat" ],
"This room does not show unavailable members" : [ null,
"Ez a szoba nem mutatja az elérhetetlen tagokat" ],
"Non-privacy-related room configuration has changed" : [ null,
"A szoba általános konfigurációja módosult" ],
"Room logging is now enabled" : [ null,
"A szobába a belépés lehetséges" ],
"Room logging is now disabled" : [ null,
"A szobába a belépés szünetel" ],
"This room is now non-anonymous" : [ null,
"Ez a szoba most NEM névtelen" ],
"This room is now semi-anonymous" : [ null,
"Ez a szoba most félig névtelen" ],
"This room is now fully-anonymous" : [ null,
"Ez a szoba most teljesen névtelen" ],
"A new room has been created" : [ null,
"Létrejött egy új csevegő szoba" ],
"Your nickname has been changed" : [ null,
"A beceneved módosításra került" ],
"<strong>%1$s</strong> has been banned" : [ null,
"A szobából kitíltva: <strong>%1$s</strong>" ],
"<strong>%1$s</strong> has been kicked out" : [ null,
"A szobából kidobva: <strong>%1$s</strong>" ],
"<strong>%1$s</strong> has been removed because of an affiliation change" : [
null,
"Taglista módosítás miatt a szobából kiléptetve: <strong>%1$s</strong>" ],
"<strong>%1$s</strong> has been removed for not being a member" : [
null,
"A taglistán nem szerepel így a szobából kiléptetve: <strong>%1$s</strong>" ],
"You have been banned from this room" : [ null,
"Ki lettél tíltva ebből a szobából" ],
"You have been kicked from this room" : [ null,
"Ki lettél dobva ebből a szobából" ],
"You have been removed from this room because of an affiliation change" : [
null,
"Taglista módosítás miatt kiléptettünk a csevegő szobából" ],
"You have been removed from this room because the room has changed to members-only and you're not a member" : [
null,
"Kiléptettünk a csevegő szobából, mert mostantól csak a taglistán szereplők lehetnek jelen." ],
"You have been removed from this room because the MUC (Multi-user chat) service is being shut down." : [
null,
"Kiléptettünk a csevegő szobából, mert a MUC (Multi-User Chat) szolgáltatás leállításra került." ],
"You are not on the member list of this room" : [ null,
"Nem szerepelsz a csevegő szoba taglistáján" ],
"No nickname was specified" : [ null,
"Nem lett megadva becenév" ],
"You are not allowed to create new rooms" : [ null,
"Nem lehet új csevegő szobát létrehozni" ],
"Your nickname doesn't conform to this room's policies" : [
null,
"A beceneved ütközik a csevegő szoba szabályzataival" ],
"Your nickname is already taken" : [ null,
"A becenevedet már valaki használja" ],
"This room does not (yet) exist" : [ null,
"Ez a szoba (még) nem létezik" ],
"This room has reached it's maximum number of occupants" : [
null,
"Ez a csevegő szoba elérte a maximális jelenlevők számát" ],
"Topic set by %1$s to: %2$s" : [ null,
"A következő témát állította be %1$s: %2$s" ],
"This user is a moderator" : [ null,
"Ez a felhasználó egy moderátor" ],
"This user can send messages in this room" : [ null,
"Ez a felhasználó küldhet üzenetet ebbe a szobába" ],
"This user can NOT send messages in this room" : [ null,
"Ez a felhasználó NEM küldhet üzenetet ebbe a szobába" ],
"Click to chat with this contact" : [ null,
"Csevegés indítása ezzel a kapcsolatunkkal" ],
"Click to remove this contact" : [ null, "A kapcsolat törlése" ],
"This contact is busy" : [ null, "Elfoglalt" ],
"This contact is online" : [ null, "Online" ],
"This contact is offline" : [ null, "Nincs bejelentkezve" ],
"This contact is unavailable" : [ null, "Elérhetetlen" ],
"This contact is away for an extended period" : [ null,
"Hosszabb ideje távol" ],
"This contact is away" : [ null, "Távol" ],
"Contact requests" : [ null, "Kapcsolat felvételi kérés" ],
"My contacts" : [ null, "Kapcsolatok:" ],
"Pending contacts" : [ null, "Függőben levő kapcsolatok" ],
"Custom status" : [ null, "Egyedi státusz" ],
"Click to change your chat status" : [ null,
"Saját státusz beállítása" ],
"Click here to write a custom status message" : [ null,
"Egyedi státusz üzenet írása" ],
"online" : [ null, "online" ],
"busy" : [ null, "elfoglalt" ],
"away for long" : [ null, "hosszú ideje távol" ],
"away" : [ null, "távol" ],
"I am %1$s" : [ null, "%1$s vagyok" ],
"Sign in" : [ null, "Belépés" ],
"XMPP/Jabber Username:" : [ null, "XMPP/Jabber azonosító:" ],
"Password:" : [ null, "Jelszó:" ],
"Log In" : [ null, "Belépés" ],
"BOSH Service URL:" : [ null, "BOSH szerver URL" ],
"Online Contacts" : [ null, "Online kapcsolatok" ]
}
}
};
if (typeof define === 'function' && define.amd) {
define("hu", [ 'jed' ], function() {
return factory(new Jed(translations));
});
} else {
if (!window.locales) {
window.locales = {};
}
window.locales.de = factory(new Jed(translations));
}
}(this, function(hu) {
return hu;
}));
......@@ -14,8 +14,10 @@
"en": "locale/en/LC_MESSAGES/en",
"es": "locale/es/LC_MESSAGES/es",
"fr": "locale/fr/LC_MESSAGES/fr",
"hu": "locale/hu/LC_MESSAGES/hu",
"it": "locale/it/LC_MESSAGES/it",
"pt_BR": "locale/pt_BR/LC_MESSAGES/pt_BR"
"pt_BR": "locale/pt_BR/LC_MESSAGES/pt_BR",
"ru": "locale/ru/LC_MESSAGES/ru"
}
});
......@@ -26,17 +28,21 @@
'en',
'es',
'fr',
'hu',
'it',
'pt_BR'
], function (jed, af, de, en, es, fr, it, pt_BR) {
'pt_BR',
'ru'
], function (jed, af, de, en, es, fr, hu, it, pt_BR, ru) {
root.locales = {
'af': af,
'de': de,
'en': en,
'es': es,
'fr': fr,
'hu': hu,
'it': it,
'pt-br': pt_BR
'pt-br': pt_BR,
'ru': ru
};
});
})(this);
{
"converse": {
"": {
"Project-Id-Version": "Converse.js 0.4",
"Report-Msgid-Bugs-To": "",
"POT-Creation-Date": "2013-09-15 22:06+0200",
"PO-Revision-Date": "2013-09-29 17:24+0300",
"Last-Translator": "Boris Kocherov <bk@raskon.org>",
"Language-Team": "<bk@raskon.ru>",
"Language": "ru",
"MIME-Version": "1.0",
"Content-Type": "text/plain; charset=UTF-8",
"Content-Transfer-Encoding": "8bit",
"X-Generator": "Poedit 1.5.5"
},
"unencrypted": [
null,
"не зашифровано"
],
"unverified": [
null,
"непроверено"
],
"verified": [
null,
"проверено"
],
"finished": [
null,
"закончено"
],
"Disconnected": [
null,
"Отключено"
],
"Error": [
null,
"Ошибка"
],
"Connecting": [
null,
"Соединение"
],
"Connection Failed": [
null,
"Не удалось соединится"
],
"Authenticating": [
null,
"Авторизация"
],
"Authentication Failed": [
null,
"Не удалось авторизоваться"
],
"Disconnecting": [
null,
"Отключаемся"
],
"Private key generated.": [
null,
"Приватный ключ сгенерирован."
],
"Personal message": [
null,
"Введите сообщение"
],
"What's this?": [
null,
"Что это?"
],
"me": [
null,
"Я"
],
"Show this menu": [
null,
"Показать это меню"
],
"Remove messages": [
null,
"Удалить сообщения"
],
"Your message could not be sent": [
null,
"Ваше сообщение не послано"
],
"Your messages are not encrypted anymore": [
null,
"Ваши сообщения больше не шифруются"
],
"Your messages are now encrypted but your buddy's identity has not been verified.": [
null,
"Ваши сообщения шифруются, но ваша учётная запись не проверена вашим собеседником."
],
"Your buddy's identify has been verified.": [
null,
"Ваша учётная запись проверена вашим собеседником."
],
"Your messages are not encrypted. Click here to enable OTR encryption.": [
null,
"Ваши сообщения не шифруются. Нажмите здесь чтобы настроить шифрование."
],
"Your messages are encrypted, but your buddy has not been verified.": [
null,
"Ваши сообщения шифруются, но ваш контакт не проверен."
],
"Your messages are encrypted and your buddy verified.": [
null,
"Ваши сообщения шифруются и ваш контакт проверен"
],
"Contacts": [
null,
"Контакты"
],
"Online": [
null,
"В сети"
],
"Busy": [
null,
"Занят"
],
"Away": [
null,
"Отошёл"
],
"Offline": [
null,
"Не в сети"
],
"Click to add new chat contacts": [
null,
"Добавить новую конференцию"
],
"Add a contact": [
null,
"Добавть контакт"
],
"Contact username": [
null,
"Имя пользователя"
],
"Add": [
null,
"Добавить"
],
"Contact name": [
null,
"Имя контакта"
],
"Search": [
null,
"Поиск"
],
"No users found": [
null,
"Пользователи не найдены"
],
"Click to add as a chat contact": [
null,
"Добавить контакт"
],
"Click to open this room": [
null,
"Зайти в конференцию"
],
"Show more information on this room": [
null,
"Показать больше информации об этой конференции"
],
"Description:": [
null,
"Описание:"
],
"Occupants:": [
null,
"Участники:"
],
"Features:": [
null,
"Свойства:"
],
"Requires authentication": [
null,
"Требуется авторизация"
],
"Hidden": [
null,
"Скрыто"
],
"Requires an invitation": [
null,
"Требуется приглашение"
],
"Moderated": [
null,
"Модерируемая"
],
"Non-anonymous": [
null,
"Не анонимная"
],
"Open room": [
null,
"Открыть конференцию"
],
"Permanent room": [
null,
"Перманентная конференция"
],
"Public": [
null,
"Публичный"
],
"Semi-anonymous": [
null,
"Частично анонимная"
],
"Temporary room": [
null,
"Временная конференция"
],
"Unmoderated": [
null,
"Немодерируемая"
],
"Rooms": [
null,
"Конфер."
],
"Room name": [
null,
"Имя конференции"
],
"Nickname": [
null,
"Псевдоним"
],
"Server": [
null,
"Сервер"
],
"Join": [
null,
"Подключиться"
],
"Show rooms": [
null,
"Обновить"
],
"No rooms on %1$s": [
null,
"Нет доступных конференций %1$s"
],
"Rooms on %1$s": [
null,
"Конференции %1$s:"
],
"Set chatroom topic": [
null,
"Установить тему"
],
"Kick user from chatroom": [
null,
"Отключить пользователя от кнофер."
],
"Ban user from chatroom": [
null,
"Забанить пользователя в этой конф."
],
"Message": [
null,
"Сообщение"
],
"Save": [
null,
"Сохранить"
],
"Cancel": [
null,
"Отменить"
],
"An error occurred while trying to save the form.": [
null,
"При сохранение формы произошла ошибка."
],
"This chatroom requires a password": [
null,
"Для доступа в конфер. необходим пароль."
],
"Password: ": [
null,
"Пароль: "
],
"Submit": [
null,
"Отправить"
],
"This room is not anonymous": [
null,
"Эта комната не анонимная"
],
"This room now shows unavailable members": [
null,
"Эта комната показывает доступных собеседников"
],
"This room does not show unavailable members": [
null,
"Эта комната не показывает недоступных собеседников"
],
"This room is now non-anonymous": [
null,
"Эта комната не анонимная"
],
"This room is now semi-anonymous": [
null,
"Эта комната частично анонимная"
],
"This room is now fully-anonymous": [
null,
"Эта комната стала полностью анонимной"
],
"A new room has been created": [
null,
"Новая комната была создана"
],
"Your nickname has been changed": [
null,
"Ваш псевдоним уже используется другим пользователем"
],
"<strong>%1$s</strong> has been banned": [
null,
"<strong>%1$s</strong> забанен"
],
"<strong>%1$s</strong> has been kicked out": [
null,
"<strong>%1$s</strong> выдворен"
],
"<strong>%1$s</strong> has been removed because of an affiliation change": [
null,
"<strong>%1$s</strong> has been removed because of an affiliation change"
],
"<strong>%1$s</strong> has been removed for not being a member": [
null,
"<strong>%1$s</strong> удалён потому что не участник"
],
"You have been banned from this room": [
null,
"Вам запрещено подключатся к этой конференции"
],
"You have been kicked from this room": [
null,
"Вам запрещено подключатся к этой конференции"
],
"You have been removed from this room because of an affiliation change": [
null,
"<strong>%1$s</strong> удалён потому что изменились права"
],
"You have been removed from this room because the room has changed to members-only and you're not a member": [
null,
"Вы отключены от этой конференции потому что режим изменился: только-участники"
],
"You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
null,
"Вы отключены от этой конференции потому что сервись конференций выключен."
],
"You are not on the member list of this room": [
null,
"Вас нет в списке этой конференции"
],
"No nickname was specified": [
null,
"Вы не указали псевдоним"
],
"You are not allowed to create new rooms": [
null,
"Вы не имеете права создавать конфер."
],
"Your nickname doesn't conform to this room's policies": [
null,
"Псевдоним не согласуется с правилами конфер."
],
"Your nickname is already taken": [
null,
"Ваш ник уже используется другим пользователем"
],
"This room does not (yet) exist": [
null,
"Эта комната не существует"
],
"This room has reached it's maximum number of occupants": [
null,
"Конференция достигла максимального количества участников"
],
"Topic set by %1$s to: %2$s": [
null,
"Тема %2$s устатновлена %1$s"
],
"This user is a moderator": [
null,
"Модератор"
],
"This user can send messages in this room": [
null,
"Собеседник"
],
"This user can NOT send messages in this room": [
null,
"Пользователь не может посылать сообщения в эту комнату"
],
"Click to chat with this contact": [
null,
"Начать общение"
],
"Click to remove this contact": [
null,
"Удалить контакт"
],
"This contact is busy": [
null,
"Занят"
],
"This contact is online": [
null,
"В сети"
],
"This contact is offline": [
null,
"Не в сети"
],
"This contact is unavailable": [
null,
"Не доступен"
],
"This contact is away for an extended period": [
null,
"На долго отошёл"
],
"This contact is away": [
null,
"Отошёл"
],
"Contact requests": [
null,
"Запросы на авторизацию"
],
"My contacts": [
null,
"Контакты"
],
"Pending contacts": [
null,
"Собеседники ожидающие авторизации"
],
"Custom status": [
null,
"Произвольный статус"
],
"Click to change your chat status": [
null,
"Изменить ваш статус"
],
"Click here to write a custom status message": [
null,
"Редактировать произвольный статус"
],
"online": [
null,
"на связи"
],
"busy": [
null,
"занят"
],
"away for long": [
null,
"отошёл на долго"
],
"away": [
null,
"отошёл"
],
"I am %1$s": [
null,
"%1$s"
],
"Sign in": [
null,
"Подписать"
],
"XMPP/Jabber Username:": [
null,
"JID:"
],
"Password:": [
null,
"Пароль:"
],
"Log In": [
null,
"Войти"
],
"Online Contacts": [
null,
"Cписок собеседников"
]
}
}
\ No newline at end of file
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Jan-Carel Brand
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Converse.js 0.4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-15 22:06+0200\n"
"PO-Revision-Date: 2013-09-29 17:24+0300\n"
"Last-Translator: Boris Kocherov <bk@raskon.org>\n"
"Language-Team: <bk@raskon.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.5\n"
#: converse.js:125
msgid "unencrypted"
msgstr "не зашифровано"
#: converse.js:126
msgid "unverified"
msgstr "непроверено"
#: converse.js:127
msgid "verified"
msgstr "проверено"
#: converse.js:128
msgid "finished"
msgstr "закончено"
#: converse.js:161
msgid "Disconnected"
msgstr "Отключено"
#: converse.js:165
msgid "Error"
msgstr "Ошибка"
#: converse.js:167
msgid "Connecting"
msgstr "Соединение"
#: converse.js:170
msgid "Connection Failed"
msgstr "Не удалось соединится"
#: converse.js:172
msgid "Authenticating"
msgstr "Авторизация"
#: converse.js:175
msgid "Authentication Failed"
msgstr "Не удалось авторизоваться"
#: converse.js:177
msgid "Disconnecting"
msgstr "Отключаемся"
#: converse.js:332
msgid "Re-establishing encrypted session"
msgstr ""
#: converse.js:340
msgid ""
"Your browser needs to generate a private key, which will be used in your "
"encrypted chat session. This can take up to 30 seconds during which your "
"browser might freeze and become unresponsive."
msgstr ""
#: converse.js:349
msgid "Private key generated."
msgstr "Приватный ключ сгенерирован."
#: converse.js:380
msgid ""
"Authentication request from %1$s\n"
"\n"
"Your buddy is attempting to verify your identity, by asking you the question "
"below.\n"
"\n"
"%2$s"
msgstr ""
#: converse.js:389
msgid "Could not verify this user's identify."
msgstr ""
#: converse.js:537
msgid "Personal message"
msgstr "Введите сообщение"
#: converse.js:559
msgid "Start encrypted conversation"
msgstr ""
#: converse.js:562
msgid "Refresh encrypted conversation"
msgstr ""
#: converse.js:563
msgid "End encrypted conversation"
msgstr ""
#: converse.js:564
msgid "Verify with SMP"
msgstr ""
#: converse.js:567
msgid "Verify with fingerprints"
msgstr ""
#: converse.js:569
msgid "What's this?"
msgstr "Что это?"
#: converse.js:641
msgid "me"
msgstr "Я"
#: converse.js:757 converse.js:1552
msgid "Show this menu"
msgstr "Показать это меню"
#: converse.js:758 converse.js:1553
msgid "Write in the third person"
msgstr ""
#: converse.js:759 converse.js:1557
msgid "Remove messages"
msgstr "Удалить сообщения"
#: converse.js:830
msgid "Your message could not be sent"
msgstr "Ваше сообщение не послано"
#: converse.js:833
msgid "We received an unencrypted message"
msgstr ""
#: converse.js:836
msgid "We received an unreadable encrypted message"
msgstr ""
#: converse.js:845
msgid "This user has requested an encrypted session."
msgstr ""
#: converse.js:863
msgid ""
"Here are the fingerprints, please confirm them with %1$s, outside of this "
"chat.\n"
"\n"
"Fingerprint for you, %2$s: %3$s\n"
"\n"
"Fingerprint for %1$s: %4$s\n"
"\n"
"If you have confirmed that the fingerprints match, click OK, otherwise click "
"Cancel."
msgstr ""
#: converse.js:876
msgid ""
"You will be prompted to provide a security question and then an answer to "
"that question.\n"
"\n"
"Your buddy will then be prompted the same question and if they type the "
"exact same answer (case sensitive), their identity will have been verified."
msgstr ""
#: converse.js:877
msgid "What is your security question?"
msgstr ""
#: converse.js:879
msgid "What is the answer to the security question?"
msgstr ""
#: converse.js:883
msgid "Invalid authentication scheme provided"
msgstr ""
#: converse.js:953
msgid "Your messages are not encrypted anymore"
msgstr "Ваши сообщения больше не шифруются"
#: converse.js:955
msgid ""
"Your messages are now encrypted but your buddy's identity has not been "
"verified."
msgstr ""
"Ваши сообщения шифруются, но ваша учётная запись не проверена вашим "
"собеседником."
#: converse.js:957
msgid "Your buddy's identify has been verified."
msgstr "Ваша учётная запись проверена вашим собеседником."
#: converse.js:959
msgid "Your buddy has ended encryption on their end, you should do the same."
msgstr ""
#: converse.js:968
msgid "Your messages are not encrypted. Click here to enable OTR encryption."
msgstr "Ваши сообщения не шифруются. Нажмите здесь чтобы настроить шифрование."
#: converse.js:970
msgid "Your messages are encrypted, but your buddy has not been verified."
msgstr "Ваши сообщения шифруются, но ваш контакт не проверен."
#: converse.js:972
msgid "Your messages are encrypted and your buddy verified."
msgstr "Ваши сообщения шифруются и ваш контакт проверен"
#: converse.js:974
msgid ""
"Your buddy has closed their end of the private session, you should do the "
"same"
msgstr ""
#: converse.js:1049
msgid "Contacts"
msgstr "Контакты"
#: converse.js:1054
msgid "Online"
msgstr "В сети"
#: converse.js:1055
msgid "Busy"
msgstr "Занят"
#: converse.js:1056
msgid "Away"
msgstr "Отошёл"
#: converse.js:1057
msgid "Offline"
msgstr "Не в сети"
#: converse.js:1064
msgid "Click to add new chat contacts"
msgstr "Добавить новую конференцию"
#: converse.js:1065
msgid "Add a contact"
msgstr "Добавть контакт"
#: converse.js:1074
msgid "Contact username"
msgstr "Имя пользователя"
#: converse.js:1075
msgid "Add"
msgstr "Добавить"
#: converse.js:1083
msgid "Contact name"
msgstr "Имя контакта"
#: converse.js:1084
msgid "Search"
msgstr "Поиск"
#: converse.js:1124
msgid "No users found"
msgstr "Пользователи не найдены"
#: converse.js:1131
msgid "Click to add as a chat contact"
msgstr "Добавить контакт"
#: converse.js:1191
msgid "Click to open this room"
msgstr "Зайти в конференцию"
#: converse.js:1193
msgid "Show more information on this room"
msgstr "Показать больше информации об этой конференции"
#: converse.js:1199
msgid "Description:"
msgstr "Описание:"
#: converse.js:1200
msgid "Occupants:"
msgstr "Участники:"
#: converse.js:1201
msgid "Features:"
msgstr "Свойства:"
#: converse.js:1203
msgid "Requires authentication"
msgstr "Требуется авторизация"
#: converse.js:1206
msgid "Hidden"
msgstr "Скрыто"
#: converse.js:1209
msgid "Requires an invitation"
msgstr "Требуется приглашение"
#: converse.js:1212
msgid "Moderated"
msgstr "Модерируемая"
#: converse.js:1215
msgid "Non-anonymous"
msgstr "Не анонимная"
#: converse.js:1218
msgid "Open room"
msgstr "Открыть конференцию"
#: converse.js:1221
msgid "Permanent room"
msgstr "Перманентная конференция"
#: converse.js:1224
msgid "Public"
msgstr "Публичный"
#: converse.js:1227
msgid "Semi-anonymous"
msgstr "Частично анонимная"
#: converse.js:1230
msgid "Temporary room"
msgstr "Временная конференция"
#: converse.js:1233
msgid "Unmoderated"
msgstr "Немодерируемая"
#: converse.js:1239
msgid "Rooms"
msgstr "Конфер."
#: converse.js:1243
msgid "Room name"
msgstr "Имя конференции"
#: converse.js:1244
msgid "Nickname"
msgstr "Псевдоним"
#: converse.js:1245
msgid "Server"
msgstr "Сервер"
#: converse.js:1246
msgid "Join"
msgstr "Подключиться"
#: converse.js:1247
msgid "Show rooms"
msgstr "Обновить"
#. For translators: %1$s is a variable and will be replaced with the XMPP server name
#: converse.js:1282
msgid "No rooms on %1$s"
msgstr "Нет доступных конференций %1$s"
#. For translators: %1$s is a variable and will be
#. replaced with the XMPP server name
#: converse.js:1297
msgid "Rooms on %1$s"
msgstr "Конференции %1$s:"
#: converse.js:1554
msgid "Set chatroom topic"
msgstr "Установить тему"
#: converse.js:1555
msgid "Kick user from chatroom"
msgstr "Отключить пользователя от кнофер."
#: converse.js:1556
msgid "Ban user from chatroom"
msgstr "Забанить пользователя в этой конф."
#: converse.js:1583
msgid "Message"
msgstr "Сообщение"
#: converse.js:1697 converse.js:2783
msgid "Save"
msgstr "Сохранить"
#: converse.js:1698
msgid "Cancel"
msgstr "Отменить"
#: converse.js:1745
msgid "An error occurred while trying to save the form."
msgstr "При сохранение формы произошла ошибка."
#: converse.js:1791
msgid "This chatroom requires a password"
msgstr "Для доступа в конфер. необходим пароль."
#: converse.js:1792
msgid "Password: "
msgstr "Пароль: "
#: converse.js:1793
msgid "Submit"
msgstr "Отправить"
#: converse.js:1807
msgid "This room is not anonymous"
msgstr "Эта комната не анонимная"
#: converse.js:1808
msgid "This room now shows unavailable members"
msgstr "Эта комната показывает доступных собеседников"
#: converse.js:1809
msgid "This room does not show unavailable members"
msgstr "Эта комната не показывает недоступных собеседников"
#: converse.js:1810
msgid "Non-privacy-related room configuration has changed"
msgstr ""
#: converse.js:1811
msgid "Room logging is now enabled"
msgstr ""
#: converse.js:1812
msgid "Room logging is now disabled"
msgstr ""
#: converse.js:1813
msgid "This room is now non-anonymous"
msgstr "Эта комната не анонимная"
#: converse.js:1814
msgid "This room is now semi-anonymous"
msgstr "Эта комната частично анонимная"
#: converse.js:1815
msgid "This room is now fully-anonymous"
msgstr "Эта комната стала полностью анонимной"
#: converse.js:1816
msgid "A new room has been created"
msgstr "Новая комната была создана"
#: converse.js:1817
msgid "Your nickname has been changed"
msgstr "Ваш псевдоним уже используется другим пользователем"
#: converse.js:1831
msgid "<strong>%1$s</strong> has been banned"
msgstr "<strong>%1$s</strong> забанен"
#: converse.js:1832
msgid "<strong>%1$s</strong> has been kicked out"
msgstr "<strong>%1$s</strong> выдворен"
#: converse.js:1833
msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
msgstr ""
"<strong>%1$s</strong> has been removed because of an affiliation change"
#: converse.js:1834
msgid "<strong>%1$s</strong> has been removed for not being a member"
msgstr "<strong>%1$s</strong> удалён потому что не участник"
#: converse.js:1838 converse.js:1898
msgid "You have been banned from this room"
msgstr "Вам запрещено подключатся к этой конференции"
#: converse.js:1839
msgid "You have been kicked from this room"
msgstr "Вам запрещено подключатся к этой конференции"
#: converse.js:1840
msgid "You have been removed from this room because of an affiliation change"
msgstr "<strong>%1$s</strong> удалён потому что изменились права"
#: converse.js:1841
msgid ""
"You have been removed from this room because the room has changed to members-"
"only and you're not a member"
msgstr ""
"Вы отключены от этой конференции потому что режим изменился: только-участники"
#: converse.js:1842
msgid ""
"You have been removed from this room because the MUC (Multi-user chat) "
"service is being shut down."
msgstr ""
"Вы отключены от этой конференции потому что сервись конференций выключен."
#: converse.js:1896
msgid "You are not on the member list of this room"
msgstr "Вас нет в списке этой конференции"
#: converse.js:1902
msgid "No nickname was specified"
msgstr "Вы не указали псевдоним"
#: converse.js:1906
msgid "You are not allowed to create new rooms"
msgstr "Вы не имеете права создавать конфер."
#: converse.js:1908
msgid "Your nickname doesn't conform to this room's policies"
msgstr "Псевдоним не согласуется с правилами конфер."
#: converse.js:1910
msgid "Your nickname is already taken"
msgstr "Ваш ник уже используется другим пользователем"
#: converse.js:1912
msgid "This room does not (yet) exist"
msgstr "Эта комната не существует"
#: converse.js:1914
msgid "This room has reached it's maximum number of occupants"
msgstr "Конференция достигла максимального количества участников"
#: converse.js:1993
msgid "Topic set by %1$s to: %2$s"
msgstr "Тема %2$s устатновлена %1$s"
#: converse.js:2009
msgid "This user is a moderator"
msgstr "Модератор"
#: converse.js:2012
msgid "This user can send messages in this room"
msgstr "Собеседник"
#: converse.js:2015
msgid "This user can NOT send messages in this room"
msgstr "Пользователь не может посылать сообщения в эту комнату"
#: converse.js:2225
msgid "Click to chat with this contact"
msgstr "Начать общение"
#: converse.js:2228 converse.js:2232
msgid "Click to remove this contact"
msgstr "Удалить контакт"
#: converse.js:2263
msgid "This contact is busy"
msgstr "Занят"
#: converse.js:2264
msgid "This contact is online"
msgstr "В сети"
#: converse.js:2265
msgid "This contact is offline"
msgstr "Не в сети"
#: converse.js:2266
msgid "This contact is unavailable"
msgstr "Не доступен"
#: converse.js:2267
msgid "This contact is away for an extended period"
msgstr "На долго отошёл"
#: converse.js:2268
msgid "This contact is away"
msgstr "Отошёл"
#: converse.js:2622
msgid "Contact requests"
msgstr "Запросы на авторизацию"
#: converse.js:2623
msgid "My contacts"
msgstr "Контакты"
#: converse.js:2624
msgid "Pending contacts"
msgstr "Собеседники ожидающие авторизации"
#: converse.js:2782
msgid "Custom status"
msgstr "Произвольный статус"
#: converse.js:2788
msgid "Click to change your chat status"
msgstr "Изменить ваш статус"
#: converse.js:2792
msgid "Click here to write a custom status message"
msgstr "Редактировать произвольный статус"
#: converse.js:2821 converse.js:2829
msgid "online"
msgstr "на связи"
#: converse.js:2823
msgid "busy"
msgstr "занят"
#: converse.js:2825
msgid "away for long"
msgstr "отошёл на долго"
#: converse.js:2827
msgid "away"
msgstr "отошёл"
#. For translators: the %1$s part gets replaced with the status
#. Example, I am online
#: converse.js:2841 converse.js:2878
msgid "I am %1$s"
msgstr "%1$s"
#: converse.js:2949
msgid "Sign in"
msgstr "Подписать"
#: converse.js:2952
msgid "XMPP/Jabber Username:"
msgstr "JID:"
#: converse.js:2954
msgid "Password:"
msgstr "Пароль:"
#: converse.js:2956
msgid "Log In"
msgstr "Войти"
#: converse.js:2960
msgid "BOSH Service URL:"
msgstr ""
#: converse.js:3113
msgid "Online Contacts"
msgstr "Cписок собеседников"
(function (root, factory) {
var translations = {
"domain": "converse",
"locale_data":
{
"converse": {
"": {
"Project-Id-Version": "Converse.js 0.4",
"Report-Msgid-Bugs-To": "",
"POT-Creation-Date": "2013-09-15 22:06+0200",
"PO-Revision-Date": "2013-09-29 17:24+0300",
"Last-Translator": "Boris Kocherov <bk@raskon.org>",
"Language-Team": "<bk@raskon.ru>",
"Language": "ru",
"MIME-Version": "1.0",
"Content-Type": "text/plain; charset=UTF-8",
"Content-Transfer-Encoding": "8bit",
"X-Generator": "Poedit 1.5.5"
},
"unencrypted": [
null,
"не зашифровано"
],
"unverified": [
null,
"непроверено"
],
"verified": [
null,
"проверено"
],
"finished": [
null,
"закончено"
],
"Disconnected": [
null,
"Отключено"
],
"Error": [
null,
"Ошибка"
],
"Connecting": [
null,
"Соединение"
],
"Connection Failed": [
null,
"Не удалось соединится"
],
"Authenticating": [
null,
"Авторизация"
],
"Authentication Failed": [
null,
"Не удалось авторизоваться"
],
"Disconnecting": [
null,
"Отключаемся"
],
"Private key generated.": [
null,
"Приватный ключ сгенерирован."
],
"Personal message": [
null,
"Введите сообщение"
],
"What's this?": [
null,
"Что это?"
],
"me": [
null,
"Я"
],
"Show this menu": [
null,
"Показать это меню"
],
"Remove messages": [
null,
"Удалить сообщения"
],
"Your message could not be sent": [
null,
"Ваше сообщение не послано"
],
"Your messages are not encrypted anymore": [
null,
"Ваши сообщения больше не шифруются"
],
"Your messages are now encrypted but your buddy's identity has not been verified.": [
null,
"Ваши сообщения шифруются, но ваша учётная запись не проверена вашим собеседником."
],
"Your buddy's identify has been verified.": [
null,
"Ваша учётная запись проверена вашим собеседником."
],
"Your messages are not encrypted. Click here to enable OTR encryption.": [
null,
"Ваши сообщения не шифруются. Нажмите здесь чтобы настроить шифрование."
],
"Your messages are encrypted, but your buddy has not been verified.": [
null,
"Ваши сообщения шифруются, но ваш контакт не проверен."
],
"Your messages are encrypted and your buddy verified.": [
null,
"Ваши сообщения шифруются и ваш контакт проверен"
],
"Contacts": [
null,
"Контакты"
],
"Online": [
null,
"В сети"
],
"Busy": [
null,
"Занят"
],
"Away": [
null,
"Отошёл"
],
"Offline": [
null,
"Не в сети"
],
"Click to add new chat contacts": [
null,
"Добавить новую конференцию"
],
"Add a contact": [
null,
"Добавть контакт"
],
"Contact username": [
null,
"Имя пользователя"
],
"Add": [
null,
"Добавить"
],
"Contact name": [
null,
"Имя контакта"
],
"Search": [
null,
"Поиск"
],
"No users found": [
null,
"Пользователи не найдены"
],
"Click to add as a chat contact": [
null,
"Добавить контакт"
],
"Click to open this room": [
null,
"Зайти в конференцию"
],
"Show more information on this room": [
null,
"Показать больше информации об этой конференции"
],
"Description:": [
null,
"Описание:"
],
"Occupants:": [
null,
"Участники:"
],
"Features:": [
null,
"Свойства:"
],
"Requires authentication": [
null,
"Требуется авторизация"
],
"Hidden": [
null,
"Скрыто"
],
"Requires an invitation": [
null,
"Требуется приглашение"
],
"Moderated": [
null,
"Модерируемая"
],
"Non-anonymous": [
null,
"Не анонимная"
],
"Open room": [
null,
"Открыть конференцию"
],
"Permanent room": [
null,
"Перманентная конференция"
],
"Public": [
null,
"Публичный"
],
"Semi-anonymous": [
null,
"Частично анонимная"
],
"Temporary room": [
null,
"Временная конференция"
],
"Unmoderated": [
null,
"Немодерируемая"
],
"Rooms": [
null,
"Конфер."
],
"Room name": [
null,
"Имя конференции"
],
"Nickname": [
null,
"Псевдоним"
],
"Server": [
null,
"Сервер"
],
"Join": [
null,
"Подключиться"
],
"Show rooms": [
null,
"Обновить"
],
"No rooms on %1$s": [
null,
"Нет доступных конференций %1$s"
],
"Rooms on %1$s": [
null,
"Конференции %1$s:"
],
"Set chatroom topic": [
null,
"Установить тему"
],
"Kick user from chatroom": [
null,
"Отключить пользователя от кнофер."
],
"Ban user from chatroom": [
null,
"Забанить пользователя в этой конф."
],
"Message": [
null,
"Сообщение"
],
"Save": [
null,
"Сохранить"
],
"Cancel": [
null,
"Отменить"
],
"An error occurred while trying to save the form.": [
null,
"При сохранение формы произошла ошибка."
],
"This chatroom requires a password": [
null,
"Для доступа в конфер. необходим пароль."
],
"Password: ": [
null,
"Пароль: "
],
"Submit": [
null,
"Отправить"
],
"This room is not anonymous": [
null,
"Эта комната не анонимная"
],
"This room now shows unavailable members": [
null,
"Эта комната показывает доступных собеседников"
],
"This room does not show unavailable members": [
null,
"Эта комната не показывает недоступных собеседников"
],
"This room is now non-anonymous": [
null,
"Эта комната не анонимная"
],
"This room is now semi-anonymous": [
null,
"Эта комната частично анонимная"
],
"This room is now fully-anonymous": [
null,
"Эта комната стала полностью анонимной"
],
"A new room has been created": [
null,
"Новая комната была создана"
],
"Your nickname has been changed": [
null,
"Ваш псевдоним уже используется другим пользователем"
],
"<strong>%1$s</strong> has been banned": [
null,
"<strong>%1$s</strong> забанен"
],
"<strong>%1$s</strong> has been kicked out": [
null,
"<strong>%1$s</strong> выдворен"
],
"<strong>%1$s</strong> has been removed because of an affiliation change": [
null,
"<strong>%1$s</strong> has been removed because of an affiliation change"
],
"<strong>%1$s</strong> has been removed for not being a member": [
null,
"<strong>%1$s</strong> удалён потому что не участник"
],
"You have been banned from this room": [
null,
"Вам запрещено подключатся к этой конференции"
],
"You have been kicked from this room": [
null,
"Вам запрещено подключатся к этой конференции"
],
"You have been removed from this room because of an affiliation change": [
null,
"<strong>%1$s</strong> удалён потому что изменились права"
],
"You have been removed from this room because the room has changed to members-only and you're not a member": [
null,
"Вы отключены от этой конференции потому что режим изменился: только-участники"
],
"You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
null,
"Вы отключены от этой конференции потому что сервись конференций выключен."
],
"You are not on the member list of this room": [
null,
"Вас нет в списке этой конференции"
],
"No nickname was specified": [
null,
"Вы не указали псевдоним"
],
"You are not allowed to create new rooms": [
null,
"Вы не имеете права создавать конфер."
],
"Your nickname doesn't conform to this room's policies": [
null,
"Псевдоним не согласуется с правилами конфер."
],
"Your nickname is already taken": [
null,
"Ваш ник уже используется другим пользователем"
],
"This room does not (yet) exist": [
null,
"Эта комната не существует"
],
"This room has reached it's maximum number of occupants": [
null,
"Конференция достигла максимального количества участников"
],
"Topic set by %1$s to: %2$s": [
null,
"Тема %2$s устатновлена %1$s"
],
"This user is a moderator": [
null,
"Модератор"
],
"This user can send messages in this room": [
null,
"Собеседник"
],
"This user can NOT send messages in this room": [
null,
"Пользователь не может посылать сообщения в эту комнату"
],
"Click to chat with this contact": [
null,
"Начать общение"
],
"Click to remove this contact": [
null,
"Удалить контакт"
],
"This contact is busy": [
null,
"Занят"
],
"This contact is online": [
null,
"В сети"
],
"This contact is offline": [
null,
"Не в сети"
],
"This contact is unavailable": [
null,
"Не доступен"
],
"This contact is away for an extended period": [
null,
"На долго отошёл"
],
"This contact is away": [
null,
"Отошёл"
],
"Contact requests": [
null,
"Запросы на авторизацию"
],
"My contacts": [
null,
"Контакты"
],
"Pending contacts": [
null,
"Собеседники ожидающие авторизации"
],
"Custom status": [
null,
"Произвольный статус"
],
"Click to change your chat status": [
null,
"Изменить ваш статус"
],
"Click here to write a custom status message": [
null,
"Редактировать произвольный статус"
],
"online": [
null,
"на связи"
],
"busy": [
null,
"занят"
],
"away for long": [
null,
"отошёл на долго"
],
"away": [
null,
"отошёл"
],
"I am %1$s": [
null,
"%1$s"
],
"Sign in": [
null,
"Подписать"
],
"XMPP/Jabber Username:": [
null,
"JID:"
],
"Password:": [
null,
"Пароль:"
],
"Log In": [
null,
"Войти"
],
"Online Contacts": [
null,
"Cписок собеседников"
]
}
}
};
if (typeof define === 'function' && define.amd) {
define("ru", ['jed'], function () {
return factory(new Jed(translations));
});
} else {
if (!window.locales) {
window.locales = {};
}
window.locales.ru = factory(new Jed(translations));
}
}(this, function (ru) {
return ru;
}));
......@@ -28,17 +28,17 @@
},
'vcard': {
'get': function (callback, jid) {
var firstname, lastname;
var fullname;
if (!jid) {
jid = 'dummy@localhost';
firstname = 'Max';
lastname = 'Mustermann';
fullname = 'Max Mustermann' ;
} else {
var name = jid.split('@')[0].replace('.', ' ').split(' ');
firstname = name[0].charAt(0).toUpperCase()+name[0].slice(1);
lastname = name[1].charAt(0).toUpperCase()+name[1].slice(1);
var name = jid.split('@')[0].replace(/\./g, ' ').split(' ');
var last = name.length-1;
name[0] = name[0].charAt(0).toUpperCase()+name[0].slice(1);
name[last] = name[last].charAt(0).toUpperCase()+name[last].slice(1);
fullname = name.join(' ');
}
var fullname = firstname+' '+lastname;
var vcard = $iq().c('vCard').c('FN').t(fullname);
callback(vcard.tree());
}
......
......@@ -167,7 +167,7 @@
<dd class="available-chatroom">
<a class="open-room"
data-room-jid="converse.js@conference.opkode.im"
title="Click to open this room" href="#">converse.js (2)</a>
title="Click to open this room" href="#">Special chatroom with a long name (2)</a>
<a class="room-info icon-room-info"
data-room-jid="converse.js@conference.opkode.im"
title="Show more information on this room" href="#">&nbsp;</a>
......
{
"name": "converse.js",
"version": "0.6.4",
"version": "0.6.5",
"description": "Browser based XMPP instant messaging client",
"main": "main.js",
"directories": {
......@@ -35,5 +35,8 @@
"bower": "~1.0.0",
"grunt-contrib-requirejs": "~0.4.1",
"grunt-contrib-cssmin": "~0.6.1"
},
"dependencies": {
"requirejs": "~2.1.8"
}
}
......@@ -128,7 +128,7 @@
spyOn(this.rosterview, 'render').andCallThrough();
spyOn(this.xmppstatus, 'sendPresence');
this.roster.create({
jid: pend_names[0].replace(' ','.').toLowerCase() + '@localhost',
jid: pend_names[0].replace(/ /g,'.').toLowerCase() + '@localhost',
subscription: 'none',
ask: 'subscribe',
fullname: pend_names[0],
......@@ -173,7 +173,7 @@
for (i=0; i<pend_names.length; i++) {
is_last = i===(pend_names.length-1);
this.roster.create({
jid: pend_names[i].replace(' ','.').toLowerCase() + '@localhost',
jid: pend_names[i].replace(/ /g,'.').toLowerCase() + '@localhost',
subscription: 'none',
ask: 'subscribe',
fullname: pend_names[i],
......@@ -211,7 +211,7 @@
spyOn(this.rosterview, 'render').andCallThrough();
for (i=0; i<cur_names.length; i++) {
this.roster.create({
jid: cur_names[i].replace(' ','.').toLowerCase() + '@localhost',
jid: cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost',
subscription: 'both',
ask: null,
fullname: cur_names[i],
......@@ -232,7 +232,7 @@
var item, view, jid, t;
spyOn(this.rosterview, 'render').andCallThrough();
for (i=0; i<3; i++) {
jid = cur_names[i].replace(' ','.').toLowerCase() + '@localhost';
jid = cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost';
view = this.rosterview.rosteritemviews[jid];
spyOn(view, 'render').andCallThrough();
item = view.model;
......@@ -250,7 +250,7 @@
var item, view, jid, t;
spyOn(this.rosterview, 'render').andCallThrough();
for (i=3; i<6; i++) {
jid = cur_names[i].replace(' ','.').toLowerCase() + '@localhost';
jid = cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost';
view = this.rosterview.rosteritemviews[jid];
spyOn(view, 'render').andCallThrough();
item = view.model;
......@@ -267,7 +267,7 @@
var item, view, jid, t;
spyOn(this.rosterview, 'render').andCallThrough();
for (i=6; i<9; i++) {
jid = cur_names[i].replace(' ','.').toLowerCase() + '@localhost';
jid = cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost';
view = this.rosterview.rosteritemviews[jid];
spyOn(view, 'render').andCallThrough();
item = view.model;
......@@ -285,7 +285,7 @@
var item, view, jid, t;
spyOn(this.rosterview, 'render').andCallThrough();
for (i=9; i<12; i++) {
jid = cur_names[i].replace(' ','.').toLowerCase() + '@localhost';
jid = cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost';
view = this.rosterview.rosteritemviews[jid];
spyOn(view, 'render').andCallThrough();
item = view.model;
......@@ -303,7 +303,7 @@
var item, view, jid, t;
spyOn(this.rosterview, 'render').andCallThrough();
for (i=12; i<15; i++) {
jid = cur_names[i].replace(' ','.').toLowerCase() + '@localhost';
jid = cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost';
view = this.rosterview.rosteritemviews[jid];
spyOn(view, 'render').andCallThrough();
item = view.model;
......@@ -356,7 +356,7 @@
spyOn(this, 'showControlBox').andCallThrough();
for (i=0; i<req_names.length; i++) {
this.roster.create({
jid: req_names[i].replace(' ','.').toLowerCase() + '@localhost',
jid: req_names[i].replace(/ /g,'.').toLowerCase() + '@localhost',
subscription: 'none',
ask: 'request',
fullname: req_names[i],
......@@ -380,7 +380,7 @@
// TODO: Testing can be more thorough here, the user is
// actually not accepted/authorized because of
// mock_connection.
var jid = req_names.sort()[0].replace(' ','.').toLowerCase() + '@localhost';
var jid = req_names.sort()[0].replace(/ /g,'.').toLowerCase() + '@localhost';
var view = this.rosterview.rosteritemviews[jid];
spyOn(this.connection.roster, 'authorize');
spyOn(view, 'acceptRequest').andCallThrough();
......@@ -392,16 +392,16 @@
}, converse));
it("can have their requests denied by the user", $.proxy(function () {
var jid = req_names.sort()[1].replace(' ','.').toLowerCase() + '@localhost';
var jid = req_names.sort()[1].replace(/ /g,'.').toLowerCase() + '@localhost';
var view = this.rosterview.rosteritemviews[jid];
spyOn(this.connection.roster, 'unauthorize');
spyOn(this.rosterview, 'removeRosterItem').andCallThrough();
spyOn(this.rosterview, 'removeRosterItemView').andCallThrough();
spyOn(view, 'declineRequest').andCallThrough();
view.delegateEvents(); // We need to rebind all events otherwise our spy won't be called
var accept_button = view.$el.find('.decline-xmpp-request');
accept_button.click();
expect(view.declineRequest).toHaveBeenCalled();
expect(this.rosterview.removeRosterItem).toHaveBeenCalled();
expect(this.rosterview.removeRosterItemView).toHaveBeenCalled();
expect(this.connection.roster.unauthorize).toHaveBeenCalled();
// There should now be one less contact
expect(this.roster.length).toEqual(num_contacts-1);
......@@ -441,7 +441,7 @@
// In the next test suite, we need some online contacts, so
// we make some online now
for (i=0; i<5; i++) {
jid = cur_names[i].replace(' ','.').toLowerCase() + '@localhost';
jid = cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost';
view = this.rosterview.rosteritemviews[jid];
view.model.set('chat_status', 'online');
}
......@@ -472,7 +472,7 @@
var online_contacts = this.rosterview.$el.find('dt#xmpp-contacts').siblings('dd.current-xmpp-contact.online').find('a.open-chat');
for (i=0; i<online_contacts.length; i++) {
$el = $(online_contacts[i]);
jid = $el.text().replace(' ','.').toLowerCase() + '@localhost';
jid = $el.text().replace(/ /g,'.').toLowerCase() + '@localhost';
view = this.rosterview.rosteritemviews[jid];
spyOn(view, 'openChat').andCallThrough();
view.delegateEvents(); // We need to rebind all events otherwise our spy won't be called
......@@ -531,7 +531,7 @@
describe("A Chat Message", $.proxy(function () {
it("can be received which will open a chatbox and be displayed inside it", $.proxy(function () {
var message = 'This is a received message';
var sender_jid = cur_names[0].replace(' ','.').toLowerCase() + '@localhost';
var sender_jid = cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
msg = $msg({
from: sender_jid,
to: this.connection.jid,
......@@ -576,7 +576,7 @@
}, converse));
it("can be sent from a chatbox, and will appear inside it", $.proxy(function () {
var contact_jid = cur_names[0].replace(' ','.').toLowerCase() + '@localhost';
var contact_jid = cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
var view = this.chatboxesview.views[contact_jid];
var message = 'This message is sent from this chatbox';
spyOn(view, 'sendMessage').andCallThrough();
......@@ -591,7 +591,7 @@
describe("Special Messages", $.proxy(function () {
it("'/clear' can be used to clear messages in a conversation", $.proxy(function () {
var contact_jid = cur_names[0].replace(' ','.').toLowerCase() + '@localhost';
var contact_jid = cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
var view = this.chatboxesview.views[contact_jid];
var message = 'This message is another sent from this chatbox';
// Lets make sure there is at least one message already
......@@ -625,7 +625,7 @@
spyOn(converse, 'incrementMsgCounter').andCallThrough();
$(window).trigger('blur');
var message = 'This message will increment the message counter';
var sender_jid = cur_names[0].replace(' ','.').toLowerCase() + '@localhost';
var sender_jid = cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
msg = $msg({
from: sender_jid,
to: this.connection.jid,
......@@ -654,7 +654,7 @@
spyOn(converse, 'incrementMsgCounter').andCallThrough();
$(window).trigger('focus');
var message = 'This message will not increment the message counter';
var sender_jid = cur_names[0].replace(' ','.').toLowerCase() + '@localhost';
var sender_jid = cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
msg = $msg({
from: sender_jid,
to: this.connection.jid,
......@@ -676,7 +676,7 @@
it("contains two tabs, 'Contacts' and 'ChatRooms'", $.proxy(function () {
var cbview = this.chatboxesview.views.controlbox;
var $panels = cbview.$el.find('#controlbox-panes');
var $panels = cbview.$el.find('.controlbox-panes');
expect($panels.children().length).toBe(2);
expect($panels.children().first().attr('id')).toBe('users');
expect($panels.children().first().is(':visible')).toBe(true);
......@@ -693,7 +693,7 @@
it("is opened by clicking the 'Chatrooms' tab", $.proxy(function () {
var cbview = this.chatboxesview.views.controlbox;
var $tabs = cbview.$el.find('#controlbox-tabs');
var $panels = cbview.$el.find('#controlbox-panes');
var $panels = cbview.$el.find('.controlbox-panes');
var $contacts = $panels.children().first();
var $chatrooms = $panels.children().last();
spyOn(cbview, 'switchTab').andCallThrough();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment