151:0178573216e3
Anton Shestakov <av6@dwimlabs.net>, Thu, 14 Apr 2016 02:05:24 +0800
index: remove offline contacts only when they change to being offline Since new contacts are currently added while they still have the default presence of 'unavailable', add event sees them as offline and throws them away immediately, before their presence could change to something else.

next change 155:89f02b4d8280
previous change 123:8ef1d512ccf8

js/register.js

Permissions: -rw-r--r--

Other formats: Feeds:
// Generated by CoffeeScript 1.10.0
(function() {
var ProfileData, RegistrationData, cancelfn, registerfn, savefn,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
window.clientState = new Tram.ClientState();
window.progressApp = new Tram.ProgressApp({
el: $('[data-app="progress"]'),
model: clientState
});
RegistrationData = (function(superClass) {
extend(RegistrationData, superClass);
function RegistrationData() {
return RegistrationData.__super__.constructor.apply(this, arguments);
}
RegistrationData.prototype.defaults = {
username: '',
password1: '',
password2: ''
};
RegistrationData.prototype.validate = function(attrs, options) {
var ref, ref1, ref2, ref3, ref4;
this.unset('username-errors');
this.unset('password1-errors');
this.unset('password2-errors');
if (((ref = attrs.username) != null ? ref : '').trim() === '') {
this.set('username-errors', ['This field is required.']);
}
if (((ref1 = attrs.password1) != null ? ref1 : '') === '') {
this.set('password1-errors', ['This field is required.']);
}
if (((ref2 = attrs.password1) != null ? ref2 : '') !== ((ref3 = attrs.password2) != null ? ref3 : '')) {
this.set('password2-errors', ['Passwords must match.']);
} else if (((ref4 = attrs.password2) != null ? ref4 : '') === '') {
this.set('password2-errors', ['This field is required.']);
}
return this.has('username-errors') || this.has('password1-errors') || this.has('password2-errors');
};
return RegistrationData;
})(Backbone.Model);
ProfileData = (function(superClass) {
extend(ProfileData, superClass);
function ProfileData() {
return ProfileData.__super__.constructor.apply(this, arguments);
}
ProfileData.prototype.defaults = {
fullname: '',
nickname: '',
avatar: ''
};
return ProfileData;
})(Backbone.Model);
window.regData = new RegistrationData();
window.vcData = new ProfileData();
registerfn = function() {
if (regData.isValid()) {
clientState.set('progress', 0);
return X.register(regData.get('username').trim(), regData.get('password1'));
}
};
savefn = function() {
var data, failcb, file, okcb, reader;
data = {
fullname: vcData.get('fullname').trim(),
nickname: vcData.get('nickname').trim()
};
okcb = function() {
clientState.set('progress', 100);
console.debug('vcard is set!', arguments);
$('[data-step="vcard"]').addClass('uk-hidden');
return location.href = '/';
};
failcb = function() {
clientState.unset('progress');
console.warn('vcard is NOT set!', arguments);
return $('[data-msg="save-failed"]').removeClass('uk-hidden');
};
file = $('#avatar').get(0).files[0];
if (file != null) {
reader = new FileReader();
reader.onloadend = function() {
_(data).extend({
avatar: reader.result
});
clientState.set('progress', 0);
return X.savevCard(data, okcb, failcb);
};
return reader.readAsDataURL(file);
} else {
clientState.set('progress', 0);
return X.savevCard(data, okcb, failcb);
}
};
cancelfn = function() {
return X.unregister();
};
window.regRivet = rivets.bind($('[data-form="registration"]'), {
data: regData,
register: registerfn
});
window.vcRivet = rivets.bind($('[data-form="vcard"]'), {
data: vcData,
save: savefn,
cancel: cancelfn
});
window.X = new Tram.XMPPInterface();
X.on('register', function() {
return $('[data-step="registration"]').removeClass('uk-hidden');
});
X.on('registered', function() {
X.finishRegistration();
return $('[data-step="registration"]').addClass('uk-hidden');
});
X.on('regifail', function() {
return $('[data-msg="registration-closed"]').removeClass('uk-hidden');
});
X.on('conflict', function() {
return regData.set('username-errors', ['A user with this username already exists.']);
});
X.on('notacceptable', function() {
return $('[data-msg="registration-failed"]').removeClass('uk-hidden');
});
X.on('connected', function() {
vcData.set('nickname', regData.get('username').trim());
$('[data-step="vcard"]').removeClass('uk-hidden');
return $('#fullname').focus();
});
X.on('disconnected', function() {
return location.reload();
});
X.on('status', function(status) {
switch (status) {
case Strophe.Status.REGISTERED:
return clientState.set('progress', 50);
case Strophe.Status.CONNECTED:
return clientState.set('progress', 100);
default:
return clientState.unset('progress');
}
});
X.startRegistration();
$('[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');
}
}
});
});
}).call(this);
//# sourceMappingURL=register.js.map