diff --git a/webui-src/app/people/people_ownids.js b/webui-src/app/people/people_ownids.js index 0e8e8f1..533199e 100644 --- a/webui-src/app/people/people_ownids.js +++ b/webui-src/app/people/people_ownids.js @@ -2,16 +2,72 @@ let m = require('mithril'); let rs = require('rswebui'); let widget = require('widgets'); - const CreateIdentity = () => { + // TODO: set user avatar + let name = '', + pgpPassword = '', + pseudonimous = false; return { view: () => [ m('i.fas.fa-user-plus'), m('h3', 'Create new Identity'), m('hr'), - m('input[type=text][placeholder=Name]'), - m('p', '< Not implemented yet >'), - ] + m('input[type=text][placeholder=Name]', { + value: name, + oninput: e => (name = e.target.value), + }), + 'Type:', + m( + 'select', + { + value: pseudonimous, + oninput: e => (type = e.target.value), + }, + [ + m('option[value=false]', 'Linked to your Profile'), + m('option[value=true]', 'Pseudonymous'), + ], + ), + m('br'), + m('input[type=password][placeholder=Retroshare Passphrase]', { + value: pgpPassword, + oninput: e => (pgpPassword = e.target.value), + }), + m( + 'p', + 'You can have one or more identities. ' + + 'They are used when you chat in lobbies, ' + + 'forums and channel comments. ' + + 'They act as the destination for distant chat and ' + + 'the Retroshare distant mail system.', + ), + m( + 'button', + { + onclick: () => + rs.rsJsonApiRequest( + '/rsIdentity/createIdentity', + { + name, + pseudonimous, + pgpPassword, + }, + data => { + const message = data.retval + ? 'Successfully created identity.' + : 'An error occured while creating identity.'; + widget.popupMessage([ + m('h3', 'Create new Identity'), + m('hr'), + message, + ]); + m.redraw(); + }, + ), + }, + 'Create', + ), + ], }; }; @@ -21,33 +77,44 @@ const EditIdentity = () => { m('i.fas.fa-user-edit'), m('h3', 'Edit Identity'), m('hr'), - m('input[type=text][placeholder=Name]',{}), + m('input[type=text][placeholder=Name]', {}), m('canvas'), m('button', 'Save'), - ] + ], }; }; const DeleteIdentity = () => { return { - view: (v) => [ + view: v => [ m('i.fas.fa-user-times'), m('h3', 'Delete Identity: ' + v.attrs.name), m('hr'), - m('p', - 'Are you sure you want to delete this Identity? It cannot be undone' + m( + 'p', + 'Are you sure you want to delete this Identity? It cannot be undone', ), - m('button', { - onclick: () => rs.rsJsonApiRequest('/rsIdentity/deleteIdentity', { - id: v.attrs.id - }, () => widget.popupMessage([ - m('i.fas.fa-user-edit'), - m('h3', 'Delete Identity: ' + v.attrs.name), - m('hr'), - m('p', 'Identity Deleted successfuly.'), - ])), - }, 'Confirm'), - ] + m( + 'button', + { + onclick: () => + rs.rsJsonApiRequest( + '/rsIdentity/deleteIdentity', + { + id: v.attrs.id, + }, + () => + widget.popupMessage([ + m('i.fas.fa-user-edit'), + m('h3', 'Delete Identity: ' + v.attrs.name), + m('hr'), + m('p', 'Identity Deleted successfuly.'), + ]), + ), + }, + 'Confirm', + ), + ], }; }; @@ -55,46 +122,69 @@ const Identity = () => { let details = {}; let avatarURI = ''; return { - oninit: (v) => - rs.rsJsonApiRequest('/rsIdentity/getIdDetails', { - id: v.attrs.id, - }, (data) => { - details = data.details; - // Creating URI during fetch because `details` is uninitialized - // during view run, due to request being async. - avatarURI = 'data:image/png;base64,' + data.details.mAvatar.mData; - }), - view: (v) => m('.identity', { - key: details.mId, - }, [ - m('img.avatar', { - src: avatarURI, - }), - m('h4', details.mNickname), - m('.details', [ - m('p', 'ID:'), - m('p', details.mId), - m('p', 'Type:'), - m('p', details.mFlags === 14 ? 'Signed ID' : 'Anonymous ID'), - m('p', 'Owner node ID:'), - m('p', details.mPgpId), - m('p', 'Created on:'), - m('p', new Date(details.mPublishTS * 1000).toLocaleString()), - m('p', 'Last used:'), - m('p', new Date(details.mLastUsageTS * 1000).toDateString()), - ]), - m('button', { - onclick: () => widget.popupMessage(m(EditIdentity, { - details, - })) - }, 'Edit'), - m('button.red', { - onclick: () => widget.popupMessage(m(DeleteIdentity, { - id: details.mId, - name: details.mNickname, - })) - }, 'Delete'), - ]), + oninit: v => + rs.rsJsonApiRequest( + '/rsIdentity/getIdDetails', + { + id: v.attrs.id, + }, + data => { + details = data.details; + // Creating URI during fetch because `details` is uninitialized + // during view run, due to request being async. + avatarURI = 'data:image/png;base64,' + data.details.mAvatar.mData; + }, + ), + view: v => + m( + '.identity', + { + key: details.mId, + }, + [ + m('img.avatar', { + src: avatarURI, + }), + m('h4', details.mNickname), + m('.details', [ + m('p', 'ID:'), + m('p', details.mId), + m('p', 'Type:'), + m('p', details.mFlags === 14 ? 'Signed ID' : 'Anonymous ID'), + m('p', 'Owner node ID:'), + m('p', details.mPgpId), + m('p', 'Created on:'), + m('p', new Date(details.mPublishTS * 1000).toLocaleString()), + m('p', 'Last used:'), + m('p', new Date(details.mLastUsageTS * 1000).toDateString()), + ]), + m( + 'button', + { + onclick: () => + widget.popupMessage( + m(EditIdentity, { + details, + }), + ), + }, + 'Edit', + ), + m( + 'button.red', + { + onclick: () => + widget.popupMessage( + m(DeleteIdentity, { + id: details.mId, + name: details.mNickname, + }), + ), + }, + 'Delete', + ), + ], + ), }; }; @@ -103,26 +193,40 @@ const Layout = () => { let pseudonIds = []; return { oninit: () => { - rs.rsJsonApiRequest('/rsIdentity/getOwnSignedIds', {}, - (data) => ownIds = data.ids); - rs.rsJsonApiRequest('/rsIdentity/getOwnPseudonimousIds', {}, - (data) => pseudonIds = data.ids); + rs.rsJsonApiRequest( + '/rsIdentity/getOwnSignedIds', + {}, + data => (ownIds = data.ids), + ); + rs.rsJsonApiRequest( + '/rsIdentity/getOwnPseudonimousIds', + {}, + data => (pseudonIds = data.ids), + ); }, - view: () => m('.widget', [ - m('h3', 'Own Identities'), - m('hr'), - m('button', { - onclick: () => widget.popupMessage(m(CreateIdentity)), - }, 'New Identity'), - ownIds.map(id => m(Identity, { - id, - })), - pseudonIds.map(id => m(Identity, { - id, - })), - ]) + view: () => + m('.widget', [ + m('h3', 'Own Identities'), + m('hr'), + m( + 'button', + { + onclick: () => widget.popupMessage(m(CreateIdentity)), + }, + 'New Identity', + ), + ownIds.map(id => + m(Identity, { + id, + }), + ), + pseudonIds.map(id => + m(Identity, { + id, + }), + ), + ]), }; }; module.exports = Layout; -