Skip to content
This repository has been archived by the owner on May 12, 2020. It is now read-only.

Commit

Permalink
Merge pull request #189 from adityab/memberops
Browse files Browse the repository at this point in the history
Op-ify Member Data
  • Loading branch information
Friedrich committed Nov 20, 2013
2 parents 145d033 + ec5567b commit bf27667
Show file tree
Hide file tree
Showing 26 changed files with 592 additions and 822 deletions.
6 changes: 4 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@ set(LIBJSFILES lib/packages.js lib/runtime.js lib/core/Base64.js
lib/odf/OdfCanvas.js
lib/odf/CommandLineTools.js

lib/ops/Member.js
lib/ops/Server.js
lib/ops/Operation.js
lib/ops/OpAddCursor.js
Expand All @@ -312,6 +313,9 @@ set(LIBJSFILES lib/packages.js lib/runtime.js lib/core/Base64.js
lib/ops/OpRemoveStyle.js
lib/ops/OpAddAnnotation.js
lib/ops/OpRemoveAnnotation.js
lib/ops/OpAddMember.js
lib/ops/OpUpdateMember.js
lib/ops/OpRemoveMember.js
lib/ops/OperationFactory.js
lib/gui/SelectionMover.js
lib/ops/StepsTranslator.js
Expand All @@ -334,8 +338,6 @@ set(LIBJSFILES lib/packages.js lib/runtime.js lib/core/Base64.js
lib/gui/AnnotationController.js
lib/gui/EventManager.js
lib/gui/SessionController.js
lib/ops/MemberModel.js
lib/ops/TrivialMemberModel.js
lib/ops/OperationRouter.js
lib/ops/TrivialOperationRouter.js
lib/gui/EditInfoHandle.js
Expand Down
31 changes: 24 additions & 7 deletions programs/editor/Editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,20 @@ define("webodf/editor/Editor", [
* @return {undefined}
*/
this.openDocument = function (docUrl, memberId, editorReadyCallback) {
initDocLoading(docUrl, memberId, editorReadyCallback);
initDocLoading(docUrl, memberId, function () {
runtime.loadClass("ops.OpAddMember");
var op = new ops.OpAddMember();
op.init({
memberid: memberId,
setProperties: {
fullName: runtime.tr("Unknown Author"),
color: "black",
imageUrl: "avatar-joe.png"
}
});
session.enqueue([op]);
editorReadyCallback();
});
};

/**
Expand All @@ -134,6 +147,14 @@ define("webodf/editor/Editor", [
*/
this.closeDocument = function (callback) {
runtime.assert(session, "session should exist here.");
runtime.loadClass("ops.OpRemoveMember");

var op = new ops.OpRemoveMember();
op.init({
memberid: editorSession.sessionController.getInputMemberId()
});
session.enqueue([op]);

session.close(function (err) {
if (err) {
callback(err);
Expand Down Expand Up @@ -195,16 +216,12 @@ define("webodf/editor/Editor", [
*/
this.openSession = function (sessionId, memberId, editorReadyCallback) {
initDocLoading(server.getGenesisUrl(sessionId), memberId, function () {
var opRouter, memberModel;
// overwrite router and member model
// overwrite router
// TODO: serverFactory should be a backendFactory,
// and there should be a backendFactory for local editing
opRouter = serverFactory.createOperationRouter(sessionId, memberId, server, odfCanvas.odfContainer());
var opRouter = serverFactory.createOperationRouter(sessionId, memberId, server, odfCanvas.odfContainer());
session.setOperationRouter(opRouter);

memberModel = serverFactory.createMemberModel(sessionId, server);
session.setMemberModel(memberModel);

opRouter.requestReplay(function done() {
editorReadyCallback();
});
Expand Down
44 changes: 34 additions & 10 deletions programs/editor/EditorSession.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,11 @@ define("webodf/editor/EditorSession", [
domUtils = new core.DomUtils(),
eventNotifier = new core.EventNotifier([
EditorSession.signalMemberAdded,
EditorSession.signalMemberUpdated,
EditorSession.signalMemberRemoved,
EditorSession.signalCursorAdded,
EditorSession.signalCursorMoved,
EditorSession.signalCursorRemoved,
EditorSession.signalParagraphChanged,
EditorSession.signalCommonStyleCreated,
EditorSession.signalCommonStyleDeleted,
Expand Down Expand Up @@ -211,13 +214,25 @@ define("webodf/editor/EditorSession", [
paragraphRange.detach();
}

function onMemberAdded(member) {
self.emit(EditorSession.signalMemberAdded, member.getMemberId());
}

function onMemberUpdated(member) {
self.emit(EditorSession.signalMemberUpdated, member.getMemberId());
}

function onMemberRemoved(memberId) {
self.emit(EditorSession.signalMemberRemoved, memberId);
}

function onCursorAdded(cursor) {
self.emit(EditorSession.signalMemberAdded, cursor.getMemberId());
self.emit(EditorSession.signalCursorAdded, cursor.getMemberId());
trackCursor(cursor);
}

function onCursorRemoved(memberId) {
self.emit(EditorSession.signalMemberRemoved, memberId);
self.emit(EditorSession.signalCursorRemoved, memberId);
}

function onCursorMoved(cursor) {
Expand Down Expand Up @@ -267,14 +282,6 @@ define("webodf/editor/EditorSession", [
eventNotifier.unsubscribe(eventid, cb);
};

this.getMemberDetailsAndUpdates = function (memberId, subscriber) {
return session.getMemberModel().getMemberDetailsAndUpdates(memberId, subscriber);
};

this.unsubscribeMemberDetailsUpdates = function (memberId, subscriber) {
return session.getMemberModel().unsubscribeMemberDetailsUpdates(memberId, subscriber);
};

this.getCursorPosition = function () {
return odtDocument.getCursorPosition(localMemberId);
};
Expand Down Expand Up @@ -513,6 +520,14 @@ define("webodf/editor/EditorSession", [
self.sessionController.getImageManager().insertImage(mimetype, content, width, height);
};

/**
* @param {!string} memberId
* @return {?ops.Member}
*/
this.getMember = function (memberId) {
return odtDocument.getMember(memberId);
};

/**
* @param {!function(!Object=)} callback, passing an error object in case of error
* @return {undefined}
Expand All @@ -522,6 +537,9 @@ define("webodf/editor/EditorSession", [

head.removeChild(fontStyles);

odtDocument.unsubscribe(ops.OdtDocument.signalMemberAdded, onMemberAdded);
odtDocument.unsubscribe(ops.OdtDocument.signalMemberUpdated, onMemberUpdated);
odtDocument.unsubscribe(ops.OdtDocument.signalMemberRemoved, onMemberRemoved);
odtDocument.unsubscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
odtDocument.unsubscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
odtDocument.unsubscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
Expand Down Expand Up @@ -578,6 +596,9 @@ define("webodf/editor/EditorSession", [
self.availableFonts = getAvailableFonts();
selectionViewManager.registerCursor(shadowCursor, true);
// Custom signals, that make sense in the Editor context. We do not want to expose webodf's ops signals to random bits of the editor UI.
odtDocument.subscribe(ops.OdtDocument.signalMemberAdded, onMemberAdded);
odtDocument.subscribe(ops.OdtDocument.signalMemberUpdated, onMemberUpdated);
odtDocument.subscribe(ops.OdtDocument.signalMemberRemoved, onMemberRemoved);
odtDocument.subscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
odtDocument.subscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
odtDocument.subscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
Expand All @@ -592,7 +613,10 @@ define("webodf/editor/EditorSession", [
};

/**@const*/EditorSession.signalMemberAdded = "memberAdded";
/**@const*/EditorSession.signalMemberUpdated = "memberUpdated";
/**@const*/EditorSession.signalMemberRemoved = "memberRemoved";
/**@const*/EditorSession.signalCursorAdded = "cursorAdded";
/**@const*/EditorSession.signalCursorRemoved = "cursorRemoved";
/**@const*/EditorSession.signalCursorMoved = "cursorMoved";
/**@const*/EditorSession.signalParagraphChanged = "paragraphChanged";
/**@const*/EditorSession.signalCommonStyleCreated = "styleCreated";
Expand Down
25 changes: 18 additions & 7 deletions programs/editor/MemberListView.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,11 @@ define("webodf/editor/MemberListView",
while (node) {
if (node.localName === "img") {
// update avatar image
node.src = memberDetails.imageurl;
node.src = memberDetails.imageUrl;
// update border color
node.style.borderColor = memberDetails.color;
} else if (node.localName === "div") {
node.setAttribute('fullname', memberDetails.fullname);
node.setAttribute('fullname', memberDetails.fullName);
}
node = node.nextSibling;
}
Expand Down Expand Up @@ -139,16 +139,28 @@ define("webodf/editor/MemberListView",
* @return {undefined}
*/
function addMember(memberId) {
var member = editorSession.getMember(memberId),
properties = member.getProperties();
createAvatarButton(memberId);
editorSession.getMemberDetailsAndUpdates(memberId, updateAvatarButton);
updateAvatarButton(memberId, properties);
}

/**
* @param {!string} memberId
* @return {undefined}
*/
function updateMember(memberId) {
var member = editorSession.getMember(memberId),
properties = member.getProperties();

updateAvatarButton(memberId, properties);
}

/**
* @param {!string} memberId
* @return {undefined}
*/
function removeMember(memberId) {
editorSession.unsubscribeMemberDetailsUpdates(memberId, updateAvatarButton);
removeAvatarButton(memberId);
}

Expand All @@ -158,14 +170,12 @@ define("webodf/editor/MemberListView",
if (editorSession) {
// unsubscribe from editorSession
editorSession.unsubscribe(EditorSession.signalMemberAdded, addMember);
editorSession.unsubscribe(EditorSession.signalMemberUpdated, updateMember);
editorSession.unsubscribe(EditorSession.signalMemberRemoved, removeMember);
// remove all current avatars
node = memberListDiv.firstChild;
while (node) {
nextNode = node.nextSibling;
if (node.memberId) {
editorSession.unsubscribeMemberDetailsUpdates(node.memberId, updateAvatarButton);
}
memberListDiv.removeChild(node);
node = nextNode;
}
Expand All @@ -182,6 +192,7 @@ define("webodf/editor/MemberListView",
editorSession = session;
if (editorSession) {
editorSession.subscribe(EditorSession.signalMemberAdded, addMember);
editorSession.subscribe(EditorSession.signalMemberUpdated, updateMember);
editorSession.subscribe(EditorSession.signalMemberRemoved, removeMember);
}
};
Expand Down
7 changes: 0 additions & 7 deletions programs/editor/server/ServerFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,6 @@ ServerFactory.prototype.createServer = function () {"use strict"; };
*/
ServerFactory.prototype.createOperationRouter = function (sessionId, memberId, server, odfContainer) {"use strict"; };

/**
* @param {!string} sessionId
* @param {!ops.Server} server
* @return {!ops.MemberModel}
*/
ServerFactory.prototype.createMemberModel = function (sessionId, server) {"use strict"; };

/**
* @param {!ops.Server} server
* @return {!SessionList}
Expand Down
Loading

0 comments on commit bf27667

Please sign in to comment.