Download:
child 19:8a8b60dadcee
parent 17:d0dc83ebbf95
18:be40f584efc1
Anton Shestakov <av6@dwimlabs.net>, Sun, 20 Mar 2016 23:30:16 +0800
register: improve scripting, move XMPP interface to a separate file

7 файлов изменено, 268 вставок(+), 154 удалений(-) [+]
coffee/register.coffee file | annotate | diff | comparison | revisions
coffee/xmpp.coffee file | annotate | diff | comparison | revisions
js/register.js file | annotate | diff | comparison | revisions
js/register.js.map file | annotate | diff | comparison | revisions
js/xmpp.js file | annotate | diff | comparison | revisions
js/xmpp.js.map file | annotate | diff | comparison | revisions
register.html file | annotate | diff | comparison | revisions
--- a/coffee/register.coffee Sun Mar 20 11:53:21 2016 +0800
+++ b/coffee/register.coffee Sun Mar 20 23:30:16 2016 +0800
@@ -23,80 +23,52 @@
when Strophe.Status.CONNECTED
console.debug('Strophe is connected.')
- console.info('My jid:', conn.jid)
- R.trigger 'v/start'
+ console.info('My jid:', X.conn.jid)
+ X.trigger('v/start')
when Strophe.Status.REGISTER
- console.debug('Got registration prompt')
- R.trigger 'r/start'
+ console.debug('Got registration prompt.')
+ X.trigger('r/start')
when Strophe.Status.REGISTERED
console.debug('Registered!')
- R.trigger 'r/done'
- conn.authenticate()
+ X.trigger('r/done')
+ X.conn.authenticate()
when Strophe.Status.CONFLICT
console.debug('Contact already exists!')
- R.trigger 'r/conflict'
+ X.trigger('r/conflict')
when Strophe.Status.NOTACCEPTABLE
console.debug('Registration form not properly filled out.')
- R.trigger 'r/failed'
+ X.trigger('r/failed')
when Strophe.Status.REGIFAIL
- console.debug('The Server does not support In-Band Registration')
- R.trigger 'r/closed'
+ console.debug('The server does not support In-Band Registration.')
+ X.trigger('r/closed')
+
+
+
+window.X = new Tram.XMPPInterface()
+
+
+X.startRegistration(onConnect)
-savevCard = (data) ->
- $vcard = $iq(type: 'set').c('vCard', xmlns: Strophe.NS.VCARD)
-
- if data.nickname
- $vcard.c('NICKNAME').t(data.nickname).up()
-
- if data.fullname
- $vcard.c('FN').t(data.fullname).up()
-
- if data.avatar
- b = ';base64,'
- d = 'data:'
- dl = d.length
- bl = b.length
- bi = data.avatar.indexOf(b)
- type = data.avatar.substr(dl, bi - dl)
- binval = data.avatar.substr(bi + bl)
-
- $vcard.c('PHOTO')
- .c('TYPE').t(type).up()
- .c('BINVAL').t(binval)
-
- okcb = ->
- console.debug('vcard is set!', arguments)
- R.trigger 'v/done'
-
- failcb = ->
- console.warn('vcard is NOT set!', arguments)
- R.trigger 'v/failed'
-
- conn.sendIQ $vcard.tree(), okcb, failcb
+$('[data-form="registration"], [data-form="vcard"]').each ->
+ $form = $(@)
+ $form.find('input').on 'keydown', (e) ->
+ if (not @required or @value isnt '') and e.keyCode is 13
+ e.preventDefault()
+ index = $form.find('input').index(@)
+ $next = $form.find('input').eq(index + 1)
+ if $next.length isnt 0
+ $next.focus()
+ else
+ $form.find('button').trigger('click')
-window.R = _.clone Backbone.Events
-
-
-_(R).extend
- register: (username, password) ->
- conn.register.fields.username = username
- conn.register.fields.password = password
- conn.register.submit()
- savevCard: savevCard
-
-
-conn = new Strophe.Connection "https://#{ Tram.config.host }/http-bind"
-conn.register.connect Tram.config.domain, onConnect
-
-
-$('#register').on 'click', ->
+$('[data-form="registration"] button').on 'click', ->
ok = true
Tram.validation.unsetError($('#username, #password1, #password2'))
ok &= Tram.validation.validateRequired($('#username'), true)
@@ -104,54 +76,55 @@
ok &= Tram.validation.validateRequired($('#password1'))
ok &= Tram.validation.validateRequired($('#password2'))
if ok
- R.register $('#username').val().trim(), $('#password1').val()
+ X.register($('#username').val().trim(), $('#password1').val())
-$('#save').on 'click', ->
+$('[data-form="vcard"] button').on 'click', ->
file = $('#avatar').get(0).files[0]
if file
reader = new FileReader()
reader.onloadend = ->
- R.savevCard
+ X.savevCard
fullname: $('#fullname').val()
nickname: $('#nickname').val()
avatar: @result
reader.readAsDataURL(file)
else
- R.savevCard
+ X.savevCard
fullname: $('#fullname').val()
nickname: $('#nickname').val()
-R.on 'r/start', ->
- $('[data-step="registration"]').removeClass 'uk-hidden'
+X.on 'r/start', ->
+ $('[data-step="registration"]').removeClass('uk-hidden')
-R.on 'r/done', ->
- $('[data-step="registration"]').addClass 'uk-hidden'
+X.on 'r/done', ->
+ $('[data-step="registration"]').addClass('uk-hidden')
-R.on 'r/closed', ->
- $('[data-msg="r/closed"]').removeClass 'uk-hidden'
+X.on 'r/closed', ->
+ $('[data-msg="r/closed"]').removeClass('uk-hidden')
-R.on 'r/conflict', ->
- Tram.validation.setError $('#username'), 'A user with this username already exists.'
+X.on 'r/conflict', ->
+ Tram.validation.setError($('#username'), 'A user with this username already exists.')
-R.on 'r/failed', ->
- $('[data-msg="r/failed"]').removeClass 'uk-hidden'
+X.on 'r/failed', ->
+ $('[data-msg="r/failed"]').removeClass('uk-hidden')
-R.on 'v/start', ->
- $('#nickname').val $('#username').val()
- $('[data-step="vcard"]').removeClass 'uk-hidden'
+X.on 'v/start', ->
+ $('#nickname').val($('#username').val())
+ $('[data-step="vcard"]').removeClass('uk-hidden')
+ $('#fullname').focus()
-R.on 'v/done', ->
- $('[data-step="vcard"]').addClass 'uk-hidden'
+X.on 'v/done', ->
+ $('[data-step="vcard"]').addClass('uk-hidden')
location.href = '/'
-R.on 'v/failed', ->
- $('[data-msg="v/failed"]').removeClass 'uk-hidden'
+X.on 'v/failed', ->
+ $('[data-msg="v/failed"]').removeClass('uk-hidden')
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/coffee/xmpp.coffee Sun Mar 20 23:30:16 2016 +0800
@@ -0,0 +1,69 @@
+class Tram.XMPPInterface
+ conn: null
+
+ constructor: ->
+
+ _prepareConnection: ->
+ if @conn?
+ console.debug('connection exists, not reconnecting')
+
+ @conn = new Strophe.Connection("https://#{ Tram.config.host }/http-bind")
+
+ connect: (node, pass, onConnect) ->
+ @_prepareConnection()
+
+ jid = "#{ node }@#{ Tram.config.domain }"
+ @conn.connect(jid, pass, onConnect)
+
+ disconnect: (reason) ->
+ if not @conn?
+ return
+
+ @conn.disconnect(reason)
+ @conn = null
+ return
+
+ startRegistration: (onConnect) ->
+ @_prepareConnection()
+
+ @conn.register.connect(Tram.config.domain, onConnect)
+
+ register: (username, password) ->
+ @conn.register.fields.username = username
+ @conn.register.fields.password = password
+ @conn.register.submit()
+
+ savevCard: (data) ->
+ $vcard = $iq(type: 'set').c('vCard', xmlns: Strophe.NS.VCARD)
+
+ if data.nickname
+ $vcard.c('NICKNAME').t(data.nickname).up()
+
+ if data.fullname
+ $vcard.c('FN').t(data.fullname).up()
+
+ if data.avatar
+ b = ';base64,'
+ d = 'data:'
+ dl = d.length
+ bl = b.length
+ bi = data.avatar.indexOf(b)
+ type = data.avatar.substr(dl, bi - dl)
+ binval = data.avatar.substr(bi + bl)
+
+ $vcard.c('PHOTO')
+ .c('TYPE').t(type).up()
+ .c('BINVAL').t(binval)
+
+ okcb = =>
+ console.debug('vcard is set!', arguments)
+ @trigger('v/done')
+
+ failcb = =>
+ console.warn('vcard is NOT set!', arguments)
+ @trigger('v/failed')
+
+ @conn.sendIQ($vcard.tree(), okcb, failcb)
+
+
+_(Tram.XMPPInterface.prototype).extend(Backbone.Events)
--- a/js/register.js Sun Mar 20 11:53:21 2016 +0800
+++ b/js/register.js Sun Mar 20 23:30:16 2016 +0800
@@ -1,6 +1,6 @@
// Generated by CoffeeScript 1.10.0
(function() {
- var conn, onConnect, savevCard;
+ var onConnect;
onConnect = function(status, error) {
switch (status) {
@@ -20,77 +20,50 @@
return console.debug('Strophe is disconnected.');
case Strophe.Status.CONNECTED:
console.debug('Strophe is connected.');
- console.info('My jid:', conn.jid);
- return R.trigger('v/start');
+ console.info('My jid:', X.conn.jid);
+ return X.trigger('v/start');
case Strophe.Status.REGISTER:
- console.debug('Got registration prompt');
- return R.trigger('r/start');
+ console.debug('Got registration prompt.');
+ return X.trigger('r/start');
case Strophe.Status.REGISTERED:
console.debug('Registered!');
- R.trigger('r/done');
- return conn.authenticate();
+ X.trigger('r/done');
+ return X.conn.authenticate();
case Strophe.Status.CONFLICT:
console.debug('Contact already exists!');
- return R.trigger('r/conflict');
+ return X.trigger('r/conflict');
case Strophe.Status.NOTACCEPTABLE:
console.debug('Registration form not properly filled out.');
- return R.trigger('r/failed');
+ return X.trigger('r/failed');
case Strophe.Status.REGIFAIL:
- console.debug('The Server does not support In-Band Registration');
- return R.trigger('r/closed');
+ console.debug('The server does not support In-Band Registration.');
+ return X.trigger('r/closed');
}
};
- savevCard = function(data) {
- var $vcard, b, bi, binval, bl, d, dl, failcb, okcb, type;
- $vcard = $iq({
- type: 'set'
- }).c('vCard', {
- xmlns: Strophe.NS.VCARD
+ window.X = new Tram.XMPPInterface();
+
+ X.startRegistration(onConnect);
+
+ $('[data-form="registration"], [data-form="vcard"]').each(function() {
+ var $form;
+ $form = $(this);
+ return $form.find('input').on('keydown', function(e) {
+ var $next, index;
+ if ((!this.required || this.value !== '') && e.keyCode === 13) {
+ e.preventDefault();
+ index = $form.find('input').index(this);
+ $next = $form.find('input').eq(index + 1);
+ if ($next.length !== 0) {
+ return $next.focus();
+ } else {
+ return $form.find('button').trigger('click');
+ }
+ }
});
- if (data.nickname) {
- $vcard.c('NICKNAME').t(data.nickname).up();
- }
- if (data.fullname) {
- $vcard.c('FN').t(data.fullname).up();
- }
- if (data.avatar) {
- b = ';base64,';
- d = 'data:';
- dl = d.length;
- bl = b.length;
- bi = data.avatar.indexOf(b);
- type = data.avatar.substr(dl, bi - dl);
- binval = data.avatar.substr(bi + bl);
- $vcard.c('PHOTO').c('TYPE').t(type).up().c('BINVAL').t(binval);
- }
- okcb = function() {
- console.debug('vcard is set!', arguments);
- return R.trigger('v/done');
- };
- failcb = function() {
- console.warn('vcard is NOT set!', arguments);
- return R.trigger('v/failed');
- };
- return conn.sendIQ($vcard.tree(), okcb, failcb);
- };
-
- window.R = _.clone(Backbone.Events);
-
- _(R).extend({
- register: function(username, password) {
- conn.register.fields.username = username;
- conn.register.fields.password = password;
- return conn.register.submit();
- },
- savevCard: savevCard
});
- conn = new Strophe.Connection("https://" + Tram.config.host + "/http-bind");
-
- conn.register.connect(Tram.config.domain, onConnect);
-
- $('#register').on('click', function() {
+ $('[data-form="registration"] button').on('click', function() {
var ok;
ok = true;
Tram.validation.unsetError($('#username, #password1, #password2'));
@@ -99,17 +72,17 @@
ok &= Tram.validation.validateRequired($('#password1'));
ok &= Tram.validation.validateRequired($('#password2'));
if (ok) {
- return R.register($('#username').val().trim(), $('#password1').val());
+ return X.register($('#username').val().trim(), $('#password1').val());
}
});
- $('#save').on('click', function() {
+ $('[data-form="vcard"] button').on('click', function() {
var file, reader;
file = $('#avatar').get(0).files[0];
if (file) {
reader = new FileReader();
reader.onloadend = function() {
- return R.savevCard({
+ return X.savevCard({
fullname: $('#fullname').val(),
nickname: $('#nickname').val(),
avatar: this.result
@@ -117,44 +90,45 @@
};
return reader.readAsDataURL(file);
} else {
- return R.savevCard({
+ return X.savevCard({
fullname: $('#fullname').val(),
nickname: $('#nickname').val()
});
}
});
- R.on('r/start', function() {
+ X.on('r/start', function() {
return $('[data-step="registration"]').removeClass('uk-hidden');
});
- R.on('r/done', function() {
+ X.on('r/done', function() {
return $('[data-step="registration"]').addClass('uk-hidden');
});
- R.on('r/closed', function() {
+ X.on('r/closed', function() {
return $('[data-msg="r/closed"]').removeClass('uk-hidden');
});
- R.on('r/conflict', function() {
+ X.on('r/conflict', function() {
return Tram.validation.setError($('#username'), 'A user with this username already exists.');
});
- R.on('r/failed', function() {
+ X.on('r/failed', function() {
return $('[data-msg="r/failed"]').removeClass('uk-hidden');
});
- R.on('v/start', function() {
+ X.on('v/start', function() {
$('#nickname').val($('#username').val());
- return $('[data-step="vcard"]').removeClass('uk-hidden');
+ $('[data-step="vcard"]').removeClass('uk-hidden');
+ return $('#fullname').focus();
});
- R.on('v/done', function() {
+ X.on('v/done', function() {
$('[data-step="vcard"]').addClass('uk-hidden');
return location.href = '/';
});
- R.on('v/failed', function() {
+ X.on('v/failed', function() {
return $('[data-msg="v/failed"]').removeClass('uk-hidden');
});
--- a/js/register.js.map Sun Mar 20 11:53:21 2016 +0800
+++ b/js/register.js.map Sun Mar 20 23:30:16 2016 +0800
@@ -6,5 +6,5 @@
"coffee/register.coffee"
],
"names": [],
- "mappings": "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"
+ "mappings": "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"
}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/xmpp.js Sun Mar 20 23:30:16 2016 +0800
@@ -0,0 +1,87 @@
+// Generated by CoffeeScript 1.10.0
+(function() {
+ Tram.XMPPInterface = (function() {
+ XMPPInterface.prototype.conn = null;
+
+ function XMPPInterface() {}
+
+ XMPPInterface.prototype._prepareConnection = function() {
+ if (this.conn != null) {
+ console.debug('connection exists, not reconnecting');
+ }
+ return this.conn = new Strophe.Connection("https://" + Tram.config.host + "/http-bind");
+ };
+
+ XMPPInterface.prototype.connect = function(node, pass, onConnect) {
+ var jid;
+ this._prepareConnection();
+ jid = node + "@" + Tram.config.domain;
+ return this.conn.connect(jid, pass, onConnect);
+ };
+
+ XMPPInterface.prototype.disconnect = function(reason) {
+ if (this.conn == null) {
+ return;
+ }
+ this.conn.disconnect(reason);
+ this.conn = null;
+ };
+
+ XMPPInterface.prototype.startRegistration = function(onConnect) {
+ this._prepareConnection();
+ return this.conn.register.connect(Tram.config.domain, onConnect);
+ };
+
+ XMPPInterface.prototype.register = function(username, password) {
+ this.conn.register.fields.username = username;
+ this.conn.register.fields.password = password;
+ return this.conn.register.submit();
+ };
+
+ XMPPInterface.prototype.savevCard = function(data) {
+ var $vcard, b, bi, binval, bl, d, dl, failcb, okcb, type;
+ $vcard = $iq({
+ type: 'set'
+ }).c('vCard', {
+ xmlns: Strophe.NS.VCARD
+ });
+ if (data.nickname) {
+ $vcard.c('NICKNAME').t(data.nickname).up();
+ }
+ if (data.fullname) {
+ $vcard.c('FN').t(data.fullname).up();
+ }
+ if (data.avatar) {
+ b = ';base64,';
+ d = 'data:';
+ dl = d.length;
+ bl = b.length;
+ bi = data.avatar.indexOf(b);
+ type = data.avatar.substr(dl, bi - dl);
+ binval = data.avatar.substr(bi + bl);
+ $vcard.c('PHOTO').c('TYPE').t(type).up().c('BINVAL').t(binval);
+ }
+ okcb = (function(_this) {
+ return function() {
+ console.debug('vcard is set!', arguments);
+ return _this.trigger('v/done');
+ };
+ })(this);
+ failcb = (function(_this) {
+ return function() {
+ console.warn('vcard is NOT set!', arguments);
+ return _this.trigger('v/failed');
+ };
+ })(this);
+ return this.conn.sendIQ($vcard.tree(), okcb, failcb);
+ };
+
+ return XMPPInterface;
+
+ })();
+
+ _(Tram.XMPPInterface.prototype).extend(Backbone.Events);
+
+}).call(this);
+
+//# sourceMappingURL=xmpp.js.map
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/js/xmpp.js.map Sun Mar 20 23:30:16 2016 +0800
@@ -0,0 +1,10 @@
+{
+ "version": 3,
+ "file": "xmpp.js",
+ "sourceRoot": "..",
+ "sources": [
+ "coffee/xmpp.coffee"
+ ],
+ "names": [],
+ "mappings": "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"
+}
\ No newline at end of file
--- a/register.html Sun Mar 20 11:53:21 2016 +0800
+++ b/register.html Sun Mar 20 23:30:16 2016 +0800
@@ -28,7 +28,7 @@
<div class="uk-alert uk-alert-danger uk-hidden" data-msg="r/closed">Registration is closed at the moment.</div>
- <div class="uk-form uk-form-horizontal uk-hidden" data-step="registration">
+ <div class="uk-form uk-form-horizontal uk-hidden" data-step="registration" data-form="registration">
<div class="uk-form-row">
<label for="username" class="uk-form-label">Username</label>
<div class="uk-form-controls">
@@ -50,13 +50,13 @@
<div class="uk-form-row">
<div class="uk-form-controls">
<div class="uk-alert uk-alert-danger uk-hidden" data-msg="r/failed">Unspecified error, sorry.</div>
- <button id="register" type="button" class="uk-button uk-button-primary">Register</button>
+ <button type="button" class="uk-button uk-button-primary">Register</button>
<a class="uk-float-right uk-button uk-button-link" href="/">Log in</a>
</div>
</div>
</div>
- <div class="uk-form uk-form-horizontal uk-hidden" data-step="vcard">
+ <div class="uk-form uk-form-horizontal uk-hidden" data-step="vcard" data-form="vcard">
<div class="uk-form-row">
<label for="fullname" class="uk-form-label">Full Name</label>
<div class="uk-form-controls">
@@ -77,7 +77,7 @@
</div>
<div class="uk-form-row">
<div class="uk-form-controls">
- <button id="save" class="uk-button uk-button-primary">Save</button>
+ <button class="uk-button uk-button-primary">Save</button>
</div>
</div>
</div>
@@ -87,6 +87,7 @@
<script src='/js/tram.js'></script>
<script src='/js/validation.js'></script>
+ <script src='/js/xmpp.js'></script>
<script src='/config.js'></script>
<script src='/js/register.js'></script>
</body>