diff --git a/js/3rdparty/webodf/editor/MemberListView.js b/js/3rdparty/webodf/editor/MemberListView.js index c8f347b7..b312411d 100644 --- a/js/3rdparty/webodf/editor/MemberListView.js +++ b/js/3rdparty/webodf/editor/MemberListView.js @@ -69,6 +69,8 @@ define("webodf/editor/MemberListView", while (node) { if (node.memberId === memberId) { + node.setAttribute('uid', memberDetails.uid); + node.setAttribute('count', 1); node = node.firstChild; while (node) { if (node.localName === "img") { @@ -76,11 +78,11 @@ define("webodf/editor/MemberListView", node.src = memberDetails.imageUrl; // update border color node.style.borderColor = memberDetails.color; - } else if (node.localName === "span" && memberDetails.imageUrl){ - try { - $(node).avatar(memberDetails.imageUrl, 60); - } catch (e){} - node.style.borderColor = memberDetails.color; + } else if (node.localName === "span" && memberDetails.imageUrl){ + try { + $(node).avatar(memberDetails.imageUrl, 60); + } catch (e){} + node.style.borderColor = memberDetails.color; } else if (node.localName === "div") { node.setAttribute('fullname', memberDetails.fullName); } @@ -119,10 +121,6 @@ define("webodf/editor/MemberListView", if (memberId === editorSession.sessionController.getInputMemberId()){ documentsMain.onNickChange(memberId, fullnameNode); } - var caret = editorSession.sessionView.getCaret(memberId); - if (caret) { - //caret.toggleHandleVisibility(); - } }; if (memberId === editorSession.sessionController.getInputMemberId()){ memberListDiv.insertBefore(avatarDiv, memberListDiv.firstChild); @@ -139,7 +137,12 @@ define("webodf/editor/MemberListView", var node = memberListDiv.firstChild; while (node) { if (node.memberId === memberId) { - memberListDiv.removeChild(node); + var count = parseInt(node.getAttribute('count')); + if (count>1){ + node.setAttribute('count', count-1); + } else { + memberListDiv.removeChild(node); + } return; } node = node.nextSibling; @@ -152,8 +155,21 @@ define("webodf/editor/MemberListView", */ function addMember(memberId) { var member = editorSession.getMember(memberId), - properties = member.getProperties(); - createAvatarButton(memberId); + properties = member.getProperties(), + node = memberListDiv.firstChild, + found = false; + while (node) { + if (node.getAttribute('uid') === properties.uid) { + var count = parseInt(node.getAttribute('count')); + node.setAttribute('count', count+1); + found = true; + break; + } + node = node.nextSibling; + } + if (!found){ + createAvatarButton(memberId); + } updateAvatarButton(memberId, properties); } diff --git a/lib/db/op.php b/lib/db/op.php index cef01215..48199a70 100644 --- a/lib/db/op.php +++ b/lib/db/op.php @@ -86,7 +86,7 @@ class Op extends \OCA\Documents\Db { return $result->fetchAll(); } - public function addMember($esId, $memberId, $fullName, $color, $imageUrl){ + public function addMember($esId, $memberId, $fullName, $userId, $color, $imageUrl){ $op = array( 'optype' => 'AddMember', 'memberid' => (string) $memberId, @@ -94,7 +94,8 @@ class Op extends \OCA\Documents\Db { 'setProperties' => array( 'fullName' => $fullName, 'color' => $color, - 'imageUrl' => $imageUrl + 'imageUrl' => $imageUrl, + 'uid' => $userId, ) ); $this->insertOp($esId, $memberId, $op); diff --git a/lib/db/session.php b/lib/db/session.php index 2baf3cc4..ffb79bfc 100644 --- a/lib/db/session.php +++ b/lib/db/session.php @@ -79,29 +79,31 @@ class Session extends \OCA\Documents\Db { $file->getToken() )); - if ($member->insert()){ - // Do we have OC_Avatar in out disposal? - if (!class_exists('\OC_Avatar') || \OC_Config::getValue('enable_avatars', true) !== true){ - $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; - } else { - $imageUrl = $uid; - } + if (!$member->insert()){ + throw new \Exception('Failed to add member into database'); + } + + // Do we have OC_Avatar in out disposal? + if (\OC_Config::getValue('enable_avatars', true) !== true){ + $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; + } else { + $imageUrl = $uid; + } - $displayName = $file->isPublicShare() ? $uid . ' ' . \OCA\Documents\Db\Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); + $displayName = $file->isPublicShare() ? $uid . ' ' . \OCA\Documents\Db\Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); + $userId = $file->isPublicShare() ? $displayName : \OCP\User::getUser(); - $sessionData['member_id'] = (string) $member->getLastInsertId(); - $op = new \OCA\Documents\Db\Op(); - $op->addMember( + $sessionData['member_id'] = (string) $member->getLastInsertId(); + $op = new \OCA\Documents\Db\Op(); + $op->addMember( $sessionData['es_id'], $sessionData['member_id'], $displayName, + $userId, $memberColor, $imageUrl - ); - } else { - throw new \Exception('Failed to add member into database'); - } - + ); + $sessionData['title'] = basename($path); $fileInfo = $ownerView->getFileInfo($path); $sessionData['permissions'] = $fileInfo->getPermissions(); diff --git a/src/patches/MemberListView-OCavatar.patch b/src/patches/MemberListView-OCavatar.patch deleted file mode 100644 index 3320fc1f..00000000 --- a/src/patches/MemberListView-OCavatar.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git b/js/3rdparty/webodf/editor/MemberListView.js a/js/3rdparty/webodf/editor/MemberListView.js -index 83074ba..9f604c7 100644 ---- b/js/3rdparty/webodf/editor/MemberListView.js -+++ a/js/3rdparty/webodf/editor/MemberListView.js -@@ -76,6 +76,11 @@ define("webodf/editor/MemberListView", - node.src = memberDetails.imageUrl; - // update border color - node.style.borderColor = memberDetails.color; -+ } else if (node.localName === "span" && memberDetails.imageUrl){ -+ try { -+ $(node).avatar(memberDetails.imageUrl, 60); -+ } catch (e){} -+ node.style.borderColor = memberDetails.color; - } else if (node.localName === "div") { - node.setAttribute('fullname', memberDetails.fullName); - } -@@ -95,7 +100,7 @@ define("webodf/editor/MemberListView", - var doc = memberListDiv.ownerDocument, - htmlns = doc.documentElement.namespaceURI, - avatarDiv = doc.createElementNS(htmlns, "div"), -- imageElement = doc.createElement("img"), -+ imageElement = doc.createElement("span"), - fullnameNode = doc.createElement("div"); - - avatarDiv.className = "memberListButton"; -@@ -113,7 +118,7 @@ define("webodf/editor/MemberListView", - avatarDiv.onclick = function () { - var caret = editorSession.sessionView.getCaret(memberId); - if (caret) { -- caret.toggleHandleVisibility(); -+ //caret.toggleHandleVisibility(); - } - }; - memberListDiv.appendChild(avatarDiv); diff --git a/src/patches/MemberListView-OCnick.patch b/src/patches/MemberListView-OCnick.patch deleted file mode 100644 index 36d3436a..00000000 --- a/src/patches/MemberListView-OCnick.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- MemberListView-old.js 2014-03-21 20:54:57.764793256 +0300 -+++ MemberListView.js 2014-03-21 20:55:12.761110324 +0300 -@@ -116,6 +116,7 @@ - //avatar.getCaret().hideHandle(); - }; - avatarDiv.onclick = function () { -+ documentsMain.onNickChange(memberId, fullnameNode); - var caret = editorSession.sessionView.getCaret(memberId); - if (caret) { - //caret.toggleHandleVisibility(); diff --git a/src/patches/MemberListView.js.patch b/src/patches/MemberListView.js.patch new file mode 100644 index 00000000..96fa346a --- /dev/null +++ b/src/patches/MemberListView.js.patch @@ -0,0 +1,91 @@ +diff --git a/js/3rdparty/webodf/editor/MemberListView.js b/js/3rdparty/webodf/editor/MemberListView.js +--- a/js/3rdparty/webodf/editor/MemberListView.js 2014-11-19 19:53:11.134235411 +0300 ++++ b/js/3rdparty/webodf/editor/MemberListView.js 2014-11-19 19:56:27.562381909 +0300 +@@ -69,6 +69,8 @@ + + while (node) { + if (node.memberId === memberId) { ++ node.setAttribute('uid', memberDetails.uid); ++ node.setAttribute('count', 1); + node = node.firstChild; + while (node) { + if (node.localName === "img") { +@@ -76,6 +78,11 @@ + node.src = memberDetails.imageUrl; + // update border color + node.style.borderColor = memberDetails.color; ++ } else if (node.localName === "span" && memberDetails.imageUrl){ ++ try { ++ $(node).avatar(memberDetails.imageUrl, 60); ++ } catch (e){} ++ node.style.borderColor = memberDetails.color; + } else if (node.localName === "div") { + node.setAttribute('fullname', memberDetails.fullName); + } +@@ -95,7 +102,7 @@ + var doc = memberListDiv.ownerDocument, + htmlns = doc.documentElement.namespaceURI, + avatarDiv = doc.createElementNS(htmlns, "div"), +- imageElement = doc.createElement("img"), ++ imageElement = doc.createElement("span"), + fullnameNode = doc.createElement("div"); + + avatarDiv.className = "memberListButton"; +@@ -111,12 +118,15 @@ + //avatar.getCaret().hideHandle(); + }; + avatarDiv.onclick = function () { +- var caret = editorSession.sessionView.getCaret(memberId); +- if (caret) { +- caret.toggleHandleVisibility(); ++ if (memberId === editorSession.sessionController.getInputMemberId()){ ++ documentsMain.onNickChange(memberId, fullnameNode); + } + }; +- memberListDiv.appendChild(avatarDiv); ++ if (memberId === editorSession.sessionController.getInputMemberId()){ ++ memberListDiv.insertBefore(avatarDiv, memberListDiv.firstChild); ++ } else { ++ memberListDiv.appendChild(avatarDiv); ++ } + } + + /** +@@ -127,7 +137,12 @@ + var node = memberListDiv.firstChild; + while (node) { + if (node.memberId === memberId) { +- memberListDiv.removeChild(node); ++ var count = parseInt(node.getAttribute('count')); ++ if (count>1){ ++ node.setAttribute('count', count-1); ++ } else { ++ memberListDiv.removeChild(node); ++ } + return; + } + node = node.nextSibling; +@@ -140,8 +155,21 @@ + */ + function addMember(memberId) { + var member = editorSession.getMember(memberId), +- properties = member.getProperties(); +- createAvatarButton(memberId); ++ properties = member.getProperties(), ++ node = memberListDiv.firstChild, ++ found = false; ++ while (node) { ++ if (node.getAttribute('uid') === properties.uid) { ++ var count = parseInt(node.getAttribute('count')); ++ node.setAttribute('count', count+1); ++ found = true; ++ break; ++ } ++ node = node.nextSibling; ++ } ++ if (!found){ ++ createAvatarButton(memberId); ++ } + updateAvatarButton(memberId, properties); + } + diff --git a/src/updateWebODF.sh b/src/updateWebODF.sh index 7e2cbb93..edb8b2be 100755 --- a/src/updateWebODF.sh +++ b/src/updateWebODF.sh @@ -32,8 +32,7 @@ cp "$WEBODF_BUILDDIR"/programs/editor/editor.css ./css/3rdparty/webodf # patches against upstream patch -p1 -i src/patches/fontsCssPath.patch patch -p1 -i src/patches/hideCaretAvatar.patch -patch -p1 -i src/patches/MemberListView-OCavatar.patch -patch -p1 -i src/patches/MemberListView-OCnick.patch +patch -p1 -i src/patches/MemberListView.js.patch patch -p1 -i src/patches/keepBodyStyle.patch