Set the pad to readonly mode when using a 'view' url

pull/1/head
Yann Flory 8 years ago
parent 368e253c9f
commit 391b7690e6

@ -135,12 +135,21 @@ define([
return $span[0]; return $span[0];
}; };
var updateUserList = function (myUserName, listElement, userList, userData) { var arrayIntersect = function(a, b) {
return $.grep(a, function(i) {
return $.inArray(i, b) > -1;
});
};
var updateUserList = function (myUserName, listElement, userList, userData, readOnly) {
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;
} }
console.log(userList);
userList = readOnly === -1 ? userList : arrayIntersect(userList, Object.keys(userData));
console.log(userList);
if (userList.length === 1) { if (userList.length === 1) {
listElement.innerHTML = Messages.editingAlone; listElement.innerHTML = Messages.editingAlone;
} else if (userList.length === 2) { } else if (userList.length === 2) {
@ -187,6 +196,8 @@ define([
var changeNameID = config.changeNameID; var changeNameID = config.changeNameID;
var saveContentID = config.saveContentID || config.exportContentID; var saveContentID = config.saveContentID || config.exportContentID;
var loadContentID = config.loadContentID || config.importContentID; var loadContentID = config.loadContentID || config.importContentID;
// readOnly = 1 (readOnly enabled), 0 (disabled), -1 (old pad without readOnly mode)
var readOnly = (typeof config.readOnly !== "undefined") ? (readOnly ? 1 : 0) : -1;
var saveElement; var saveElement;
var loadElement; var loadElement;
@ -205,7 +216,7 @@ define([
if(newUserData) { // Someone has changed his name/color if(newUserData) { // Someone has changed his name/color
userData = newUserData; userData = newUserData;
} }
updateUserList(myUserName, userListElement, users, userData); updateUserList(myUserName, userListElement, users, userData, readOnly);
}; };
var ks = function () { var ks = function () {

@ -65,6 +65,7 @@ define([
var andThen = function (Ckeditor) { var andThen = function (Ckeditor) {
var secret = Cryptpad.getSecrets(); var secret = Cryptpad.getSecrets();
var readOnly = !secret.keys.editKeyStr;
var fixThings = false; var fixThings = false;
@ -115,7 +116,9 @@ define([
} else { } else {
module.spinner.show(); module.spinner.show();
} }
inner.setAttribute('contenteditable', bool); if (!readOnly || !bool) {
inner.setAttribute('contenteditable', bool);
}
}; };
// don't let the user edit until the pad is ready // don't let the user edit until the pad is ready
@ -191,6 +194,12 @@ define([
} }
} }
// Do not change the contenteditable value in view mode
if (readOnly && info.node && info.node.tagName === 'BODY' &&
info.diff.action === 'modifyAttribute' && info.diff.name === 'contenteditable') {
return true;
}
// no use trying to recover the cursor if it doesn't exist // no use trying to recover the cursor if it doesn't exist
if (!cursor.exists()) { return; } if (!cursor.exists()) { return; }
@ -295,7 +304,9 @@ define([
var applyHjson = function (shjson) { var applyHjson = function (shjson) {
var userDocStateDom = hjsonToDom(JSON.parse(shjson)); var userDocStateDom = hjsonToDom(JSON.parse(shjson));
userDocStateDom.setAttribute("contenteditable", "true"); // lol wtf if (!readOnly) {
userDocStateDom.setAttribute("contenteditable", "true"); // lol wtf
}
var patch = (DD).diff(inner, userDocStateDom); var patch = (DD).diff(inner, userDocStateDom);
(DD).apply(inner, patch); (DD).apply(inner, patch);
}; };
@ -318,7 +329,7 @@ define([
// our public key. send -1 if view mode // our public key. send -1 if view mode
validateKey: secret.keys.validateKey || undefined, validateKey: secret.keys.validateKey || undefined,
readOnly: secret.keys.editKeyStr ? undefined : 1, readOnly: readOnly,
// method which allows us to get the id of the user // method which allows us to get the id of the user
setMyID: setMyID, setMyID: setMyID,
@ -383,6 +394,8 @@ define([
// build a dom from HJSON, diff, and patch the editor // build a dom from HJSON, diff, and patch the editor
applyHjson(shjson); applyHjson(shjson);
if (readOnly) { return; }
var shjson2 = stringifyDOM(inner); var shjson2 = stringifyDOM(inner);
if (shjson2 !== shjson) { if (shjson2 !== shjson) {
console.error("shjson2 !== shjson"); console.error("shjson2 !== shjson");
@ -467,9 +480,11 @@ define([
var config = { var config = {
userData: userList, userData: userList,
changeNameID: Toolbar.constants.changeName, changeNameID: Toolbar.constants.changeName,
readOnly: readOnly
}; };
if (readOnly) {delete config.changeNameID; }
toolbar = info.realtime.toolbar = Toolbar.create($bar, info.myID, info.realtime, info.getLag, info.userList, config); toolbar = info.realtime.toolbar = Toolbar.create($bar, info.myID, info.realtime, info.getLag, info.userList, config);
createChangeName(Toolbar.constants.changeName, $bar); if (!readOnly) { createChangeName(Toolbar.constants.changeName, $bar); }
var $rightside = $bar.find('.' + Toolbar.constants.rightside); var $rightside = $bar.find('.' + Toolbar.constants.rightside);
@ -545,7 +560,7 @@ define([
$rightside.append($forgetPad); $rightside.append($forgetPad);
// set the hash // set the hash
if (secret.keys.editKeyStr) { if (!readOnly) {
window.location.hash = Cryptpad.getEditHashFromKeys(info.channel, secret.keys); window.location.hash = Cryptpad.getEditHashFromKeys(info.channel, secret.keys);
} }
console.log("View Hash : " + Cryptpad.getViewHashFromKeys(info.channel, secret.keys)); console.log("View Hash : " + Cryptpad.getViewHashFromKeys(info.channel, secret.keys));
@ -585,12 +600,17 @@ define([
} }
getLastName(function (err, lastName) { getLastName(function (err, lastName) {
if (typeof(lastName) === 'string' && lastName.length) {
setName(lastName);
}
console.log("Unlocking editor"); console.log("Unlocking editor");
setEditable(true); setEditable(true);
initializing = false; initializing = false;
myData[myID] = {
name: ""
};
addToUserList(myData);
if (typeof(lastName) === 'string' && lastName.length) {
setName(lastName);
}
onLocal();
}); });
}; };
@ -617,6 +637,7 @@ define([
var onLocal = realtimeOptions.onLocal = function () { var onLocal = realtimeOptions.onLocal = function () {
if (initializing) { return; } if (initializing) { return; }
if (readOnly) { return; }
// stringify the json and send it into chainpad // stringify the json and send it into chainpad
var shjson = stringifyDOM(inner); var shjson = stringifyDOM(inner);

Loading…
Cancel
Save