Merge branch 'master' into languageptbr

Conflicts:
	locale/locales.js
This commit is contained in:
Matheus Figueiredo 2013-07-25 15:35:46 -03:00
commit db45b1d9b4
24 changed files with 1677 additions and 106 deletions

14
.gitignore vendored Normal file
View File

@ -0,0 +1,14 @@
*~
*.mo
*.kpf
*.swp
.*.cfg
.hg/
.bzr/
.svn/
.project
.pydevproject
node_modules
# OSX
.DS_Store

View File

@ -1,7 +1,15 @@
Changelog
=========
0.4 (Unreleased)
0.5 (Unreleased)
----------------
- #22 Fixed compare operator in strophe.muc [sonata82]
- #23 Add Italian translations [ctrlaltca]
- #24 Add Spanish translations [macagua]
- #25 Using span with css instead of img [matheus-morfi]
- #26 Only the first minute digit shown in chatbox. [jcbrand]
0.4 (2013-06-03)
----------------
- CSS tweaks: fixed overflowing text in status message and chatrooms list. [jcbrand]
@ -23,7 +31,7 @@ Changelog
- Fixed user status handling, which wasn't 100% according to the spec. [jcbrand]
- Separate messages according to day in chats. [jcbrand]
- Add support for specifying the BOSH bind URL as configuration setting. [jcbrand]
- Improve the message counter to only increment when the window is not focused [witekdev]
- #8 Improve the message counter to only increment when the window is not focused [witekdev]
- Make fetching of list of chatrooms on a server a configuration option. [jcbrand]
- Use service discovery to show all available features on a room. [jcbrand]
- Multi-user chatrooms are now configurable. [jcbrand]

20
Gruntfile.js Normal file
View File

@ -0,0 +1,20 @@
module.exports = function(grunt) {
grunt.initConfig({
jshint: {
options: {
trailing: true
},
target: {
src : [
'converse.js',
'mock.js',
'main.js',
'tests_main.js',
'spec/*.js'
]
}
}
});
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.registerTask('default', ['jshint']);
};

View File

@ -7,7 +7,9 @@
"af": "locale/af/LC_MESSAGES/af",
"en": "locale/en/LC_MESSAGES/en",
"de": "locale/de/LC_MESSAGES/de",
"es": "locale/es/LC_MESSAGES/es",
"hu": "locale/hu/LC_MESSAGES/hu",
"it": "locale/it/LC_MESSAGES/it",
"sjcl": "Libraries/sjcl",
"tinysort": "Libraries/jquery.tinysort",
"underscore": "Libraries/underscore",

View File

