authd-maquettec/js/user-configuration-panel.js

223 lines
8.6 KiB
JavaScript

// Generated by LiveScript 1.6.0
(function(){
var h, AuthWS, getFullName, defaultSideBarRenderer, defaultHeadingRenderer, Fields, UserConfigurationPanel;
h = require("maquette").h;
AuthWS = require("./authws.js");
getFullName = function(self){
var fullName, ref$;
fullName = ((ref$ = self.profile) != null ? ref$.fullName : void 8) || "";
if (fullName === "") {
return self.user.login;
} else {
return fullName;
}
};
defaultSideBarRenderer = function(self){
var avatar, ref$;
return h('div', {
key: 'side-bar'
}, [h('figure.image.is-128x128.is-clipped', [(avatar = (ref$ = self.profile) != null ? ref$.avatar : void 8) ? h('img', {
src: avatar,
alt: "Avatar of " + getFullName(self)
}) : void 8])]);
};
defaultHeadingRenderer = function(self){
var fullName;
fullName = getFullName(self);
return h('div.section', {
key: 'heading'
}, [h('div.media', [
h('div.media-content', [h('div.title.is-2', [fullName]), fullName !== self.user.login ? h('div.title.is-3.subtitle', [self.user.login]) : void 8]), self.onLogout ? h('div.media-right', [h('a', {
onclick: function(){
return self.onLogout();
}
}, ["Logout"])]) : void 8
])]);
};
Fields = {
renderTextInput: function(token, authWs, key, inputs, model, onRequest){
var upload;
upload = function(){
var payload, _key, ref$, value;
console.log("clickity click", key, inputs[key], inputs);
if (!inputs[key]) {
return;
}
payload = {};
for (_key in ref$ = model) {
value = ref$[_key];
payload[_key] = value;
}
payload[key] = inputs[key];
inputs[key] = void 8;
onRequest();
return authWs.setExtra(token, "profile", payload);
};
return h('div.field.has-addons', {
key: key
}, [
h('div.control.is-expanded', [h('input.input', {
value: inputs[key] || model[key],
oninput: function(e){
console.log("input for", key);
return inputs[key] = e.target.value;
}
})]), h('div.control', [h('div.button', {
onclick: upload
}, ["Update"])])
]);
}
};
UserConfigurationPanel = function(args){
var self, authWs;
self = {
user: args.user || {},
profile: args.profile,
token: args.token,
authwsUrl: args.authwsUrl || (location.protocol === 'https' ? 'wss' : 'ws') + '://' + location.hostname + ":9999/auth.JSON",
sideBarRenderer: args.sideBarRenderer || defaultSideBarRenderer,
headingRenderer: args.headingRenderer || defaultHeadingRenderer,
onModelUpdate: args.onModelUpdate || function(){},
onLogout: args.onLogout || void 8,
model: args.model || [["fullName", "Full Name", "string"], ["avatar", "Profile Picture", "image-url"], ["email", "Mail Address", "string"]],
input: {}
};
authWs = AuthWS(self.authwsUrl);
authWs.addEventListener('extra', function(message){
if (message.name === "profile") {
console.log("got profile", message.extra);
self.profile = message.extra || {};
return self.onModelUpdate();
}
});
authWs.addEventListener('extra-updated', function(message){
if (message.name === "profile") {
console.log("got profile", message.extra);
self.profile = message.extra || {};
return self.onModelUpdate();
}
});
authWs.addEventListener('error', function(message){
self.error = message.reason;
return self.onModelUpdate();
});
authWs.addEventListener('user-edited', function(message){
self.input["password.old"] = void 8;
self.input["password.new"] = void 8;
self.input["password.new2"] = void 8;
self.success = "password";
return self.onModelUpdate();
});
if (!self.profile) {
authWs.socket.onopen = function(){
return authWs.getExtra(self.token, "profile");
};
}
self.render = function(){
var element, key, label, type, service, permissions;
return h('div.columns', {
key: self
}, [
h('div.column.is-narrow', [self.sideBarRenderer(self)]), h('div.column', [
self.headingRenderer(self), self.profile
? h('div.box', {
key: 'profile'
}, [h('div.form', [
h('div.title.is-4', ["Profile"]), (function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = self.model).length; i$ < len$; ++i$) {
element = ref$[i$];
key = element[0], label = element[1], type = element[2];
switch (type) {
case "string":
case "image-url":
results$.push(h('div.field', {
key: key
}, [h('div.label', [label]), Fields.renderTextInput(self.token, authWs, key, self.input, self.profile, fn$)]));
}
}
return results$;
function fn$(){
return self.error = void 8;
}
}())
])])
: h('div.button.is-loading'), h('div.box', {
key: 'password'
}, [
h('div.title.is-4', ["Password"]), h('div.label', ["Old password"]), h('div.control', [
h('input.input', {
type: 'password',
value: self.input["password.old"],
oninput: function(e){
return self.input["password.old"] = e.target.value;
}
}), self.error === "invalid credentials" ? h('div.help.is-danger', ["The old password was invalid!"]) : void 8
]), h('div.label', ["New password"]), h('div.control', [h('input.input', {
type: 'password',
value: self.input["password.new"],
oninput: function(e){
return self.input["password.new"] = e.target.value;
}
})]), h('div.label', ["New password (repeat)"]), h('div.field.has-addons', [
h('div.control.is-expanded', [h('input.input', {
type: 'password',
value: self.input["password.new2"],
oninput: function(e){
return self.input["password.new2"] = e.target.value;
}
})]), h('div.control', [h('div.button', {
classes: {
"is-danger": self.input["password.new"] && self.input["password.new"] !== self.input["password.new2"],
"is-static": !self.input["password.new"] && self.input["password.new"] !== self.input["password.new2"]
},
onclick: function(){
if (self.input["password.new"] !== self.input["password.new2"]) {
return;
}
self.error = void 8;
return authWs.updatePassword(self.user.login, self.input["password.old"], self.input["password.new"]);
}
}, ["Update"])])
]), self.success === "password" ? h('div.help.is-success', ["Password successfully updated!"]) : void 8
]), self.showDeveloper
? h('div.box', {
key: 'passwd'
}, [
h('div.title.is-4', ["Permissions"]), h('div.form', [
h('div.field', {
key: 'uid'
}, [h('div.label', ["User ID"]), h('div.control', [self.user.uid.toString()])]), h('div.field', {
key: 'gid'
}, [h('div.label', ["Group ID"]), h('div.control', [self.user.gid.toString()])]), h('div.field', {
key: 'permissions'
}, [
h('div.label', ["Permissions"]), h('div.control.is-grouped', [h('div.tags', [(function(){
var ref$, results$ = [];
for (service in ref$ = self.user.permissions) {
permissions = ref$[service];
results$.push(permissions.map(fn$));
}
return results$;
function fn$(perm){
return h('div.tag', [service, permission]);
}
}())])])
])
])
])
: h('a.is-pulled-right.is-small.has-text-grey', {
key: 'passwd',
onclick: function(){
self.showDeveloper = true;
return self.onModelUpdate();
}
}, ["Show developer data!"])
])
]);
};
return self;
};
module.exports = UserConfigurationPanel;
}).call(this);