Ability to change the username (the user ID is displayed by default)
This commit is contained in:
parent
6e50ae94dd
commit
eca4ec699c
@ -271,19 +271,24 @@ define([
|
|||||||
wc.onPeerMessage = function(peerId, type) {
|
wc.onPeerMessage = function(peerId, type) {
|
||||||
onPeerMessage(peerId, type, wc);
|
onPeerMessage(peerId, type, wc);
|
||||||
};
|
};
|
||||||
|
if(config.setMyID) {
|
||||||
|
config.setMyID({
|
||||||
|
myID: wc.myID
|
||||||
|
});
|
||||||
|
}
|
||||||
// Open a Chainpad session
|
// Open a Chainpad session
|
||||||
realtime = createRealtime();
|
realtime = createRealtime();
|
||||||
|
|
||||||
if(config.onInit) {
|
if(config.onInit) {
|
||||||
config.onInit({
|
config.onInit({
|
||||||
|
myID: wc.myID,
|
||||||
realtime: realtime,
|
realtime: realtime,
|
||||||
webChannel: wc,
|
webChannel: wc,
|
||||||
userList: userList
|
userList: userList
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Trigger onJoining with our own Cryptpad username to tell the toolbar that we are synced
|
// Trigger onJoining with our own Cryptpad username to tell the toolbar that we are synced
|
||||||
onJoining(userName);
|
onJoining(wc.myID);
|
||||||
|
|
||||||
// we're fully synced
|
// we're fully synced
|
||||||
initializing = false;
|
initializing = false;
|
||||||
|
|||||||
@ -8,6 +8,9 @@ define([
|
|||||||
/** Id of the div containing the user list. */
|
/** Id of the div containing the user list. */
|
||||||
var USER_LIST_CLS = 'rtwysiwyg-user-list';
|
var USER_LIST_CLS = 'rtwysiwyg-user-list';
|
||||||
|
|
||||||
|
/** Id of the button to change my username. */
|
||||||
|
var USERNAME_BUTTON_ID = 'rtwysiwyg-change-username';
|
||||||
|
|
||||||
/** Id of the div containing the lag info. */
|
/** Id of the div containing the lag info. */
|
||||||
var LAG_ELEM_CLS = 'rtwysiwyg-lag';
|
var LAG_ELEM_CLS = 'rtwysiwyg-lag';
|
||||||
|
|
||||||
@ -123,29 +126,37 @@ define([
|
|||||||
return $container.find('#'+id)[0];
|
return $container.find('#'+id)[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
var getOtherUsers = function(myUserName, userList) {
|
var getOtherUsers = function(myUserName, userList, userData) {
|
||||||
var length = userList.length;
|
var length = userList.length;
|
||||||
var list = (length > 1) ? ' : ' : '';
|
var list = (length > 1) ? ' : ' : '';
|
||||||
userList.forEach(function(user) {
|
userList.forEach(function(user) {
|
||||||
if(user !== myUserName) {
|
if(user !== myUserName) {
|
||||||
list += user + ', ';
|
var data = (userData) ? (userData[user] || null) : null;
|
||||||
|
var userName = (data) ? data.name : user;
|
||||||
|
list += userName + ', ';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return (length > 1) ? list.slice(0, -2) : list;
|
return (length > 1) ? list.slice(0, -2) : list;
|
||||||
}
|
}
|
||||||
|
|
||||||
var updateUserList = function (myUserName, listElement, userList) {
|
var createChangeName = function($container, userList, buttonID) {
|
||||||
|
var id = uid();
|
||||||
|
userList.innerHTML = '<span class="cke_toolgroup" id="' + buttonID + '"><a id="' + USERNAME_BUTTON_ID + '" class="cke_button">Change name</a></span><span id="' + id + '"></span>';
|
||||||
|
return $container.find('#'+id)[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
var updateUserList = function (myUserName, listElement, userList, userData) {
|
||||||
var meIdx = userList.indexOf(myUserName);
|
var meIdx = userList.indexOf(myUserName);
|
||||||
if (meIdx === -1) {
|
if (meIdx === -1) {
|
||||||
listElement.textContent = Messages.synchronizing;
|
listElement.textContent = Messages.synchronizing;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (userList.length === 1) {
|
if (userList.length === 1) {
|
||||||
listElement.textContent = Messages.editingAlone;
|
listElement.innerHTML = Messages.editingAlone;
|
||||||
} else if (userList.length === 2) {
|
} else if (userList.length === 2) {
|
||||||
listElement.textContent = Messages.editingWithOneOtherPerson + getOtherUsers(myUserName, userList);
|
listElement.innerHTML = Messages.editingWithOneOtherPerson + getOtherUsers(myUserName, userList, userData);
|
||||||
} else {
|
} else {
|
||||||
listElement.textContent = Messages.editingWith + ' ' + (userList.length - 1) + ' ' + Messages.otherPeople + getOtherUsers(myUserName, userList);
|
listElement.innerHTML = Messages.editingWith + ' ' + (userList.length - 1) + ' ' + Messages.otherPeople + getOtherUsers(myUserName, userList, userData);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -199,22 +210,33 @@ define([
|
|||||||
localStorage['CryptPad_RECENTPADS'] = JSON.stringify(out);
|
localStorage['CryptPad_RECENTPADS'] = JSON.stringify(out);
|
||||||
};
|
};
|
||||||
|
|
||||||
var create = function ($container, myUserName, realtime, webChannel, userList) {
|
var create = function ($container, myUserName, realtime, webChannel, userList, config) {
|
||||||
var toolbar = createRealtimeToolbar($container);
|
var toolbar = createRealtimeToolbar($container);
|
||||||
createEscape(toolbar.find('.rtwysiwyg-toolbar-leftside'));
|
createEscape(toolbar.find('.rtwysiwyg-toolbar-leftside'));
|
||||||
var userListElement = createUserList(toolbar.find('.rtwysiwyg-toolbar-leftside'));
|
var userListElement = createUserList(toolbar.find('.rtwysiwyg-toolbar-leftside'));
|
||||||
var spinner = createSpinner(toolbar.find('.rtwysiwyg-toolbar-rightside'));
|
var spinner = createSpinner(toolbar.find('.rtwysiwyg-toolbar-rightside'));
|
||||||
var lagElement = createLagElement(toolbar.find('.rtwysiwyg-toolbar-rightside'));
|
var lagElement = createLagElement(toolbar.find('.rtwysiwyg-toolbar-rightside'));
|
||||||
|
var userData = config.userData;
|
||||||
|
var changeNameID = config.changeNameID;
|
||||||
|
|
||||||
|
// Check if the suer is allowed to change his name
|
||||||
|
if(changeNameID) {
|
||||||
|
// Create the button and update the element containing the user list
|
||||||
|
userListElement = createChangeName($container, userListElement, changeNameID);
|
||||||
|
}
|
||||||
|
|
||||||
rememberPad();
|
rememberPad();
|
||||||
|
|
||||||
var connected = false;
|
var connected = false;
|
||||||
|
|
||||||
userList.onChange = function() {
|
userList.onChange = function(newUserData) {
|
||||||
var users = userList.users;
|
var users = userList.users;
|
||||||
if (users.indexOf(myUserName) !== -1) { connected = true; }
|
if (users.indexOf(myUserName) !== -1) { connected = true; }
|
||||||
if (!connected) { return; }
|
if (!connected) { return; }
|
||||||
updateUserList(myUserName, userListElement, users);
|
if(newUserData) { // Someone has changed his name/color
|
||||||
|
userData = newUserData;
|
||||||
|
}
|
||||||
|
updateUserList(myUserName, userListElement, users, userData);
|
||||||
}
|
}
|
||||||
|
|
||||||
var ks = function () {
|
var ks = function () {
|
||||||
|
|||||||
@ -122,10 +122,51 @@ define([
|
|||||||
};
|
};
|
||||||
|
|
||||||
var initializing = true;
|
var initializing = true;
|
||||||
|
var userList = []; // List of pretty name of all users (mapped with their server ID)
|
||||||
|
var toolbarList; // List of users still connected to the channel (server IDs)
|
||||||
|
var addToUserList = function(data) {
|
||||||
|
for (var attrname in data) { userList[attrname] = data[attrname]; }
|
||||||
|
if(toolbarList && typeof toolbarList.onChange === "function") {
|
||||||
|
toolbarList.onChange(userList);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var myData = {};
|
||||||
|
var myUserName = ''; // My "pretty name"
|
||||||
|
var myID; // My server ID
|
||||||
|
|
||||||
|
var setMyID = function(info) {
|
||||||
|
myID = info.myID || null;
|
||||||
|
myUserName = myID;
|
||||||
|
};
|
||||||
|
|
||||||
|
var createChangeName = function(id, $container) {
|
||||||
|
var buttonElmt = $container.find('#'+id)[0];
|
||||||
|
buttonElmt.addEventListener("click", function() {
|
||||||
|
var newName = prompt("Change your name :", myUserName)
|
||||||
|
if (newName && newName.trim()) {
|
||||||
|
myUserName = newName.trim();
|
||||||
|
myData[myID] = {
|
||||||
|
name: myUserName
|
||||||
|
};
|
||||||
|
addToUserList(myData);
|
||||||
|
editor.fire( 'change' );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// apply patches, and try not to lose the cursor in the process!
|
// apply patches, and try not to lose the cursor in the process!
|
||||||
var applyHjson = function (shjson) {
|
var applyHjson = function (shjson) {
|
||||||
var userDocStateDom = Convert.hjson.to.dom(JSON.parse(shjson));
|
var hjson = JSON.parse(shjson);
|
||||||
|
console.log(hjson);
|
||||||
|
var peerUserList = hjson[hjson.length-1];
|
||||||
|
if(peerUserList.mydata) {
|
||||||
|
var userData = peerUserList.mydata;
|
||||||
|
console.log(userData);
|
||||||
|
addToUserList(userData);
|
||||||
|
delete hjson[hjson.length-1];
|
||||||
|
}
|
||||||
|
var userDocStateDom = Convert.hjson.to.dom(hjson);
|
||||||
userDocStateDom.setAttribute("contenteditable", "true"); // lol wtf
|
userDocStateDom.setAttribute("contenteditable", "true"); // lol wtf
|
||||||
var DD = new DiffDom(diffOptions);
|
var DD = new DiffDom(diffOptions);
|
||||||
var patch = (DD).diff(inner, userDocStateDom);
|
var patch = (DD).diff(inner, userDocStateDom);
|
||||||
@ -144,7 +185,13 @@ define([
|
|||||||
|
|
||||||
var onInit = function (info) {
|
var onInit = function (info) {
|
||||||
var $bar = $('#pad-iframe')[0].contentWindow.$('#cke_1_toolbox');
|
var $bar = $('#pad-iframe')[0].contentWindow.$('#cke_1_toolbox');
|
||||||
toolbar = info.realtime.toolbar = Toolbar.create($bar, userName, info.realtime, info.webChannel, info.userList);
|
toolbarList = info.userList;
|
||||||
|
var config = {
|
||||||
|
userList: userList,
|
||||||
|
changeNameID: 'cryptpad-changeName'
|
||||||
|
};
|
||||||
|
toolbar = info.realtime.toolbar = Toolbar.create($bar, info.myID, info.realtime, info.webChannel, info.userList, config);
|
||||||
|
createChangeName('cryptpad-changeName', $bar);
|
||||||
/* TODO handle disconnects and such*/
|
/* TODO handle disconnects and such*/
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -164,6 +211,8 @@ define([
|
|||||||
toolbar.failed();
|
toolbar.failed();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var realtimeOptions = {
|
var realtimeOptions = {
|
||||||
// the textarea that we will sync
|
// the textarea that we will sync
|
||||||
textarea: $textarea[0],
|
textarea: $textarea[0],
|
||||||
@ -188,6 +237,8 @@ define([
|
|||||||
|
|
||||||
onReady: onReady,
|
onReady: onReady,
|
||||||
|
|
||||||
|
setMyID: setMyID,
|
||||||
|
|
||||||
// when remote changes occur
|
// when remote changes occur
|
||||||
onRemote: onRemote,
|
onRemote: onRemote,
|
||||||
|
|
||||||
@ -205,7 +256,10 @@ define([
|
|||||||
|
|
||||||
editor.on('change', function () {
|
editor.on('change', function () {
|
||||||
var hjson = Convert.core.hyperjson.fromDOM(inner);
|
var hjson = Convert.core.hyperjson.fromDOM(inner);
|
||||||
|
if(myData !== {}) {
|
||||||
|
hjson[hjson.length] = {mydata: myData};
|
||||||
|
myData = {};
|
||||||
|
}
|
||||||
$textarea.val(JSON.stringify(hjson));
|
$textarea.val(JSON.stringify(hjson));
|
||||||
rti.bumpSharejs();
|
rti.bumpSharejs();
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user