@ -15,29 +15,18 @@ span.spinner {
display: block;
}
span.spinner.hor_centered {
left: 40%;
position: absolute;
}
img.spinner {
width: auto;
border: none;
box-shadow: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
margin: 0;
padding: 0 5px 0 5px;
}
img.centered {
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; /*--Keeps the panel on top of all other elements--*/
position: fixed;

View File

@ -313,6 +313,7 @@
match = text.match(/^\/(.*?)(?: (.*))?$/),
sender = msg_dict.sender,
template, username;
if ((match) && (match[1] === 'me')) {
text = text.replace(/^\/me/, '');
template = this.action_template;
@ -325,7 +326,7 @@
$el.append(
template({
'sender': sender,
'time': this_date.toLocaleTimeString().substring(0,4),
'time': this_date.toTimeString().substring(0,5),
'message': text,
'username': username,
'extra_classes': msg_dict.delayed && 'delayed' || ''
@ -1161,7 +1162,7 @@
'<p class="chatroom-topic"><p/>' +
'</div>' +
'<div class="chat-body">' +
'<img class="spinner centered" src="images/spinner.gif"/>' +
'<span class="spinner centered"/>' +
'</div>'),
chatarea_template: _.template(
@ -1246,7 +1247,7 @@
'hidden': 'hidden',
'list-single': 'dropdown'
};
$form.find('img.spinner').remove();
$form.find('span.spinner').remove();
$form.append($('<legend>').text(title));
if (instructions != title) {
$form.append($('<p>').text(instructions));
@ -1355,7 +1356,7 @@
this.$el.find('.chat-body').append(
$('<div class="chatroom-form-container">'+
'<form class="chatroom-form">'+
'<img class="spinner centered" src="images/spinner.gif"/>'+
'<span class="spinner centered"/>'+
'</form>'+
'</div>'));
converse.connection.muc.configure(
@ -1368,12 +1369,12 @@
ev.preventDefault();
var password = this.$el.find('.chatroom-form').find('input[type=password]').val();
this.$el.find('.chatroom-form-container').replaceWith(
'<img class="spinner centered" src="images/spinner.gif"/>');
'<span class="spinner centered"/>');
this.connect(password);
},
renderPasswordForm: function () {
this.$el.find('img.centered.spinner').remove();
this.$el.find('span.centered.spinner').remove();
this.$el.find('.chat-body').append(
$('<div class="chatroom-form-container">'+
'<form class="chatroom-form">'+
@ -1388,7 +1389,7 @@
showDisconnectMessage: function (msg) {
this.$el.find('.chat-area').remove();
this.$el.find('.participants').remove();
this.$el.find('img.centered.spinner').remove();
this.$el.find('span.centered.spinner').remove();
this.$el.find('.chat-body').append($('<p>'+msg+'</p>'));
},
@ -2509,7 +2510,7 @@
connection = new Strophe.Connection(converse.bosh_service_url);
if ($form) {
$button = $form.find('input[type=submit]');
$button.hide().after('<img class="spinner login-submit" src="images/spinner.gif"/>');
$button.hide().after('<span class="spinner login-submit"/>');
}
connection.connect(jid, password, $.proxy(function (status, message) {
if (status === Strophe.Status.CONNECTED) {

2
converse.min.css vendored

File diff suppressed because one or more lines are too long

2
converse.min.js vendored

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -99,6 +99,8 @@ website. This will remove the need for any cross-domain XHR support.
Server-side authentication
==========================
.. _`Session Support`:
Pre-binding and Single Session Support
--------------------------------------
@ -110,7 +112,7 @@ Jack Moffitt has a great `blogpost`_ about this and even provides an `example Dj
.. Note::
If you want to enable single session support, make sure to pass **prebind: true**
when you call **converse.initialize** (see ./main.js).
when you call **converse.initialize** (see ./index.html).
When you authenticate to the XMPP server on your backend, you'll receive two
tokens, RID (request ID) and SID (session ID).
@ -153,21 +155,36 @@ connection object.
Quickstart (to get a demo up and running)
=========================================
When you download a specific release of *Converse.js*, say for example version 0.3,
there will be two minified files inside the zip file.
When you download a specific release of *Converse.js* there will be two minified files inside the zip file.
For version 0.3 they will be:
* converse.min.js
* converse.min.css
* converse.0.3.min.js
* converse.0.3.min.css
You can include these two files in your website via the *script* and *link*
You can include these two files inside the *<head>* element of your website via the *script* and *link*
tags:
::
<link rel="stylesheet" type="text/css" media="screen" href="converse.0.3.min.css">
<script src="converse.0.3.min.js"></script>
<link rel="stylesheet" type="text/css" media="screen" href="converse.min.css">
<script src="converse.min.js"></script>
Then, at the bottom of your page, after the closing *</body>* element, put the
following inline Javascript code:
::
<script>
converse.initialize({
auto_list_rooms: false,
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
prebind: false,
show_controlbox_by_default: true,
xhr_user_search: false
});
</script>
The *index.html* file inside the Converse.js folder serves as a nice usable
example of this.
@ -180,7 +197,7 @@ You'll most likely want to implement some kind of single-signon solution for
your website, where users authenticate once in your website and then stay
logged into their XMPP session upon page reload.
For more info on this, read `Session Support`_.
For more info on this, read: `Pre-binding and Single Session Support`_.
You might also want to have more fine-grained control of what gets included in
the minified Javascript file. Read `Configuration`_ and `Minification`_ for more info on how to do
@ -198,6 +215,9 @@ on your website.
*Converse.js* is passed its configuration settings when you call its
*initialize* method.
You'll most likely want to call the *initialize* method in your HTML page. For
an example of how this is done, please see the bottom of the *./index.html* page.
Please refer to the `Configuration variables`_ section below for info on
all the available configuration settings.
@ -358,6 +378,14 @@ CSS can be minimized with Yahoo's yuicompressor tool:
Translations
============
.. Note ::
Translations take up a lot of space and will bloat your minified file.
At the time of writing, all the translations add about 50KB of extra data to
the minified javascript file. Therefore, make sure to only
include those languages that you intend to support and remove from
./locale/locales.js those which you don't need. Remember to rebuild the
minified file afterwards.
The gettext POT file located in ./locale/converse.pot is the template
containing all translations and from which for each language an individual PO
file is generated.

View File

@ -115,7 +115,7 @@ properly configure and integrate it into your site.</p>
webchat experience and that you have control over the data. The latter being a
requirement for many sites dealing with sensitive information.</p>
<p>You&#8217;ll need to set up your own XMPP server and in order to have
<a href="#id24"><span class="problematic" id="id25">`Session Support`_</span></a> (i.e. single-signon functionality whereby users are authenticated once and stay
<a class="reference internal" href="#session-support">Session Support</a> (i.e. single-signon functionality whereby users are authenticated once and stay
logged in to XMPP upon page reload) you will also have to add some server-side
code.</p>
<p>The <a class="reference internal" href="#what-you-will-need">What you will need</a> section has more information on all these
@ -128,7 +128,7 @@ requirements.</p>
<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
have <a href="#id26"><span class="problematic" id="id27">`Session Support`_</span></a> you&#8217;ll have to set up your own XMPP server.</p>
have <a class="reference internal" href="#session-support">Session Support</a> you&#8217;ll have to set up your own XMPP server.</p>
<p>You can find a list of public XMPP servers/providers on <a class="reference external" href="http://xmpp.net">xmpp.net</a> and a list of
servers that you can set up yourself on <a class="reference external" href="http://xmpp.org/xmpp-software/servers/">xmpp.org</a>.</p>
</div>
@ -168,7 +168,7 @@ website. This will remove the need for any cross-domain XHR support.</p>
<div class="section" id="server-side-authentication">
<h2><a class="toc-backref" href="#id6">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">
<h3><a class="toc-backref" href="#id7">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="#id7">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>
@ -176,7 +176,7 @@ but this will require custom code on your server.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">If you want to enable single session support, make sure to pass <strong>prebind: true</strong>
when you call <strong>converse.initialize</strong> (see ./main.js).</p>
when you call <strong>converse.initialize</strong> (see ./index.html).</p>
</div>
<p>When you authenticate to the XMPP server on your backend, you&#8217;ll receive two
tokens, RID (request ID) and SID (session ID).</p>
@ -209,17 +209,30 @@ connection object.</p>
</div>
<div class="section" id="quickstart-to-get-a-demo-up-and-running">
<h1><a class="toc-backref" href="#id8">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>, say for example version 0.3,
there will be two minified files inside the zip file.</p>
<p>For version 0.3 they will be:</p>
<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.0.3.min.js</li>
<li>converse.0.3.min.css</li>
<li>converse.min.js</li>
<li>converse.min.css</li>
</ul>
<p>You can include these two files in your website via the <em>script</em> and <em>link</em>
<p>You can include these two files inside the <em>&lt;head&gt;</em> element of your website via the <em>script</em> and <em>link</em>
tags:</p>
<div class="highlight-python"><pre>&lt;link rel="stylesheet" type="text/css" media="screen" href="converse.0.3.min.css"&gt;
&lt;script src="converse.0.3.min.js"&gt;&lt;/script&gt;</pre>
<div class="highlight-python"><pre>&lt;link rel="stylesheet" type="text/css" media="screen" href="converse.min.css"&gt;
&lt;script src="converse.min.js"&gt;&lt;/script&gt;</pre>
</div>
<p>Then, at the bottom of your page, after the closing <em>&lt;/body&gt;</em> element, put the
following inline Javascript code:</p>
<div class="highlight-python"><pre>&lt;script&gt;
converse.initialize({
auto_list_rooms: false,
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
prebind: false,
show_controlbox_by_default: true,
xhr_user_search: false
});
&lt;/script&gt;</pre>
</div>
<p>The <em>index.html</em> file inside the Converse.js folder serves as a nice usable
example of this.</p>
@ -229,7 +242,7 @@ practical.</p>
<p>You&#8217;ll most likely want to implement some kind of single-signon solution for
your website, where users authenticate once in your website and then stay
logged into their XMPP session upon page reload.</p>
<p>For more info on this, read <a href="#id28"><span class="problematic" id="id29">`Session Support`_</span></a>.</p>
<p>For more info on this, read: <a class="reference internal" href="#pre-binding-and-single-session-support">Pre-binding and Single Session Support</a>.</p>
<p>You might also want to have more fine-grained control of what gets included in
the minified Javascript file. Read <a class="reference internal" href="#configuration">Configuration</a> and <a class="reference internal" href="#minification">Minification</a> for more info on how to do
that.</p>
@ -241,6 +254,8 @@ you&#8217;ll want to configure <em>Converse.js</em> to suit your needs before yo
on your website.</p>
<p><em>Converse.js</em> is passed its configuration settings when you call its
<em>initialize</em> method.</p>
<p>You&#8217;ll most likely want to call the <em>initialize</em> method in your HTML page. For
an example of how this is done, please see the bottom of the <em>./index.html</em> page.</p>
<p>Please refer to the <a class="reference internal" href="#configuration-variables">Configuration variables</a> section below for info on
all the available configuration settings.</p>
<p>After you have configured <em>Converse.js</em>, you&#8217;ll have to regenerate the minified
@ -357,6 +372,15 @@ manager, NPM.</p>
</div>
<div class="section" id="translations">
<h1><a class="toc-backref" href="#id23">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.
At the time of writing, all the translations add about 50KB of extra data to
the minified javascript file. Therefore, make sure to only
include those languages that you intend to support and remove from
./locale/locales.js those which you don&#8217;t need. Remember to rebuild the
minified file afterwards.</p>
</div>
<p>The gettext POT file located in ./locale/converse.pot is the template
containing all translations and from which for each language an individual PO
file is generated.</p>

Binary file not shown.

View File

@ -1 +1 @@
Search.setIndex({objects:{},terms:{all:0,code:0,partial:0,queri:0,webchat:0,follow:0,middl:0,depend:0,sensit:0,sorri:0,those:0,under:0,string:0,fals:0,mechan:0,jack:0,veri:0,list: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,version:0,"new":0,net:0,"public":0,widget:0,gener:0,here:0,valu:0,box:0,convert:0,convers:0,mysit:0,fetch:0,implement:0,via:0,extra:0,apach:0,ask:0,href:0,org:0,auto_list_room:0,instal:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,stylesheet:0,call:0,recommend:0,type:0,until:0,tightli:0,more:0,yahoo:0,must:0,room:0,setup:[],work:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,quickstart:0,share:0,templat:0,tag:0,proprietari:0,explor:0,onlin:0,occup:0,end:0,goal:0,write:0,how:0,sid:0,instead:0,css:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,befor:0,callback:0,underscor:0,data:0,demonstr:0,man:0,practic:0,bind:0,show_controlbox_by_default:0,django:0,inform:0,order:0,chatbox:0,xmpp:0,over:0,through:0,streamlin:0,snippet:0,jid:0,directli:0,fit: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,name:0,edit:0,authent:0,token:0,ejabberd:0,each: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,open:0,content:0,rel:0,internet:0,plural:0,factori:0,po2json:0,proxi:0,insid:0,standard:0,standalon:0,ajax:0,put:0,succesfulli:0,could:0,success:0,keep:0,yui:0,first:0,origin:0,softwar:0,render:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,restrict:0,alreadi:0,owner:0,jabber:0,differ:0,script:0,top:0,messag:0,attach:0,attack:0,jed:0,luckili:0,option:0,tool:0,specifi:0,compressor:0,part:0,exactli:0,than:0,serv:0,jump:0,kind:0,provid:0,remov:0,bridg:0,toward:[],browser:0,pre:0,sai: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,build:0,which:0,singl:0,sure:0,roster:0,track:0,object:0,most:0,deploi:0,homepag:0,"class":0,don:0,url:0,request:0,face:0,runtim:0,xdomainrequest:0,show:0,german:0,text:0,session:0,fine:0,find:0,onli:0,locat:0,just:0,configur:0,solut:0,should:0,folder:0,local:0,meant:0,get:0,opkod:0,cannot:0,deploy:0,requir:0,enabl:0,emb:0,method:0,reload:0,integr:0,contain:0,where:0,set:0,stroph:0,see:0,close:0,statu:0,state:0,reus:0,between:0,experi:0,hide_muc_serv:0,attribut:0,kei:0,screen:0,javascript:0,conjunct:[],job:0,bosh:0,cor:0,instant:0,shortliv:0,conversej:0,etc:0,grain:0,mani:0,login:0,com:0,load:0,instanti:0,pot:0,backend:0,creat:0,json:0,much:0,besid:0,subscrib:0,msgmerg:0,great:0,minifi:0,togeth:0,i18n:0,present:0,multi:0,main:0,servic:0,plugin:0,defin:0,file:0,helper:0,demo:0,auto_subscrib:0,site:0,rid:0,minim:0,receiv:0,media:0,make:0,minif:0,cross:0,same:0,html:0,chatroom:0,signon:0,http:0,webserv:0,optim:0,upon:0,hand:0,user:0,xhr_user_search:0,recent:0,stateless:0,markup:0,person:[],exampl:0,command:0,wherebi:0,thi:0,choos:0,usual:0,plural_form:0,protocol:0,firstnam:0,languag:0,web:0,xmlhttprequest:0,had:0,add:0,valid:0,input:0,yuicompressor:0,match:0,applic:0,format:0,read:0,nginx:0,traffic:0,xss:0,like:0,specif:0,server:0,benefit:0,necessari:0,either:0,page:0,deal:0,nplural:0,some:0,back:0,librari:0,though:0,overcom:0,refer:0,run:0,host:0,panel:0,src:0,about:0,obj:[],controlbox:0,unfortun:0,act:0,own:0,encod:0,automat:0,wrap:0,your:0,manag:0,log:0,wai:0,transfer:0,support:0,custom:0,avail:0,start:[],includ:0,lot:0,suit:0,"var":0,"function":0,properli:0,form:0,bundl:0,link:0,translat:0,synonym:0,"true":0,congratul:0,requirej:0,info:0,made:0,locale_data:0,possibl:0,"default":0,below:0,toggl:0,otherwis:0,problem:0,expect:0,featur:0,onconnect:0,exist:0,chat:0,want:0,when:0,detail:0,gettext:0,field:0,other:0,test:0,you:0,nice:0,node:0,releas:0,stai:0,lang:0,longer:0,getjson:0},objtypes:{},titles:["Introduction"],objnames:{},filenames:["index"]})
Search.setIndex({objects:{},terms:{all:0,code:0,partial:0,queri:0,webchat:0,follow:0,middl:0,depend:0,sensit:0,sorri:0,those:0,under:0,string:0,fals:0,mechan:0,jack:0,veri:0,list: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,version:[],"new":0,net:0,"public":0,widget:0,gener:0,here:0,bodi:0,valu:0,box:0,convert:0,convers:0,mysit:0,fetch:0,implement:0,via:0,extra:0,apach:0,ask:0,href:0,org:0,auto_list_room:0,instal:0,from:0,zip:0,commun:0,doubl:0,two:0,websit:0,stylesheet:0,call:0,recommend:0,type:0,until:0,tightli:0,more:0,yahoo:0,must:0,room:0,setup:[],work:0,xhr:0,can:0,lc_messag:0,purpos:0,root:0,blogpost:0,control:0,quickstart:0,share:0,templat:0,tag:0,proprietari:0,explor:0,onlin:0,occup:0,end:0,goal:0,write:0,how:0,sid:0,instead:0,css:0,updat:0,npm:0,regener:0,product:0,resourc:0,after:0,usabl:0,befor:0,callback:0,underscor:0,data:0,demonstr:0,man:0,practic:0,bind:0,show_controlbox_by_default:0,django:0,inform:0,order:0,chatbox:0,xmpp:0,over:0,through:0,streamlin:0,snippet:0,jid:0,directli:0,fit: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,name:0,edit:0,authent:0,token:0,ejabberd:0,each: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,space:0,open:0,content:0,rel:0,internet:0,plural:0,factori:0,po2json:0,proxi:0,insid:0,standard:0,standalon:0,ajax:0,put:0,succesfulli:0,afterward:0,could:0,success:0,keep:0,yui:0,first:0,origin:0,softwar:0,render:0,onc:0,hoop:0,lastnam:0,number:0,yourself:0,restrict:0,alreadi:0,done:0,owner:0,jabber:0,differ:0,script:0,top:0,messag:0,attach:0,attack:0,jed:0,luckili:0,option:0,tool:0,specifi:0,compressor:0,part:0,exactli:0,than:0,serv:0,jump:0,kind:0,bloat:0,provid:0,remov:0,bridg:0,toward:[],browser:0,pre:0,sai:[],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,build:0,which:0,singl:0,sure:0,roster:0,track:0,object:0,most:0,deploi:0,homepag:0,"class":0,don:0,url:0,request:0,face:0,runtim:0,xdomainrequest:0,show:0,german:0,text:0,session:0,fine:0,find:0,onli:0,locat:0,just:0,configur:0,solut:0,should:0,folder:0,local:0,meant:0,get:0,opkod:0,cannot:0,deploy:0,requir:0,enabl:0,emb:0,method:0,reload:0,integr:0,contain:0,where:0,set:0,stroph:0,see:0,close:0,statu:0,state:0,reus:0,between:0,experi:0,hide_muc_serv:0,attribut:0,kei:0,screen:0,javascript:0,conjunct:[],job:0,bosh:0,cor:0,instant:0,shortliv:0,conversej:0,etc:0,grain:0,mani:0,login:0,com:0,load:0,instanti:0,pot:0,backend:0,creat:0,rebuild:0,json:0,much:0,besid:0,subscrib:0,msgmerg:0,great:0,minifi:0,togeth:0,i18n:0,present:0,multi:0,main:0,servic:0,plugin:0,defin:0,file:0,helper:0,demo:0,auto_subscrib:0,site:0,rid:0,minim:0,receiv:0,media:0,make:0,minif:0,cross:0,same:0,html:0,chatroom:0,signon:0,http:0,webserv:0,optim:0,upon:0,hand:0,"50kb":0,user:0,xhr_user_search:0,recent:0,stateless:0,markup:0,person:[],exampl:0,command:0,wherebi:0,thi:0,choos:0,usual:0,plural_form:0,protocol:0,firstnam:0,languag:0,web:0,xmlhttprequest:0,had:0,add:0,valid:0,input:0,yuicompressor:0,match:0,take:0,applic:0,format:0,read:0,nginx:0,traffic:0,xss:0,like:0,specif:0,server:0,benefit:0,necessari:0,either:0,page:0,deal:0,nplural:0,some:0,back:0,librari:0,bottom:0,though:0,overcom:0,refer:0,run:0,host:0,panel:0,src:0,about:0,obj:[],controlbox:0,unfortun:0,act:0,own:0,encod:0,automat:0,wrap:0,your:0,manag:0,log:0,wai:0,transfer:0,support:0,custom:0,avail:0,start:[],includ:0,lot:0,suit:0,"var":0,"function":0,head:0,properli:0,form:0,bundl:0,link:0,translat:0,synonym:0,inlin:0,"true":0,congratul:0,requirej:0,info:0,made:0,locale_data:0,possibl:0,"default":0,below:0,toggl:0,otherwis:0,problem:0,expect:0,featur:0,onconnect:0,"100kb":[],exist:0,chat:0,want:0,when: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,getjson:0,time:0},objtypes:{},titles:["Introduction"],objnames:{},filenames:["index"]})

View File

@ -99,6 +99,8 @@ website. This will remove the need for any cross-domain XHR support.
Server-side authentication
==========================
.. _`Session Support`:
Pre-binding and Single Session Support
--------------------------------------
@ -110,7 +112,7 @@ Jack Moffitt has a great `blogpost`_ about this and even provides an `example Dj
.. Note::
If you want to enable single session support, make sure to pass **prebind: true**
when you call **converse.initialize** (see ./main.js).
when you call **converse.initialize** (see ./index.html).
When you authenticate to the XMPP server on your backend, you'll receive two
tokens, RID (request ID) and SID (session ID).
@ -153,21 +155,36 @@ connection object.
Quickstart (to get a demo up and running)
=========================================
When you download a specific release of *Converse.js*, say for example version 0.3,
there will be two minified files inside the zip file.
When you download a specific release of *Converse.js* there will be two minified files inside the zip file.
For version 0.3 they will be:
* converse.min.js
* converse.min.css
* converse.0.3.min.js
* converse.0.3.min.css
You can include these two files in your website via the *script* and *link*
You can include these two files inside the *<head>* element of your website via the *script* and *link*
tags:
::
<link rel="stylesheet" type="text/css" media="screen" href="converse.0.3.min.css">
<script src="converse.0.3.min.js"></script>
<link rel="stylesheet" type="text/css" media="screen" href="converse.min.css">
<script src="converse.min.js"></script>
Then, at the bottom of your page, after the closing *</body>* element, put the
following inline Javascript code:
::
<script>
converse.initialize({
auto_list_rooms: false,
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
prebind: false,
show_controlbox_by_default: true,
xhr_user_search: false
});
</script>
The *index.html* file inside the Converse.js folder serves as a nice usable
example of this.
@ -180,7 +197,7 @@ You'll most likely want to implement some kind of single-signon solution for
your website, where users authenticate once in your website and then stay
logged into their XMPP session upon page reload.
For more info on this, read `Session Support`_.
For more info on this, read: `Pre-binding and Single Session Support`_.
You might also want to have more fine-grained control of what gets included in
the minified Javascript file. Read `Configuration`_ and `Minification`_ for more info on how to do
@ -198,6 +215,9 @@ on your website.
*Converse.js* is passed its configuration settings when you call its
*initialize* method.
You'll most likely want to call the *initialize* method in your HTML page. For
an example of how this is done, please see the bottom of the *./index.html* page.
Please refer to the `Configuration variables`_ section below for info on
all the available configuration settings.
@ -358,6 +378,14 @@ CSS can be minimized with Yahoo's yuicompressor tool:
Translations
============
.. Note ::
Translations take up a lot of space and will bloat your minified file.
At the time of writing, all the translations add about 50KB of extra data to
the minified javascript file. Therefore, make sure to only
include those languages that you intend to support and remove from
./locale/locales.js those which you don't need. Remember to rebuild the
minified file afterwards.
The gettext POT file located in ./locale/converse.pot is the template
containing all translations and from which for each language an individual PO
file is generated.

View File

@ -48,7 +48,7 @@
</p>
<p>If you have integrated <em>Converse.js</em> into any other CMS or framework,
<a href="http://opkode.com/contact" target="_blank">please let me know</a> and I'll mention it on this page.</p>
<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>
@ -164,4 +164,18 @@
</script>
<script type="text/javascript">try { var pageTracker = _gat._getTracker("UA-2128260-8"); pageTracker._trackPageview(); } catch(err) {}</script>
</body>
<script>
require(["jquery", "converse"], function ($, converse) {
converse.initialize({
auto_list_rooms: false,
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
prebind: false,
show_controlbox_by_default: true,
xhr_user_search: false
});
});
</script>
</html>

View File

@ -0,0 +1,460 @@
{
"converse": {
"": {
"Project-Id-Version": "Converse.js 0.4",
"Report-Msgid-Bugs-To": "",
"POT-Creation-Date": "2013-06-01 23:03+0200",
"PO-Revision-Date": "2013-07-22 18:13-0400",
"Last-Translator": "Leonardo J. Caballero G. <leonardocaballero@gmail.com>",
"Language-Team": "Spanish",
"Language": "es",
"MIME-Version": "1.0",
"Content-Type": "text/plain; charset=ASCII",
"Content-Transfer-Encoding": "8bit",
"Plural-Forms": "nplurals=2; plural=(n != 1);",
"domain": "converse",
"lang": "es",
"plural_forms": "nplurals=2; plural=(n != 1);"
},
"Show this menu": [
null,
"Mostrar este menú"
],
"Write in the third person": [
null,
"Escribir en tercera persona"
],
"Remove messages": [
null,
"Eliminar mensajes"
],
"Personal message": [
null,
"Mensaje personal"
],
"Contacts": [
null,
"Contactos"
],
"Online": [
null,
"En linea"
],
"Busy": [
null,
"Ocupado"
],
"Away": [
null,
"Ausente"
],
"Offline": [
null,
"Desconectado"
],
"Click to add new chat contacts": [
null,
"Haga clic para agregar nuevos contactos al chat"
],
"Add a contact": [
null,
"Agregar un contacto"
],
"Contact username": [
null,
"Nombre de usuario de contacto"
],
"Add": [
null,
"Agregar"
],
"Contact name": [
null,
"Nombre de contacto"
],
"Search": [
null,
"Búsqueda"
],
"No users found": [
null,
"Sin usuarios encontrados"
],
"Click to add as a chat contact": [
null,
"Haga clic para agregar como un contacto de chat"
],
"Click to open this room": [
null,
"Haga clic para abrir esta sala"
],
"Show more information on this room": [
null,
"Mostrar mas información en esta sala"
],
"Description:": [
null,
"Descripción"
],
"Occupants:": [
null,
"Ocupantes:"
],
"Features:": [
null,
"Características:"
],
"Requires authentication": [
null,
"Autenticación requerida"
],
"Hidden": [
null,
"Oculto"
],
"Requires an invitation": [
null,
"Requiere una invitación"
],
"Moderated": [
null,
"Moderado"
],
"Non-anonymous": [
null,
"No usuario anónimo"
],
"Open room": [
null,
"Abrir sala"
],
"Permanent room": [
null,
"Sala permanente"
],
"Public": [
null,
"Publico"
],
"Semi-anonymous": [
null,
"Semi anónimo"
],
"Temporary room": [
null,
"Sala temporal"
],
"Unmoderated": [
null,
"Sin moderar"
],
"Rooms": [
null,
"Salas"
],
"Room name": [
null,
"Nombre de sala"
],
"Nickname": [
null,
"Apodo"
],
"Server": [
null,
"Servidor"
],
"Join": [
null,
"Unirse"
],
"Show rooms": [
null,
"Mostrar salas"
],
"No rooms on %1$s": [
null,
"Sin salas en %1$s"
],
"Rooms on %1$s": [
null,
"Salas en %1$s"
],
"Set chatroom topic": [
null,
"Defina tema de sala de chat"
],
"Kick user from chatroom": [
null,
"Expulsar usuario de sala de chat."
],
"Ban user from chatroom": [
null,
"Bloquear usuario de sala de chat."
],
"Message": [
null,
"Mensaje"
],
"Save": [
null,
"Guardar"
],
"Cancel": [
null,
"Cancelar"
],
"An error occurred while trying to save the form.": [
null,
"Un error ocurrido mientras trataba de guardar el formulario."
],
"This chatroom requires a password": [
null,
"Esta sala de chat requiere una contraseña."
],
"Password: ": [
null,
"Contraseña: "
],
"Submit": [
null,
"Enviar"
],
"This room is not anonymous": [
null,
"Esta sala no es para usuarios anónimos"
],
"This room now shows unavailable members": [
null,
"Esta sala ahora muestra los miembros no disponibles"
],
"This room does not show unavailable members": [
null,
"Esta sala no muestra los miembros no disponibles"
],
"Non-privacy-related room configuration has changed": [
null,
"Configuración de la sala para no relacionada con la privacidad ha sido cambiada"
],
"Room logging is now enabled": [
null,
"El registro de la sala ahora está habilitada"
],
"Room logging is now disabled": [
null,
"El registro de la sala ahora está deshabilitada"
],
"This room is now non-anonymous": [
null,
"Esta sala ahora es para los usuarios no anónimos"
],
"This room is now semi-anonymous": [
null,
"Esta sala ahora es para los usuarios semi-anónimos"
],
"This room is now fully-anonymous": [
null,
"Esta sala ahora es para los usuarios completamente-anónimos"
],
"A new room has been created": [
null,
"Una nueva sala ha sido creada"
],
"Your nickname has been changed": [
null,
"Su apodo ha sido cambiado"
],
"<strong>%1$s</strong> has been banned": [
null,
"<strong>%1$s</strong> ha sido prohibido"
],
"<strong>%1$s</strong> has been kicked out": [
null,
"<strong>%1$s</strong> ha sido expulsado"
],
"<strong>%1$s</strong> has been removed because of an affiliation change": [
null,
"<strong>%1$s</strong> ha sido eliminado debido a un cambio de afiliación"
],
"<strong>%1$s</strong> has been removed for not being a member": [
null,
"<strong>%1$s</strong> ha sido eliminado debido a que no es miembro"
],
"You have been banned from this room": [
null,
"Usted ha sido prohibido de esta sala"
],
"You have been kicked from this room": [
null,
"Usted ha sido expulsado de esta sala"
],
"You have been removed from this room because of an affiliation change": [
null,
"Usted ha sido eliminado de esta sala debido a un cambio de afiliación"
],
"You have been removed from this room because the room has changed to members-only and you're not a member": [
null,
"Usted ha sido eliminado de esta sala debido a que la sala cambio su configuración a solo-miembros y usted no es un miembro"
],
"You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
null,
"Usted ha sido eliminado de esta sala debido al servicio MUC (Multi-user chat) está apagado."
],
"You are not on the member list of this room": [
null,
"Usted no está en la lista de miembros de esta sala"
],
"No nickname was specified": [
null,
"Sin apodo especificado"
],
"You are not allowed to create new rooms": [
null,
"A usted no se le permite crear nuevas salas"
],
"Your nickname doesn't conform to this room's policies": [
null,
"Su apodo no se ajusta a la política de esta sala"
],
"Your nickname is already taken": [
null,
"Su apodo ya ha sido tomando por otro usuario"
],
"This room does not (yet) exist": [
null,
"Esta sala (aún) no existe"
],
"This room has reached it's maximum number of occupants": [
null,
"Esta sala ha alcanzado su número máximo de ocupantes"
],
"Topic set by %1$s to: %2$s": [
null,
"Tema fijado por %1$s a: %2$s"
],
"This user is a moderator": [
null,
"Este usuario es un moderador"
],
"This user can send messages in this room": [
null,
"Este usuario puede enviar mensajes en esta sala"
],
"This user can NOT send messages in this room": [
null,
"Este usuario NO puede enviar mensajes en esta"
],
"Click to chat with this contact": [
null,
"Haga clic para conversar con este contacto"
],
"Click to remove this contact": [
null,
"Haga clic para eliminar este contacto"
],
"Contact requests": [
null,
"Solicitudes de contacto"
],
"My contacts": [
null,
"Mi contactos"
],
"Pending contacts": [
null,
"Contactos pendientes"
],
"Custom status": [
null,
"Personalice estatus"
],
"Click to change your chat status": [
null,
"Haga clic para cambiar su estatus de chat"
],
"Click here to write a custom status message": [
null,
"Haga clic para escribir un mensaje de estatus personalizado"
],
"online": [
null,
"en linea"
],
"busy": [
null,
"ocupado"
],
"away for long": [
null,
"lejos por mucho tiempo"
],
"away": [
null,
"ausente"
],
"I am %1$s": [
null,
"Yo soy %1$s"
],
"Sign in": [
null,
"Registro"
],
"XMPP/Jabber Username:": [
null,
"Nombre de usuario XMPP/Jabber"
],
"Password:": [
null,
"Contraseña:"
],
"Log In": [
null,
"Iniciar sesión"
],
"BOSH Service URL:": [
null,
"URL del servicio BOSH:"
],
"Connected": [
null,
"Conectado"
],
"Disconnected": [
null,
"Desconectado"
],
"Error": [
null,
"Error"
],
"Connecting": [
null,
"Conectando"
],
"Connection Failed": [
null,
"Conexión fallo"
],
"Authenticating": [
null,
"Autenticando"
],
"Authentication Failed": [
null,
"Autenticación fallo"
],
"Disconnecting": [
null,
"Desconectando"
],
"Attached": [
null,
"Adjuntado"
],
"Online Contacts": [
null,
"Contactos en linea"
]
}
}

View File

@ -0,0 +1,493 @@
# Spanish translations for Converse.js package.
# Copyright (C) 2013 Jan-Carel Brand
# This file is distributed under the same license as the Converse.js package.
# Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2013.
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"
"PO-Revision-Date: 2013-07-22 18:13-0400\n"
"Last-Translator: Leonardo J. Caballero G. <leonardocaballero@gmail.com>\n"
"Language-Team: ES <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"plural_forms: nplurals=2; plural=(n != 1);\n"
"Language: es\n"
"lang: es\n"
"Language-Code: es\n"
"Language-Name: Español\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: converse\n"
"domain: converse\n"
"X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n"
#: converse.js:397
#: converse.js:1128
msgid "Show this menu"
msgstr "Mostrar este menú"
#: converse.js:398
#: converse.js:1129
msgid "Write in the third person"
msgstr "Escribir en tercera persona"
#: converse.js:399
#: converse.js:1133
msgid "Remove messages"
msgstr "Eliminar mensajes"
#: converse.js:539
msgid "Personal message"
msgstr "Mensaje personal"
#: converse.js:613
msgid "Contacts"
msgstr "Contactos"
#: converse.js:618
msgid "Online"
msgstr "En linea"
#: converse.js:619
msgid "Busy"
msgstr "Ocupado"
#: converse.js:620
msgid "Away"
msgstr "Ausente"
#: converse.js:621
msgid "Offline"
msgstr "Desconectado"
#: converse.js:628
msgid "Click to add new chat contacts"
msgstr "Haga clic para agregar nuevos contactos al chat"
#: converse.js:628
msgid "Add a contact"
msgstr "Agregar un contacto"
#: converse.js:637
msgid "Contact username"
msgstr "Nombre de usuario de contacto"
#: converse.js:638
msgid "Add"
msgstr "Agregar"
#: converse.js:646
msgid "Contact name"
msgstr "Nombre de contacto"
#: converse.js:647
msgid "Search"
msgstr "Búsqueda"
#: converse.js:682
msgid "No users found"
msgstr "Sin usuarios encontrados"
#: converse.js:689
msgid "Click to add as a chat contact"
msgstr "Haga clic para agregar como un contacto de chat"
#: converse.js:753
msgid "Click to open this room"
msgstr "Haga clic para abrir esta sala"
#: converse.js:755
msgid "Show more information on this room"
msgstr "Mostrar mas información en esta sala"
#: converse.js:760
msgid "Description:"
msgstr "Descripción"
#: converse.js:761
msgid "Occupants:"
msgstr "Ocupantes:"
#: converse.js:762
msgid "Features:"
msgstr "Características:"
#: converse.js:764
msgid "Requires authentication"
msgstr "Autenticación requerida"
#: converse.js:767
msgid "Hidden"
msgstr "Oculto"
#: converse.js:770
msgid "Requires an invitation"
msgstr "Requiere una invitación"
#: converse.js:773
msgid "Moderated"
msgstr "Moderado"
#: converse.js:776
msgid "Non-anonymous"
msgstr "No usuario anónimo"
#: converse.js:779
msgid "Open room"
msgstr "Abrir sala"
#: converse.js:782
msgid "Permanent room"
msgstr "Sala permanente"
#: converse.js:785
msgid "Public"
msgstr "Publico"
#: converse.js:788
msgid "Semi-anonymous"
msgstr "Semi anónimo"
#: converse.js:791
msgid "Temporary room"
msgstr "Sala temporal"
#: converse.js:794
msgid "Unmoderated"
msgstr "Sin moderar"
#: converse.js:800
msgid "Rooms"
msgstr "Salas"
#: converse.js:804
msgid "Room name"
msgstr "Nombre de sala"
#: converse.js:805
msgid "Nickname"
msgstr "Apodo"
#: converse.js:806
msgid "Server"
msgstr "Servidor"
#: converse.js:807
msgid "Join"
msgstr "Unirse"
#: converse.js:808
msgid "Show rooms"
msgstr "Mostrar salas"
#. For translators: %1$s is a variable and will be replaced with the XMPP server name
#: converse.js:841
msgid "No rooms on %1$s"
msgstr "Sin salas en %1$s"
#. For translators: %1$s is a variable and will be
#. replaced with the XMPP server name
#: converse.js:856
msgid "Rooms on %1$s"
msgstr "Salas en %1$s"
#: converse.js:1130
msgid "Set chatroom topic"
msgstr "Defina tema de sala de chat"
#: converse.js:1131
msgid "Kick user from chatroom"
msgstr "Expulsar usuario de sala de chat."
#: converse.js:1132
msgid "Ban user from chatroom"
msgstr "Prohibir usuario de sala de chat."
#: converse.js:1159
msgid "Message"
msgstr "Mensaje"
#: converse.js:1273
#: converse.js:2318
msgid "Save"
msgstr "Guardar"
#: converse.js:1274
msgid "Cancel"
msgstr "Cancelar"
#: converse.js:1321
msgid "An error occurred while trying to save the form."
msgstr "Un error ocurrido mientras trataba de guardar el formulario."
#: converse.js:1367
msgid "This chatroom requires a password"
msgstr "Esta sala de chat requiere una contraseña."
#: converse.js:1368
msgid "Password: "
msgstr "Contraseña: "
#: converse.js:1369
msgid "Submit"
msgstr "Enviar"
#: converse.js:1383
msgid "This room is not anonymous"
msgstr "Esta sala no es para usuarios anónimos"
#: converse.js:1384
msgid "This room now shows unavailable members"
msgstr "Esta sala ahora muestra los miembros no disponibles"
#: converse.js:1385
msgid "This room does not show unavailable members"
msgstr "Esta sala no muestra los miembros no disponibles"
#: converse.js:1386
msgid "Non-privacy-related room configuration has changed"
msgstr "Configuración de la sala para no relacionada con la privacidad ha sido cambiada"
#: converse.js:1387
msgid "Room logging is now enabled"
msgstr "El registro de la sala ahora está habilitada"
#: converse.js:1388
msgid "Room logging is now disabled"
msgstr "El registro de la sala ahora está deshabilitada"
#: converse.js:1389
msgid "This room is now non-anonymous"
msgstr "Esta sala ahora es para los usuarios no anónimos"
#: converse.js:1390
msgid "This room is now semi-anonymous"
msgstr "Esta sala ahora es para los usuarios semi-anónimos"
#: converse.js:1391
msgid "This room is now fully-anonymous"
msgstr "Esta sala ahora es para los usuarios completamente-anónimos"
#: converse.js:1392
msgid "A new room has been created"
msgstr "Una nueva sala ha sido creada"
#: converse.js:1393
msgid "Your nickname has been changed"
msgstr "Su apodo ha sido cambiado"
#. 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
msgid "<strong>%1$s</strong> has been banned"
msgstr "<strong>%1$s</strong> ha sido prohibido"
#. 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
msgid "<strong>%1$s</strong> has been kicked out"
msgstr "<strong>%1$s</strong> ha sido expulsado"
#. 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
msgid "<strong>%1$s</strong> has been removed because of an affiliation change"
msgstr "<strong>%1$s</strong> ha sido eliminado debido a un cambio de afiliación"
#. 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
msgid "<strong>%1$s</strong> has been removed for not being a member"
msgstr "<strong>%1$s</strong> ha sido eliminado debido a que no es miembro"
#: converse.js:1416
#: converse.js:1478
msgid "You have been banned from this room"
msgstr "Usted ha sido prohibido de esta sala"
#: converse.js:1417
msgid "You have been kicked from this room"
msgstr "Usted ha sido expulsado de esta sala"
#: converse.js:1418
msgid "You have been removed from this room because of an affiliation change"
msgstr "Usted ha sido eliminado de esta sala debido a un cambio de afiliación"
#: converse.js:1419
msgid "You have been removed from this room because the room has changed to members-only and you're not a member"
msgstr "Usted ha sido eliminado de esta sala debido a que la sala cambio su configuración a solo-miembros y usted no es un miembro"
#: converse.js:1420
msgid "You have been removed from this room because the MUC (Multi-user chat) service is being shut down."
msgstr "Usted ha sido eliminado de esta sala debido al servicio MUC (Multi-user chat) está apagado."
#: converse.js:1476
msgid "You are not on the member list of this room"
msgstr "Usted no está en la lista de miembros de esta sala"
#: converse.js:1482
msgid "No nickname was specified"
msgstr "Sin apodo especificado"
#: converse.js:1486
msgid "You are not allowed to create new rooms"
msgstr "A usted no se le permite crear nuevas salas"
#: converse.js:1488
msgid "Your nickname doesn't conform to this room's policies"
msgstr "Su apodo no se ajusta a la política de esta sala"
#: converse.js:1490
msgid "Your nickname is already taken"
msgstr "Su apodo ya ha sido tomando por otro usuario"
#: converse.js:1492
msgid "This room does not (yet) exist"
msgstr "Esta sala (aún) no existe"
#: converse.js:1494
msgid "This room has reached it's maximum number of occupants"
msgstr "Esta sala ha alcanzado su número máximo de ocupantes"
#. 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
msgid "Topic set by %1$s to: %2$s"
msgstr "Tema fijado por %1$s a: %2$s"
#: converse.js:1587
msgid "This user is a moderator"
msgstr "Este usuario es un moderador"
#: converse.js:1590
msgid "This user can send messages in this room"
msgstr "Este usuario puede enviar mensajes en esta sala"
#: converse.js:1593
msgid "This user can NOT send messages in this room"
msgstr "Este usuario NO puede enviar mensajes en esta"
#: converse.js:1796
msgid "Click to chat with this contact"
msgstr "Haga clic para conversar con este contacto"
#: converse.js:1797
#: converse.js:1801
msgid "Click to remove this contact"
msgstr "Haga clic para eliminar este contacto"
#: converse.js:2163
msgid "Contact requests"
msgstr "Solicitudes de contacto"
#: converse.js:2164
msgid "My contacts"
msgstr "Mi contactos"
#: converse.js:2165
msgid "Pending contacts"
msgstr "Contactos pendientes"
#: converse.js:2317
msgid "Custom status"
msgstr "Personalice estatus"
#: converse.js:2323
msgid "Click to change your chat status"
msgstr "Haga clic para cambiar su estatus de chat"
#: converse.js:2326
msgid "Click here to write a custom status message"
msgstr "Haga clic para escribir un mensaje de estatus personalizado"
#: converse.js:2355
#: converse.js:2363
msgid "online"
msgstr "en linea"
#: converse.js:2357
msgid "busy"
msgstr "ocupado"
#: converse.js:2359
msgid "away for long"
msgstr "lejos por mucho tiempo"
#: converse.js:2361
msgid "away"
msgstr "ausente"
#. For translators: the %1$s part gets replaced with the status
#. Example, I am online
#: converse.js:2375
#: converse.js:2409
msgid "I am %1$s"
msgstr "Yo soy %1$s"
#: converse.js:2480
msgid "Sign in"
msgstr "Registro"
#: converse.js:2483
msgid "XMPP/Jabber Username:"
msgstr "Nombre de usuario XMPP/Jabber"
#: converse.js:2485
msgid "Password:"
msgstr "Contraseña:"
#: converse.js:2487
msgid "Log In"
msgstr "Iniciar sesión"
#: converse.js:2491
msgid "BOSH Service URL:"
msgstr "URL del servicio BOSH:"
#: converse.js:2503
msgid "Connected"
msgstr "Conectado"
#: converse.js:2507
msgid "Disconnected"
msgstr "Desconectado"
#: converse.js:2511
msgid "Error"
msgstr "Error"
#: converse.js:2513
msgid "Connecting"
msgstr "Conectando"
#: converse.js:2516
msgid "Connection Failed"
msgstr "Conexión fallo"
#: converse.js:2518
msgid "Authenticating"
msgstr "Autenticando"
#: converse.js:2521
msgid "Authentication Failed"
msgstr "Autenticación fallo"
#: converse.js:2523
msgid "Disconnecting"
msgstr "Desconectando"
#: converse.js:2525
msgid "Attached"
msgstr "Adjuntado"
#: converse.js:2656
msgid "Online Contacts"
msgstr "Contactos en linea"

459
locale/es/LC_MESSAGES/es.js Normal file
View File

@ -0,0 +1,459 @@
(function (root, factory) {
define("es", ['jed'], function () {
var de = new Jed({
"domain": "converse",
"locale_data": {
"converse": {
"": {
"domain": "converse",
"lang": "es",
"plural_forms": "nplurals=2; plural=(n != 1);"
},
"Show this menu": [
null,
"Mostrar este menú"
],
"Write in the third person": [
null,
"Escribir en tercera persona"
],
"Remove messages": [
null,
"Eliminar mensajes"
],
"Personal message": [
null,
"Mensaje personal"
],
"Contacts": [
null,
"Contactos"
],
"Online": [
null,
"En linea"
],
"Busy": [
null,
"Ocupado"
],
"Away": [
null,
"Ausente"
],
"Offline": [
null,
"Desconectado"
],
"Click to add new chat contacts": [
null,
"Haga clic para agregar nuevos contactos al chat"
],
"Add a contact": [
null,
"Agregar un contacto"
],
"Contact username": [
null,
"Nombre de usuario de contacto"
],
"Add": [
null,
"Agregar"
],
"Contact name": [
null,
"Nombre de contacto"
],
"Search": [
null,
"Búsqueda"
],
"No users found": [
null,
"Sin usuarios encontrados"
],
"Click to add as a chat contact": [
null,
"Haga clic para agregar como un contacto de chat"
],
"Click to open this room": [
null,
"Haga clic para abrir esta sala"
],
"Show more information on this room": [
null,
"Mostrar mas información en esta sala"
],
"Description:": [
null,
"Descripción"
],
"Occupants:": [
null,
"Ocupantes:"
],
"Features:": [
null,
"Características:"
],
"Requires authentication": [
null,
"Autenticación requerida"
],
"Hidden": [
null,
"Oculto"
],
"Requires an invitation": [
null,
"Requiere una invitación"
],
"Moderated": [
null,
"Moderado"
],
"Non-anonymous": [
null,
"No usuario anónimo"
],
"Open room": [
null,
"Abrir sala"
],
"Permanent room": [
null,
"Sala permanente"
],
"Public": [
null,
"Publico"
],
"Semi-anonymous": [
null,
"Semi anónimo"
],
"Temporary room": [
null,
"Sala temporal"
],
"Unmoderated": [
null,
"Sin moderar"
],
"Rooms": [
null,
"Salas"
],
"Room name": [
null,
"Nombre de sala"
],
"Nickname": [
null,
"Apodo"
],
"Server": [
null,
"Servidor"
],
"Join": [
null,
"Unirse"
],
"Show rooms": [
null,
"Mostrar salas"
],
"No rooms on %1$s": [
null,
"Sin salas en %1$s"
],
"Rooms on %1$s": [
null,
"Salas en %1$s"
],
"Set chatroom topic": [
null,
"Defina tema de sala de chat"
],
"Kick user from chatroom": [
null,
"Expulsar usuario de sala de chat."
],
"Ban user from chatroom": [
null,
"Prohibir usuario de sala de chat."
],
"Message": [
null,
"Mensaje"
],
"Save": [
null,
"Guardar"
],
"Cancel": [
null,
"Cancelar"
],
"An error occurred while trying to save the form.": [
null,
"Un error ocurrido mientras trataba de guardar el formulario."
],
"This chatroom requires a password": [
null,
"Esta sala de chat requiere una contraseña."
],
"Password: ": [
null,
"Contraseña: "
],
"Submit": [
null,
"Enviar"
],
"This room is not anonymous": [
null,
"Esta sala no es para usuarios anónimos"
],
"This room now shows unavailable members": [
null,
"Esta sala ahora muestra los miembros no disponibles"
],
"This room does not show unavailable members": [
null,
"Esta sala no muestra los miembros no disponibles"
],
"Non-privacy-related room configuration has changed": [
null,
"Configuración de la sala para no relacionada con la privacidad ha sido cambiada"
],
"Room logging is now enabled": [
null,
"El registro de la sala ahora está habilitada"
],
"Room logging is now disabled": [
null,
"El registro de la sala ahora está deshabilitada"
],
"This room is now non-anonymous": [
null,
"Esta sala ahora es para los usuarios no anónimos"
],
"This room is now semi-anonymous": [
null,
"Esta sala ahora es para los usuarios semi-anónimos"
],
"This room is now fully-anonymous": [
null,
"Esta sala ahora es para los usuarios completamente-anónimos"
],
"A new room has been created": [
null,
"Una nueva sala ha sido creada"
],
"Your nickname has been changed": [
null,
"Su apodo ha sido cambiado"
],
"<strong>%1$s</strong> has been banned": [
null,
"<strong>%1$s</strong> ha sido prohibido"
],
"<strong>%1$s</strong> has been kicked out": [
null,
"<strong>%1$s</strong> ha sido expulsado"
],
"<strong>%1$s</strong> has been removed because of an affiliation change": [
null,
"<strong>%1$s</strong> ha sido eliminado debido a un cambio de afiliación"
],
"<strong>%1$s</strong> has been removed for not being a member": [
null,
"<strong>%1$s</strong> ha sido eliminado debido a que no es miembro"
],
"You have been banned from this room": [
null,
"Usted ha sido prohibido de esta sala"
],
"You have been kicked from this room": [
null,
"Usted ha sido expulsado de esta sala"
],
"You have been removed from this room because of an affiliation change": [
null,
"Usted ha sido eliminado de esta sala debido a un cambio de afiliación"
],
"You have been removed from this room because the room has changed to members-only and you're not a member": [
null,
"Usted ha sido eliminado de esta sala debido a que la sala cambio su configuración a solo-miembros y usted no es un miembro"
],
"You have been removed from this room because the MUC (Multi-user chat) service is being shut down.": [
null,
"Usted ha sido eliminado de esta sala debido al servicio MUC (Multi-user chat) está apagado."
],
"You are not on the member list of this room": [
null,
"Usted no está en la lista de miembros de esta sala"
],
"No nickname was specified": [
null,
"Sin apodo especificado"
],
"You are not allowed to create new rooms": [
null,
"A usted no se le permite crear nuevas salas"
],
"Your nickname doesn't conform to this room's policies": [
null,
"Su apodo no se ajusta a la política de esta sala"
],
"Your nickname is already taken": [
null,
"Su apodo ya ha sido tomando por otro usuario"
],
"This room does not (yet) exist": [
null,
"Esta sala (aún) no existe"
],
"This room has reached it's maximum number of occupants": [
null,
"Esta sala ha alcanzado su número máximo de ocupantes"
],
"Topic set by %1$s to: %2$s": [
null,
"Tema fijado por %1$s a: %2$s"
],
"This user is a moderator": [
null,
"Este usuario es un moderador"
],
"This user can send messages in this room": [
null,
"Este usuario puede enviar mensajes en esta sala"
],
"This user can NOT send messages in this room": [
null,
"Este usuario NO puede enviar mensajes en esta"
],
"Click to chat with this contact": [
null,
"Haga clic para conversar con este contacto"
],
"Click to remove this contact": [
null,
"Haga clic para eliminar este contacto"
],
"Contact requests": [
null,
"Solicitudes de contacto"
],
"My contacts": [
null,
"Mi contactos"
],
"Pending contacts": [
null,
"Contactos pendientes"
],
"Custom status": [
null,
"Personalice estatus"
],
"Click to change your chat status": [
null,
"Haga clic para cambiar su estatus de chat"
],
"Click here to write a custom status message": [
null,
"Haga clic para escribir un mensaje de estatus personalizado"
],
"online": [
null,
"en linea"
],
"busy": [
null,
"ocupado"
],
"away for long": [
null,
"lejos por mucho tiempo"
],
"away": [
null,
"ausente"
],
"I am %1$s": [
null,
"Yo soy %1$s"
],
"Sign in": [
null,
"Registro"
],
"XMPP/Jabber Username:": [
null,
"Nombre de usuario XMPP/Jabber"
],
"Password:": [
null,
"Contraseña:"
],
"Log In": [
null,
"Iniciar sesión"
],
"BOSH Service URL:": [
null,
"URL del servicio BOSH:"
],
"Connected": [
null,
"Conectado"
],
"Disconnected": [
null,
"Desconectado"
],
"Error": [
null,
"Error"
],
"Connecting": [
null,
"Conectando"
],
"Connection Failed": [
null,
"Conexión fallo"
],
"Authenticating": [
null,
"Autenticando"
],
"Authentication Failed": [
null,
"Autenticación fallo"
],
"Disconnecting": [
null,
"Desconectando"
],
"Attached": [
null,
"Adjuntado"
],
"Online Contacts": [
null,
"Contactos en linea"
]
}
}
});
return factory(de);
});
}(this, function (de) {
return de;
}));

View File

@ -1,9 +1,17 @@
/*
* This file specifies the language dependencies.
*
* Translations take up a lot of space and you are therefore advised to remove
* from here any languages that you don't need.
*/
(function (root, factory) {
require.config({
paths: {
"jed": "Libraries/jed",
"af": "locale/af/LC_MESSAGES/af",
"en": "locale/en/LC_MESSAGES/en",
"es": "locale/es/LC_MESSAGES/es",
"de": "locale/de/LC_MESSAGES/de",
"hu": "locale/hu/LC_MESSAGES/hu",
"it": "locale/it/LC_MESSAGES/it",
@ -15,14 +23,16 @@
'jed',
'af',
'en',
'es',
'de',
'hu',
"it",
'ptbr'
], function (jed, af, en, de, hu, it, ptbr) {
], function (jed, af, en, es, de, hu, it, ptbr) {
root.locales = {};
root.locales.af = af;
root.locales.en = en;
root.locales.es = es;
root.locales.de = de;
root.locales.hu = hu;
root.locales.it = it;

13
main.js
View File

@ -1,14 +1,3 @@
require(["jquery", "converse"], function($, converse) {
// Most of these initialization values are the defaults but they're
// included here as a reference.
converse.initialize({
auto_list_rooms: false,
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
prebind: false,
show_controlbox_by_default: true,
xhr_user_search: false
});
window.converse = converse;
});

View File

@ -1,5 +1,34 @@
{
"name": "Converse.js",
"description": "Converse.js is a web based XMPP/Jabber instant messaging client",
"version": "0.4.1"
"name": "converse.js",
"version": "0.5.0",
"description": "Browser based XMPP instant messaging client",
"main": "main.js",
"directories": {
"doc": "docs"
},
"scripts": {
"test": ""
},
"repository": {
"type": "git",
"url": "git://github.com/jcbrand/converse.js.git"
},
"keywords": [
"XMPP",
"Jabber",
"chat",
"messaging",
"chatrooms",
"webchat"
],
"author": "JC Brand",
"license": "MIT",
"bugs": {
"url": "https://github.com/jcbrand/converse.js/issues"
},
"devDependencies": {
"grunt-cli": "~0.1.9",
"grunt": "~0.4.1",
"grunt-contrib-jshint": "~0.6.0"
}
}

View File

@ -121,7 +121,7 @@
var i, t, is_last;
spyOn(this.rosterview, 'render').andCallThrough();
for (i=0; i<pend_names.length; i++) {
is_last = i==(pend_names.length-1);
is_last = i===(pend_names.length-1);
this.roster.create({
jid: pend_names[i].replace(' ','.').toLowerCase() + '@localhost',
subscription: 'none',
@ -162,7 +162,7 @@
subscription: 'both',
ask: null,
fullname: cur_names[i],
is_last: i==(cur_names.length-1)
is_last: i===(cur_names.length-1)
});
expect(this.rosterview.render).toHaveBeenCalled();
// Check that they are sorted alphabetically
@ -291,7 +291,7 @@
subscription: 'none',
ask: 'request',
fullname: req_names[i],
is_last: i==(req_names.length-1)
is_last: i===(req_names.length-1)
});
expect(this.rosterview.render).toHaveBeenCalled();
// Check that they are sorted alphabetically
@ -498,8 +498,11 @@
expect(msg_obj.get('delayed')).toEqual(false);
// Now check that the message appears inside the
// chatbox in the DOM
var txt = chatboxview.$el.find('.chat-content').find('.chat-message').find('.chat-message-content').text();
expect(txt).toEqual(message);
var $chat_content = chatboxview.$el.find('.chat-content');
var msg_txt = $chat_content.find('.chat-message').find('.chat-message-content').text();
expect(msg_txt).toEqual(message);
var sender_txt = $chat_content.find('span.chat-message-them').text();
expect(sender_txt.match(/^[0-9][0-9]:[0-9][0-9] /)).toBeTruthy();
}, converse));
}, converse));