Commit e4cf875d authored by JC Brand's avatar JC Brand

Merge branch 'master' into otr

Conflicts:
	bower.json
	converse.css
	converse.js
	main.js
	tests_main.js
parents c0a4e957 c61eef99
Changelog
=========
0.6.0 (Unreleased)
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
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]
0.6.0 (2013-08-26)
------------------
- #39 Documentation for minifying JS is wrong. [jcbrand]
......@@ -13,6 +28,8 @@ Changelog
- 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)
------------------
......
......@@ -46,7 +46,6 @@ module.exports = function(grunt) {
"es": "locale/es/LC_MESSAGES/es",
"it": "locale/it/LC_MESSAGES/it",
"pt_BR": "locale/pt_BR/LC_MESSAGES/pt_BR",
"sjcl": "components/sjcl/sjcl",
"tinysort": "components/tinysort/src/jquery.tinysort",
"underscore": "components/underscore/underscore",
"backbone": "components/backbone/backbone",
......
......@@ -35,7 +35,7 @@ help:
@echo " text to make text files"
pot:
xgettext --keyword=__ --keyword=translate --from-code=UTF-8 --output=locale/converse.pot converse.js --package-name=Converse.js --copyright-holder="Jan-Carel Brand" --package-version=0.4 -c --language="python";
xgettext --keyword=__ --keyword=___ --from-code=UTF-8 --output=locale/converse.pot converse.js --package-name=Converse.js --copyright-holder="Jan-Carel Brand" --package-version=0.4 -c --language="python";
release:
r.js -o build.js
......
{
"name": "converse",
"version": "0.6.0",
"version": "0.6.2",
"devDependencies": {
"jasmine": "https://github.com/jcbrand/jasmine.git#1_3_x"
},
......@@ -18,7 +18,8 @@
"strophe.disco": "https://raw.github.com/jcbrand/strophejs-plugins/75c8693992bc357c699b6d615eeb396e799f5c02/disco/strophe.disco.js",
"strophe.muc": "https://raw.github.com/jcbrand/strophejs-plugins/75c8693992bc357c699b6d615eeb396e799f5c02/muc/strophe.muc.js",
"otr": "~0.2.1",
"crypto-js": "~3.1.2"
"crypto-js": "~3.1.2",
"almond": "~0.2.6"
},
"exportsOverride": {}
}
({
baseUrl: ".",
name: "components/almond/almond.js",
out: "converse.min.js",
include: ['main'],
paths: {
"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",
"jquery.tinysort": "components/tinysort/src/jquery.tinysort",
"underscore": "components/underscore/underscore",
"backbone": "components/backbone/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"
}
})
......@@ -17,10 +17,7 @@
user-select: none;
}
#collective-xmpp-chat-data {
color: rgb(79, 79, 79);
}
#collective-xmpp-chat-data,
#collective-xmpp-chat-data input {
color: rgb(79, 79, 79);
}
......@@ -169,6 +166,10 @@ ul.participant-list li.moderator {
height:200px;
}
.chatroom .chat-content {
height:200px;
}
.chat-info {
color:#666666;
}
......@@ -331,7 +332,7 @@ dl.add-converse-contact {
float: right;
clear: right;
height: 22px;
padding: 5px 5px 0 0;
padding: 0px 5px 0 0;
color: rgb(79, 79, 79);
}
......@@ -384,18 +385,8 @@ a.close-chatbox-button {
text-shadow:1px 1px 0 #ffffff;
}
.close-chatbox-button {
padding: 0 2px 0 6px;
}
.close-chatbox-button:hover {
background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f6f6f6), color-stop(1, #ffffff) );
background:-moz-linear-gradient( center top, #f6f6f6 5%, #ffffff 100% );
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6f6f6', endColorstr='#ffffff');
background-color:#f6f6f6;
}
.close-chatbox-button:active {
a.configure-chatroom-button:active,
a.close-chatbox-button:active {
position:relative;
top:1px;
}
......@@ -576,6 +567,7 @@ dd.available-chatroom:hover a.room-info {
}
#converse-roster a.open-chat {
line-height: 21px;
width: 85%;
}
#converse-roster dd:hover a.open-chat {
......@@ -627,7 +619,7 @@ div#controlbox-panes {
background-color: white;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
width: 199px;
width: 200px;
}
......@@ -781,6 +773,10 @@ ul.chat-toolbar {
height: 20px;
display: block;
width: 195px;
/* XXX: CHECKME */
float: right;
display: inline-block;
height: 20px;
}
.chat-toolbar .toggle-otr {
......@@ -845,6 +841,11 @@ ul.chat-toolbar li {
cursor: pointer;
}
ul.chat-toolbar li:hover {
cursor: pointer;
color: rgb(39, 39, 39);
}
form#set-custom-xmpp-status {
float: left;
padding: 0;
......@@ -860,7 +861,6 @@ form#set-custom-xmpp-status {
margin:0;
}
#set-custom-xmpp-status button {
padding: 1px 2px 1px 1px;
}
......@@ -894,7 +894,7 @@ form.add-xmpp-contact input {
.chatbox .dropdown dt a span {
cursor:pointer;
display:block;
padding: 2px 7px 0 5px;
padding: 4px 7px 0 5px;
color: rgb(79, 79, 79);
}
......@@ -921,7 +921,7 @@ form.add-xmpp-contact input {
.chatbox .dropdown a {
height: 22px;
display: inline-block;
padding-top: 2px;
line-height: 24px;
}
.chatbox .dropdown dd ul a:hover {
......
......@@ -16,8 +16,8 @@
"components/otr/build/otr",
"crypto.aes",
"locales",
"localstorage",
"tinysort",
"backbone.localStorage",
"jquery.tinysort",
"strophe",
"strophe.muc",
"strophe.roster",
......@@ -55,6 +55,7 @@
this.prebind = false;
this.show_controlbox_by_default = false;
this.xhr_user_search = false;
this.xhr_custom_status = false;
this.testing = false; // Exposes sensitive data for testing. Never set to true in production systems!
this.callback = callback || function () {};
......@@ -72,12 +73,21 @@
'prebind',
'show_controlbox_by_default',
'xhr_user_search',
'xhr_custom_status',
'connection',
'testing'
'testing',
'jid',
'sid',
'rid'
];
_.extend(this, _.pick(settings, whitelist));
var __ = $.proxy(function (str) {
/* Translation factory
*/
if (this.i18n === undefined) {
this.i18n = locales['en'];
}
var t = this.i18n.translate(str);
if (arguments.length>1) {
return t.fetch.apply(t, [].slice.call(arguments,1));
......@@ -85,6 +95,18 @@
return t.fetch();
}
}, this);
var ___ = function (str) {
/* XXX: This is part of a hack to get gettext to scan strings to be
* translated. Strings we cannot send to the function above because
* they require variable interpolation and we don't yet have the
* variables at scan time.
*
* See actionInfoMessages
*/
return str;
};
this.msg_counter = 0;
this.autoLink = function (text) {
// Convert URLs into hyperlinks
......@@ -1591,22 +1613,20 @@
},
actionInfoMessages: {
// # For translations: %1$s will be replaced with the user's nickname
// # Don't translate "strong"
// # Example: <strong>jcbrand</strong> has been banned
301: converse.i18n.translate('<strong>%1$s</strong> has been banned'),
// # For translations: %1$s will be replaced with the user's nickname
// # Don't translate "strong"
// # Example: <strong>jcbrand</strong> has been kicked out
307: converse.i18n.translate('<strong>%1$s</strong> has been kicked out'),
// # For translations: %1$s will be replaced with the user's nickname
// # Don't translate "strong"
// # Example: <strong>jcbrand</strong> has been removed because of an affiliasion change
321: converse.i18n.translate("<strong>%1$s</strong> has been removed because of an affiliation change"),
// # For translations: %1$s will be replaced with the user's nickname
// # Don't translate "strong"
// # Example: <strong>jcbrand</strong> has been removed for not being a member
322: converse.i18n.translate("<strong>%1$s</strong> has been removed for not being a member")
/* XXX: Note the triple underscore function and not double
* underscore.
*
* This is a hack. We can't pass the strings to __ because we
* don't yet know what the variable to interpolate is.
*
* Triple underscore will just return the string again, but we
* can then at least tell gettext to scan for it so that these
* strings are picked up by the translation machinery.
*/
301: ___("<strong>%1$s</strong> has been banned"),
307: ___("<strong>%1$s</strong> has been kicked out"),
321: ___("<strong>%1$s</strong> has been removed because of an affiliation change"),
322: ___("<strong>%1$s</strong> has been removed for not being a member")
},
disconnectMessages: {
......@@ -1638,9 +1658,8 @@
info_msgs.push(this.infoMessages[stat]);
} else if (_.contains(_.keys(this.actionInfoMessages), stat)) {
action_msgs.push(
this.actionInfoMessages[stat].fetch(
Strophe.unescapeNode(Strophe.getResourceFromJid($el.attr('from')))
));
__(this.actionInfoMessages[stat], Strophe.unescapeNode(Strophe.getResourceFromJid($el.attr('from'))))
);
}
}
}
......@@ -1995,13 +2014,14 @@
},
template: _.template(
'<a class="open-chat" title="'+__('Click to chat with this contact')+'" href="#">{{ fullname }}</a>' +
'<span class="icon-{{ chat_status }}" title="{{ status_desc }}"></span>'+
'<a class="remove-xmpp-contact" title="'+__('Click to remove this contact')+'" href="#"></a>'),
'<a class="open-chat" title="'+__('Click to chat with this contact')+'" href="#">'+
'<span class="icon-{{ chat_status }}" title="{{ status_desc }}"></span>{{ fullname }}'+
'</a>' +
'<a class="remove-xmpp-contact icon-remove" title="'+__('Click to remove this contact')+'" href="#"></a>'),
pending_template: _.template(
'<span>{{ fullname }}</span>' +
'<a class="remove-xmpp-contact" title="'+__('Click to remove this contact')+'" href="#"></a>'),
'<a class="remove-xmpp-contact icon-remove" title="'+__('Click to remove this contact')+'" href="#"></a>'),
request_template: _.template('<div>{{ fullname }}</div>' +
'<button type="button" class="accept-xmpp-request">' +
......@@ -2024,6 +2044,12 @@
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',
......@@ -2391,7 +2417,8 @@
var $my_contacts = this.$el.find('#xmpp-contacts'),
$contact_requests = this.$el.find('#xmpp-contact-requests'),
$pending_contacts = this.$el.find('#pending-xmpp-contacts'),
$count, presence_change;
sorted = false,
$count, changed_presence;
if (item) {
var jid = item.id,
view = this.rosteritemviews[item.id],
......@@ -2406,44 +2433,37 @@
$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 (!item.get('sorted')) {
// this attribute will be true only after all of the elements have been added on the page
// at this point all offline
$my_contacts.after(view.render().el);
}
else {
// just by calling render will be enough to change the icon of the existing item without
// having to reinsert it and the sort will come from the presence change
if ($.contains(document.documentElement, view.el)) {
view.render();
} else {
$my_contacts.after(view.render().el);
}
}
presence_change = view.model.changed.chat_status;
if (presence_change) {
// resort all items only if the model has changed it's chat_status as this render
// is also triggered when the resource is changed which always comes before the presence change
// therefore we avoid resorting when the change doesn't affect the position of the item
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.offline').tsort('a', crit));
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.unavailable').tsort('a', crit));
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.away').tsort('a', crit));
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.dnd').tsort('a', crit));
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.online').tsort('a', crit));
}
if (item.get('is_last') && !item.get('sorted')) {
// this will be true after all of the roster items have been added with the default
// options where all of the items are offline and now we can show the rosterView
item.set('sorted', true);
this.initialSort();
this.$el.show();
changed_presence = view.model.changed.chat_status;
if (changed_presence) {
this.sortRoster(changed_presence)
sorted = true;
}
if (item.get('is_last')) {
if (!sorted) {
this.sortRoster(item.get('chat_status'));
}
if (!this.$el.is(':visible')) {
// Once all initial roster items have been added, we
// can show the roster.
this.$el.show();
}
converse.xmppstatus.sendPresence();
}
}
// Hide the headings if there are no contacts under them
_.each([$my_contacts, $contact_requests, $pending_contacts], function (h) {
if (h.nextUntil('dt').length) {
h.show();
if (!h.is(':visible')) {
h.show();
}
}
else {
else if (h.is(':visible')) {
h.hide();
}
});
......@@ -2455,11 +2475,14 @@
return this;
},
initialSort: function () {
var $my_contacts = this.$el.find('#xmpp-contacts'),
crit = {order:'asc'};
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.offline').tsort('a', crit));
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.unavailable').tsort('a', crit));
sortRoster: function (chat_status) {
var $my_contacts = this.$el.find('#xmpp-contacts');
$my_contacts.siblings('dd.current-xmpp-contact.'+chat_status).tsort('a', {order:'asc'});
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.offline'));
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.unavailable'));
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.away'));
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.dnd'));
$my_contacts.after($my_contacts.siblings('dd.current-xmpp-contact.online'));
}
});
......@@ -2517,6 +2540,13 @@
setStatusMessage: function (status_message) {
converse.connection.send($pres().c('show').t(this.get('status')).up().c('status').t(status_message));
this.save({'status_message': status_message});
if (this.xhr_custom_status) {
$.ajax({
url: 'set-custom-status',
type: 'POST',
data: {'msg': status_message}
});
}
}
});
......@@ -2548,7 +2578,7 @@
'<span class="icon-{{ chat_status }}"></span>'+
'{{ status_message }}' +
'</a>' +
'<a class="change-xmpp-status-message" href="#" title="'+__('Click here to write a custom status message')+'"></a>' +
'<a class="change-xmpp-status-message icon-pencil" href="#" title="'+__('Click here to write a custom status message')+'"></a>' +
'</div>'),
renderStatusChangeForm: function (ev) {
......@@ -2836,9 +2866,8 @@
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.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);
......
......@@ -9,4 +9,4 @@
*
* Copyright (c) 2012, Jan-Carel Brand <jc@opkode.com>
* Dual licensed under the MIT and GPL Licenses
*/.hidden{display:none}.locked{background:url(images/emblem-readonly.png) no-repeat right;padding-right:22px}span.spinner{background:url(images/spinner.gif) no-repeat center;width:22px;height:22px;padding:0 2px;display:block}span.spinner.centered{position:absolute;top:30%;left:50%;margin:0 0 0 -25%}span.spinner.hor_centered{left:40%;position:absolute}#chatpanel{z-index:99;position:fixed;bottom:0;right:0;height:332px;width:auto}#toggle-controlbox{position:fixed;font-size:80%;bottom:0;right:0;border-top-right-radius:4px;border-top-left-radius:4px;background:#e3e2e2;border:1px solid #c3c3c3;border-bottom:0;padding:.25em .5em;margin-right:1em;height:1.1em}#connecting-to-chat{background:url(images/spinner.gif) no-repeat left;padding-left:1.4em}.chat-head{color:#fff;margin:0;font-size:100%;border-top-right-radius:4px;border-top-left-radius:4px;padding:3px 0 3px 7px}.chat-head-chatbox{background-color:#596a72;background-color:rgba(89,106,114,1)}.chat-head-chatroom{background-color:#2D617A}.chatroom .chat-body{height:272px;background-color:#fff;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.chatroom .chat-area{float:left;width:200px}.chatroom .chat{overflow:auto;height:400px;border:solid 1px #ccc}.chatroom .participants{float:left;width:99px;height:272px;background-color:#fff;overflow:auto;border-right:1px solid #999;border-bottom:1px solid #999;border-bottom-right-radius:4px}.participants ul.participant-list li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;font-size:12px;padding:.5em 0 0 .5em;cursor:default}ul.participant-list li.moderator{color:#FE0007}.chatroom form.sendXMPPMessage{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.chatroom .participant-list{list-style:none}.chat-blink{background-color:#176689;border-right:1px solid #176689;border-left:1px solid #176689}.chat-content{padding:.3em;font-size:13px;color:#333;height:193px;overflow-y:auto;border:1px solid #999;border-bottom:0;border-top:0;background-color:#fff;line-height:1.3em}.chat-textarea{border:0;height:50px}.chat-textarea-chatbox-selected{border:1px solid #578308;margin:0}.chat-textarea-chatroom-selected{border:2px solid #2D617A;margin:0}.chat-info{color:#666}.chat-message-room,.chat-message-them,.chat-message-me{font-weight:700;white-space:nowrap;max-width:100px;text-overflow:ellipsis;overflow:hidden;display:inline-block;float:left;padding-right:3px}.chat-message-them{color:#F62817}.chat-message-me{color:#436976}.chat-message-room{color:#4B7003}.chat-event,.chat-date,.chat-info{color:gray}li.chat-info{padding-left:10px}.chat-date{display:inline-block;padding-top:10px}div#settings,div#chatrooms,div#login-dialog{height:272px}p.not-implemented{margin-top:3em;margin-left:.3em;color:gray}div.delayed .chat-message-them{color:#FB5D50}div.delayed .chat-message-me{color:#7EABBB}input.error{border:1px solid red}.conn-feedback.error{color:red}.chat-message-error{color:#76797C;font-size:90%;font-weight:400}.chat-head .avatar{float:left;margin-right:6px}div.chat-title{color:#fff;font-weight:700;line-height:15px;display:block;margin-top:2px;margin-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-shadow:rgba(0,0,0,.51) 0 -1px 0;height:1em}.chat-head-chatbox,.chat-head-chatroom{background:linear-gradient(top,rgba(206,220,231,1) 0,rgba(89,106,114,1) 100%);height:35px;position:relative}p.user-custom-message,p.chatroom-topic{font-size:80%;font-style:italic;height:1.3em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.activated{display:block!important}a.subscribe-to-user{padding-left:2em;font-weight:700}dl.add-converse-contact{margin:0 0 0 .5em}.fancy-dropdown{border:1px solid #ddd;height:22px}.fancy-dropdown a.choose-xmpp-status,.fancy-dropdown a.toggle-xmpp-contact-form{text-shadow:0 1px 0 rgba(255,255,255,1);padding-left:2em;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;float:left;width:130px}#fancy-xmpp-status-select a.change-xmpp-status-message{background:url(images/pencil_icon.png) no-repeat right 3px;float:right;clear:right;height:22px}ul#found-users{padding:10px 0 5px 5px;border:0}form.search-xmpp-contact{margin:0;padding-left:5px;padding:0 0 5px 5px}form.search-xmpp-contact input{width:8em}.oc-chat-head{margin:0;color:#FFF;border-top-right-radius:4px;border-top-left-radius:4px;height:35px;clear:right;background-color:#5390C8;padding:3px 0 0}a.configure-chatroom-button,a.close-chatbox-button{margin-top:.2em;margin-right:.5em;cursor:pointer;float:right;width:12px;-moz-box-shadow:inset 0 1px 0 0 #fff;-webkit-box-shadow:inset 0 1px 0 0 #fff;box-shadow:inset 0 1px 0 0 #fff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#fff),color-stop(1,#f6f6f6));background:-moz-linear-gradient(center top,#fff 5%,#f6f6f6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6');-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px;border:1px solid #888;display:inline-block;color:#666!important;font-family:arial;font-size:12px;font-weight:700;text-decoration:none;text-shadow:1px 1px 0 #fff}a.configure-chatroom-button{padding:0 4px;background:#fff url(images/preferences-system.png) no-repeat center center}.close-chatbox-button{padding:0 2px 0 6px}.close-chatbox-button:hover{background:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#f6f6f6),color-stop(1,#fff));background:-moz-linear-gradient(center top,#f6f6f6 5%,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6f6f6', endColorstr='#ffffff');background-color:#f6f6f6}.close-chatbox-button:active{position:relative;top:1px}.oc-chat-content dt{margin:0;padding-top:.5em}.chatroom-form-container{color:#666;padding:5px;height:262px;overflow-y:auto;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.chatroom-form{background:#fff;font-size:12px;padding:0}.chat-body p{font-size:14px;color:#666;padding:5px;margin:0}.chatroom-form legend{font-size:14px;font-weight:700;margin-bottom:5px}.chatroom-form label{font-weight:700;display:block;clear:both}.chatroom-form label input,.chatroom-form label select{float:right}#converse-roster dd.odd{background-color:#DCEAC5}#converse-roster dd.current-xmpp-contact{clear:both}#converse-roster dd.current-xmpp-contact,#converse-roster dd.current-xmpp-contact:hover{background:url(images/user_online_panel.png) no-repeat 5px 2px}#converse-roster dd.current-xmpp-contact.offline:hover,#converse-roster dd.current-xmpp-contact.unavailable:hover,#converse-roster dd.current-xmpp-contact.offline,#converse-roster dd.current-xmpp-contact.unavailable{background:url(images/user_offline_panel.png) no-repeat 5px 2px}#converse-roster dd.current-xmpp-contact.dnd,#converse-roster dd.current-xmpp-contact.dnd:hover{background:url(images/user_busy_panel.png) no-repeat 5px 2px}#converse-roster dd.current-xmpp-contact.xa,#converse-roster dd.current-xmpp-contact.xa:hover,#converse-roster dd.current-xmpp-contact.away,#converse-roster dd.current-xmpp-contact.away:hover{background:url(images/user_away_panel.png) no-repeat 5px 2px}#converse-roster dd.requesting-xmpp-contact button{margin-left:.5em}#converse-roster dd a,#converse-roster dd span{text-shadow:0 1px 0 rgba(250,250,250,1);display:inline-block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#converse-roster dd a{margin-left:1.3em}#converse-roster dd span{width:125px}.remove-xmpp-contact-dialog .ui-dialog-buttonpane{border:0}#converse-roster{height:200px;overflow-y:auto;overflow-x:hidden;width:100%;margin:0;position:relative;top:0;border:0;margin-top:.5em}#available-chatrooms dd{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;width:165px}#available-chatrooms dt,#converse-roster dt{font-weight:400;font-size:13px;color:#666;border:0;padding:0 0 .3em .5em;text-shadow:0 1px 0 rgba(250,250,250,1)}#converse-roster dt{display:none}dd.available-chatroom,#converse-roster dd{font-weight:700;border:0;display:block;padding:0 0 0 .5em;color:#666;text-shadow:0 1px 0 rgba(250,250,250,1)}.room-info{font-size:11px;font-style:normal;font-weight:400}li.room-info{display:block;margin-left:5px}div.room-info{clear:left}p.room-info{margin:0;padding:0;display:block;white-space:normal}a.room-info{background:url(images/information.png) no-repeat right top;width:22px;height:22px;float:right;display:none;clear:right}a.open-room{float:left;white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden}dd.available-chatroom:hover a.room-info{display:inline-block}dd.available-chatroom:hover a.open-room{width:75%}#converse-roster dd a.remove-xmpp-contact{background:url(images/delete_icon.png) no-repeat right top;padding:0 0 1em;float:right;width:22px;margin:0;display:none}#converse-roster dd:hover a.remove-xmpp-contact{display:inline-block}#converse-roster dd:hover a.open-chat{width:75%}.chatbox,.chatroom{box-shadow:1px 1px 5px 1px rgba(0,0,0,.4);display:none;float:right;margin-right:15px;z-index:20;border-radius:4px}.chatbox{width:201px}.chatroom{width:300px;height:311px}.oc-chat-content{height:272px;width:199px;padding:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.oc-chat-content dd{margin-left:0;margin-bottom:0;padding:1em}.oc-chat-content dd.odd{background-color:#DCEAC5}div#controlbox-panes{background:-moz-linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background:-ms-linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background:-o-linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,rgba(255,255,255,1)),color-stop(100%,rgba(240,240,240,1)));background:-webkit-linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background:linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background-color:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px;border:1px solid #999;width:199px}form#converse-login{background:#fff;padding:2em 0 .3em .5em}form#converse-login input{display:block;width:90%}form#converse-login .login-submit{margin-top:1em;width:auto}form.set-xmpp-status{background:0;padding:.5em 0 .5em .5em}form.add-chatroom{background:0;padding:3px}form.add-chatroom input[type=text]{width:95%;margin:3px}form.add-chatroom input[type=button],form.add-chatroom input[type=submit]{width:50%}select#select-xmpp-status{float:right;margin-right:.5em}.chat-head #controlbox-tabs{text-align:center;display:inline;overflow:hidden;font-size:12px;list-style-type:none}.chat-head #controlbox-tabs li{float:left;list-style:none;padding-left:0;text-shadow:#fff 0 1px 0;width:40%}ul#controlbox-tabs li a{display:block;font-size:12px;height:34px;line-height:34px;margin:0;text-align:center;text-decoration:none;border:1px solid #999;border-top-right-radius:4px;border-top-left-radius:4px;color:#666;text-shadow:0 1px 0 rgba(250,250,250,1)}.chat-head #controlbox-tabs li a:hover{color:#000}.chat-head #controlbox-tabs li a{background-color:#fff;box-shadow:inset 0 0 8px rgba(0,0,0,.2)}ul#controlbox-tabs a.current,ul#controlbox-tabs a.current:hover{box-shadow:none;color:#000;border-bottom:0;height:35px}div#users,div#chatrooms,div#login-dialog,div#settings{border:0;font-size:14px;width:199px;background-color:#fff;border-bottom-right-radius:4px;border-bottom-left-radius:4px}div#chatrooms{overflow-y:auto}form.sendXMPPMessage{background:#fff;border:1px solid #999;padding:.5em;margin:0;position:relative;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;border-top-left-radius:0;border-top-right-radius:0;height:54px}form#set-custom-xmpp-status{float:left;padding:0}#set-custom-xmpp-status button{padding:1px 2px 1px 1px}.chatbox dl.dropdown{margin-right:.5em;margin-bottom:0;background-color:#f0f0f0}.chatbox .dropdown dd,.dropdown dt,.dropdown ul{margin:0;padding:0}.chatbox .dropdown dd{position:relative}input.custom-xmpp-status{width:138px}form.add-xmpp-contact{background:0;padding:5px}form.add-xmpp-contact input{width:125px}.chatbox .dropdown dt a span{cursor:pointer;display:block;padding:5px}.chatbox .dropdown dd ul{padding:5px 0;list-style:none;position:absolute;left:0;top:0;border:1px solid #ddd;border-top:0;width:99%;z-index:21;background-color:#f0f0f0}.chatbox .dropdown li{list-style:none;padding-left:0}.set-xmpp-status .dropdown dd ul{z-index:22}.chatbox .dropdown a{padding:3px 0 0 25px;display:block;height:22px}.chatbox .dropdown a.toggle-xmpp-contact-form{background:url(images/add_icon.png) no-repeat 4px 2px}.chatbox .dropdown a.online{background:url(images/user_online_panel.png) no-repeat 3px 4px}.chatbox .dropdown a.offline{background:url(images/user_offline_panel.png) no-repeat 3px 4px}.chatbox .dropdown a.dnd{background:url(images/user_busy_panel.png) no-repeat 3px 4px}.chatbox .dropdown a.away{background:url(images/user_away_panel.png) no-repeat 3px 4px}.chatbox .dropdown dd ul a:hover{background-color:#bed6e5}
\ No newline at end of file
*/@font-face{font-family:Converse-js;src:url(fonticons/fonts/Converse-js.eot)}@font-face{font-family:Converse-js;src:url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAEacAAsAAAAAfSwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAQlYAAHXHpo6K0EZGVE0AAENgAAAAGgAAABxl7tJoR0RFRgAAQ3wAAAAdAAAAIACEAARPUy8yAABDnAAAAE0AAABgU5fcYmNtYXAAAEPsAAABPQAAArgwQqoFaGVhZAAARSwAAAAsAAAANv3EpBNoaGVhAABFWAAAAB4AAAAkBHEAXmhtdHgAAEV4AAAAOAAAASh5QAIcbWF4cAAARbAAAAAGAAAABgBXUABuYW1lAABFuAAAANYAAAGnabUpXnBvc3QAAEaQAAAADAAAACAAAwAAeJzVvQl8zUf3Bzy/5N6bm0giyI09scR67Qm11U6RLkqqHltRFLG0kaK2aqtor6KEaqmqKiqqqKq9ategllBLitolliByr9zIvN/vzM0Vbfr8+/zf93k/n399eu78Zj1z5syZc2bOTAxhMgnDMAJbjxg+akD8yAE1h4wUho8wRDPXGz6ueF9XCZMj0NcRaAoPECW7FJUOhzcQ6PfhEFeKK9Fcxndm4TJChJQxNS1SRgSVGXKwqOjGOqyisAgTZUWkqCmaiFaig+gkXha9xQAxVIwUY8U7YpqYKeaJz8VSkSTWiU1ih9gnDosTIlVcEmnirnAJaViMICPUKG1UMKoZ9Y2mRlvjWaOL0d3oawwyRhijjAnGZMNhzDY+NRYby43Vxg/GVmOX8Ytx1DhlnDeuGreMTMPt4+Pj7xPiU9wn3KeSTw2fKJ/GPi192vu84NPVp5dPf584n1E+77w5fHC7OnXq4Ket/qn3VJ22+iuKXw3qNhg8fNSrg+NfHTpg2JsjB7/ad+jwEQkD+vcbqlIbtFY/ddrpn7a6AvX1VF1PdY1UdXXr8at+u9b6p5WOrK9/Guifp/RPS/3jydKGBaI8X/Xq6p96+ida/+ha6ula6ula6jXUP7r1errOep5a2umfNvpH9zdKEyFKtxClW4hSRHiqQTSIMHLY4KEDBvZ9dYCmS5v838jZUEVH6faiWiqsGzTSPw31T7QuqVuP0j/RutnoujqL/qqr6dnSk6b7F637F637F637F63bi9b9i9b9i26tf3T/onX/onV79XWd9aP0T309VJ4fXWd9z09LHdlSY60QbKWoi5+G+qeB/tEI1te41NE56+rBqaMJCZwez7b8E08IY6oxzfjA+BAMPd34yJhhzDRmGR+DuecYicZcY57xiTEfjP6ZscBYaHxuLDK+ANN/aSwxvjKWGl8byzABVhjfGCuNJGOV8S0mw3fGGmOtsc743liPibHB+NHYaGwyNhtbMEm2GduNn4wdxs/GTkyY3cYeY6+xz9hvHMDkSTYOGoeMw8avxhFMpGPGcSPFOGGcNH7DpDptnDHOGqniZc5xHxEkeog7PqV9lvommoZahlmOWj/w/7bQD4GfBV4JvBV8pGjDojGhjcJyS39VtlBEaoSzcqsqM6t2rxZfvYX9xZodaw6v+Wntk3UH1p0b9X2DyQ2Tm01q0aLFLy0TWgW26tHqfpuKbeLavtc2o8PuZ7s+t6zTB52+fTGt869dkmPvvFT8pXov7X0p5aV7XYu/bH15w8u//eu77kV6DOj9zCvPv5LSJ7pPTt8yfav2bd73y76r+x7q17rf4QGDBpwLzhnsSjDlJLoS/YJdiVJs3Ge3OaR40dTDja+9G/bjRzbqMMYh5Wp3RaeKO2B2xkrZ4t3nbe5YZ6Q71h3pQCDU4XCGEroJzcGuNq4Em5S3HtVB2Tt9f5Eyu9AUKe99aZHyQeZYa1yc0+Q2JSWZpQhAggjqnS2FOXOsFCGLRgGFoj6zAGvUOiNlaq35UlQ8WlnK40cHOaw5kTkmm3Mr/qEC91b8i4wzS2PAgRxpdGxgQqOXh1qlKD3H5U5wJ6iAijIHO2s429ikaPR6eSlqzbxAcJ6f5TyAcfIoUuVeJGhwFAl5cRe8ceW9ZcuHO1NVrUU+/UyK4IEDpbyLkLw9cGCEe72fCnii8uLDc2It+eJVIRaPcCL/43q88eFOk2VO0pykJIfVGWpJcsyJmxNnRdePodXnh3WSovnsNQT3+BkMMPSQlDsYaj4nSsq1SJBrGdqhEgjW5iXoLDs8xSKcCc54W1JMnF+wM9Z52VYuwB0bVi7AFeqOtjlDzzpAUMAe5gJ75U75m15FF9yrLQ5nrOOsw1wg6WLcobZ0d6LdL1gaafNDpDHzXi10N2h3CSl/qVhUCr+vTkm5e/xtcNfPw44RDg+V0tWzKmNXgdGaXGdOcOpG8tCDVdOlXLNsBdiwbR8pV81e4yCs6WDscnDe5sXM2RXc2CUBpZtWl6J+6irWOESKJu/FghmbfXyTcHYttj6PscAjaNdvzHkbHPfM0ZUsXk+KF/5VXFcpugwPRZkuwzo5GPuZbl48c+QyUTpslbknBtWTuRlBx2zO6HR3dDqYNNoVanPYgVi3Z62g9N2Rb0phugPeu7O5txQ+pMDtYzUdVil3Rv4u5aGzFTlFTnN2VNFA1GMC48TTSNWAcZhFVTipTkc4nJOdmBtPF38WDfWI3qoaSmBD570NlWRDtVRDlcLR0JmLf22ICbohpGrAuPwNLXUkO5LMwelSbD/bH2NoblxGCvHTBIReLoTQgAiEhp92WBdIGSG3jwMXZX9cBWhlr3igk2X2nsuqiNW5XopzZ5fZFlhQZkQpENXcFaJFfvaHrhdy6T3gW6FDQz9dihEIfdNAZ5LZs646rOMsEFWJEHTyj45vI26eScqLM7pKmRWG0OUfn5XCf+sQ0GFgJVT7yQwpb646hNzpPW8BHu+8RsorJ6dJeZpi4Uy1MaCT+RIY4Jfh88HqASH9pHQ3LIJKGs2X8uGOllJYK4JbXRBEwkc2Ba8vrCqFwelXuLwfOlH47SYoPm5DOykXAIj+HTZLOdkLFuQl8DMcKGRM2oPynLkZ5x6iztxsDN+rp9jOXDAnxZ9/47JSWJpvJz6QVqZ9GaBL/Y8H+RHjzZhz2WXZCzRWeeZ5StpvyaKhXxVljz+SoliXaFIhDvL407OaMqJ0+/WaWqLsGyuRO/yHd9DSR/1mSRH/+eseoD69cZIhiVB4sDPTGW1LSkq3O+IccfYYhyMGPZnYQkjRcofA/AUQzVo8EdrO1Hd2CHCQIzk9yZHkSLfHxWHtiHOwkqS8f0hwJCUlWSEsctb0k9Ca92AZyEnHulL0ffCP66np6FE2pvi1sGlSlHx7AoiB6sFUYjJY/8yXH0pR4RzWiX3xNaQo8/ZEKaf6oAvi89fRQ+E7D2STXVxAWL78LEDuRoDYraxkIkO5rOldpgYgZLTXudlITlU/1jUTQVJiX3xNKS9NmqzblL+Xt3gwwX/jzcRvqpRXJ7Uizr+C78x92I/3sZCOwzR3g3nk5VbPS/loACbemULvSxH4+qsY/LfCMHizh6MC9FK82z7LgfGpU8gHsEQ9yP+02SPAZr9nMldNxJkvIdQUoq34lx9IEfmMHWj3e16Kqi//yg4grmq3EHZ0NFLbpSH0+TpdQl7vPdrqbaw3q8YwZ5RPBnGuHQoG/DUzV6PAXDXY2BKiuRR8PwU1PeqfKkUlrPTozkQw1bbvrcGuBGemLS4uOYZLSJcN6NCqjh6Az/B/k+IOzYlm0oBLiP2sbL51xxWr1p1U77oTqdcdV/Tf1ubGciFP7ATvpG7HCF+Ke59giueTQJRJHKcTRMWW7T2gTOJYnfA4ThVTCSwW4Y6WuYurN7O5YuNyYv2c69NtSUCuYrcTyPgvDF2Z5XZkXJYWHuMAZqnLhyG+2xyCE/y0R8RxIfy5VqgrlqoGFjMRVAmscW/BdYV5RE60n6dH986AzTO2ruJnQrjMnXj0ZjJUllqhqNgZFQ2wCN2wVjgKcPBQBPGwHjwI0BeoW1rPU5+Q4LWO3kwqoBzXXuvB6f9xuf9texWOMMPhf1su2ZKeE2tzRcdAWhWpFapyHkYmM+bIQ1LCWe8eKMh66yEmG+uY8/c66hM5bh+9qctZVM9Yrs9fykV5y9X+/6KcRRWk7vMflwx29XdFgwlKkalt1JfSqDldAce7U/xUwBOVFx+uZog3XhVi8Qgn8j+uxxsPon7SG/xe40g/zIQxX4LeH/cRmNjmmseBcYk6mMk5Xx4EDst/7ekuqn6cRSG8Ik+8I+VrlVeg1LxN3VD0dDdpNGqd6OB3CSmmVob+dfBr9GT/6W6oqSGrbspWxFQ2OO+j45AZ2cdqQgtaCvPBOdk9uUePHlvcoW6Tw22KwhSPWVvFjWX+5vOnKeCKra3ihDKx/vnTUZecJofT5AztscXsTjAhZIpLgo5sQlWJmDTlA/gbipZKj56BkqWmYOK4k9qgO2cgw5xv7oQo7BGJ0ENK0oOQypnLh2OUvmkI+QC9UZQv3R9ELHkGS0oThH4fVA/dSrXtVHAXBPTuhYh97Y6U5y4jdKUU1tfbXfezNIYhPcrFGr+D+FyaqluR1yotYcug2ZW3ShAbSJvL0+K5bDzoOQT1PuiwBcL4204IvReLBf+lFpCez32MOMrmR8/NRsjug1CnKzSyKs4j/A4K3EMuTfdvdiCA3pszohdBT4Ce1QBWIV9O698ArkHsyH1DwYEm4CxHLEIoCO3Jkp9CD3h0n63AwCjysDhwOABsClPiZxwDZfxzs4FoGtWZoBPN0deLM5GRKGZ+8ROI9GAnQk5Mw6KvFoPW8FoGhuvDp7kmVK4EWDGtmaakqPDJYU1dUepqZU1xEfyv+XoURKFunTkyUGCtljQ9WsL6IcqWmoo1y4SOYkSfdViTTRjiLBf0w7JDdtCGta6FNm5cx4pnbYZFzHfweGhGg9+CPpO8G3VDoRb+f0CelPyiMXKXXjUdjbVbC8X2p6mgR6PnoeeuGZPoAYyTe5m6iQkEogUTGCdemDoUcyb4VRoJQZeghhmkRVAZLK++E77HxPrunJQ3yv8CjSkJK/9dalUVDCu11/cSCYc+y+UXZcydYIaKzWWBi58rBLP5li9sbv+vukCu5wCtYusbIX/YDgHLoQuYy+jyKN72v6XZ/34ulBp6EEM/dTWIeWcR2HdxC6C+6yTWKyd6UrwBtOhcKqFhr0BfyY6HVhg6HUts1m8gssyhGvz6SMyHGVuWSdH9eSjJCXv6OJSa6PBojEsuUOB8VI5w+ybIpUpm6HF7fn4GQ3MFcuD0ufog1PeoxP0idGnRFxLO3aAtcrsjJgD+Ti6+2AZM/UdcG3xuwZS908CE5u99uANSr/moqRimeNjNLZdgZfJPxZA0eFTbAwKh9shcLsxBnaDiy/LJCM3qRyXtJ2syhuVBH4MaH0yLB5wf4tsXEJoCyhix2/7xHN3mnaOOfztHa3jn6IL/N3O0hXeONvfO0V15c7Tf0X8+R63BWc7JEM8VApzzZO6zK+rZKgaoKC5LJV9qQZ0zIReYW7CyhF0Fc7mqgT9to2AyuZbDsC5WojNQpfAPqbsSI3L5HGaGGcbatfXIFzItXsoLV8qBAOeP9NMQNBsNM+zCZdi1f2SXYU6oYXcOw2a7dwWMcfPaatYIJkj7YAxbgQJ1oySEqqvqA2R2+BAbLD5XV+6geM2qUx71ZoWTh74Ai2a9eBND1wh2zqMXziOOOv6jTkvzhq5LAget1mlC8KJ82AtL8v3baPx+NmzK3OVoPHdFFsCySgDkytyv5gJsg2Ysyb2+vtQsyWm+PkEITXfQasOS96gDJFIR6v8PdryHoXuUiaHbh4nl774ORG9ySyEw8REi+4NIhTdjUXmwog6K2LFYZBUF/4a8xV0F5wzEjV2MaovkbgQsV3sRKQlxGFG6AqkLFbxEzBRNcRFU6oIeBRHAbTfbKJiBft1OcrRuIHRyPzK/iTnt+/AzjmhzitcnRtvVNI67MdR2A6gVK4DPCDRdYTgIc3c0BEG1pL0g/vLb4KTeMMDTKUTKziyFOAMKUFgLWDlXxG5ON5QudBXcEnAMZkpAc5gFQXWuQGiR4woHdoRgK1EeNonlPDi59OUFaKXMV6cAqxw6Rg5A5yotwAy/Xh+iq8w4cNy16jvQ1hYIsXMLIYZDXgGFU6PHc/BTo8c5dLS8sxgoXLP7QlS0DWdxrMWXJpdilZAxZ/p3R8ZT9YYDXupZlc1PwApdegAE1rVzozV6MuP+BqKMlHu/lmY3wAIPan6suybv0xa8ZkBk3PhpO0mAdeTi61dJFjBN6pfTNKnkydjGlFofr6SEyqOofEACg6xYXUr7v7UFJDd9jsEvBk1B+H8dgZF7H10PipiAOFr5oZtfwViXAcFLpqLXxdaBP0o1wTpgXoZxLQSpIXz6Qpb5Xe6OCvZcAgULPT8fgrpIpT7ch7BiTkp3L6yZflkHMHnehoVsatMdKLeC4AhJ+xkcuX8kiP0UV4+qq0NRtFE3rFCV6g6CJo7OiZrcPan54wzGVYY+342L5PKh3LX47cV0lk8AZVEJ6jyCEbC9w3bGo9kt13Xb0mWF6SidvTeCFrfPLAZiMnPtYGKNCZ3FfY1CQbMxdRbVZ+8qgPspqUumgrQ3KQlDN0NA/HGpGCgTno24O+dJLehaaWOxEJoW3kZc7DgYneP/DzHxUC8Tj9VMPFYxcdz/j0xs8TLxsP+jTDzLy8TxBTJxZS8Tz/g/wsQyd+78kCQYXO6mVYHIeuj9jyrO49KI8ZWti2Jox68CCtsOz7foQdHj8WdeF8FcK8jrogS1R/K6CO02R/O6KJGbrXldlJJNNK/LzJKp5PU1nqUrCGahdF5eoHgdTcmfyO8fYrUst4f8/lk+fp/NJagM+R0KYPFfmpHfryI7dBTF76L8q3M1v4uKye+D30XRYzV5KFQFnOeGJiBC5s9Ba/2eR0+T9yFkg7VxtzDUqszQsWj8WE180hbJyWqLVZzqas6NHIQawfjKOU8N8Vj7kYBnDp9W4+tQA6zGF6pAsac+4vjSmNj2Bse3OQaOm3IcX2FaEvi34ytdpa/p8ZWZ90bo8ZVXdv+ux1derThXj69Mb7tEj6+894dFj6/M6n5Rj690Ux9TQgqq8iThTMQIZ/vxUCCbNcgpNxB6JoNKIFZo0wF0zTIJg2B+AYNloYFuPlqVAGI5vOGLBBjUqjxCCVm6UIrqW1c5lCL71/1lTEgxSYwz6+MFfZRwyHuK8PgoQQEdd+YPT5Z6lSJUsXDnenQ225KmED7pRXh1AQiX8SI8yItwZy/Cof85wuqsQuP1xJHEnxHWCRHqdCM82Bmr1NeKXWCclMGM0UB9euPkJYRkKkOp3s8C4rxl0erUXaegve86ZaPxkOutLOBxJkcezGvCoarivrCLm8f/uKluFAFj2ghbZIBqEh9Nqynr8BHmd1cTAU/bvsnxAMbJu9+4uVFhAtVk9pt+KszYHA9Qn944XQ9Kh7N2qFD7DvSz5avOm/5kEzneJnIq/2dNgIsbtvClQS98c8xPduZ/aMnkRxstChEvHfM2l8LPow6Vy/G4QYeqxTpOGoWnBajWTBfQWqmJVI/fsXiA+vTGyTSE5JV3LGzNXU611gwRk/Z7ktIm7lefDpXLoWNZ1KFqwRAe3zWPnZwPEhY7D8EaUm43wR5+NvUAxsk7SJU3kaDBHSTkxe32gDs6syrbJDxYGhmQvqLGc51slcAPHTgFAj8KtlUOgEz5gSvrqIfdbPpASmbzPNPnVZib2a0CYQr9gAXtoaszWasQLKDsqusd0DRSM7cwnIWplttxosoBCbcQ5mp2y18QEntY0ymeDtAQulQcUvTGKxMImvAT2lTo15fMujlk383mnvdU8dAVwmrftqom2FhunEM1DSQCdph1DqD2ri7lQVchLptYdf0yvXtZ3aYIW7xH4yHKXB9p1s0Jc88hujlh3papmoP08VttVc0h8rdnHUm6zwybNSWYQzcnzNsbeI7wzD2rolT6v86y/nhPc2GLd/NzPRNSzbo5ZG/M5tZ5qrD4ZahqrWwiQDWW5FDNAYkHLczMcceDmnnb93noKsTFHquun3Rkc+8p2qJ3X0+AqbkwPFqdDqC64C5vEmzgZ0cN5F0eGzCOJwMewDjv+YcGyJKg43jQEOGKdE6G8Dr3AvSWhxcE2pJqs+UhVlIZDZ0nx4rRkkGYYjklQojfPugwt0Zi3t3/GRkvck/j3NQaWEGbXOM4QG2TOQ6Yr4+ojeR83QehzzEYOdt5rlRsErjiUkojdqxpHuekNGbCHjMz0Wj+/AELhudV4ZiiquWmGU/9z021s9lFHgRujYwmUsNYuvgRoppCpNcT/XHoCHdL0CWM5sPz29nR0uQ7hkX5tVXMzMED60UPdSkhkt9nV7E8iXs1UepW/D2g2HAO2/wcc6xZtuoqSo85YdbYCZ/Sy4kxliofHg6xF8KnX6DV09WbbzfJz7XFeLxbxr7PrCkjfFt+wK5yF7P7Yk1B4ZsA5U931cWTenZVlJ3VT3UVmtL0Q2bdVeF77bbuqvB1PqtHT5jMl62qq+C2coI8X34tbYNybczsKnpgskTqrqJUgOoqa+IhMruK+g96uqraRFeJRwkzu/o1sRvPrn5IjC+orrIX7a26q+jbXs29AJNVV5nQ1Kwy5WWHMuSpImEsq11mVU2wsRRPswqBotOnE6nZLH29DlGtlYd08mTVVdUlK7sHBbb8mqucb+gqCVDGzBwXPWTRBAJTs6uKqa2erpKp0SZMpfs7dms8yNRm3VUMSQlivEhzJHrxoRo6q6erZGolHDDI41VXFVObdVc97MAyZGp0tb9iG6unq2RqdNVFBlvIriYqpjbrroIVi+quetgTo0eWtaqu6jnrRl9XDhwI4VCZx7ARkK8igntylV/vp4G8QFnEOHl6Zk8PYJy8cHI/PxdpoLMwjsUisMo8oDr+TOHzNKV7roTa60CHxQ60eDN+OMg1I5agKwbvUEuLAmYV4QE342sxeytPwaCe1GwaL9okxdV2K5Az/TTkzIN2r4F03Dl7mPY0zM65zR1qY97h2a1vwSC34Sn5uJHvUx3SM9gfa7vJ5yhqbUotqUvdm1KuOhwKwgW+cZPtQ7sM7fW6Q38TIFc9DgaA+XGsQ2XzFFC5WI2q0KwqZzPHPA36VJ+okFAIDXMQuTkKTS/K1+a2YEeasUuB7NwKdvOMNdilj3ej7/SUwh4CcyoFIZkcsjTCHpPOw2yKvLtkkWBaCre7XwxXB9n8uJuXxs8I+xxkD4qC4As4CNvnAU8T7x08FOGe7KcCjIr2xh8Mdy+1eOOjWOgQi0dFOCerevKi8uLDnT3TLfkQ1QCf4TyOt1UJCHZF02Yp0CkuoWCnuL91H0so2H0siRi0W1tZn9UAnNHnN3lxZ3g4U5lnNWfC7X7uULc+Oe/oWRb/sjZ29K6NeeAJ3wDv2rjBuzZ2jEh2xto4MBU7YjAvdYRaUOYHGKKpP+wm2MW4pwma8XMn0Ah2blV0+S8OzZy/GZlkS8Gc5Wd3J2DE0p0Jtnw8FuHlsT/+lsfQm0w6eYpumBzimSWzpNzYa52Uy5c87wEbOWs8cbO4TX9uFPj/1op6EJE9sSrd5p6ZpWo8JtTJsYsVoF+Q5/+4OIc531B4hyzCkS7FzjXlCcpRF336eyn8qZDLolil/JOnYNYF+MZaidk6jRnA8wpRTJ7adKZ75c4FHqK/C+FlmxBP8Do/Z2kg0xhinLziBWl5CY/jdJY0TzElDkOuSqPVHxZUHjgAmsX9z6A8+NSJxGRPhyDNaks6Dqbu/xUP297c9x16kNWObD94DORAg2lQarkFkPEi2Njvt2eRc9N7p8BjzUZTH+ByYgx+BGF/uytC34M4OYc6IaTW5tRBdWP4X5zdb4ET5tG61r8RnCKVFu/ixhn09FyqCj4xWDByb4KsPlVqsOTPyZg641eZaXX+IEXh1aje/H4fiL4Dm0H7eVNB2U2poOmHDaGG96zUx8zYaYzF3AwL5c7TEa7JA/qw170pSj+aDYEfv8bsjQUtQjvADkvfMC1/ztxph4Jl7k8tPwTVFhzAurRgf5ZXIYKO278BSNf/qQCzNOYeWyPFjkMpyGlpFAbQMIWjTR/Ph3vT1LfVYzfC9KbVsPe6isX8ObrSoXPJh/vYZ4+G2dTsja3OU/ejlXXdOpe24GFJUzNvVELFssGuDi8GJ6z/xtqyO6NtMc7YZL9/kycJky8mmQOXHJOcnKx9sb+774LeveH1yyDStu859iZ6DviexIj3weA5X8AUdu+HHutcsR542tmbXe1uSLmVx4MK7KoBld8eXxOlnevWIPtxqPZOnu3mDMY67gwph2oDuddwfwPM5w2tsVh/cS3Dob9Fh61xLMldWZ/7TpasgJk77wBru4dFrwbPhnfVgIRM4VBvDYJp2freGuIC7bnppm5mjaGw8kQtp49AaA2kzyMzum51X7Oyf1dBhVYzQc0+JcBYHV6FNhPY+CJ1I7qy+YdAffP9Esxp3b0QTTaFMWQd0gwlU/bABGo6eSGbvOcBTQeDuVJOh9GxJgF8ZGqHwbeSLX1X7kRlZd9AyPgF1AqMgoHUoX4L1Sw1gKhRQCYZ9g1yYU7n5DZgSWpiL7VgbfRX2xRmZRuYD/bKabqrqtPABaO0a9wyapPcFXHOfZdYY7I5eXzKnsisO6Wsun/y/u5zZnrWz+QQi4rdUugBVkO7gSmvMIBEen+phKF0AavxpFtYIj9Vgp1ZhmlXMRSbExHsitQOQl4RliezIsblhC7wy5filXoYjoNVs7iPPPXb4xh9191BmLmTMF5TRnxBKZyzH5p150nC5tCKBSlGCfLgOeg9xnH6nd3idoF/D1Bsm/9mms7HRzEWXJi19qbOyQXNYXVH6xWNR7BrIcoD1tVi7h9RcdHVnjpEq6x2qo4Exq5ha+97cmKRc1idQ93RWr+gz0UJkOPuCsyE3Ne4qow5Cfa4kjxF5p7fSoGWO6gOYt/CjM6I2e/JCU0DmEzWOgddamP2QZ6RTXMH1UXFU9JUHW2kUa51rDkvdmp1tjZH51StWy+519ucCTF+C9wJZmdkGILQcBBYgJDDgcjg9DhbHFbKUEecO9Nsh4rnjLZb4pJyQrnCpTujHY5kXpmIi/F43ms/pREr6nFO7IdlvJ0TofYMiLgv6Sh2hPq6Cn3x1BGdKme9fNhBSHfuL546LEVLnROTq7cqzV18Feqzv55ORQvrubU+sRE0sKRKlzH4uQHNQHN63uYyg9EAWnyuD5ZIow6GxMSG7r2EeeTDU/C7LXaTbgtvWz1eMXthQuY5yZzyxlXxKGjQzcLp6sz5zfIi+KemrPMLUJRbc7k+UBhyf12k25a5BxgX8DYAvYP/SIeNf5OOAFffRb6rz0J1unnmCyRsvQ37ip5UKlRywhs6VYTzIODmkVelqHTQH0o3LTT715cw+VpCmNTYt5pOz/toMdi/hogJ3F6fOWEElSi93MriW1FvnfKsEjpEye+j2AyIEt6KW/NnFntCV6lBlPy+HlFsgyy1L4Ac7+zFen7tTBmbV5uY6dUm3vAAxj2hTbzBLJ4EFMsDtrwEfnJb76tvGkoj5pcdGK/fKZV+T9iKmVLmKGbsLT+6246DeL8Gy0IUnQLL4uKPMzS+8o9ttYnvsx7yEV9581foQmeiG2sCyZTuZTSB5PGGNFVuKzecO9wPM85tRGgMFibfZQPRx9PmLwmWsO26aDtr1qs8trsF9eXy77ATebziZeI6HparTROSbCjTeOJmh/0uL9CltJIf7O3TNWdLUfo9zt6e9Jx7qn4LWz593stHPLQq1HMVWIOCrJAPJsEjKiUB44ei6KuYqQDxvFk0/jaT0FIh33nIzgsbKAjxkeC8S///K1iQcxufG6UBPj+gW2Epnot2n39CAcz90/SuKN33GeDK2x6RnIlpSZAX1efP+fupBWrErwEsy664q2Sgig+gJDn9N4O9hh3uqgBqDzg3yl3XVhBXRDi0izWUcvD3zZLdpCju/xaE8VvUwxrsKqoApfPYcCZt9mRS2VGQB8WvBZ+uCiIW5aHgpdhxyMaNxmsjYAiU8YcKcKvmcdRVFgooAeq689ZZ8NuM+RjRGjApSmW1Yx9aF/3vzF1qTj3TJkqj6VupoEGv+dBuei3gPqEz6GOA4Je4ST/sBazAPE5zBs9H6ME7JCM37mfyCojV+StAlgn92HkRy9HO0/O5dX8WukqpU9wYsK/PBT0jz+H790yOMrfyOd4p7dc7dAo5AdSK4v2hqCE/SyHojyRdnbmLdnYZwDleITn9KUDqEIaKe8DxMSEEJ1DRjzNB1RpTwcnHYc2IGtM7MAXc134kz3dqfPAWk4ei8kgII1GxGEAFmCWi8gqAStynqvAc7xv4BCK7YwUWO8eXUJTLTUTb5z+EKZnw0rsA3ASU7us8pOhO/E5jZZOnoBdIHiXKM68QSW76pWI2/vw6FK6fuT/32Se/8p7UW8WlaMZ9w5/j7yI05TW0NQDMLZp9VBhgOkwCQV9FUYEXILhLJOi8Laiuiso3eC7lXsa2S0Jp+BKS9uBsavg1TmBhqHEGGn77TWHsLR3OjrNTNc5CJzhu9yGFOPbHIxfyuw1qerosRNLTlfqiF1e4N3ulFIRKyitNOColgWepK32Y8itDPOi3c3u01PW6KgWUWvLaKoDebnOwc7LaO5k8HQpv3EhouYn0OBw3cgOB+pzuAepTJTCLyqyLTdafGzwAn7CCpyZPcdPYaNi6KP28qQCEvsGTSrKT7c13IBiTIB3DShZHd3a0S+MAhIO1bqyrCdHTcSf9JMEQbu4LpO+5BFsnYxAvwki5b+tturqPAcenc7plk0xpHOXcWPDrjWt2dLD5xhNoVvwBuyHsueOYfT9AGbWNKYLZ1/FpoNKY+3y3j5QHB6xw94+R4pUVCUShMGRSGPQm+ag0xsoWXwso0EcndFwFq8oKXU88RwUVCgRPZBbDrizMTfGHs5ZiVtN9wEXBFjgQa8iDpmDaIhnc/WyfiWk3gt4lP0DF9afbtut6POSVi3e0fHlH0rWe+7UR49HQ15/D9k+evcbG2mCu3P80TLcg73HNyKZxl+GcYSUuWJV7JU2xsPw44H1hMuuEIMvhDUzX9fW8PfpDc4gl+pvc70BfVFb0gPr27cKLUEdj+gNs2BloYw8H8JCC7oXpk8+RDANA3I+OkTTA48atTlbSqi4yvXB3pT1vgNU4gaplOXY/k9K8BBM+WlGfA/yM3cIRN1AFXeXMZOW0D98mZ9jVOKLaTgMrJaNCkfGVagi0uLyAjX+MQaPHYvr7Ecj1smlhssUOo2tdr0zeZqNzTwYXGsuI0po8wu/1K5pkImBXLDt5AePxYwA7/hXGCAiCGO2RjwdtbtEKoca96UV6HqGYNiTie2ipOy/2RA/72MYaaW0NpJ3MFYDDjJbHc+i5CbOOnitLYsdZWJ7HFhETWSfmtO+s8mwH6Jl4bSqo40Q9+AofMEQv4jiPTFIO9ezhZaEOT2fa2M3uPG9gQ6Fj/yAtFpIfR5A+SxWPIv/ilw8j09urppMrm28Ks+g5IMJKnOC8iORM28W5kqJmn9UzeTAHmnFWXea8aMaZdkfPFc4+dDxi+ep08ILzNrdteVMmixxdaDN49AF9gQK2wS64Qxs/5HgW1iR8iqCvQOm0LVB3A+ygQOExndHCcCgfgVwwrnIr3v9FcNXFRaMwl285MPcrFqOh/oDa4AO6A2XNgOKb2bYcW+Y2d/8SaKH2vXsWFoW9U7YvNz94F6vk7lJsAkpE6MeV2SwWmgcp4zUq8h63yO7Y9yrAgxcsprk5N62gkbXISlUxanyjim4MvXlDI4DeuFgGCkox4nMPqpKw0Rf6QQpmVgZXoNCPMf3u06+5JE+PslbbiNcHVmkUpetuqmolYNvrmkjCn3xDwqHlm4qYwOdI4EELi3YlNUazuoOk0DLdBKh2ms12JyVhuxVrXVRTV6EnQlIaWbnNYdRAUxD3KUfRo1vokTxdHYrDxV51lODnathso8Md7Y42j+N/DvxbMG4BjEhntE4zM3dtvSygBqxKlU+8w7VCbdG82BgrccvT3TwAn96kyryuwiZ1UTaJEFS4skuOMHUS1CZwjbei3g5WAstne+UVvBC/ByuQXEqPr52j2tEYTQTLFs7iRtl3GFfbmT9QoPjGzoA1f4XEPLMFGkmlNpBGx+pcRQXXn1lNnwDe48p6EcOfQX3s9pBJJK2Sm1SoGBLRdZaamU5f4blk9EpYmfxXn8mr41gdOpef2VJRNeLI1wCznfYUKDK3OSt5CjT98hHI2+s8T9zEyakQcdWeQoi2uiwKpUDQrVlaXmMI5BMPu+lUD+Dpjzh5wApTNc5WNcDV31QNQsm0aCOk2V4Lren9qdVACmiS8ii3XEoHQ9v148bfsv0/SNGWm1SbQ/pJ0WVEaV6PHrHIwViIpbZ0TPDrMEaKfzUswtIwjS5zM2J/anUgD51ctWB1Y0qP69veVj3AGRtWPSDY1d8Za0tyLEjv4bDaLTCq0cAkkUT3C+HgYNFZaNooIPg1bYSpHwCXs7+vs7oT/aSYRsfOu8ejQO0EaOjnqPdOrRnsSHIkLXAkodaz4xw8MwydJNJRDDVac0xnbUkLYvIfWeS7hxXruYeljz7S8o4skhfEWfLTjPeabHb2wA4hWi4QysnA3hshS24Ohip/flhhTMROV1FBdCMpf+NGJyAVzdROV8BfdHy7OXgLSs6+yx30k+jdtec6YUxLu2ECHh2NSuvRWf4ClEHRuGV7Rx5krIig3cWcota0LOvf4ZXsDrW5E+OcoT0sBW15F7iZtCXJ72+7KV+5/6aUJb9sT5eXee2I/D2I0NWUFcnQQaru45lZ1X016BaFaYTON9Y5QZBgsG61alD8S6yDyikvmz5TyEt5iIe87JDcsz3bQbjRoWNV55Hzd0WQJ1lWFMYKlntw/BCQfPsXEyDBbFCvf87AUmfuA8MllcffpSkuy07uLuWvK3dgKnJX4/xZiIUmi9CSiF05ibx7G2tfC54JBhyH6tglGyr4TXprnXirm5QHPoZsuxAKubrpQivI40pfoh91uHJ//948sDBHK6uFAEVClZZbZDdkhIvrkuWTGEjtYpCXxh46D9zGQiRcMEyDqnDnwrcDbcnCvDChdg0CeVf9T1sM9wchNWP0DDqv5vByOcvLe6cSdZ3yUZHKuh0RwONPti38KKGJy5/olcA9AN86S0GvSnRw+om6QKFmkP2nF2KNOfMOJlML0cosc+VFiNDv663JG/e/8EMk4yNRpz1ottrKM7nB6ddBe3n/udkIRUJnugGrXjqh8spr9CTNunsTQ8l7vIG/38cnd5pLnP8J3bvuBGPAnJHHREutXsiT1P8zbjyFYWzeBB2GvSTT6T969hHY1MRT8rPb6RVQbjivnLppzhQPwToauG44Qmegq4Ttg9FujeHFqHPZkKTBGN/Sn3bjSvcBPoOOAy/6WxUuHsD2IDVqyvHU9KCoVxsJ5ahwGBaDijt2Y7x8fwNFuQJF+hZDa32gPEe22P0EfWPcu216WzdvRzdR7ejq3WC1EaxBxbwEnUVl9uwGP94hnqM+w52hzjZkMSUlpdFcjtcHs385COWminUYVoCcrRhKP971yv42BDOBCp5/dC7dtqkO8M6UL2096xEQy6cRpqB1NijmQ4PI3AAMZv2OfhAwmpFAC4T6mwo5O/VjFijyTjbEBCnbYVwkF//bRzG6bnqU3+ZFHmcnKPe3foWynnUNXUsbhGmeQQ+CXI7k9baXlYMk1fOh7WmSwjiRcVN4Q39IM8+Veno4oX8bvSe27bkj8iyV2hZje1ON+vU80NhLn3068eRUb6a7Kt28g5b9bTBA+yxNEunqSkc+52wqrH89Cy6IpNzvFHPf1dgJkcj3Alww3cScDezGNbAZvbzTBsPGLvxTU3YXeoM/b0eRBJqQt3kFyKQu46tb+rW6avKB4DwO4v207ANjSc3+XroOYGg2ad2WWcqR/iNUFvD7SG4S1H5/ie2/uJro8h4xnX81W5q3mjUKc1idic7L1P3O8tDz/hys2eciMH/Sy+PzMq8e2Wpj+M/wHZXA0hj0lCu8JXgspJ9V3RX0XBXMe2EiX5z3JQqOQM07i1ge1LaXWsw6YatU4iMw6ZzFpS0D2XaUFOUvTEbuyANjeMNyZyCIzg0221IosFbubRbjgh5yAH05TUUvgn5tf3CjoIqlElizz2Q0AHtFlMuGmlyf73IUo/bY+M13HXmwPp+YuEmN014CZv95M4wlUYVrV+EvxrNKYBrOXQg2IyrH+bDpfihCDYLoyLQey0CCG09nQnPJaWOrEfCkgO4DHSL3G7W4PrFOpnrXySUFrpNL8tZJ3rLkOqnLexgg3zr9XWnvOm3nOr03Ta3TPf+6TkfQWMvmqvZfkwBeAdDRKwAmawHwH03Rv0i94H8r9Sp4pV4NTsKFXql3wSv1hqN98aBFmI7461yspacrKitP+TNINwD50/S/IH92kjgDKH/Ga4L9Rf6AsKLw9mxNbMifRK/86akHBfKnMwfqxpPy55weUMifMexQRZXwxJLmjGxis+c96OCiv4sC+IwYF7PA86QD4rB0+qk3H6KiwnX+KB39OH8Pj9vQY3cirVNbCvIOiki2/Ce5tzzG5KAXk+hwd6SbFy9uJXPr8vZa0MGX110yOoMZLJSl8k5ca0yankMwSULnPASj8ugyDCagzKavQwllbXqkJAWaR0ouy5OSl7ljHDJ6BibpjYVg/jN7wiEbeap3jd7MRwf0eVIFgx3c3+ZMiUPvNtHk2MveKYBP5ajjjRaN2M92AwdGwGb5+p0PIBK6Txwdw4sqV3klKoCC7xqdSIrybYJbfIcigC4FD9ZQCarLuywvgjOD2kB1drfta0U12RNH29Jj7KDWe3sgSMo0XsyjBU78olEJrBLzvEQRPg1UclIra4xq18IqIENNSoyrba3V89nUBQVAhEDMbvHVnj68xVQ2k1e4U+isOpX3nut8hZJ8LUu+uQtxpIzcdBah5tup/9bpR0nj5k4/NHyAc/ys6AGMk1eQKi+Yzin9lxa15CXanB0tWOc7PNmuh1DdKmi2dhndtsyB7AIu6xx/wmiozgmMrvJZHojBoi9D485otok3xcuBimrrWkPGynuUCswpb62IZ+mqqIzOKu6UsfnasUIZftzWWG/vy3l7/25e7/k2VwG9P+ftfYV8cQX1voy39+96ez8or/fcOdJYhTdweCH9rz29r1xA7zd6e9/UkQcZ+9fer/T2vrG3968rFncl2GoG5PQ31QiIg1IQk5zsl4TJlwTD0x6XZI/T5+J8Z+8pdeYTzW2mNO7YVOFO8KkN+/OHbEtAqeTdvPm4//WrCl7R2RHbQ2d6AhxQ2Zmldr4iDh2L6o7qTGjiKW+ooc4OVL52EK3SVvVTSudXGKr8Kmu+kEoghizjsG4x/b0y8/gJrT89q/Wnp7YeKz0sFhHnzlQUjIGq745NdsaSeNKY9RVPSFYN2SFzZ/ZcJXOXV5/EF2gQwaMTmekMcCiod/6lc/EeSM6ymZihlUZNlbnPvrGSx4M8HL7IbdDgZvUhQL7uI0WFymlQrI11y4da+LGCXrjNoMCU4EHVnZZYHMvuLqGq2S+N72fw0NPJ84bgi4G6QbUvrRCwxuWEwjZMchKjv3phRsy1/+iYm24uyGszPDjZmWmzxzljC3YYfUL25/NHjY1L94tJVwRzZobZ3dHpcXa1ekQyV6os+CXDSG98ani6xR3dxObZCnLn92r1ZDflbzG8R8EOsHZnQnrBKMbBQE6OifFLTlc/zlh3rC0uyd3GbW9zot8gp8kdaQ4+KY1t9Koqmv0HXeMiu0v1nwoJH77qZfpuCQHEbvTFWQTHMC7lWmCN6FQOI9bxl7cVfBrDe34rY6FQJZeNZ05uavNqiz9dzDIOzXbo7ycBJ/2hY55MWfTrt1OpS+EdvhIVMNJ7tvF5j51+GVb1AzXvGo9j92xbx1yxADWPe6t7j9Udtnmre0/jLt3UIC2RJaBwrKjL0ELadCu3g91qtmxvqxXAj436ozY+NlS5I42YmsG2OjR/X9t1CrZf02r/U76i3NQaNuH1vyaJ/SvflsbGlRPxJY3iL02SuXd3zsLg/8I3NOtTSc4DIGd1RMoTDKr0x0BlUikO9eOJeCJTXkp1Bp+s2lMJU8xP4oSvk6G50tgRMNFWFzOrWrqPlM0fvGuDMKAP4hOpBlNzJVKT7VjX7THp9uR0Oir25dnMrVUO0L8SHf5vzL6LQbyKGfFb4z+A19H3l9DrJw42497ExgSN+Lk33O6IccQ5HK7YJEcy/mGitkO6aBS3l5nGMtMUujVc+HY2JvwaKI+XeDX7Fq/R39j8BSrtXRgq0ewub9q4xVtvh/CjwgRxE8arH3SvVt7W2uX6BuWQcrm+bCoRgeAOoQ5ry1I/L067vswPu5j3aQ3kdSYwTl7cOxCmzppJwh1qoR9zrM3dn7pROu+HZ/EM6eYWLJ133qiMiViyG1D8CFbCnQF8pYSaUxbvkF4p+ZkjDzJW+PM+KXOKEOh/KA1lIfjqCtYIW7NYm3PcRbY1tzr7x6A5XgiYQ9fkmbwgMIz+yW94fZaf1zcHeIkg3Nnfz50CwRjjTKFzaCyxTYhLhtjJCaWjtDPB4UiKcfDp0GS+vZvo5Nu7Q55ex/tX9KcN/Qbr1hk+81GoK9a6U+8e4axJpqKawlOFsrw3XGHNVQ+w8xBDxUUzNdp/DONglV/kjZLfXygF/Zp2Hx3RbiVNQSkeNV8IgPlSnHcCL3auhQHj1b7TLBrI0Mnb8x2EXR2M3Uyn1nXMWRPDyNCFAAzodUqFW3wI6/dbnbg1MXORhhBsseNULLQbPi3FnMKILAkZx3u9RlXe56qOcTbsbRCq0dGqCBDnTLQ82YEr7EBp1Qt2foynU8lM/StBImIsf0Ig2ItABrJ9e1yjLypntdNdEtWUAlytyCAeMWVN091HzmOaJCi9m2QKYY1jSbp7mpTcduD+nXqwIKw4tOd7fEOiGK9NiTdb7LYEp2PcXaE5+GdxZibBDnDjn19MDEKOJCycmHehSXGYc/N4rl7tlQlggmOw6yDkQAR6hYg+woBAo3Du8Mp4Z6zDwScPPd8TwDnRynU0mmaQnWZQCq2iZJhf6kwjmWaZikqhbZZMG4nXNjzxh1goisUPRahV2FNPlK6M8eGuUPpLxvKhhhAeQj2kPA8J2AHicVM9kJL9Pq1oFbrzAOuThXL/jg9YVjV2x4fXd+88aM7C5XS5PHDNE3rIbTEUdqiCVjfbY0FWdl4XRgMl8zd1n0dWIQE/68JArja0crSHEG8IhQRM0oWRGytqYMXfCE56PokiC6te1ba618fZHM5EZ7Q7FOLZcPPFrTZJ74OyBq835XbBwmPUh/qdW4iXpfZCQDxK95y3y+wXzntcqB7y9Uc3VwM3t1TUOAG0olf1sNmepIfdoEXn/tKMBRcpvwtPZara3EArm3qHjSaweX9um+aO4iOfoGV/7nUs6BKlQ7L/KnVrkJvYUk4gmOjZSvWACayHmwexjYj8FLb8NtsDYrJRN42D9t14+K9ubBkzxT0UjGGafU/1oJXmNCJfWMXqvgoLHZl9IsD6Zt7sEPTl9wkdp5EXRmYjul3w7gNVPkFfBz6/lQdaesFkKzsUTZDADoEBF3TmXT5eNRFGe7ryxjbOGwggj7q3a+TR3ljlM0EcyrFlrB2WZWlE866nB0B+O8EOs0YegJsBfBTNaGBiQbq3X2jFykhFrjdEHk1NZKMdVPPWvEdiidSCzvfyIarwVoOjsUWZ6Xldzxyv2UYhChINZHv99JgrHBQfaKK6h3VS2E4k0acobDM0xyhENduogcqGJa4QxTC20YgqvsRIu9RwezhGv3rbnwu3B9vhKmQOdiaY/s42OcLPOgVs0h7xxtUpcOPWBYNYDPHHLFiJxUK8lAWc52a1C5fybF8+Nfv7PruUD3j99+JFLJ+3+bab4Xejocx1hU2jfcAd1LJlIY8DeIe0Ane6ReSi+tac0DDWZGKd7Vh7DtvZHM7UBnwNpeFslmnP0pmsx21lnftZ+xjeR2pAhwNaLg+2jyYefFnnbN9fvEasM1TKzts32pRuSQE8CpLzW97u/JbfBKIzET+2fSO1v2NUQ1WENx3gA5UyWlXi0OkAowlGqXSmfEhv1Zq8Hcz6mc6XM9E1K3ff/bgDrAA+w10Jlnzx0sX9fWe1nAi7n/r1xORFh+fQjcwb760mItg12bne9p/UBDuljaXAFHvBTThRwK/AFF5QK6BrzjbONpYCU9IL7jPqD3YlmOoFuBKSbFEBUP9MsKz45wLoVpKcnG4350/PH06HjelOhGxP9PPuWsSaogPsTnV18xFYxk7fawXUpzdOpvB1t2SGkr2fBcR5y4Y/0ULeR5zdsz2Swu2RaDsswVDuj7higVqyui54ZUJtnv4eITjKzzrhOW3yP3n8+NSPqq8fNwycUDChTSQ5E21xzpQkP3doDAKhfw6k43e9M9RGQsEepjKKD5R1pvi5YpNtOYk5sa5EV6zFjjod6Y4kKb+aJKDMjJ8kgKw72hFjdiY4+RD8P3tcwwM8D2r8Jc5bNlw/9FofBtsSvsCw/UN6yOfyrx3I1fMRGn6al+BgZ+Tur0tQh07sfIby1Bb6PT+azjvb0ymVuQrn0FI0Kl1E6AFWfvFaDZS5DKVQXOCBXnEIZXH1NYR4L1105vuD34ZBnnzL0zsArqMl56t0T42SXnpyPlfry9A8cmn75jg/Yo28u+3H9W/E58SBN5gr86nMU1sq8B7UG98wFqPmywetJJ/z9A3gylWROPJkSwxuAHB9ZJ4bMV8IEFcHErMbWzR6HhyJGZOkfolHXOe+HL12jZJ80GHeL6ibbqC557CG+rqg4IgqfP2CXrI+I+hlWYV+OlXanFOYDfIkqWYVerlnr2r0dGVET6NM9BQ5iB6vUHOvXGHWhS/8dL7BS0MacwUqLWGZBE/njNKo1qjAhwGsG+ju3Bmhp7HQPZr9OnHgO0ynNoURs8/UaE5X+IKwvLwgLmKpybmf4CF7Li1ZOW8/B2VG3vCAHBwy6+Mx5JC2VThyNEsvJ+EG6YHUbMCBBHowkHPHr0JoFqzDR+pZed7B0Ly36qD1MWc+d+QqnR3kw0+m8+8TLCHg08+fHIHduLnWS34qzL9l0FsnCcughHBp9PjqpEWFmbSIYDE/68LmbXuUT2NbeMUpe08/ncT6w2EGhroG2z4PDCgjgoqJMP5xmi5GOeOWb3nfkaY40zZzlPl982+WapZxlkN+EX7Z1u/9/f1n+n/i/4X/3QB0ogafCaio3ighUJ/eOJnKR1qOM3Tc+1lAnLdseKH8+5xLLgj1vCv3AvK/79re+75r9D9+37W1931Xs5Xvu/78P77vGmQkY3j4zlkQJaIkWwXN4YP9+dSYXlRG46nKxStkmdCrnNBbrIXyuZDLb/hGTuKWZezMLrruV+A7bAcW3kZzz9A3o/8CdIG3ztzcxxI9+JQ/3waQ7nhqD+d7fS/l1XIQTZfeWIlPPkOS0ZnnfPeHn0ZnmrwNw9rojjnUZFq851gyiu7EUbzzF8hd9dwEqMqBE0fz0GApQpsXszOPPdq78nmbOJ7DEGjPd8axFxGFeJhwrTowo9Xrm8K/ZsC/cuLLP9JRm4ZP+Pt9eSWqoRS1Pr/P7fdmo6l5WG7A+l0OpbXqqSJQgn7kTRInJeNrGOfsE+/ywTV6th+m0Z+9l16T5+fBxHbRtLywFIhkfI4pfPHjKliWJkASXX4aC1c6eflaA+S7Qvf/tPM/gRIH6SNwklbxFt7muM7LhT9+sxn9/akJmKwU/xBBD57xu3i/MhwLQ+2tVXlPyMobSMorS/AEL+BjSC8DFo+oQU32eM4t5Iwdz4fbIJmiZsGgzOWlaxGwpw9m4+Wq9AkeAQ351m+YlyXG0gm0tGuOtdA/ffTqH792hRqLfTGRSQeA4fKq4IbKA7kBzJNxeuE/BpcqD2KWofqFcRTj37OYTyH7lno0I/NHDELgB2+B6Dy9DRo0Ur2Rhk6l0L9xNHj2Um8spSkTN6EK0vPIyDe5I0S9WKvEVLiV/q0BdeW8uM3eOE9mFiPvoxJPdSkT+ecTuHN7jm9oslmNQBBEmEYqkA/1Zv74ESnZbu0g3u6a733GobIG6kqhfsvhySuF+q6hN04/171Xv/5QhZPzHk3Htp9+xovAr2Hum7l7aJ4Mce2ftI8MkTXV+k+ffuDZ2QNuCrG8zILpizpB++wm9IJmS3LzwIHmQgXZMf/0z6MUdAbEfnxEgaOEZZ7E1EBLIsYp6aRBr7yEx3E6Sy9PMdSoNSzFdEpz+hPX/knDUgyr4v7EtV6tq9A/dUb4x9Qu9E9780+pw17/M4r/0xFkjepgBTb6k0csvKLOTaKqvElalY+xh40+jGWgWX0wXaO1fEqm0bpakJrT6iGW+stvUS7kTN7/pyMWz5aLPg2hN8zfH7O05JNZ29/mqevcOB8VJOCbaPkPUw4d9xba828OU3TXHN5uHWHeRQQ9sf60PkXwGy91Dn9Jyt1bq+pIVPpuHvKHQx0aM2/zf0J8ggfxqtMPov8j+br2dnNfBqMJorxl8h0CqTK8zeJB/FUv4nW8iMupL71D8G4T7mueBZJjVr7NiJ18geLEJCwM1bGYBVAQmf7VDelFKw+0uur56RBmuU75jBnfJpjIWnPq8Y+FuXtjcX20YBldRbsrYP33DZrcXzMbOeLLZBatiBX10Atcl82P+A7BLXoF0dm4UKneEcBCDzm+eELPaxbmDDrX+BZF31yJMKwSLYVcsTn451conwj+k6h+LL61NPeKdK+o9m5/mLzbHzlqjvSFvh6/qAFmzuVzmAXE46MKzwPw1ZAl9P1FKtS0e8O5lX8vEYJQ8NrTvUfrsBwtgzJwwPgAgJv423mNJIun9DvoeJarbkYFHbkCdaYCL2CH7PsWygIvXYfHr6XKlLkV0HSpqMdHyUTlRPIlXNP3WFX20rOuMl/CPcOLYo1Dmbtlc2gGIv7KZaKNmnrxqfOP+iaHF/p/AH+bdUQAAHicY2BgYGQAgpOd+YYg+pzRxtkwGgBDGQaMAAB4nGNgZGBg4ANiCQYQYGJgBMIwIGYB8xgAB/wAiQAAAHicY2BmYmKcwMDKwMHow5jGwMDgDqW/MkgytDAwMDGwMjPAgQDDgwUwdkCaawqDg7L0BwbGB/8fMOgxMTAoNDAwMMIVKwAhIwAxtwwgAAAAeJzlkc8uQ0EUxr/LJSnSXk3rT6sZentnGlVR3fgXKsECodpUxMqiC8LzSCQWnsE72NoJc9PFeQNCENykpnNvquIRfCdnTr45ye9MzgDohp9jMNQJ41o5Q3vTOFe1ghJ6EAXspH1k1+0TRzoej/BBPsRTnPFFfsavREhYIi5GRELUc7FclkyK0jAlKUWM0pSjIs3RAq1SmapUo8MnNJutaQHzWDG/eLjNnOenmhnuYDoExYxTQjMnKEN5zVyhdc088JkNr3HfuAXcfIvvLslHN+zGAHkpL6SpalEW5OzDzV2p1Weeik/2MT7K3tmb8q9BvLBnwDL8nWht6txu+42gruFHy7+cf/PXFTADCxH0IYRpTGFSbbwfA9hDGTvYRReqqMHEPmxkkIYDDoGsml7BlvqhXnQ863/qGwRdZdYAAAB4nGNgZGBgAOKcbi+zeH6brwzcTAwgcM5o42wE/f8BkwNYnIMBTAEAFkcJ63icY2BkYGBi+P+AQY/JgYHhHwOQBIqgAFsAXiED0QAAeJxjYoAAJkqwAxJmYHBAkpPBot4Bj1kgOQUkvgKaPDqfFKzApABhI4EEIAS6mkGBgQAAAAYaA9UAAFAAAFcAAHicjY4xCsIwFIb/aluQOotjBkEQUppKoXQtODp6g1Lq0ECVbl7DG3gMD+AxPIB38E98g4ODCcn73suXlwCY44oAbgRIsBSecG6Ep1jjIhzSuQtH5KdwjCSIaAbhjJWFv+V4whsr4Sn20MIhnZtwRH4Ix+QXalj0GNFgwIm7xpERte3HZjg1+sjEVxzsvHz2cUBLXSFHioyx4vrd7HNmUDAvuXL6Blu2s/15Z4e2UXmaqUp9PcrMFLrUeWYo/vPJg5x23nXvuX/hQKGzvTJp9lefN9BfQHsAAHicY2BmwAsAAH0ABA==) format('woff'),url(data:application/x-font-ttf;charset=utf-8;base64,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aTI1RkMHdW5pMjVGQgd1bmlFMDE1B3VuaUUwMTYHdW5pRTAxNwd1bmlFMDFBB3VuaUUwMUIHdW5pRTAxRAd1bmkyMzFCB3VuaUUwMjEHdW5pRTAyMgd1bmlFMDI0B3VuaUUwMjUHdW5pRTAyNgd1bmlFMDI3B3VuaUUwMjgHdW5pRTAyOQd1bmlFMDJBB3VuaUUwMkIHdW5pRTAyRgd1bmlFMDJEB3VuaUUwMkUHdW5pRTAzMAd1bmlFMDMxB3VuaUUwMzIHdW5pRTAzMwd1bmkyNzY0DGludnNtaWxlZmFjZQd1bmkyNjFECXNtaWxlZmFjZQd1bmlFMDM4B3VuaTI2MzkHdW5pRTAzQQd1bmkyMzY5B3VuaTIzNjgHdW5pMjM2NAd1bmkyNjFGB3VuaUUwM0YHdW5pRTA0MAd1bmlFMDQxB3VuaTIzNjAHdW5pRTAxRgd1bmkyNkEwB3VuaUUwNDUHdW5pRTA0Ngd1bmlFMDQ3B3VuaUUwNDgHdW5pRTA0OQd1bmlFMDRBB3VuaUUwNEIHdW5pRTA0Qwd1bmlFMDREB3VuaUUwNEUHdW5pRTA0Rgd1bmlFMDUwB3VuaUUwNTMHdW5pRTA1NQd1bmkyNzE1B3VuaTI3MTgHdW5pRTA1OAd1bmlFMDVBB3VuaTI3MUEHdW5pMjYxMQd1bmkyQjI3B3VuaTJCMjgHdW5pMkIyNgd1bmkyQjI1B3VuaUUwNTkHdW5pRTAwMQd1bmkyQjE0B3VuaUUwMDIHdW5pRTAwNAAAAAH//wACAAEAAAAOAAAAGAAAAAAAAgABAAMAWAABAAQAAAACAAAAAAABAAAAAMmJbzEAAAAAzjKxmwAAAADOMrGb) format('truetype');font-weight:400;font-style:normal}[data-icon]:before{font-family:Converse-js;content:attr(data-icon);speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}.icon-home,.icon-pencil,.icon-camera,.icon-camera-2,.icon-play,.icon-music,.icon-headphones,.icon-phone,.icon-phone-hang-up,.icon-address-book,.icon-notebook,.icon-envelop,.icon-pushpin,.icon-online,.icon-away,.icon-bubbles,.icon-bubbles-2,.icon-bubbles-3,.icon-user,.icon-users,.icon-quotes-left,.icon-spinner,.icon-search,.icon-cogs,.icon-wrench,.icon-unlocked,.icon-lock,.icon-lock-2,.icon-key,.icon-key-2,.icon-zoom-out,.icon-zoom-in,.icon-cog,.icon-remove,.icon-remove-2,.icon-eye,.icon-eye-blocked,.icon-attachment,.icon-globe,.icon-heart,.icon-happy,.icon-thumbs-up,.icon-smiley,.icon-tongue,.icon-sad,.icon-wink,.icon-wondering,.icon-confused,.icon-shocked,.icon-evil,.icon-angry,.icon-cool,.icon-grin,.icon-info,.icon-notification,.icon-warning,.icon-spell-check,.icon-volume-high,.icon-volume-medium,.icon-volume-low,.icon-volume-mute,.icon-volume-mute-2,.icon-volume-decrease,.icon-volume-increase,.icon-bold,.icon-underline,.icon-italic,.icon-strikethrough,.icon-new-tab,.icon-youtube,.icon-close,.icon-blocked,.icon-cancel-circle,.icon-minus,.icon-plus,.icon-checkbox-checked,.icon-checkbox-unchecked,.icon-checkbox-partial,.icon-radio-checked,.icon-radio-unchecked,.icon-room-info,.icon-newspaper,.icon-image,.icon-offline,.icon-dnd{font-family:Converse-js;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}.icon-home:before{content:"\e000"}.icon-pencil:before{content:"\270e"}.icon-camera:before{content:"\e003"}.icon-camera-2:before{content:"\2616"}.icon-play:before{content:"\25d9"}.icon-music:before{content:"\266b"}.icon-headphones:before{content:"\266c"}.icon-phone:before{content:"\260f"}.icon-phone-hang-up:before{content:"\260e"}.icon-address-book:before{content:"\270f"}.icon-notebook:before{content:"\2710"}.icon-envelop:before{content:"\2709"}.icon-pushpin:before{content:"\e012"}.icon-online:before{content:"\25fc"}.icon-away:before{content:"\25fb"}.icon-bubbles:before{content:"\e015"}.icon-bubbles-2:before{content:"\e016"}.icon-bubbles-3:before{content:"\e017"}.icon-user:before{content:"\e01a"}.icon-users:before{content:"\e01b"}.icon-quotes-left:before{content:"\e01d"}.icon-spinner:before{content:"\231b"}.icon-search:before{content:"\e021"}.icon-cogs:before{content:"\e022"}.icon-wrench:before{content:"\e024"}.icon-unlocked:before{content:"\e025"}.icon-lock:before{content:"\e026"}.icon-lock-2:before{content:"\e027"}.icon-key:before{content:"\e028"}.icon-key-2:before{content:"\e029"}.icon-zoom-out:before{content:"\e02a"}.icon-zoom-in:before{content:"\e02b"}.icon-cog:before{content:"\e02f"}.icon-remove:before{content:"\e02d"}.icon-remove-2:before{content:"\e02e"}.icon-eye:before{content:"\e030"}.icon-eye-blocked:before{content:"\e031"}.icon-attachment:before{content:"\e032"}.icon-globe:before{content:"\e033"}.icon-heart:before{content:"\2764"}.icon-happy:before{content:"\263b"}.icon-thumbs-up:before{content:"\261d"}.icon-smiley:before{content:"\263a"}.icon-tongue:before{content:"\e038"}.icon-sad:before{content:"\2639"}.icon-wink:before{content:"\e03a"}.icon-wondering:before{content:"\2369"}.icon-confused:before{content:"\2368"}.icon-shocked:before{content:"\2364"}.icon-evil:before{content:"\261f"}.icon-angry:before{content:"\e03f"}.icon-cool:before{content:"\e040"}.icon-grin:before{content:"\e041"}.icon-info:before{content:"\2360"}.icon-notification:before{content:"\e01f"}.icon-warning:before{content:"\26a0"}.icon-spell-check:before{content:"\e045"}.icon-volume-high:before{content:"\e046"}.icon-volume-medium:before{content:"\e047"}.icon-volume-low:before{content:"\e048"}.icon-volume-mute:before{content:"\e049"}.icon-volume-mute-2:before{content:"\e04a"}.icon-volume-decrease:before{content:"\e04b"}.icon-volume-increase:before{content:"\e04c"}.icon-bold:before{content:"\e04d"}.icon-underline:before{content:"\e04e"}.icon-italic:before{content:"\e04f"}.icon-strikethrough:before{content:"\e050"}.icon-new-tab:before{content:"\e053"}.icon-youtube:before{content:"\e055"}.icon-close:before{content:"\2715"}.icon-blocked:before{content:"\2718"}.icon-cancel-circle:before{content:"\e058"}.icon-minus:before{content:"\e05a"}.icon-plus:before{content:"\271a"}.icon-checkbox-checked:before{content:"\2611"}.icon-checkbox-unchecked:before{content:"\2b27"}.icon-checkbox-partial:before{content:"\2b28"}.icon-radio-checked:before{content:"\2b26"}.icon-radio-unchecked:before{content:"\2b25"}.icon-room-info:before{content:"\e059"}.icon-newspaper:before{content:"\e001"}.icon-image:before{content:"\2b14"}.icon-offline:before{content:"\e002"}.icon-dnd:before{content:"\e004"}#collective-xmpp-chat-data,#collective-xmpp-chat-data input{color:#4f4f4f}.hidden{display:none}.locked{padding-right:22px}span.spinner{background:url(images/spinner.gif) no-repeat center;width:22px;height:22px;padding:0 2px;display:block}span.spinner.centered{position:absolute;top:30%;left:50%;margin:0 0 0 -25%}span.spinner.hor_centered{left:40%;position:absolute}#chatpanel{z-index:99;position:fixed;bottom:0;right:0;height:332px;width:auto}#toggle-controlbox{position:fixed;font-size:70%;bottom:0;right:0;border-top-right-radius:4px;border-top-left-radius:4px;background:#e3e2e2;border:1px solid #c3c3c3;border-bottom:0;padding:1px 3px;margin-right:15px;height:16px}#connecting-to-chat{background:url(images/spinner.gif) no-repeat left;padding-left:1.4em}.chat-head{color:#fff;margin:0;font-size:100%;border-top-right-radius:4px;border-top-left-radius:4px;padding:3px 0 0 3px}.chat-head-chatbox{background-color:#4f6a72;background-color:rgba(79,106,114,1)}.chat-head-chatroom{background-color:#2D617A}.chatroom .chat-body{height:274px;background-color:#fff;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top:0}.chatroom .chat-area{float:left;width:200px}.chatroom .chat{overflow:auto;height:400px}.chatroom .participants{float:left;overflow:auto;border-left:1px solid #AAA;max-width:98px;height:274px;background-color:#fff;overflow:auto;border-left:1px solid #AAA;border-bottom-right-radius:4px}.participants ul.participant-list li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;font-size:12px;padding:.5em 0 0 .5em;cursor:default}ul.participant-list li.moderator{color:#FE0007}.chatroom .participant-list{list-style:none}.chat-blink{background-color:#176679;border-right:1px solid #176679;border-left:1px solid #176679}.chat-content{padding:.3em;font-size:13px;color:#4f4f4f;height:200px;width:192px;overflow-y:auto;border:0;background-color:#fff;line-height:1.3em}.chat-textarea{border:0;height:50px}.chat-textarea-chatbox-selected{border:1px solid #578308;margin:0}.chat-textarea-chatroom-selected{border:2px solid #2D617A;margin:0}.chatroom .chat-content{height:200px}.chat-info{color:#666}.chat-message-room,.chat-message-them,.chat-message-me{font-weight:700;white-space:nowrap;max-width:100px;text-overflow:ellipsis;overflow:hidden;display:inline-block;float:left;padding-right:3px}.chat-message-content{word-wrap:break-word}.chat-message-them{color:#F62817}.chat-message-me{color:#436976}.chat-message-room{color:#4B7003}.chat-event,.chat-date,.chat-info{color:gray}li.chat-info{padding-left:10px}.chat-date{display:inline-block;padding-top:10px}div#settings,div#chatrooms,div#login-dialog{height:274px}p.not-implemented{margin-top:3em;margin-left:.3em;color:gray}div.delayed .chat-message-them{color:#FB5D50}div.delayed .chat-message-me{color:#7EABBB}input.error{border:1px solid red}.conn-feedback.error{color:red}.chat-message-error{color:#76797C;font-size:90%;font-weight:400}.chat-head .avatar{float:left;margin-right:6px}div.chat-title{color:#fff;font-weight:700;line-height:15px;display:block;margin-top:2px;margin-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-shadow:rgba(0,0,0,.51) 0 -1px 0;height:1em}.chat-head-chatbox,.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{font-size:80%;font-style:italic;height:1.3em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.activated{display:block!important}a.subscribe-to-user{padding-left:2em;font-weight:700}dl.add-converse-contact{margin:0 0 0 .5em}.fancy-dropdown{border:1px solid #ddd;height:22px}.fancy-dropdown a.choose-xmpp-status{width:155px}.fancy-dropdown a.choose-xmpp-status,.fancy-dropdown a.toggle-xmpp-contact-form{text-shadow:0 1px 0 rgba(255,255,255,1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline}.fancy-dropdown a.toggle-xmpp-contact-form span{float:left}.choose-xmpp-status span{padding-right:5px;padding-left:5px;float:left}#fancy-xmpp-status-select a.change-xmpp-status-message{float:right;clear:right;height:22px;padding:5px 5px 0 0;color:#4f4f4f}ul#found-users{padding:10px 0 5px 5px;border:0}form.search-xmpp-contact{margin:0;padding-left:5px;padding:0 0 5px 5px}form.search-xmpp-contact input{width:8em}.oc-chat-head{margin:0;color:#FFF;border-top-right-radius:4px;border-top-left-radius:4px;height:35px;clear:right;background-color:#5390C8;padding:3px 0 0}a.configure-chatroom-button,a.close-chatbox-button{font-size:10px;padding:3px 3px 2px;margin-right:3px;cursor:pointer;float:right;-moz-box-shadow:inset 0 1px 0 0 #fff;-webkit-box-shadow:inset 0 1px 0 0 #fff;box-shadow:inset 0 1px 0 0 #fff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0.05,#fff),color-stop(1,#f6f6f6));background:-moz-linear-gradient(center top,#fff 5%,#f6f6f6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6');-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px;border:1px solid #888;display:inline-block;color:#666!important;text-decoration:none;text-shadow:1px 1px 0 #fff}a.configure-chatroom-button:active,a.close-chatbox-button:active{position:relative;top:1px}.oc-chat-content dt{margin:0;padding-top:.5em}.chatroom-form-container{color:#666;padding:5px;height:262px;overflow-y:auto;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.chatroom-form{background:#fff;font-size:12px;padding:10px 5px}.chat-body p{font-size:14px;color:#666;padding:5px;margin:0}.chatroom-form legend{font-size:14px;font-weight:700;margin-bottom:5px}.chatroom-form label{font-weight:700;display:block;clear:both}.chatroom-form label input,.chatroom-form label select{float:right}#converse-roster dd.odd{background-color:#DCEAC5}#converse-roster dd.current-xmpp-contact{clear:both}#converse-roster dd.current-xmpp-contact span{font-size:16px;float:left;color:#4f4f4f}#converse-roster dd.requesting-xmpp-contact button{margin-left:.5em}#converse-roster dd a,#converse-roster dd span{text-shadow:0 1px 0 rgba(250,250,250,1);display:inline-block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#converse-roster dd span{padding:2px 5px 0 0}#converse-roster{height:200px;overflow-y:auto;overflow-x:hidden;width:100%;margin:0;position:relative;top:0;border:0;margin-top:.5em}#available-chatrooms dd{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;width:165px}#available-chatrooms dt,#converse-roster dt{font-weight:400;font-size:13px;color:#666;border:0;padding:.3em 0 0 .5em;text-shadow:0 1px 0 rgba(250,250,250,1)}#converse-roster dt{display:none}dd.available-chatroom,#converse-roster dd{font-weight:700;border:0;display:block;padding:0 0 0 .5em;color:#666;text-shadow:0 1px 0 rgba(250,250,250,1)}.room-info{font-size:11px;font-style:normal;font-weight:400}li.room-info{display:block;margin-left:5px}div.room-info{clear:left}p.room-info{margin:0;padding:0;display:block;white-space:normal}a.room-info{width:22px;height:22px;float:right;display:none;clear:right}a.open-room{float:left;white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden}dd.available-chatroom:hover a.room-info{display:inline-block;margin-top:3px;font-size:15px}#converse-roster dd a.remove-xmpp-contact{line-height:21px;float:right;width:22px;margin:0;display:none;color:#4f4f4f}#converse-roster dd:hover a.remove-xmpp-contact{display:inline-block}#converse-roster a.open-chat{line-height:21px;width:85%}#converse-roster dd:hover a.open-chat{width:70%}.chatbox,.chatroom{box-shadow:1px 1px 5px 1px rgba(0,0,0,.4);display:none;float:right;margin-right:15px;z-index:20;border-radius:4px}.chatbox{width:200px}.chatroom{width:300px}.oc-chat-content{height:274px;padding:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.oc-chat-content dd{margin-left:0;margin-bottom:0;padding:1em}.oc-chat-content dd.odd{background-color:#DCEAC5}div#controlbox-panes{background:-moz-linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background:-ms-linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background:-o-linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,rgba(255,255,255,1)),color-stop(100%,rgba(240,240,240,1)));background:-webkit-linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background:linear-gradient(top,rgba(255,255,255,1) 0,rgba(240,240,240,1) 100%);background-color:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px;width:200px}form#converse-login{background:#fff;padding:2em 0 .3em .5em}form#converse-login input{display:block;width:90%}form#converse-login .login-submit{margin-top:1em;width:auto}form.set-xmpp-status{background:0;padding:.5em 0 .5em .5em}form.add-chatroom{background:0;padding:3px}form.add-chatroom input[type=text]{width:95%;margin:3px}form.add-chatroom input[type=button],form.add-chatroom input[type=submit]{width:48%}select#select-xmpp-status{float:right;margin-right:.5em}.chat-head #controlbox-tabs{text-align:center;display:inline;overflow:hidden;font-size:12px;list-style-type:none}.chat-head #controlbox-tabs li{float:left;list-style:none;padding-left:0;text-shadow:#fff 0 1px 0;width:40%}ul#controlbox-tabs li a{display:block;font-size:12px;height:34px;line-height:34px;margin:0;text-align:center;text-decoration:none;border-top-right-radius:5px;border-top-left-radius:5px;color:#666;text-shadow:0 1px 0 rgba(250,250,250,1)}.chat-head #controlbox-tabs li a:hover{color:#000}.chat-head #controlbox-tabs li a{background-color:#fff;box-shadow:inset 0 4px 12px rgba(0,0,0,.3);border-bottom:1px solid #CCC}ul#controlbox-tabs a.current,ul#controlbox-tabs a.current:hover{box-shadow:none;border-bottom:0;height:35px;cursor:default;color:#666}div#users,div#chatrooms,div#login-dialog,div#settings{border:0;font-size:14px;background-color:#fff;border-bottom-right-radius:4px;border-bottom-left-radius:4px;width:100%}div#chatrooms{overflow-y:auto}form.sendXMPPMessage{background:#fff;border:0;border-top:1px solid #BBB;padding:0;margin:0;position:relative;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;border-top-left-radius:0;border-top-right-radius:0;height:65px;width:200px}.chatroom form.sendXMPPMessage{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;height:65px}.chat-textarea{box-sizing:border-box;-moz-box-sizing:border-box;border:0;width:100%;padding:3px;border-radius:4px;resize:none;height:65px}ul.chat-toolbar{font-size:14px;margin:0;padding:0 5px 0 0;float:right;display:inline-block;height:20px}ul.chat-toolbar li{display:inline-block;list-style:none;padding:0 3px}ul.chat-toolbar li:hover{cursor:pointer;color:#272727}form#set-custom-xmpp-status{float:left;padding:0}.chat-textarea-chatbox-selected{border:1px solid #578308;margin:0}.chat-textarea-chatroom-selected{border:2px solid #2D617A;margin:0}#set-custom-xmpp-status button{padding:1px 2px 1px 1px}#controlbox div.xmpp-status{display:inline}.chatbox dl.dropdown{margin-right:.5em;margin-bottom:0;background-color:#f0f0f0}.chatbox .dropdown dd,.dropdown dt,.dropdown ul{margin:0;padding:0}.chatbox .dropdown dd{position:relative}input.custom-xmpp-status{width:138px}form.add-xmpp-contact{background:0;padding:5px}form.add-xmpp-contact input{width:120px}.chatbox .dropdown dt a span{cursor:pointer;display:block;padding:2px 7px 0 5px;color:#4f4f4f}.chatbox .dropdown dd ul{padding:5px 0;list-style:none;position:absolute;left:0;top:0;border:1px solid #ddd;border-top:0;width:99%;z-index:21;background-color:#f0f0f0}.chatbox .dropdown li{list-style:none;padding-left:0}.set-xmpp-status .dropdown dd ul{z-index:22}.chatbox .dropdown a{height:22px;display:inline-block;padding-top:2px}.chatbox .dropdown dd ul a:hover{background-color:#bed6e5}.xmpp-status-menu li a{width:100%}.xmpp-status-menu li a span{padding:0 5px;color:#4f4f4f}
\ No newline at end of file
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: cc4e774ae6c30c8f75f9540598d47e5a
config: 4e01f0b4332cc0ad20271406d2d00beb
tags: fbb0d17656682115ca4d033fb2f83ba1
......@@ -553,6 +553,14 @@ To minify the Javascript and CSS, run the following command:
grunt minify
.. Note ::
Since release 0.6.0, I'm using `almond <https://github.com/jrburke/almond>`_
instead of `require.js <http://requirejs.org>`_. The
`grunt-contrib-requirejs <https://github.com/gruntjs/grunt-contrib-requirejs>`_
plugin however doesn't support *almond*. I therefore now build it manually
(the old way again), like this: ``r.js -o build.js``. CSS can be minimized
separately via ``grunt cssmin``.
Javascript will be bundled and minified via `require.js`_'s optimization tool.
You can `read more about require.js's optimizer here`_.
......
......@@ -9,7 +9,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Index &mdash; Converse.js 0.5.3 documentation</title>
<title>Index &mdash; Converse.js 0.6.0 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.5.3',
VERSION: '0.6.0',
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.5.3 documentation" href="index.html" />
<link rel="top" title="Converse.js 0.6.0 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.5.3 documentation</a> &raquo;</li>
<li><a href="index.html">Converse.js 0.6.0 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.5.3 documentation</a> &raquo;</li>
<li><a href="index.html">Converse.js 0.6.0 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.5.3 documentation</title>
<title>Quickstart (to get a demo up and running) &mdash; Converse.js 0.6.0 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.5.3',
VERSION: '0.6.0',
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.5.3 documentation" href="#" />
<link rel="top" title="Converse.js 0.6.0 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.5.3 documentation</a> &raquo;</li>
<li><a href="#">Converse.js 0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
<section id="main_content" class="inner">
......@@ -65,60 +65,60 @@
<div class="contents local topic" id="table-of-contents">
<p class="topic-title first">Table of Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#quickstart-to-get-a-demo-up-and-running" id="id2">Quickstart (to get a demo up and running)</a></li>
<li><a class="reference internal" href="#introduction" id="id3">Introduction</a></li>
<li><a class="reference internal" href="#what-you-will-need" id="id4">What you will need</a><ul>
<li><a class="reference internal" href="#an-xmpp-jabber-server" id="id5">An XMPP/Jabber server</a></li>
<li><a class="reference internal" href="#connection-manager" id="id6">Connection Manager</a><ul>
<li><a class="reference internal" href="#overcoming-cross-domain-request-restrictions" id="id7">Overcoming cross-domain request restrictions</a></li>
<li><a class="reference internal" href="#quickstart-to-get-a-demo-up-and-running" id="id3">Quickstart (to get a demo up and running)</a></li>
<li><a class="reference internal" href="#introduction" id="id4">Introduction</a></li>
<li><a class="reference internal" href="#what-you-will-need" id="id5">What you will need</a><ul>
<li><a class="reference internal" href="#an-xmpp-jabber-server" id="id6">An XMPP/Jabber server</a></li>
<li><a class="reference internal" href="#connection-manager" id="id7">Connection Manager</a><ul>
<li><a class="reference internal" href="#overcoming-cross-domain-request-restrictions" id="id8">Overcoming cross-domain request restrictions</a></li>
</ul>
</li>
<li><a class="reference internal" href="#server-side-authentication" id="id8">Server-side authentication</a><ul>
<li><a class="reference internal" href="#pre-binding-and-single-session-support" id="id9">Pre-binding and Single Session Support</a></li>
<li><a class="reference internal" href="#server-side-authentication" id="id9">Server-side authentication</a><ul>
<li><a class="reference internal" href="#pre-binding-and-single-session-support" id="id10">Pre-binding and Single Session Support</a></li>
</ul>
</li>
<li><a class="reference internal" href="#facebook-integration" id="id10">Facebook integration</a></li>
<li><a class="reference internal" href="#facebook-integration" id="id11">Facebook integration</a></li>
</ul>
</li>
<li><a class="reference internal" href="#development" id="id11">Development</a><ul>
<li><a class="reference internal" href="#install-node-js-and-development-dependencies" id="id12">Install Node.js and development dependencies</a></li>
<li><a class="reference internal" href="#install-3rd-party-dependencies" id="id13">Install 3rd party dependencies</a></li>
<li><a class="reference internal" href="#with-amd-and-require-js-recommended" id="id14">With AMD and require.js (recommended)</a></li>
<li><a class="reference internal" href="#without-amd-and-require-js" id="id15">Without AMD and require.js</a></li>
<li><a class="reference internal" href="#before-submitting-a-pull-request" id="id16">Before submitting a pull request</a><ul>
<li><a class="reference internal" href="#add-tests-for-your-bugfix-or-feature" id="id17">Add tests for your bugfix or feature</a></li>
<li><a class="reference internal" href="#check-that-the-tests-pass" id="id18">Check that the tests pass</a></li>
<li><a class="reference internal" href="#check-your-code-for-errors-or-bad-habits-by-running-jshint" id="id19">Check your code for errors or bad habits by running JSHint</a></li>
<li><a class="reference internal" href="#development" id="id12">Development</a><ul>
<li><a class="reference internal" href="#install-node-js-and-development-dependencies" id="id13">Install Node.js and development dependencies</a></li>
<li><a class="reference internal" href="#install-3rd-party-dependencies" id="id14">Install 3rd party dependencies</a></li>
<li><a class="reference internal" href="#with-amd-and-require-js-recommended" id="id15">With AMD and require.js (recommended)</a></li>
<li><a class="reference internal" href="#without-amd-and-require-js" id="id16">Without AMD and require.js</a></li>
<li><a class="reference internal" href="#before-submitting-a-pull-request" id="id17">Before submitting a pull request</a><ul>
<li><a class="reference internal" href="#add-tests-for-your-bugfix-or-feature" id="id18">Add tests for your bugfix or feature</a></li>
<li><a class="reference internal" href="#check-that-the-tests-pass" id="id19">Check that the tests pass</a></li>
<li><a class="reference internal" href="#check-your-code-for-errors-or-bad-habits-by-running-jshint" id="id20">Check your code for errors or bad habits by running JSHint</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#configuration" id="id20">Configuration</a><ul>
<li><a class="reference internal" href="#configuration-variables" id="id21">Configuration variables</a><ul>
<li><a class="reference internal" href="#animate" id="id22">animate</a></li>
<li><a class="reference internal" href="#auto-list-rooms" id="id23">auto_list_rooms</a></li>
<li><a class="reference internal" href="#auto-subscribe" id="id24">auto_subscribe</a></li>
<li><a class="reference internal" href="#bosh-service-url" id="id25">bosh_service_url</a></li>
<li><a class="reference internal" href="#debug" id="id26">debug</a></li>
<li><a class="reference internal" href="#fullname" id="id27">fullname</a></li>
<li><a class="reference internal" href="#hide-muc-server" id="id28">hide_muc_server</a></li>
<li><a class="reference internal" href="#i18n" id="id29">i18n</a></li>
<li><a class="reference internal" href="#prebind" id="id30">prebind</a></li>
<li><a class="reference internal" href="#show-controlbox-by-default" id="id31">show_controlbox_by_default</a></li>
<li><a class="reference internal" href="#xhr-user-search" id="id32">xhr_user_search</a></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>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#minification" id="id33">Minification</a><ul>
<li><a class="reference internal" href="#minifying-javascript-and-css" id="id34">Minifying Javascript and CSS</a></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>
</ul>
</li>
<li><a class="reference internal" href="#translations" id="id35">Translations</a></li>
<li><a class="reference internal" href="#translations" id="id36">Translations</a></li>
</ul>
</div>
<div class="section" id="quickstart-to-get-a-demo-up-and-running">
<h1><a class="toc-backref" href="#id2">Quickstart (to get a demo up and running)</a><a class="headerlink" href="#quickstart-to-get-a-demo-up-and-running" title="Permalink to this headline"></a></h1>
<h1><a class="toc-backref" href="#id3">Quickstart (to get a demo up and running)</a><a class="headerlink" href="#quickstart-to-get-a-demo-up-and-running" title="Permalink to this headline"></a></h1>
<p>When you download a specific release of <em>Converse.js</em> there will be two minified files inside the zip file.</p>
<ul class="simple">
<li>converse.min.js</li>
......@@ -172,7 +172,7 @@ the minified Javascript file. Read <a class="reference internal" href="#configur
that.</p>
</div>
<div class="section" id="introduction">
<h1><a class="toc-backref" href="#id3">Introduction</a><a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h1>
<h1><a class="toc-backref" href="#id4">Introduction</a><a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h1>
<p>Even though you can connect to public XMPP servers on the <a class="reference external" href="http://conversejs.org">conversejs.org</a>
website, <em>Converse.js</em> is not really meant to be a &#8220;Software-as-a-service&#8221; (SaaS)
webchat.</p>
......@@ -191,9 +191,9 @@ code.</p>
requirements.</p>
</div>
<div class="section" id="what-you-will-need">
<h1><a class="toc-backref" href="#id4">What you will need</a><a class="headerlink" href="#what-you-will-need" title="Permalink to this headline"></a></h1>
<h1><a class="toc-backref" href="#id5">What you will need</a><a class="headerlink" href="#what-you-will-need" title="Permalink to this headline"></a></h1>
<div class="section" id="an-xmpp-jabber-server">
<h2><a class="toc-backref" href="#id5">An XMPP/Jabber server</a><a class="headerlink" href="#an-xmpp-jabber-server" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id6">An XMPP/Jabber server</a><a class="headerlink" href="#an-xmpp-jabber-server" title="Permalink to this headline"></a></h2>
<p><em>Converse.js</em> implements <a class="reference external" href="https://en.wikipedia.org/wiki/Xmpp">XMPP</a> as its messaging protocol, and therefore needs
to connect to an XMPP/Jabber server (Jabber is really just a synonym for XMPP).</p>
<p>You can connect to public XMPP servers like <tt class="docutils literal"><span class="pre">jabber.org</span></tt> but if you want to
......@@ -202,7 +202,7 @@ have <a class="reference internal" href="#session-support">Session Support</a> y
servers that you can set up yourself on <a class="reference external" href="http://xmpp.org/xmpp-software/servers/">xmpp.org</a>.</p>
</div>
<div class="section" id="connection-manager">
<h2><a class="toc-backref" href="#id6">Connection Manager</a><a class="headerlink" href="#connection-manager" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id7">Connection Manager</a><a class="headerlink" href="#connection-manager" title="Permalink to this headline"></a></h2>
<p>Your website and <em>Converse.js</em> use <a class="reference external" href="https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a> as protocol to communicate with
the webserver. HTTP connections are stateless and usually shortlived.</p>
<p><a class="reference external" href="https://en.wikipedia.org/wiki/Xmpp">XMPP</a> on the other hand, is the protocol that enables instant messaging, and
......@@ -217,7 +217,7 @@ includes a connection manager (but you have to enable it).</p>
This connection manager is for testing purposes only, please don&#8217;t use it in
production.</p>
<div class="section" id="overcoming-cross-domain-request-restrictions">
<h3><a class="toc-backref" href="#id7">Overcoming cross-domain request restrictions</a><a class="headerlink" href="#overcoming-cross-domain-request-restrictions" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id8">Overcoming cross-domain request restrictions</a><a class="headerlink" href="#overcoming-cross-domain-request-restrictions" title="Permalink to this headline"></a></h3>
<p>The domain of the <em>Converse.js</em> demo is <em>conversejs.org</em>, but the domain of the connection manager is <em>opkode.im</em>.
HTTP requests are made by <em>Converse.js</em> to the connection manager via XmlHttpRequests (XHR).
Until recently, it was not possible to make such requests to a different domain
......@@ -235,9 +235,9 @@ website. This will remove the need for any cross-domain XHR support.</p>
</div>
</div>
<div class="section" id="server-side-authentication">
<h2><a class="toc-backref" href="#id8">Server-side authentication</a><a class="headerlink" href="#server-side-authentication" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id9">Server-side authentication</a><a class="headerlink" href="#server-side-authentication" title="Permalink to this headline"></a></h2>
<div class="section" id="pre-binding-and-single-session-support">
<span id="session-support"></span><h3><a class="toc-backref" href="#id9">Pre-binding and Single Session Support</a><a class="headerlink" href="#pre-binding-and-single-session-support" title="Permalink to this headline"></a></h3>
<span id="session-support"></span><h3><a class="toc-backref" href="#id10">Pre-binding and Single Session Support</a><a class="headerlink" href="#pre-binding-and-single-session-support" title="Permalink to this headline"></a></h3>
<p>It&#8217;s possible to enable single-site login, whereby users already
authenticated in your website will also automatically be logged in on the chat server,
but this will require custom code on your server.</p>
......@@ -273,7 +273,7 @@ BOSH connection manager.</p>
</div>
</div>
<div class="section" id="facebook-integration">
<h2><a class="toc-backref" href="#id10">Facebook integration</a><a class="headerlink" href="#facebook-integration" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id11">Facebook integration</a><a class="headerlink" href="#facebook-integration" title="Permalink to this headline"></a></h2>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">It should be possible to integrate Converse.js with Facebook chat, and
......@@ -316,13 +316,13 @@ Until then, people will have to do this themselves.</p>
</div>
</div>
<div class="section" id="development">
<h1><a class="toc-backref" href="#id11">Development</a><a class="headerlink" href="#development" title="Permalink to this headline"></a></h1>
<h1><a class="toc-backref" href="#id12">Development</a><a class="headerlink" href="#development" title="Permalink to this headline"></a></h1>
<p>If you want to work with the non-minified Javascript and CSS files you&#8217;ll soon
notice that there are references to a missing <em>components</em> folder. Please
follow the instructions below to create this folder and fetch Converse&#8217;s
3rd-party dependencies.</p>
<div class="section" id="install-node-js-and-development-dependencies">
<h2><a class="toc-backref" href="#id12">Install Node.js and development dependencies</a><a class="headerlink" href="#install-node-js-and-development-dependencies" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id13">Install Node.js and development dependencies</a><a class="headerlink" href="#install-node-js-and-development-dependencies" title="Permalink to this headline"></a></h2>
<p>We use development tools (<a class="reference external" href="http://gruntjs.com">Grunt</a> and <a class="reference external" href="http://bower.io">Bower</a>)
which depend on Node.js and npm (the Node package manager).</p>
<p>If you don&#8217;t have Node.js installed, you can download and install the latest
......@@ -336,7 +336,7 @@ curious to know what these are, take a look at whats under the <em>devDependenci
<cite>package.json &lt;https://github.com/jcbrand/converse.js/blob/master/package.json&gt;</cite>.</p>
</div>
<div class="section" id="install-3rd-party-dependencies">
<h2><a class="toc-backref" href="#id13">Install 3rd party dependencies</a><a class="headerlink" href="#install-3rd-party-dependencies" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id14">Install 3rd party dependencies</a><a class="headerlink" href="#install-3rd-party-dependencies" title="Permalink to this headline"></a></h2>
<p>After running <tt class="docutils literal"><span class="pre">npm</span> <span class="pre">install</span></tt>, you will now have Grunt and Bower installed.</p>
<p>We use Bower to manage Converse&#8217;s front-end dependencies (e.g. Javascript that
should get loaded in the browser).</p>
......@@ -348,7 +348,7 @@ dependencies (like backbone.js, strophe.js etc.) and then put them in the
<em>components</em> folder.</p>
</div>
<div class="section" id="with-amd-and-require-js-recommended">
<h2><a class="toc-backref" href="#id14">With AMD and require.js (recommended)</a><a class="headerlink" href="#with-amd-and-require-js-recommended" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id15">With AMD and require.js (recommended)</a><a class="headerlink" href="#with-amd-and-require-js-recommended" title="Permalink to this headline"></a></h2>
<p>Converse.js uses <a class="reference external" href="http://requirejs.org">require.js</a> to asynchronously load dependencies.</p>
<p>If you want to develop or customize converse.js, you&#8217;ll want to load the
non-minified javascript files.</p>
......@@ -361,7 +361,7 @@ attribute on the <em>script</em> tag), which will in turn cause converse.js to b
parsed.</p>
</div>
<div class="section" id="without-amd-and-require-js">
<h2><a class="toc-backref" href="#id15">Without AMD and require.js</a><a class="headerlink" href="#without-amd-and-require-js" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id16">Without AMD and require.js</a><a class="headerlink" href="#without-amd-and-require-js" title="Permalink to this headline"></a></h2>
<p>Converse.js can also be used without require.js. If you for some reason prefer
to use it this way, please refer to
<a class="reference external" href="https://github.com/jcbrand/converse.js/blob/master/non_amd.html">non_amd.html</a>
......@@ -369,9 +369,9 @@ for an example of how and in what order all the Javascript files that converse.j
depends on need to be loaded.</p>
</div>
<div class="section" id="before-submitting-a-pull-request">
<h2><a class="toc-backref" href="#id16">Before submitting a pull request</a><a class="headerlink" href="#before-submitting-a-pull-request" title="Permalink to this headline"></a></h2>
<h2><a class="toc-backref" href="#id17">Before submitting a pull request</a><a class="headerlink" href="#before-submitting-a-pull-request" title="Permalink to this headline"></a></h2>
<div class="section" id="add-tests-for-your-bugfix-or-feature">
<h3><a class="toc-backref" href="#id17">Add tests for your bugfix or feature</a><a class="headerlink" href="#add-tests-for-your-bugfix-or-feature" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id18">Add tests for your bugfix or feature</a><a class="headerlink" href="#add-tests-for-your-bugfix-or-feature" title="Permalink to this headline"></a></h3>
<p>Add a test for any bug fixed or feature added. We use Jasmine
for testing.</p>
<p>Take a look at <tt class="docutils literal"><span class="pre">tests.html</span></tt> and <tt class="docutils literal"><span class="pre">spec/MainSpec.js</span></tt> to see how
......@@ -380,7 +380,7 @@ the tests are implemented.</p>
<a class="reference external" href="http://opkode.com/contact">contact me</a> and I&#8217;ll be happy to help.</p>
</div>
<div class="section" id="check-that-the-tests-pass">
<h3><a class="toc-backref" href="#id18">Check that the tests pass</a><a class="headerlink" href="#check-that-the-tests-pass" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id19">Check that the tests pass</a><a class="headerlink" href="#check-that-the-tests-pass" title="Permalink to this headline"></a></h3>
<p>Check that the Jasmine tests complete sucessfully. Open
<a class="reference external" href="https://github.com/jcbrand/converse.js/blob/master/tests.html">tests.html</a>
in your browser, and the tests will run automatically.</p>
......@@ -389,7 +389,7 @@ in your browser, and the tests will run automatically.</p>
</div>
</div>
<div class="section" id="check-your-code-for-errors-or-bad-habits-by-running-jshint">
<h3><a class="toc-backref" href="#id19">Check your code for errors or bad habits by running JSHint</a><a class="headerlink" href="#check-your-code-for-errors-or-bad-habits-by-running-jshint" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id20">Check your code for errors or bad habits by running JSHint</a><a class="headerlink" href="#check-your-code-for-errors-or-bad-habits-by-running-jshint" title="Permalink to this headline"></a></h3>
<p><a class="reference external" href="http://jshint.com">JSHint</a> will do a static analysis of your code and hightlight potential errors
and/or bad habits.</p>
<div class="highlight-python"><pre>grunt jshint</pre>
......@@ -401,7 +401,7 @@ and/or bad habits.</p>
</div>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id20">Configuration</a><a class="headerlink" href="#configuration" title="Permalink to this headline"></a></h1>
<h1><a class="toc-backref" href="#id21">Configuration</a><a class="headerlink" href="#configuration" title="Permalink to this headline"></a></h1>
<p>The included minified JS and CSS files can be used for demoing or testing, but
you&#8217;ll want to configure <em>Converse.js</em> to suit your needs before you deploy it
on your website.</p>
......@@ -415,14 +415,14 @@ all the available configuration settings.</p>
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="#id21">Configuration variables</a><a class="headerlink" href="#configuration-variables" title="Permalink to this headline"></a></h2>
<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="animate">
<h3><a class="toc-backref" href="#id22">animate</a><a class="headerlink" href="#animate" title="Permalink to this headline"></a></h3>
<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>
<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="#id23">auto_list_rooms</a><a class="headerlink" href="#auto-list-rooms" title="Permalink to this headline"></a></h3>
<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>
<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>
......@@ -432,39 +432,39 @@ 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="#id24">auto_subscribe</a><a class="headerlink" href="#auto-subscribe" title="Permalink to this headline"></a></h3>
<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>
<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="#id25">bosh_service_url</a><a class="headerlink" href="#bosh-service-url" title="Permalink to this headline"></a></h3>
<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>
<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="#id26">debug</a><a class="headerlink" href="#debug" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id27">debug</a><a class="headerlink" href="#debug" title="Permalink to this headline"></a></h3>
<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="#id27">fullname</a><a class="headerlink" href="#fullname" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id28">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="#id28">hide_muc_server</a><a class="headerlink" href="#hide-muc-server" title="Permalink to this headline"></a></h3>
<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>
<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="#id29">i18n</a><a class="headerlink" href="#i18n" title="Permalink to this headline"></a></h3>
<h3><a class="toc-backref" href="#id30">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="#id30">prebind</a><a class="headerlink" href="#prebind" title="Permalink to this headline"></a></h3>
<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>
<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>
......@@ -477,7 +477,7 @@ 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="#id31">show_controlbox_by_default</a><a class="headerlink" href="#show-controlbox-by-default" title="Permalink to this headline"></a></h3>
<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>
<p>The &#8220;controlbox&#8221; refers to the special chatbox containing your contacts roster,
status widget, chatrooms and other controls.</p>
......@@ -487,7 +487,7 @@ the page with class <em>toggle-online-users</em>.</p>
page load.</p>
</div>
<div class="section" id="xhr-user-search">
<h3><a class="toc-backref" href="#id32">xhr_user_search</a><a class="headerlink" href="#xhr-user-search" title="Permalink to this headline"></a></h3>
<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>
<p>There are two ways to add users.</p>
<ul class="simple">
......@@ -500,9 +500,9 @@ be used.</p>
</div>
</div>
<div class="section" id="minification">
<h1><a class="toc-backref" href="#id33">Minification</a><a class="headerlink" href="#minification" title="Permalink to this headline"></a></h1>
<h1><a class="toc-backref" href="#id34">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="#id34">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="#id35">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>
......@@ -512,13 +512,22 @@ production site.</p>
<p>To minify the Javascript and CSS, run the following command:</p>
<div class="highlight-python"><pre>grunt minify</pre>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Since release 0.6.0, I&#8217;m using <a class="reference external" href="https://github.com/jrburke/almond">almond</a>
instead of <a class="reference external" href="http://requirejs.org">require.js</a>. The
<a class="reference external" href="https://github.com/gruntjs/grunt-contrib-requirejs">grunt-contrib-requirejs</a>
plugin however doesn&#8217;t support <em>almond</em>. I therefore now build it manually
(the old way again), like this: <tt class="docutils literal"><span class="pre">r.js</span> <span class="pre">-o</span> <span class="pre">build.js</span></tt>. CSS can be minimized
separately via <tt class="docutils literal"><span class="pre">grunt</span> <span class="pre">cssmin</span></tt>.</p>
</div>
<p>Javascript will be bundled and minified via <a class="reference external" href="http://requirejs.org">require.js</a>&#8216;s optimization tool.
You can <a class="reference external" href="http://requirejs.org/docs/optimization.html">read more about require.js&#8217;s optimizer here</a>.</p>
<p>CSS is minified via <a class="reference external" href="https://github.com/gruntjs/grunt-contrib-cssmin">cssmin</a>.</p>
</div>
</div>
<div class="section" id="translations">
<h1><a class="toc-backref" href="#id35">Translations</a><a class="headerlink" href="#translations" title="Permalink to this headline"></a></h1>
<h1><a class="toc-backref" href="#id36">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.
......@@ -604,7 +613,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.5.3 documentation</a> &raquo;</li>
<li><a href="#">Converse.js 0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
</div>
......
# Sphinx inventory version 2
# Project: Converse.js
# Version: 0.5.3
# Version: 0.6.0
# 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.5.3 documentation</title>
<title>Search &mdash; Converse.js 0.6.0 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.5.3',
VERSION: '0.6.0',
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.5.3 documentation" href="index.html" />
<link rel="top" title="Converse.js 0.6.0 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.5.3 documentation</a> &raquo;</li>
<li><a href="index.html">Converse.js 0.6.0 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.5.3 documentation</a> &raquo;</li>
<li><a href="index.html">Converse.js 0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
</div>
......
Search.setIndex({objects:{},terms:{all:0,code:0,partial:0,queri:0,webchat:0,follow:0,middl:0,depend:0,sensit:0,punjab:0,present:0,under:0,spec:0,string:0,fals:0,account:0,facebook:0,jack:0,veri:0,tri:0,chatpanel:0,list:0,sane:0,div:0,pleas:0,prevent: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,current:0,"public":0,version:0,"new":0,net:0,method:0,widget:0,themselv:0,gener:0,here:0,bodi:0,let:0,strong:0,modifi:0,valu:0,box:0,great:0,convers: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,should: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,front:0,now:0,introduct:0,edit:0,authent:0,token:0,ejabberd:0,each:0,debug:0,side:0,mean:0,domain:0,individu:0,realli:0,legwork:0,connect:0,happen:0,extract:0,special:0,variabl:0,shown:0,"3rd":0,space:0,miss: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,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,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,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,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,session:0,fine:0,find:0,help:0,onli:0,exactli:0,locat:0,just:0,configur:0,apach:0,than: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,close:0,page:0,statu:0,said:0,kei:0,state:0,between:0,experi:0,jasmin:0,hide_muc_serv:0,attribut:0,appreci:0,extend:0,screen: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,pot: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,hightlight:0,chat:0,helper:0,demo:0,auto_subscrib:0,non:0,rid:0,conn:0,develop:0,open: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,tip:0,jshint:0,languag:0,web:0,xmlhttprequest:0,had:0,add:0,other:0,non_amd:0,input:0,match: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,server:0,collect:0,benefit:0,either:0,output:0,manag:0,facebookconnect: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,want:0,when:0,detail:0,gettext:0,field:0,valid:0,rememb:0,test:0,you:0,nice:0,node:0,intend:0,stai:0,lang:0,requirej:0,directori: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,webchat:0,follow:0,middl:0,depend:0,sensit:0,punjab:0,those:0,under:0,spec:0,string:0,fals: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,current:0,version:0,"new":0,net:0,"public":0,widget:0,themselv:0,gener:0,here:0,bodi:0,let:0,strong:0,modifi:0,sinc:0,valu:0,box:0,great:0,convers:0,reason:0,fetch:0,implement:0,sorri:0,via:0,although:0,extra:0,apach:0,prefer:0,ask:0,href:0,succesfulli: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,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,unfortun:0,occup:0,end:0,goal:0,turn:0,snippet:0,how:0,sid:0,instead:0,css:0,updat:0,npm:0,regener:0,product:0,resourc:0,haven:0,after:0,usabl:0,befor:0,underscor:0,data:0,demonstr:0,man:0,github:0,practic:0,bind:0,show_controlbox_by_default:0,django:0,caus:0,inform:0,media:0,mechan:0,order:0,feedback:0,chatbox:0,xmpp:0,over:0,becaus:0,through:0,streamlin:0,write:0,jid:0,"8147a27e4a7f9b55ffc85c2683f9529a":0,directli:0,fit:0,fix:0,pend:0,hidden:0,therefor:0,might:0,them:0,anim:0,"return":0,thei:0,initi:0,front:0,now:0,introduct:0,edit:0,authent:0,separ:0,token:0,ejabberd:0,each:0,debug:0,side:0,mean:0,domain:0,"short":0,individu:0,realli:0,wrap:0,"static":0,connect:0,happen:0,extract:0,special:0,variabl:0,shown:0,"3rd":0,space:0,miss:0,content:0,method:0,rel:0,internet:0,plural:0,factori:0,po2json:0,proxi:0,insid:0,standard:0,standalon:0,ajax:0,put:0,org:0,afterward:0,could:0,keep:0,thing: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,"long":0,owner:0,happi: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,luckili:0,consol:0,option:0,tool:0,specifi:0,part:0,pars:0,grunt:0,than:0,serv:0,jump:0,kind:0,bloat:0,provid:0,remov:0,exampl:0,bridg:0,browser:0,pre:0,analysi:0,saa:0,modern:0,ani:0,packag:0,have:0,tabl:0,need:0,moffitt:0,element:0,bosh_service_url:0,prebind:0,min:0,latter: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,runtim:0,bower:0,latest:0,xdomainrequest:0,devdepend:0,show:0,german:0,text:0,session:0,fine:0,find:0,help:0,onli:0,exactli:0,locat:0,firstnam:0,configur:0,solut:0,should:0,folder:0,local:0,meant:0,info:0,get:0,soon:0,opkod:0,nativ:0,cannot:0,deploy:0,requir:0,enabl:0,emb:0,mainspec:0,multi:0,patch:0,reload:0,bad:0,integr:0,contain:0,where:0,set:0,habit:0,stroph:0,see:0,close: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,otherwis:0,"5e64a30272af065bd72258c565a03f2f":0,both:0,cor:0,instant:0,shortliv:0,conversej:0,etc:0,grain:0,mani:0,login:0,com:0,load:0,pot:0,non:0,backend:0,quit:0,sucessfulli:0,addition:0,rebuild:0,compon:0,json:0,much:0,subscrib:0,non_amd:0,session_kei:0,convert:0,minifi:0,togeth:0,i18n:0,present:0,myself:0,main:0,look:0,servic:0,plugin:0,defin:0,abov:0,error:0,howev:0,hightlight:0,file:0,helper:0,demo:0,auto_subscrib:0,site:0,rid:0,conn:0,develop:0,open:0,minim:0,receiv:0,parti:0,make:0,minif:0,cross:0,same:0,webpag: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,usual:0,plural_form:0,protocol:0,just:0,when:0,jshint:0,languag:0,web:0,xmlhttprequest:0,had:0,add:0,valid:0,blob:0,input:0,match:0,build:0,applic:0,format:0,read:0,amd:0,nginx:0,traffic:0,know:0,background:0,backbon:0,xss:0,like: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,roster:0,achiev:0,track:0,overcom:0,localhost:0,refer:0,object:0,run:0,host:0,repositori:0,panel:0,src:0,about:0,controlbox:0,page:0,act:0,own:0,curiou:0,encod:0,automat:0,contrib:0,your:0,merg:0,log:0,wai:0,transfer:0,support:0,submit:0,custom:0,avail:0,includ:0,lot:0,suit:0,"function":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,requirej:0,count:0,pull:0,made:0,dirti:0,locale_data:0,possibl:0,"default":0,bugfix:0,displai:0,asynchron:0,below:0,tightli:0,legwork:0,problem:0,expect:0,featur:0,creat:0,doesn:0,msgmerg:0,exist:0,chat:0,face:0,check:0,again:0,want:0,tip:0,detail:0,gettext:0,field:0,other:0,rememb:0,test:0,you:0,nice:0,node:0,intend:0,releas:0,stai:0,lang:0,longer:0,directori: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
......@@ -48,9 +48,9 @@ copyright = u'2013, JC Brand'
# built documents.
#
# The short X.Y version.
version = '0.6.0'
version = '0.6.2'
# The full version, including alpha/beta/rc tags.
release = '0.6.0'
release = '0.6.2'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
......
......@@ -553,6 +553,14 @@ To minify the Javascript and CSS, run the following command:
grunt minify
.. Note ::
Since release 0.6.0, I'm using `almond <https://github.com/jrburke/almond>`_
instead of `require.js <http://requirejs.org>`_. The
`grunt-contrib-requirejs <https://github.com/gruntjs/grunt-contrib-requirejs>`_
plugin however doesn't support *almond*. I therefore now build it manually
(the old way again), like this: ``r.js -o build.js``. CSS can be minimized
separately via ``grunt cssmin``.
Javascript will be bundled and minified via `require.js`_'s optimization tool.
You can `read more about require.js's optimizer here`_.
......
......@@ -7,6 +7,7 @@
<link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css">
<link rel="stylesheet" type="text/css" media="screen" href="converse.css">
<script data-main="main" src="components/requirejs/require.js"></script>
<!-- <script src="converse.min.js"></script>-->
<title>Converse.js</title>
</head>
......@@ -18,8 +19,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.5.2.zip">Download the latest release as a .zip file</a>
<a class="tar_download_link" href="https://github.com/jcbrand/converse.js/archive/v0.5.2.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.2.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.2.tar.gz">Download the latest release as a tar.gz file</a>
</section>
</header>
</div>
......@@ -35,18 +36,10 @@
<p><em>Converse.js</em> can connect to any accessible <a href="http://xmpp.org" target="_blank">XMPP/Jabber</a> server, either from a public provider such as <a href="http://jabber.org">jabber.org</a>, or to one you have set up yourself.</p>
<p>It's possible to enable single-site login, whereby users already authenticated in your website will also automatically be logged in on the chat server,
<p>It's possible to enable single-site-login, whereby users already authenticated in your website will also automatically be logged in on the chat server,
but you will have to pre-authenticate them on your server. You can refer to the <a href="/docs/html/index.html">documentation</a> for more
info.</p>
<p>An <a href="http://github.com/collective/collective.xmpp.chat" target="_blank">add-on product</a> that does exactly this,
already exists for the <a href="http://plone.org" target="_blank">Plone</a> CMS. Hopefully in the future more such add-ons will
be created for other platforms.
</p>
<p>If you have integrated <em>Converse.js</em> into any other CMS or framework,
<a href="http://opkode.com/contact.html" target="_blank">please let me know</a> and I'll mention it on this page.</p>
<h2>Features</h2>
<ul>
<li>Single-user chat</li>
......@@ -61,7 +54,7 @@
<li>Custom status messages</li>
<li>Typing notifications</li>
<li>Third person messages (/me )</li>
<li>Translated into multiple languages (af, de, es, it, pt_BR)</li>
<li>Translated into multiple languages (af, de, es, it, pt-BR)</li>
</ul>
<h2>Screencasts</h2>
......@@ -74,6 +67,30 @@
</li>
</ul>
<h2>Integration into other frameworks</h2>
<ul>
<li><h4><a href="http://plone.org" target="_blank">Plone</a></h4>
<strong><a href="http://github.com/collective/collective.xmpp.chat" target="_blank">collective.xmpp.chat</a></strong>
is an add-on for Plone that uses <em>Converse.js</em>.
Together with <a href="http://github.com/collective/collective.xmpp.core" target="_blank">collective.xmpp.core</a>, it provides for single-signon-support (SSO)
and also enables you to manually or automatically
register your Plone users onto your XMPP server.
</li>
<li><h4><a href="http://www.djangoproject.com" target="_blank">Django</a></h4>
<strong><a href="https://pypi.python.org/pypi/django-conversejs" target="_blank">django-conversejs</a></strong> is an app that makes it easer to integrate <em>Converse.js</em>
into Django. It adds single-signon-support (SSO) support and a database model to store XMPP credentials.
</li>
<li><h4><a href="http://roundcube.net" target="_blank">Roundcube</a></h4>
<strong><a href="https://github.com/priyadi/roundcube-converse.js-xmpp-plugin" target="_blank">roundcube-converse.js-xmpp-plugin</a></strong>
is a plugin for Roundcube Webmail. It's README states that it's still a work in progress.
</li>
</ul>
<p>If you have integrated <em>Converse.js</em> into any other CMS or framework,
<a href="http://opkode.com/contact.html" target="_blank">please let me know</a> and I'll mention it on this page.</p>
<h2>Demo</h2>
<p>You can log in with any existing XMPP account. There is also a list of public XMPP providers on <a href="http://xmpp.net" target="_blank">xmpp.net</a>.</p>
<p><em><strong>Note:</strong> currently the demo doesn't work in Internet Explorer older
......@@ -83,10 +100,29 @@
See <a href="/docs/html/index.html#overcoming-cross-domain-request-restrictions" target="_blank">here</a> for more information.</p></em>
<h3>Is it secure?</h3>
<p>Yes. In this demo <em>Converse.js</em> makes an
<a href="https://en.wikipedia.org/wiki/Secure_Sockets_Layer" target="_blank">SSL</a> encrypted connection to a secure connection manager.
The connection manager then uses SSL and <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS</a> to connect to an XMPP server.</p>
That said, the developers don't assume any liability for any loss or damages as a result of using this software or demo. Use this demo at your own risk.
<p>
Yes, as long as you can trust that the Javascript being downloaded is
not being tampered with. This page itself is served by Github and is not <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS/TLS</a>
encrypted (i.e. served via <a href="https://en.wikipedia.org/wiki/HTTPS">HTTPS</a>).
I don't know how probable it is that Github served pages could be hacked to
insert malicious Javascript.
</p>
<p>
Ideally you'd want your site to be served encrypted via HTTPS.
In this case, use with caution. You can of course go
download the source from Github and run this page locally, removing
the attack vector altogether.
</p>
<p>
<em>Converse.js</em> itself makes encrypted HTTPS requests to a <em>connection manager</em>, which will make an
SSL/TLS encrypted connection to an XMPP server (if the server supports it).
</p>
<p>
Logging in happens via <a href="https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer">SASL</a>.
</p>
<p>
That said, the developers don't assume any liability for any loss or damages as a result of using this software or demo. Use at your own risk.
</p>
<h3>Session support</h3>
<p>
......@@ -119,19 +155,16 @@
<li><a href="http://backbonejs.org" target="_blank">backbone.js</a></li>
<li><a href="http://requirejs.org" target="_blank">require.js</a> (optional dependency)</li>
</ul>
<p>Some images were taken from <a href="http://plone.org" target="_blank">Plone</a> and the
<a href="http://openiconlibrary.sourceforge.net" target="_blank">Open Icon Library</a>.
<h2>Licence</h2>
<p><strong>Converse.js</strong> is released under both the <a href="http://opensource.org/licenses/mit-license.php" target="_blank">MIT</a>
and <a href="http://opensource.org/licenses/GPL-2.0" target="_blank">GPL</a> licenses.</p>
<h2>Contact</h2>
<p>You can follow me on <strong><a href="http://twitter.com/jcopkode" target="_blank">Twitter</a></strong> and <strong><a href="http://identi.ca/opkode" target="_blank">Identica</a></strong></p>
<p>You can follow me on <strong><a href="http://twitter.com/jcopkode" target="_blank">Twitter</a></strong></p>
<p>My XMPP username is <strong>jc@opkode.im</strong>.</p>
<p>Send me an email via this <a href="http://opkode.com/contact" target="_blank">contact form</a>.</p>
</section>
</div>
<!-- FOOTER -->
......@@ -163,11 +196,11 @@
auto_subscribe: false,
bosh_service_url: 'https://bind.opkode.im', // Please use this connection manager only for testing purposes
hide_muc_server: false,
i18n: locales.en, // Refer to ./locale/locales.js to see which locales are supported
i18n: locales['fr'], // Refer to ./locale/locales.js to see which locales are supported
prebind: false,
show_controlbox_by_default: true,
xhr_user_search: false,
debug: true
debug: true
});
});
</script>
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Converse.js 0.4\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-06-01 23:03+0200\n"
"POT-Creation-Date: 2013-08-26 16:15+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -17,465 +17,445 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: converse.js:397 converse.js:1128
#: converse.js:130
msgid "Disconnected"
msgstr ""
#: converse.js:134
msgid "Error"
msgstr ""
#: converse.js:136
msgid "Connecting"
msgstr ""
#: converse.js:139
msgid "Connection Failed"
msgstr ""
#: converse.js:141
msgid "Authenticating"
msgstr ""
#: converse.js:144
msgid "Authentication Failed"
msgstr ""
#: converse.js:146
msgid "Disconnecting"
msgstr ""
#: converse.js:456 converse.js:1175
msgid "Show this menu"
msgstr ""
#: converse.js:398 converse.js:1129
#: converse.js:457 converse.js:1176
msgid "Write in the third person"
msgstr ""
#: converse.js:399 converse.js:1133
#: converse.js:458 converse.js:1180
msgid "Remove messages"
msgstr ""
#: converse.js:539
#: converse.js:598
msgid "Personal message"
msgstr ""
#: converse.js:613
#: converse.js:672
msgid "Contacts"
msgstr ""
#: converse.js:618
#: converse.js:677
msgid "Online"
msgstr ""
#: converse.js:619
#: converse.js:678
msgid "Busy"
msgstr ""
#: converse.js:620
#: converse.js:679
msgid "Away"
msgstr ""
#: converse.js:621
#: converse.js:680
msgid "Offline"
msgstr ""
#: converse.js:628
#: converse.js:687
msgid "Click to add new chat contacts"
msgstr ""
#: converse.js:628
#: converse.js:688
msgid "Add a contact"
msgstr ""
#: converse.js:637
#: converse.js:697
msgid "Contact username"
msgstr ""
#: converse.js:638
#: converse.js:698
msgid "Add"
msgstr ""
#: converse.js:646
#: converse.js:706
msgid "Contact name"
msgstr ""
#: converse.js:647
#: converse.js:707
msgid "Search"
msgstr ""
#: converse.js:682
#: converse.js:747
msgid "No users found"
msgstr ""
#: converse.js:689
#: converse.js:754
msgid "Click to add as a chat contact"
msgstr ""
#: converse.js:753
#: converse.js:814
msgid "Click to open this room"
msgstr ""
#: converse.js:755
#: converse.js:816
msgid "Show more information on this room"
msgstr ""
#: converse.js:760
#: converse.js:822
msgid "Description:"
msgstr ""
#: converse.js:761
#: converse.js:823
msgid "Occupants:"
msgstr ""
#: converse.js:762
#: converse.js:824
msgid "Features:"
msgstr ""
#: converse.js:764
#: converse.js:826
msgid "Requires authentication"
msgstr ""
#: converse.js:767
#: converse.js:829
msgid "Hidden"
msgstr ""
#: converse.js:770
#: converse.js:832
msgid "Requires an invitation"
msgstr ""
#: converse.js:773
#: converse.js:835
msgid "Moderated"
msgstr ""
#: converse.js:776
#: converse.js:838
msgid "Non-anonymous"
msgstr ""
#: converse.js:779
#: converse.js:841
msgid "Open room"
msgstr ""
#: converse.js:782
#: converse.js:844
msgid "Permanent room"
msgstr ""
#: converse.js:785
#: converse.js:847
msgid "Public"
msgstr ""
#: converse.js:788
#: converse.js:850
msgid "Semi-anonymous"
msgstr ""
#: converse.js:791
#: converse.js:853
msgid "Temporary room"
msgstr ""
#: converse.js:794
#: converse.js:856
msgid "Unmoderated"
msgstr ""
#: converse.js:800
#: converse.js:862
msgid "Rooms"
msgstr ""
#: converse.js:804
#: converse.js:866
msgid "Room name"
msgstr ""
#: converse.js:805
#: converse.js:867
msgid "Nickname"
msgstr ""
#: converse.js:806
#: converse.js:868
msgid "Server"
msgstr ""
#: converse.js:807
#: converse.js:869
msgid "Join"
msgstr ""
#: converse.js:808
#: converse.js:870
msgid "Show rooms"
msgstr ""
#. For translators: %1$s is a variable and will be replaced with the XMPP server name
#: converse.js:841
#: converse.js:905
msgid "No rooms on %1$s"
msgstr ""
#. For translators: %1$s is a variable and will be
#. replaced with the XMPP server name
#: converse.js:856
#: converse.js:920
msgid "Rooms on %1$s"
msgstr ""
#: converse.js:1130
#: converse.js:1177
msgid "Set chatroom topic"
msgstr ""
#: converse.js:1131
#: converse.js:1178
msgid "Kick user from chatroom"
msgstr ""
#: converse.js:1132
#: converse.js:1179
msgid "Ban user from chatroom"
msgstr ""
#: converse.js:1159
#: converse.js:1206
msgid "Message"
msgstr ""
#: converse.js:1273 converse.js:2318
#: converse.js:1320 converse.js:2387
msgid "Save"
msgstr ""
#: converse.js:1274
#: converse.js:1321
msgid "Cancel"
msgstr ""
#: converse.js:1321
#: converse.js:1368
msgid "An error occurred while trying to save the form."
msgstr ""
#: converse.js:1367
#: converse.js:1414
msgid "This chatroom requires a password"
msgstr ""
#: converse.js:1368
#: converse.js:1415
msgid "Password: "
msgstr ""
#: converse.js:1369
#: converse.js:1416
msgid "Submit"
msgstr ""
#: converse.js:1383
#: converse.js:1430
msgid "This room is not anonymous"
msgstr ""
#: converse.js:1384
#: converse.js:1431
msgid "This room now shows unavailable members"
msgstr ""
#: converse.js:1385
#: converse.js:1432
msgid "This room does not show unavailable members"
msgstr ""
#: converse.js:1386
#: converse.js:1433
msgid "Non-privacy-related room configuration has changed"
msgstr ""
#: converse.js:1387
#: converse.js:1434
msgid "Room logging is now enabled"
msgstr ""
#: converse.js:1388
#: converse.js:1435
msgid "Room logging is now disabled"
msgstr ""
#: converse.js:1389
#: converse.js:1436
msgid "This room is now non-anonymous"
msgstr ""
#: converse.js:1390
#: converse.js:1437
msgid "This room is now semi-anonymous"
msgstr ""
#: converse.js:1391
#: converse.js:1438
msgid "This room is now fully-anonymous"
msgstr ""
#: converse.js:1392
#: converse.js:1439
msgid "A new room has been created"
msgstr ""
#: converse.js:1393
#: converse.js:1440
msgid "Your nickname has been changed"
msgstr ""
#. For translations: %1$s will be replaced with the user's nickname
#. Don't translate "strong"
#. Example: <strong>jcbrand</strong> has been banned
#: converse.js:1400
#: converse.js:1454
msgid "<strong>%1$s</strong> has been banned"
msgstr ""
#. For translations: %1$s will be replaced with the user's nickname
#. Don't translate "strong"
#. Example: <strong>jcbrand</strong> has been kicked out
#: converse.js:1404
#: converse.js:1455
msgid "<strong>%1$s</strong> has been kicked out"
msgstr ""
#. For translations: %1$s will be replaced with the user's nickname
#. Don't translate "strong"
#. Example: <strong>jcbrand</strong> has been removed because of an affiliasion change
#: converse.js:1408
#: converse.js:1456
msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
msgstr ""
#. For translations: %1$s will be replaced with the user's nickname
#. Don't translate "strong"
#. Example: <strong>jcbrand</strong> has been removed for not being a member
#: converse.js:1412
#: converse.js:1457
msgid "<strong>%1$s</strong> has been removed for not being a member"
msgstr ""
#: converse.js:1416 converse.js:1478
#: converse.js:1461 converse.js:1521
msgid "You have been banned from this room"
msgstr ""
#: converse.js:1417
#: converse.js:1462
msgid "You have been kicked from this room"
msgstr ""
#: converse.js:1418
#: converse.js:1463
msgid "You have been removed from this room because of an affiliation change"
msgstr ""
#: converse.js:1419
#: converse.js:1464
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:1420
#: converse.js:1465
msgid ""
"You have been removed from this room because the MUC (Multi-user chat) "
"service is being shut down."
msgstr ""
#: converse.js:1476
#: converse.js:1519
msgid "You are not on the member list of this room"
msgstr ""
#: converse.js:1482
#: converse.js:1525
msgid "No nickname was specified"
msgstr ""
#: converse.js:1486
#: converse.js:1529
msgid "You are not allowed to create new rooms"
msgstr ""
#: converse.js:1488
#: converse.js:1531
msgid "Your nickname doesn't conform to this room's policies"
msgstr ""
#: converse.js:1490
#: converse.js:1533
msgid "Your nickname is already taken"
msgstr ""
#: converse.js:1492
#: converse.js:1535
msgid "This room does not (yet) exist"
msgstr ""
#: converse.js:1494
#: converse.js:1537
msgid "This room has reached it's maximum number of occupants"
msgstr ""
#. 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:1571
#: converse.js:1614
msgid "Topic set by %1$s to: %2$s"
msgstr ""
#: converse.js:1587
#: converse.js:1630
msgid "This user is a moderator"
msgstr ""
#: converse.js:1590
#: converse.js:1633
msgid "This user can send messages in this room"
msgstr ""
#: converse.js:1593
#: converse.js:1636
msgid "This user can NOT send messages in this room"
msgstr ""
#: converse.js:1796
#: converse.js:1843
msgid "Click to chat with this contact"
msgstr ""
#: converse.js:1797 converse.js:1801
#: converse.js:1845 converse.js:1849
msgid "Click to remove this contact"
msgstr ""
#: converse.js:2163
#: converse.js:2231
msgid "Contact requests"
msgstr ""
#: converse.js:2164
#: converse.js:2232
msgid "My contacts"
msgstr ""
#: converse.js:2165
#: converse.js:2233
msgid "Pending contacts"
msgstr ""
#: converse.js:2317
#: converse.js:2386
msgid "Custom status"
msgstr ""
#: converse.js:2323
#: converse.js:2392
msgid "Click to change your chat status"
msgstr ""
#: converse.js:2326
#: converse.js:2396
msgid "Click here to write a custom status message"
msgstr ""
#: converse.js:2355 converse.js:2363
#: converse.js:2425 converse.js:2433
msgid "online"
msgstr ""
#: converse.js:2357
#: converse.js:2427
msgid "busy"
msgstr ""
#: converse.js:2359
#: converse.js:2429
msgid "away for long"
msgstr ""
#: converse.js:2361
#: converse.js:2431
msgid "away"
msgstr ""
#. For translators: the %1$s part gets replaced with the status
#. Example, I am online
#: converse.js:2375 converse.js:2409
#: converse.js:2445 converse.js:2482
msgid "I am %1$s"
msgstr ""
#: converse.js:2480
#: converse.js:2553
msgid "Sign in"
msgstr ""
#: converse.js:2483
#: converse.js:2556
msgid "XMPP/Jabber Username:"
msgstr ""
#: converse.js:2485
#: converse.js:2558
msgid "Password:"
msgstr ""
#: converse.js:2487
#: converse.js:2560
msgid "Log In"
msgstr ""
#: converse.js:2491
#: converse.js:2564
msgid "BOSH Service URL:"
msgstr ""
#: converse.js:2503
msgid "Connected"
msgstr ""
#: converse.js:2507
msgid "Disconnected"
msgstr ""
#: converse.js:2511
msgid "Error"
msgstr ""
#: converse.js:2513
msgid "Connecting"
msgstr ""
#: converse.js:2516
msgid "Connection Failed"
msgstr ""
#: converse.js:2518
msgid "Authenticating"
msgstr ""
#: converse.js:2521
msgid "Authentication Failed"
msgstr ""
#: converse.js:2523
msgid "Disconnecting"
msgstr ""
#: converse.js:2525
msgid "Attached"
msgstr ""
#: converse.js:2656
#: converse.js:2718
msgid "Online Contacts"
msgstr ""
......@@ -27,12 +27,13 @@
"it",
"pt_BR"
], function (jed, af, en, es, de, it, pt_BR) {
root.locales = {};
root.locales.af = af;
root.locales.en = en;
root.locales.es = es;
root.locales.de = de;
root.locales.it = it;
root.locales.pt_BR = pt_BR;
root.locales = {
'af': af,
'en': en,
'es': es,
'de': de,
'it': it,
'pt-br': pt_BR
};
});
})(this);
/*
* This file can be used if no locale support is required.
*/
(function (root, factory) {
define("locales", ['jed'], function (Jed) {
var translations = {
"domain": "converse",
"locale_data": {
"converse": {
"": {
"domain": "converse",
"lang": "en",
"plural_forms": "nplurals=2; plural=(n != 1);"
}
}
}
};
root.locales = { 'en': new Jed(translations) };
});
})(this);
......@@ -2,10 +2,10 @@ require.config({
paths: {
"jquery": "components/jquery/jquery",
"locales": "locale/locales",
"tinysort": "components/tinysort/src/jquery.tinysort",
"jquery.tinysort": "components/tinysort/src/jquery.tinysort",
"underscore": "components/underscore/underscore",
"backbone": "components/backbone/backbone",
"localstorage": "components/backbone.localStorage/backbone.localStorage",
"backbone.localStorage": "components/backbone.localStorage/backbone.localStorage",
"strophe": "components/strophe/strophe",
"strophe.muc": "components/strophe.muc/index",
"strophe.roster": "components/strophe.roster/index",
......@@ -40,6 +40,6 @@ require.config({
}
});
require(["components/requirejs/require", "jquery", "converse"], function(require, $, converse) {
require(["jquery", "converse"], function(require, $, converse) {
window.converse = converse;
});
......@@ -114,13 +114,13 @@
John Smit</a>
<a class="remove-xmpp-contact icon-remove" title="Click to remove this contact" href="#"></a>
</dd>
<dd class="dnd current-xmpp-contact">
<dd class="away current-xmpp-contact">
<a class="open-chat" title="Click to chat with this contact" href="#">
<span class="icon-away" title="this contact is away"></span>
Francois Pienaar</a>
<a class="remove-xmpp-contact icon-remove" title="Click to remove this contact" href="#"></a>
</dd>
<dd class="busy current-xmpp-contact">
<dd class="dnd current-xmpp-contact">
<a class="open-chat" title="Click to chat with this contact" href="#">
<span class="icon-dnd" title="This contact is busy"></span>
Gary Teichmann</a>
......@@ -196,7 +196,7 @@
<canvas height="33px" width="33px" class="avatar" style="background-color: black"></canvas>
<div class="chat-title"> JC Brand </div>
</a>
<p class="user-custom-message"></p>
<p class="user-custom-message" title="10000ft in the air">10000ft in the air</p>
<p></p>
</div>
<div class="chat-content">
......@@ -339,6 +339,19 @@ $(document).ready(function () {
$(ev.target).parent().parent().siblings('dd').find('ul').toggle('fast');
});
$("a.change-xmpp-status-message").click(function (ev) {
ev.preventDefault();
var form = ''+
'<form id="set-custom-xmpp-status">' +
'<input type="text" class="custom-xmpp-status"I am online"'+
'placeholder="I am online"/>' +
'<button type="submit">Save</button>' +
'</form>';
$(ev.target).closest('.xmpp-status').replaceWith(form);
$(ev.target).closest('.custom-xmpp-status').focus().focus();
});
$('.toggle-xmpp-contact-form').click(function (ev) {
ev.preventDefault();
$(ev.target).parent().parent().find('.search-xmpp').toggle('fast', function () {
......
{
"name": "converse.js",
"version": "0.5.1",
"version": "0.6.2",
"description": "Browser based XMPP instant messaging client",
"main": "main.js",
"directories": {
......
<!doctype html public "-//w3c//dtd html 4.01 transitional//en"
"http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<title>converse.js tests for minified files</title>
<meta name="description" content="converse.js: open source browser-based instant messaging" />
<link rel="shortcut icon" type="image/png" href="components/jasmine/images/jasmine_favicon.png">
<link rel="stylesheet" type="text/css" href="components/jasmine/src/html/jasmine.css">
<link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css">
<link rel="stylesheet" type="text/css" media="screen" href="converse.min.css">
<script src="converse.min.js"></script>
<script src="components/jasmine/lib/jasmine-core/jasmine.js"></script>
<script src="components/jasmine/lib/jasmine-core/jasmine-html.js"></script>
<script src="node_modules/jasmine-reporters/src/jasmine.console_reporter.js"></script>
<script src="node_modules/jasmine-reporters/src/jasmine.junit_reporter.js"></script>
</head>
<body>
<div id="header_wrap" class="outer">
<header class="inner">
<h1 id="project_title"><a href="http://conversejs.org">converse.js</a></h1>
<h2 id="project_tagline">tests</h2>
</header>
</div>
<div id="chatpanel">
<div id="collective-xmpp-chat-data"></div>
<div id="toggle-controlbox">
<a href="#" class="chat toggle-online-users">
<span class="conn-feedback">click here to chat</span> <strong style="display: none" id="online-count">(0)</strong>
</a>
</div>
</div>
<script>
var mock_connection = {
'muc': {
'listRooms': function () {},
'join': function () {},
'leave': function () {},
'removeRoom': function () {},
'rooms': {}
},
'jid': 'dummy@localhost',
'addHandler': function (handler, ns, name, type, id, from, options) {
return function () {};
},
'send': function () {},
'roster': {
'add': function () {},
'authorize': function () {},
'unauthorize': function () {},
'get': function () {},
'subscribe': function () {},
'registerCallback': function () {}
},
'vcard': {
'get': function (callback, jid) {
var firstname, lastname;
if (!jid) {
jid = 'dummy@localhost';
firstname = 'Max';
lastname = '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 fullname = firstname+' '+lastname;
var vcard = $iq().c('vCard').c('FN').t(fullname);
callback(vcard.tree());
}
},
'disco': {
'info': function () {},
'items': function () {}
}
};
require([
"jquery",
"converse",
], function($, converse) {
// Set up converse.js
window.localStorage.clear();
converse.initialize({
prebind: false,
xhr_user_search: false,
auto_subscribe: false,
animate: false
});
converse.onConnected(
mock_connection,
function (converse) {
window.converse = converse;
require([
"spec/MainSpec",
"spec/ChatRoomSpec"
], function () {
// Jasmine stuff
var jasmineEnv = jasmine.getEnv();
if (/PhantomJS/.test(navigator.userAgent)) {
jasmineEnv.addReporter(new jasmine.TrivialReporter());
jasmineEnv.addReporter(new jasmine.JUnitXmlReporter('./test-reports/'));
jasmineEnv.addReporter(new jasmine.ConsoleReporter());
jasmineEnv.updateInterval = 0;
} else {
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.addReporter(new jasmine.ConsoleReporter());
jasmineEnv.specFilter = function(spec) {
return htmlReporter.specFilter(spec);
};
jasmineEnv.updateInterval = 200;
}
jasmineEnv.execute();
});
}
);
}
);
</script>
</body>
</html>
......@@ -3,10 +3,10 @@ require.config({
paths: {
"jquery": "components/jquery/jquery",
"locales": "locale/locales",
"tinysort": "components/tinysort/src/jquery.tinysort",
"jquery.tinysort": "components/tinysort/src/jquery.tinysort",
"underscore": "components/underscore/underscore",
"backbone": "components/backbone/backbone",
"localstorage": "components/backbone.localStorage/backbone.localStorage",
"backbone.localStorage": "components/backbone.localStorage/backbone.localStorage",
"strophe": "components/strophe/strophe",
"strophe.muc": "components/strophe.muc/index",
"strophe.roster": "components/strophe.roster/index",
......
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