Comments prototype
parent
e6af3476d9
commit
3be884d702
@ -0,0 +1,105 @@
|
||||
define([
|
||||
'json.sortify',
|
||||
'/common/common-util.js',
|
||||
'/common/common-interface.js',
|
||||
'/customize/messages.js'
|
||||
], function (Sortify, Util, UI, Messages) {
|
||||
var Comments = {};
|
||||
|
||||
var COMMENTS = {
|
||||
authors: {},
|
||||
messages: {}
|
||||
};
|
||||
|
||||
// XXX function duplicated from www/code/markers.js
|
||||
var authorUid = function (existing) {
|
||||
if (!Array.isArray(existing)) { existing = []; }
|
||||
var n;
|
||||
var i = 0;
|
||||
while (!n || existing.indexOf(n) !== -1 && i++ < 1000) {
|
||||
n = Math.floor(Math.random() * 1000000);
|
||||
}
|
||||
// If we can't find a valid number in 1000 iterations, use 0...
|
||||
if (existing.indexOf(n) !== -1) { n = 0; }
|
||||
return n;
|
||||
};
|
||||
var getAuthorId = function (Env, curve) {
|
||||
var existing = Object.keys(Env.comments.authors || {}).map(Number);
|
||||
if (!Env.common.isLoggedIn()) { return authorUid(existing); }
|
||||
|
||||
var uid;
|
||||
existing.some(function (id) {
|
||||
var author = Env.comments.authors[id] || {};
|
||||
if (author.curvePublic !== curvePublic) { return; }
|
||||
uid = Number(id);
|
||||
return true;
|
||||
});
|
||||
return uid || authorUid(existing);
|
||||
};
|
||||
|
||||
var updateAuthorData = function (Env) {
|
||||
var userData = Env.metadataMgr.getUserData();
|
||||
var myAuthorId = getAuthorId(Env, userData.curvePublic);
|
||||
var data = Env.comments.authors[myAuthorId] = Env.comments.authors[myAuthorId] || {};
|
||||
data.name = userData.name;
|
||||
data.avatar = userData.avatar;
|
||||
data.profile = userData.profile;
|
||||
data.curvePublic = userData.curvePublic;
|
||||
console.log(data);
|
||||
return myAuthorId;
|
||||
};
|
||||
|
||||
var onChange = function (Env) {
|
||||
var md = Util.clone(Env.metadataMgr.getMetadata());
|
||||
Env.comments = md.comments;
|
||||
if (!Env.comments) { Env.comments = Util.clone(COMMENTS); }
|
||||
};
|
||||
|
||||
Comments.create = function (cfg) {
|
||||
var Env = cfg;
|
||||
Env.comments = Util.clone(COMMENTS);
|
||||
|
||||
Env.editor.plugins.comments.addComment = function (uid, addMark) {
|
||||
if (!Env.comments) { Env.comments = Util.clone(COMMENTS); }
|
||||
|
||||
UI.prompt("Message", "", function (val) { // XXX
|
||||
if (!val) { return; }
|
||||
if (!editor.getSelection().getSelectedText()) {
|
||||
// text has been deleted by another user while we were typing our comment?
|
||||
return void UI.warn(Messages.error);
|
||||
}
|
||||
var myId = updateAuthorData(Env);
|
||||
Env.comments.messages[uid] = {
|
||||
user: myId,
|
||||
time: +new Date(),
|
||||
message: val
|
||||
};
|
||||
var md = Util.clone(Env.metadataMgr.getMetadata());
|
||||
md.comments = Util.clone(Env.comments);
|
||||
metadataMgr.updateMetadata(md);
|
||||
|
||||
addMark();
|
||||
|
||||
Env.framework.localChange();
|
||||
});
|
||||
};
|
||||
|
||||
var call = function (f) {
|
||||
return function () {
|
||||
try {
|
||||
[].unshift.call(arguments, Env);
|
||||
return f.apply(null, arguments);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
Env.metadataMgr.onChange(call(onChange));
|
||||
|
||||
return {
|
||||
};
|
||||
};
|
||||
|
||||
return Comments;
|
||||
});
|
Loading…
Reference in New Issue