10.4.9 release
This commit is contained in:
parent
f4c0cbac8a
commit
02d4a74e82
75 changed files with 2802 additions and 1004 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
17-MAR-2019: 10.4.9
|
||||||
|
|
||||||
|
- Adds comments for Google Drive (beta)
|
||||||
|
|
||||||
15-MAR-2019: 10.4.8
|
15-MAR-2019: 10.4.8
|
||||||
|
|
||||||
- Adds autosaveDelay and defaultEdgeLength to drawio-config
|
- Adds autosaveDelay and defaultEdgeLength to drawio-config
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
10.4.8
|
10.4.9
|
|
@ -353,6 +353,8 @@
|
||||||
<file name="TrelloFile.js" />
|
<file name="TrelloFile.js" />
|
||||||
<file name="TrelloLibrary.js" />
|
<file name="TrelloLibrary.js" />
|
||||||
<file name="TrelloClient.js" />
|
<file name="TrelloClient.js" />
|
||||||
|
<file name="DrawioComment.js" />
|
||||||
|
<file name="DriveComment.js" />
|
||||||
</sources>
|
</sources>
|
||||||
|
|
||||||
<sources dir="${war.dir}/js/diagramly">
|
<sources dir="${war.dir}/js/diagramly">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
CACHE MANIFEST
|
CACHE MANIFEST
|
||||||
|
|
||||||
# THIS FILE WAS GENERATED. DO NOT MODIFY!
|
# THIS FILE WAS GENERATED. DO NOT MODIFY!
|
||||||
# 03/15/2019 07:50 PM
|
# 03/17/2019 11:30 AM
|
||||||
|
|
||||||
app.html
|
app.html
|
||||||
index.html?offline=1
|
index.html?offline=1
|
||||||
|
|
BIN
src/main/webapp/images/check.png
Normal file
BIN
src/main/webapp/images/check.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 520 B |
1495
src/main/webapp/js/app.min.js
vendored
1495
src/main/webapp/js/app.min.js
vendored
File diff suppressed because it is too large
Load diff
|
@ -4356,6 +4356,38 @@ App.prototype.updateButtonContainer = function()
|
||||||
{
|
{
|
||||||
var file = this.getCurrentFile();
|
var file = this.getCurrentFile();
|
||||||
|
|
||||||
|
// Comments
|
||||||
|
if (file != null && file.constructor == DriveFile)
|
||||||
|
{
|
||||||
|
if (this.commentButton == null)
|
||||||
|
{
|
||||||
|
this.commentButton = document.createElement('a');
|
||||||
|
this.commentButton.setAttribute('title', mxResources.get('comments'));
|
||||||
|
this.commentButton.className = 'geToolbarButton';
|
||||||
|
this.commentButton.style.cssText = 'display:inline-block;position:relative;box-sizing:border-box;' +
|
||||||
|
'margin-right:4px;float:left;cursor:pointer;width:24px;height:24px;background-size:24px 24px;' +
|
||||||
|
'background-position:center center;background-repeat:no-repeat;background-image:' +
|
||||||
|
'url(' + Editor.commentImage + ');';
|
||||||
|
|
||||||
|
mxEvent.addListener(this.commentButton, 'click', mxUtils.bind(this, function()
|
||||||
|
{
|
||||||
|
this.actions.get('comments').funct();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.buttonContainer.appendChild(this.commentButton);
|
||||||
|
|
||||||
|
if (uiTheme == 'dark')
|
||||||
|
{
|
||||||
|
this.commentButton.style.filter = 'invert(100%)';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (this.commentButton != null)
|
||||||
|
{
|
||||||
|
this.commentButton.parentNode.removeChild(this.commentButton);
|
||||||
|
this.commentButton = null;
|
||||||
|
}
|
||||||
|
|
||||||
// Share
|
// Share
|
||||||
if (file != null && file.constructor == DriveFile)
|
if (file != null && file.constructor == DriveFile)
|
||||||
{
|
{
|
||||||
|
@ -5628,6 +5660,31 @@ App.prototype.updateUserElement = function()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//TODO Use this function to get the currently logged in user
|
||||||
|
App.prototype.getCurrentUser = function()
|
||||||
|
{
|
||||||
|
var user = null;
|
||||||
|
|
||||||
|
if (this.drive != null && this.drive.getUser() != null)
|
||||||
|
{
|
||||||
|
user = this.drive.getUser();
|
||||||
|
}
|
||||||
|
else if (this.oneDrive != null && this.oneDrive.getUser() != null)
|
||||||
|
{
|
||||||
|
user = this.oneDrive.getUser();
|
||||||
|
}
|
||||||
|
else if (this.dropbox != null && this.dropbox.getUser() != null)
|
||||||
|
{
|
||||||
|
user = this.dropbox.getUser();
|
||||||
|
}
|
||||||
|
else if (this.gitHub != null && this.gitHub.getUser() != null)
|
||||||
|
{
|
||||||
|
user = this.gitHub.getUser();
|
||||||
|
}
|
||||||
|
//TODO Trello no user issue
|
||||||
|
|
||||||
|
return user;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Override depends on mxSettings which is not defined in the minified viewer.
|
* Override depends on mxSettings which is not defined in the minified viewer.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -89,6 +89,11 @@ mxscript(drawDevUrl + 'js/diagramly/DiffSync.js');
|
||||||
mxscript(drawDevUrl + 'js/diagramly/Settings.js');
|
mxscript(drawDevUrl + 'js/diagramly/Settings.js');
|
||||||
mxscript(drawDevUrl + 'js/diagramly/DrawioFileSync.js');
|
mxscript(drawDevUrl + 'js/diagramly/DrawioFileSync.js');
|
||||||
|
|
||||||
|
|
||||||
|
//Comments
|
||||||
|
mxscript(drawDevUrl + 'js/diagramly/DrawioComment.js');
|
||||||
|
mxscript(drawDevUrl + 'js/diagramly/DriveComment.js');
|
||||||
|
|
||||||
// Excluded in base.min.js
|
// Excluded in base.min.js
|
||||||
mxscript(drawDevUrl + 'js/diagramly/DrawioClient.js');
|
mxscript(drawDevUrl + 'js/diagramly/DrawioClient.js');
|
||||||
mxscript(drawDevUrl + 'js/diagramly/DrawioUser.js');
|
mxscript(drawDevUrl + 'js/diagramly/DrawioUser.js');
|
||||||
|
|
|
@ -5050,7 +5050,7 @@ var FeedbackDialog = function(editorUi)
|
||||||
textarea.style.height = '140px';
|
textarea.style.height = '140px';
|
||||||
textarea.style.marginTop = '6px';
|
textarea.style.marginTop = '6px';
|
||||||
|
|
||||||
textarea.setAttribute('placeholder', mxResources.get('commentsNotes'));
|
textarea.setAttribute('placeholder', mxResources.get('comments'));
|
||||||
|
|
||||||
div.appendChild(textarea);
|
div.appendChild(textarea);
|
||||||
|
|
||||||
|
@ -9560,3 +9560,691 @@ var BtnDialog = function(editorUi, peer, btnLbl, fn)
|
||||||
|
|
||||||
this.container = div;
|
this.container = div;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
var CommentsWindow = function(editorUi, x, y, w, h)
|
||||||
|
{
|
||||||
|
var file = editorUi.getCurrentFile();
|
||||||
|
var readOnly = !file.desc.canComment;
|
||||||
|
var canReplyToReplies = !readOnly;
|
||||||
|
var file = editorUi.getCurrentFile();
|
||||||
|
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.className = 'geCommentsWin';
|
||||||
|
div.style.background = (Dialog.backdropColor == 'white') ? 'whiteSmoke' : Dialog.backdropColor;
|
||||||
|
|
||||||
|
var tbarHeight = (!EditorUi.compactUi) ? '30px' : '26px';
|
||||||
|
|
||||||
|
var listDiv = document.createElement('div');
|
||||||
|
listDiv.className = 'geCommentsList';
|
||||||
|
listDiv.style.backgroundColor = (Dialog.backdropColor == 'white') ? 'whiteSmoke' : Dialog.backdropColor;
|
||||||
|
listDiv.style.bottom = (parseInt(tbarHeight) + 7) + 'px';
|
||||||
|
div.appendChild(listDiv);
|
||||||
|
|
||||||
|
var noComments = document.createElement('span');
|
||||||
|
noComments.style.cssText = 'display:none;padding-top:10px;text-align:center;';
|
||||||
|
mxUtils.write(noComments, mxResources.get('noCommentsFound'));
|
||||||
|
|
||||||
|
var selectionComment = null;
|
||||||
|
|
||||||
|
var ldiv = document.createElement('div');
|
||||||
|
|
||||||
|
ldiv.className = 'geToolbarContainer geCommentsToolbar';
|
||||||
|
ldiv.style.height = tbarHeight;
|
||||||
|
ldiv.style.padding = (!EditorUi.compactUi) ? '1px' : '4px 0px 3px 0px';
|
||||||
|
ldiv.style.backgroundColor = (Dialog.backdropColor == 'white') ? 'whiteSmoke' : Dialog.backdropColor;
|
||||||
|
|
||||||
|
if (mxClient.IS_QUIRKS)
|
||||||
|
{
|
||||||
|
ldiv.style.filter = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
var link = document.createElement('a');
|
||||||
|
link.className = 'geButton';
|
||||||
|
|
||||||
|
if (mxClient.IS_QUIRKS)
|
||||||
|
{
|
||||||
|
link.style.filter = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
function editComment(comment, cdiv, saveCallback, deleteOnCancel)
|
||||||
|
{
|
||||||
|
var commentTxt = cdiv.querySelector('.geCommentTxt');
|
||||||
|
var actionsDiv = cdiv.querySelector('.geCommentActionsList');
|
||||||
|
|
||||||
|
var textArea = document.createElement('textarea');
|
||||||
|
textArea.className = 'geCommentEditTxtArea';
|
||||||
|
textArea.style.minHeight = commentTxt.offsetHeight + 'px';
|
||||||
|
textArea.value = commentTxt.innerHTML;
|
||||||
|
cdiv.insertBefore(textArea, commentTxt);
|
||||||
|
|
||||||
|
var btnDiv = document.createElement('div');
|
||||||
|
btnDiv.className = 'geCommentEditBtns';
|
||||||
|
|
||||||
|
function reset()
|
||||||
|
{
|
||||||
|
cdiv.removeChild(textArea);
|
||||||
|
cdiv.removeChild(btnDiv);
|
||||||
|
actionsDiv.style.display = 'block';
|
||||||
|
commentTxt.style.display = 'block';
|
||||||
|
};
|
||||||
|
|
||||||
|
var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
|
||||||
|
{
|
||||||
|
if (deleteOnCancel)
|
||||||
|
{
|
||||||
|
cdiv.parentNode.removeChild(cdiv);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
cancelBtn.className = 'geCommentEditBtn';
|
||||||
|
btnDiv.appendChild(cancelBtn);
|
||||||
|
|
||||||
|
var saveBtn = mxUtils.button(mxResources.get('save'), function()
|
||||||
|
{
|
||||||
|
commentTxt.innerHTML = '';
|
||||||
|
comment.content = textArea.value;
|
||||||
|
mxUtils.write(commentTxt, comment.content);
|
||||||
|
reset();
|
||||||
|
saveCallback(comment);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Updates modified state and handles placeholder text
|
||||||
|
mxEvent.addListener(textArea, 'keydown', mxUtils.bind(this, function(evt)
|
||||||
|
{
|
||||||
|
if (!mxEvent.isConsumed(evt))
|
||||||
|
{
|
||||||
|
if ((mxEvent.isControlDown(evt) || (mxClient.IS_MAC &&
|
||||||
|
mxEvent.isMetaDown(evt))) && evt.keyCode == 13 /* Ctrl+Enter */)
|
||||||
|
{
|
||||||
|
saveBtn.click();
|
||||||
|
mxEvent.consume(evt);
|
||||||
|
}
|
||||||
|
else if (evt.keyCode == 27 /* Escape */)
|
||||||
|
{
|
||||||
|
cancelBtn.click();
|
||||||
|
mxEvent.consume(evt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Focused to include in viewport before focusin textbox
|
||||||
|
saveBtn.focus();
|
||||||
|
saveBtn.className = 'geCommentEditBtn gePrimaryBtn';
|
||||||
|
btnDiv.appendChild(saveBtn);
|
||||||
|
|
||||||
|
cdiv.insertBefore(btnDiv, commentTxt);
|
||||||
|
actionsDiv.style.display = 'none';
|
||||||
|
commentTxt.style.display = 'none';
|
||||||
|
textArea.focus();
|
||||||
|
};
|
||||||
|
|
||||||
|
function writeCommentDate(comment, dateDiv)
|
||||||
|
{
|
||||||
|
dateDiv.innerHTML = '';
|
||||||
|
var str = editorUi.timeSince(new Date(comment.modifiedDate));
|
||||||
|
|
||||||
|
if (str == null)
|
||||||
|
{
|
||||||
|
str = mxResources.get('lessThanAMinute');
|
||||||
|
}
|
||||||
|
|
||||||
|
mxUtils.write(dateDiv, mxResources.get('timeAgo', [str], '{1} ago'));
|
||||||
|
};
|
||||||
|
|
||||||
|
function showBusy(commentDiv)
|
||||||
|
{
|
||||||
|
var busyImg = document.createElement('img');
|
||||||
|
busyImg.className = 'geCommentBusyImg';
|
||||||
|
busyImg.src= '/images/spin.gif';
|
||||||
|
commentDiv.appendChild(busyImg);
|
||||||
|
commentDiv.busyImg = busyImg;
|
||||||
|
};
|
||||||
|
|
||||||
|
function showError(commentDiv)
|
||||||
|
{
|
||||||
|
commentDiv.style.border = '1px solid red';
|
||||||
|
commentDiv.removeChild(commentDiv.busyImg);
|
||||||
|
};
|
||||||
|
|
||||||
|
function showDone(commentDiv)
|
||||||
|
{
|
||||||
|
commentDiv.style.border = '';
|
||||||
|
commentDiv.removeChild(commentDiv.busyImg);
|
||||||
|
};
|
||||||
|
|
||||||
|
function addComment(comment, parentArr, parent, level, showResolved)
|
||||||
|
{
|
||||||
|
//Skip resolved comments if showResolved is not set
|
||||||
|
if (!showResolved && comment.isResolved)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
noComments.style.display = 'none';
|
||||||
|
|
||||||
|
var cdiv = document.createElement('div');
|
||||||
|
cdiv.className = 'geCommentContainer';
|
||||||
|
cdiv.setAttribute('data-commentId', comment.id);
|
||||||
|
cdiv.style.marginLeft = (level * 20 + 5) + 'px';
|
||||||
|
|
||||||
|
if (comment.isResolved && uiTheme != 'dark')
|
||||||
|
{
|
||||||
|
cdiv.style.backgroundColor = 'ghostWhite';
|
||||||
|
}
|
||||||
|
|
||||||
|
var headerDiv = document.createElement('div');
|
||||||
|
headerDiv.className = 'geCommentHeader';
|
||||||
|
|
||||||
|
var userImg = document.createElement('img');
|
||||||
|
userImg.className = 'geCommentUserImg';
|
||||||
|
userImg.src = comment.user.pictureUrl || Editor.userImage;
|
||||||
|
headerDiv.appendChild(userImg);
|
||||||
|
|
||||||
|
var headerTxt = document.createElement('div');
|
||||||
|
headerTxt.className = 'geCommentHeaderTxt';
|
||||||
|
headerDiv.appendChild(headerTxt);
|
||||||
|
|
||||||
|
var usernameDiv = document.createElement('div');
|
||||||
|
usernameDiv.className = 'geCommentUsername';
|
||||||
|
mxUtils.write(usernameDiv, comment.user.displayName || '');
|
||||||
|
headerTxt.appendChild(usernameDiv);
|
||||||
|
|
||||||
|
var dateDiv = document.createElement('div');
|
||||||
|
dateDiv.className = 'geCommentDate';
|
||||||
|
dateDiv.setAttribute('data-commentId', comment.id);
|
||||||
|
writeCommentDate(comment, dateDiv);
|
||||||
|
headerTxt.appendChild(dateDiv);
|
||||||
|
cdiv.appendChild(headerDiv);
|
||||||
|
|
||||||
|
var commentTxtDiv = document.createElement('div');
|
||||||
|
commentTxtDiv.className = 'geCommentTxt';
|
||||||
|
mxUtils.write(commentTxtDiv, comment.content || '');
|
||||||
|
cdiv.appendChild(commentTxtDiv);
|
||||||
|
|
||||||
|
var actionsDiv = document.createElement('div');
|
||||||
|
actionsDiv.className = 'geCommentActions';
|
||||||
|
var actionsList = document.createElement('ul');
|
||||||
|
actionsList.className = 'geCommentActionsList';
|
||||||
|
actionsDiv.appendChild(actionsList);
|
||||||
|
|
||||||
|
function addAction(name, evtHandler, hide)
|
||||||
|
{
|
||||||
|
var action = document.createElement('li');
|
||||||
|
action.className = 'geCommentAction';
|
||||||
|
var actionLnk = document.createElement('a');
|
||||||
|
actionLnk.className = 'geCommentActionLnk';
|
||||||
|
mxUtils.write(actionLnk, name);
|
||||||
|
action.appendChild(actionLnk);
|
||||||
|
|
||||||
|
mxEvent.addListener(actionLnk, 'click', function(evt)
|
||||||
|
{
|
||||||
|
evtHandler(evt, comment);
|
||||||
|
evt.preventDefault();
|
||||||
|
mxEvent.consume(evt);
|
||||||
|
});
|
||||||
|
|
||||||
|
actionsList.appendChild(action);
|
||||||
|
|
||||||
|
if (hide) action.style.display = 'none';
|
||||||
|
};
|
||||||
|
|
||||||
|
function collectReplies()
|
||||||
|
{
|
||||||
|
var replies = [];
|
||||||
|
var pdiv = cdiv;
|
||||||
|
|
||||||
|
function collectReplies(comment)
|
||||||
|
{
|
||||||
|
replies.push(pdiv);
|
||||||
|
|
||||||
|
if (comment.replies != null)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < comment.replies.length; i++)
|
||||||
|
{
|
||||||
|
pdiv = pdiv.nextSibling;
|
||||||
|
collectReplies(comment.replies[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
collectReplies(comment);
|
||||||
|
|
||||||
|
return {pdiv: pdiv, replies: replies};
|
||||||
|
};
|
||||||
|
|
||||||
|
function addReply(initContent, editIt, saveCallback, doResolve, doReopen)
|
||||||
|
{
|
||||||
|
var pdiv = collectReplies().pdiv;
|
||||||
|
|
||||||
|
var newReply = file.newComment(initContent, editorUi.getCurrentUser());
|
||||||
|
newReply.pCommentId = comment.id;
|
||||||
|
|
||||||
|
if (comment.replies == null) comment.replies = [];
|
||||||
|
|
||||||
|
var replyComment = addComment(newReply, comment.replies, pdiv, level + 1);
|
||||||
|
|
||||||
|
function doAddReply()
|
||||||
|
{
|
||||||
|
showBusy(replyComment);
|
||||||
|
|
||||||
|
comment.addReply(newReply, function(id)
|
||||||
|
{
|
||||||
|
newReply.id = id;
|
||||||
|
comment.replies.push(newReply);
|
||||||
|
showDone(replyComment);
|
||||||
|
|
||||||
|
if (saveCallback) saveCallback();
|
||||||
|
|
||||||
|
}, function(err)
|
||||||
|
{
|
||||||
|
doEdit();
|
||||||
|
showError(replyComment);
|
||||||
|
editorUi.handleError(err, null, null, null,
|
||||||
|
mxUtils.htmlEntities(mxResources.get('objectNotFound')));
|
||||||
|
}, doResolve, doReopen);
|
||||||
|
};
|
||||||
|
|
||||||
|
function doEdit()
|
||||||
|
{
|
||||||
|
editComment(newReply, replyComment, function(newReply)
|
||||||
|
{
|
||||||
|
doAddReply();
|
||||||
|
}, true);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (editIt)
|
||||||
|
{
|
||||||
|
doEdit();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
doAddReply();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!readOnly && (level == 0 || canReplyToReplies))
|
||||||
|
{
|
||||||
|
addAction(mxResources.get('reply'), function()
|
||||||
|
{
|
||||||
|
addReply('', true);
|
||||||
|
}, comment.isResolved);
|
||||||
|
}
|
||||||
|
|
||||||
|
var user = editorUi.getCurrentUser();
|
||||||
|
|
||||||
|
if (user != null && user.id == comment.user.id && !readOnly)
|
||||||
|
{
|
||||||
|
addAction(mxResources.get('edit'), function()
|
||||||
|
{
|
||||||
|
function doEditComment()
|
||||||
|
{
|
||||||
|
editComment(comment, cdiv, function()
|
||||||
|
{
|
||||||
|
showBusy(cdiv);
|
||||||
|
|
||||||
|
comment.editComment(comment.content, function()
|
||||||
|
{
|
||||||
|
showDone(cdiv);
|
||||||
|
}, function(err)
|
||||||
|
{
|
||||||
|
showError(cdiv);
|
||||||
|
doEditComment();
|
||||||
|
editorUi.handleError(err, null, null, null,
|
||||||
|
mxUtils.htmlEntities(mxResources.get('objectNotFound')));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
doEditComment();
|
||||||
|
}, comment.isResolved);
|
||||||
|
|
||||||
|
addAction(mxResources.get('delete'), function()
|
||||||
|
{
|
||||||
|
editorUi.confirm(mxResources.get('areYouSure'), function()
|
||||||
|
{
|
||||||
|
showBusy(cdiv);
|
||||||
|
|
||||||
|
comment.deleteComment(function()
|
||||||
|
{
|
||||||
|
var replies = collectReplies(comment).replies;
|
||||||
|
|
||||||
|
for (var i = 0; i < replies.length; i++)
|
||||||
|
{
|
||||||
|
listDiv.removeChild(replies[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < parentArr.length; i++)
|
||||||
|
{
|
||||||
|
if (parentArr[i] == comment)
|
||||||
|
{
|
||||||
|
parentArr.splice(i, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
noComments.style.display = (listDiv.getElementsByTagName('div').length == 0) ? 'block' : 'none';
|
||||||
|
}, function(err)
|
||||||
|
{
|
||||||
|
showError(cdiv);
|
||||||
|
editorUi.handleError(err, null, null, null,
|
||||||
|
mxUtils.htmlEntities(mxResources.get('objectNotFound')));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, comment.isResolved);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!readOnly && level == 0) //Resolve is a top-level action only
|
||||||
|
{
|
||||||
|
function toggleResolve(evt)
|
||||||
|
{
|
||||||
|
function doToggle()
|
||||||
|
{
|
||||||
|
var resolveActionLnk = evt.target;
|
||||||
|
resolveActionLnk.innerHTML = '';
|
||||||
|
|
||||||
|
comment.isResolved = !comment.isResolved;
|
||||||
|
mxUtils.write(resolveActionLnk, comment.isResolved? mxResources.get('reopen') : mxResources.get('resolve'));
|
||||||
|
var actionsDisplay = comment.isResolved? 'none' : '';
|
||||||
|
var replies = collectReplies(comment).replies;
|
||||||
|
|
||||||
|
|
||||||
|
var color = (uiTheme == 'dark') ? 'transparent' : (comment.isResolved? 'ghostWhite' : 'white');
|
||||||
|
|
||||||
|
for (var i = 0; i < replies.length; i++)
|
||||||
|
{
|
||||||
|
replies[i].style.backgroundColor = color;
|
||||||
|
|
||||||
|
var forOpenActions = replies[i].querySelectorAll('.geCommentAction');
|
||||||
|
|
||||||
|
for (var j = 0; j < forOpenActions.length; j ++)
|
||||||
|
{
|
||||||
|
if (forOpenActions[j] == resolveActionLnk.parentNode) continue;
|
||||||
|
|
||||||
|
forOpenActions[j].style.display = actionsDisplay;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!resolvedChecked)
|
||||||
|
{
|
||||||
|
replies[i].style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var divs = listDiv.getElementsByTagName('div');
|
||||||
|
var visibleCount = 0;
|
||||||
|
|
||||||
|
for (var i = 0; i < divs.length; i++)
|
||||||
|
{
|
||||||
|
if (divs[i].style.display != 'none' && divs[i].parentNode == listDiv)
|
||||||
|
{
|
||||||
|
visibleCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
noComments.style.display = (visibleCount == 0) ? 'block' : 'none';
|
||||||
|
};
|
||||||
|
|
||||||
|
if (comment.isResolved)
|
||||||
|
{
|
||||||
|
addReply(mxResources.get('reOpened') + ': ', true, doToggle, false, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
addReply(mxResources.get('markedAsResolved'), false, doToggle, true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
addAction(comment.isResolved? mxResources.get('reopen') : mxResources.get('resolve'), toggleResolve);
|
||||||
|
}
|
||||||
|
|
||||||
|
cdiv.appendChild(actionsDiv);
|
||||||
|
|
||||||
|
if (parent != null)
|
||||||
|
{
|
||||||
|
listDiv.insertBefore(cdiv, parent.nextSibling);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
listDiv.appendChild(cdiv);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; comment.replies != null && i < comment.replies.length; i++)
|
||||||
|
{
|
||||||
|
var reply = comment.replies[i];
|
||||||
|
reply.isResolved = comment.isResolved; //copy isResolved to child comments (replies)
|
||||||
|
addComment(reply, comment.replies, null, level + 1, showResolved);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cdiv;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!readOnly)
|
||||||
|
{
|
||||||
|
var addLink = link.cloneNode();
|
||||||
|
addLink.innerHTML = '<div class="geSprite geSprite-plus" style="display:inline-block;"></div>';
|
||||||
|
addLink.setAttribute('title', mxResources.get('create') + '...');
|
||||||
|
|
||||||
|
mxEvent.addListener(addLink, 'click', function(evt)
|
||||||
|
{
|
||||||
|
var newComment = file.newComment('', editorUi.getCurrentUser());
|
||||||
|
var newCommentDiv = addComment(newComment, comments, null, 0);
|
||||||
|
|
||||||
|
function doAddComment()
|
||||||
|
{
|
||||||
|
editComment(newComment, newCommentDiv, function(newComment)
|
||||||
|
{
|
||||||
|
showBusy(newCommentDiv);
|
||||||
|
|
||||||
|
file.addComment(newComment, function(id)
|
||||||
|
{
|
||||||
|
newComment.id = id;
|
||||||
|
comments.push(newComment);
|
||||||
|
showDone(newCommentDiv);
|
||||||
|
}, function(err)
|
||||||
|
{
|
||||||
|
showError(newCommentDiv);
|
||||||
|
doAddComment();
|
||||||
|
editorUi.handleError(err, null, null, null,
|
||||||
|
mxUtils.htmlEntities(mxResources.get('objectNotFound')));
|
||||||
|
});
|
||||||
|
}, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
doAddComment();
|
||||||
|
evt.preventDefault();
|
||||||
|
mxEvent.consume(evt);
|
||||||
|
});
|
||||||
|
|
||||||
|
ldiv.appendChild(addLink);
|
||||||
|
}
|
||||||
|
|
||||||
|
var resolvedLink = link.cloneNode();
|
||||||
|
resolvedLink.innerHTML = '<img src="/images/check.png" style="width: 16px; padding: 2px;">';
|
||||||
|
resolvedLink.setAttribute('title', mxResources.get('showResolved'));
|
||||||
|
var resolvedChecked = false;
|
||||||
|
|
||||||
|
if (uiTheme == 'dark')
|
||||||
|
{
|
||||||
|
resolvedLink.style.filter = 'invert(100%)';
|
||||||
|
}
|
||||||
|
|
||||||
|
mxEvent.addListener(resolvedLink, 'click', function(evt)
|
||||||
|
{
|
||||||
|
resolvedChecked = !resolvedChecked;
|
||||||
|
|
||||||
|
this.className = resolvedChecked? 'geButton geCheckedBtn' : 'geButton';
|
||||||
|
refresh();
|
||||||
|
|
||||||
|
evt.preventDefault();
|
||||||
|
mxEvent.consume(evt);
|
||||||
|
});
|
||||||
|
|
||||||
|
ldiv.appendChild(resolvedLink);
|
||||||
|
|
||||||
|
var refreshLink = link.cloneNode();
|
||||||
|
refreshLink.innerHTML = '<img src="/images/update16.png" style="width: 16px; padding: 2px;">';
|
||||||
|
refreshLink.setAttribute('title', mxResources.get('refresh'));
|
||||||
|
|
||||||
|
if (uiTheme == 'dark')
|
||||||
|
{
|
||||||
|
refreshLink.style.filter = 'invert(100%)';
|
||||||
|
}
|
||||||
|
|
||||||
|
mxEvent.addListener(refreshLink, 'click', function(evt)
|
||||||
|
{
|
||||||
|
refresh();
|
||||||
|
|
||||||
|
evt.preventDefault();
|
||||||
|
mxEvent.consume(evt);
|
||||||
|
});
|
||||||
|
|
||||||
|
ldiv.appendChild(refreshLink);
|
||||||
|
|
||||||
|
div.appendChild(ldiv);
|
||||||
|
|
||||||
|
var comments = [];
|
||||||
|
|
||||||
|
var refresh = mxUtils.bind(this, function()
|
||||||
|
{
|
||||||
|
listDiv.innerHTML = '<div style="padding-top:10px;text-align:center;"><img src="/images/spin.gif" valign="middle"> ' +
|
||||||
|
mxUtils.htmlEntities(mxResources.get('loading')) + '...</div>';
|
||||||
|
|
||||||
|
file = editorUi.getCurrentFile();
|
||||||
|
|
||||||
|
canReplyToReplies = file.canReplyToReplies();
|
||||||
|
|
||||||
|
if (file != null)
|
||||||
|
{
|
||||||
|
file.getComments(function(list)
|
||||||
|
{
|
||||||
|
function sortReplies(replies)
|
||||||
|
{
|
||||||
|
if (replies != null)
|
||||||
|
{
|
||||||
|
//Sort replies old to new
|
||||||
|
replies.sort(function(r1, r2)
|
||||||
|
{
|
||||||
|
return new Date(r1.modifiedDate) - new Date(r2.modifiedDate);
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var i = 0; i < replies.length; i++)
|
||||||
|
{
|
||||||
|
sortReplies(replies[i].replies);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//Sort comments old to new
|
||||||
|
list.sort(function(c1, c2)
|
||||||
|
{
|
||||||
|
return new Date(c1.modifiedDate) - new Date(c2.modifiedDate);
|
||||||
|
});
|
||||||
|
|
||||||
|
listDiv.innerHTML = '';
|
||||||
|
listDiv.appendChild(noComments);
|
||||||
|
noComments.style.display = 'block';
|
||||||
|
comments = list;
|
||||||
|
|
||||||
|
for (var i = 0; i < comments.length; i++)
|
||||||
|
{
|
||||||
|
sortReplies(comments[i].replies);
|
||||||
|
addComment(comments[i], comments, null, 0, resolvedChecked);
|
||||||
|
}
|
||||||
|
}, function()
|
||||||
|
{
|
||||||
|
listDiv.innerHTML = mxUtils.htmlEntities(mxResources.get('error'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//TODO if file is null, close the dialog
|
||||||
|
listDiv.innerHTML = mxUtils.htmlEntities(mxResources.get('error'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
refresh();
|
||||||
|
|
||||||
|
this.refreshComments = refresh;
|
||||||
|
|
||||||
|
//Refresh the modified date of each comment if the window is visible
|
||||||
|
var refreshCommentsTime = mxUtils.bind(this, function()
|
||||||
|
{
|
||||||
|
if (!this.window.isVisible()) return; //only update if it is visible
|
||||||
|
|
||||||
|
var modDateDivs = listDiv.querySelectorAll('.geCommentDate');
|
||||||
|
var modDateDivsMap = {};
|
||||||
|
|
||||||
|
for (var i = 0; i < modDateDivs.length; i++)
|
||||||
|
{
|
||||||
|
var div = modDateDivs[i];
|
||||||
|
modDateDivsMap[div.getAttribute('data-commentId')] = div;
|
||||||
|
}
|
||||||
|
|
||||||
|
function processComment(comment)
|
||||||
|
{
|
||||||
|
var div = modDateDivsMap[comment.id];
|
||||||
|
|
||||||
|
if (div == null) return; //resolved comments
|
||||||
|
|
||||||
|
writeCommentDate(comment, div);
|
||||||
|
|
||||||
|
for (var i = 0; comment.replies != null && i < comment.replies.length; i++)
|
||||||
|
{
|
||||||
|
processComment(comment.replies[i]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var i = 0; i < comments.length; i++)
|
||||||
|
{
|
||||||
|
processComment(comments[i]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//Periodically refresh time every one minute
|
||||||
|
setInterval(refreshCommentsTime, 60000);
|
||||||
|
this.refreshCommentsTime = refreshCommentsTime;
|
||||||
|
|
||||||
|
this.window = new mxWindow(mxResources.get('comments'), div, x, y, w, h, true, true);
|
||||||
|
this.window.minimumSize = new mxRectangle(0, 0, 300, 200);
|
||||||
|
this.window.destroyOnClose = false;
|
||||||
|
this.window.setMaximizable(false);
|
||||||
|
this.window.setResizable(true);
|
||||||
|
this.window.setClosable(true);
|
||||||
|
this.window.setVisible(true);
|
||||||
|
|
||||||
|
this.window.setLocation = function(x, y)
|
||||||
|
{
|
||||||
|
var iw = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth;
|
||||||
|
var ih = window.innerHeight || document.body.clientHeight || document.documentElement.clientHeight;
|
||||||
|
|
||||||
|
x = Math.max(0, Math.min(x, iw - this.table.clientWidth));
|
||||||
|
y = Math.max(0, Math.min(y, ih - this.table.clientHeight - 48));
|
||||||
|
|
||||||
|
if (this.getX() != x || this.getY() != y)
|
||||||
|
{
|
||||||
|
mxWindow.prototype.setLocation.apply(this, arguments);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var resizeListener = mxUtils.bind(this, function()
|
||||||
|
{
|
||||||
|
var x = this.window.getX();
|
||||||
|
var y = this.window.getY();
|
||||||
|
|
||||||
|
this.window.setLocation(x, y);
|
||||||
|
});
|
||||||
|
|
||||||
|
mxEvent.addListener(window, 'resize', resizeListener);
|
||||||
|
|
||||||
|
this.destroy = function()
|
||||||
|
{
|
||||||
|
mxEvent.removeListener(window, 'resize', resizeListener);
|
||||||
|
this.window.destroy();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
51
src/main/webapp/js/diagramly/DrawioComment.js
Normal file
51
src/main/webapp/js/diagramly/DrawioComment.js
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
|
||||||
|
DrawioComment = function(file, id, content, modifiedDate, createdDate, isResolved, user)
|
||||||
|
{
|
||||||
|
// The file having this comment
|
||||||
|
this.file = file;
|
||||||
|
|
||||||
|
// Unique ID
|
||||||
|
this.id = id;
|
||||||
|
|
||||||
|
// Comment contents
|
||||||
|
this.content = content;
|
||||||
|
|
||||||
|
// Comment modified date
|
||||||
|
this.modifiedDate = modifiedDate;
|
||||||
|
|
||||||
|
// Comment created date
|
||||||
|
this.createdDate = createdDate;
|
||||||
|
|
||||||
|
// Is comment resolved
|
||||||
|
this.isResolved = isResolved;
|
||||||
|
|
||||||
|
// User created this comment
|
||||||
|
// Type: DrawioUser
|
||||||
|
this.user = user;
|
||||||
|
|
||||||
|
this.replies = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
DrawioComment.prototype.addReplyDirect = function(reply)
|
||||||
|
{
|
||||||
|
if (reply != null)
|
||||||
|
this.replies.push(reply);
|
||||||
|
};
|
||||||
|
|
||||||
|
DrawioComment.prototype.addReply = function(reply, success, error, doResolve, doReopen)
|
||||||
|
{
|
||||||
|
//Placeholder
|
||||||
|
success();
|
||||||
|
};
|
||||||
|
|
||||||
|
DrawioComment.prototype.editComment = function(newContent, success, error)
|
||||||
|
{
|
||||||
|
//Placeholder
|
||||||
|
success();
|
||||||
|
};
|
||||||
|
|
||||||
|
DrawioComment.prototype.deleteComment = function(success, error)
|
||||||
|
{
|
||||||
|
//Placeholder
|
||||||
|
success();
|
||||||
|
};
|
|
@ -2024,3 +2024,35 @@ DrawioFile.prototype.destroy = function()
|
||||||
this.sync = null;
|
this.sync = null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get comments of the file
|
||||||
|
*/
|
||||||
|
DrawioFile.prototype.getComments = function(success, error)
|
||||||
|
{
|
||||||
|
success([]); //placeholder
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a comment to the file
|
||||||
|
*/
|
||||||
|
DrawioFile.prototype.addComment = function(comment, success, error)
|
||||||
|
{
|
||||||
|
success(Date.now()); //placeholder
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can add a reply to a reply
|
||||||
|
*/
|
||||||
|
DrawioFile.prototype.canReplyToReplies = function()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a new comment object
|
||||||
|
*/
|
||||||
|
DrawioFile.prototype.newComment = function(content, user)
|
||||||
|
{
|
||||||
|
return new DrawioComment(this, null, content, Date.now(), Date.now(), false, user);
|
||||||
|
};
|
||||||
|
|
|
@ -54,7 +54,7 @@ DriveClient.prototype.scopes = (urlParams['photos'] == '1') ?
|
||||||
* Contains the hostname of the old app.
|
* Contains the hostname of the old app.
|
||||||
*/
|
*/
|
||||||
DriveClient.prototype.allFields = 'kind,id,parents,headRevisionId,etag,title,mimeType,modifiedDate,' +
|
DriveClient.prototype.allFields = 'kind,id,parents,headRevisionId,etag,title,mimeType,modifiedDate,' +
|
||||||
'editable,copyable,labels,properties,downloadUrl,webContentLink,userPermission,fileSize';
|
'editable,copyable,canComment,labels,properties,downloadUrl,webContentLink,userPermission,fileSize';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fields required for catchin up.
|
* Fields required for catchin up.
|
||||||
|
|
70
src/main/webapp/js/diagramly/DriveComment.js
Normal file
70
src/main/webapp/js/diagramly/DriveComment.js
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
DriveComment = function(file, id, content, modifiedDate, createdDate, isResolved, user, pCommentId)
|
||||||
|
{
|
||||||
|
DrawioComment.call(this, file, id, content, modifiedDate, createdDate, isResolved, user);
|
||||||
|
this.pCommentId = pCommentId; //a reply
|
||||||
|
};
|
||||||
|
|
||||||
|
//Extends DrawioComment
|
||||||
|
mxUtils.extend(DriveComment, DrawioComment);
|
||||||
|
|
||||||
|
DriveComment.prototype.addReply = function(reply, success, error, doResolve, doReopen)
|
||||||
|
{
|
||||||
|
var body = {'content': reply.content};
|
||||||
|
|
||||||
|
if (doResolve)
|
||||||
|
{
|
||||||
|
body.verb = 'resolve';
|
||||||
|
}
|
||||||
|
else if (doReopen)
|
||||||
|
{
|
||||||
|
body.verb = 'reopen';
|
||||||
|
}
|
||||||
|
|
||||||
|
this.file.ui.drive.executeRequest(gapi.client.drive.replies.insert(
|
||||||
|
{
|
||||||
|
'fileId': this.file.getId(),
|
||||||
|
'commentId': this.id,
|
||||||
|
'resource': body
|
||||||
|
}),
|
||||||
|
mxUtils.bind(this, function(resp)
|
||||||
|
{
|
||||||
|
success(resp.replyId); //pass comment id
|
||||||
|
}), error);
|
||||||
|
};
|
||||||
|
|
||||||
|
DriveComment.prototype.editComment = function(newContent, success, error)
|
||||||
|
{
|
||||||
|
this.content = newContent;
|
||||||
|
var body = {'content': newContent};
|
||||||
|
|
||||||
|
this.file.ui.drive.executeRequest(
|
||||||
|
this.pCommentId?
|
||||||
|
gapi.client.drive.replies.patch({
|
||||||
|
'fileId': this.file.getId(),
|
||||||
|
'commentId': this.pCommentId,
|
||||||
|
'replyId': this.id,
|
||||||
|
'resource': body
|
||||||
|
}) :
|
||||||
|
gapi.client.drive.comments.patch({
|
||||||
|
'fileId': this.file.getId(),
|
||||||
|
'commentId': this.id,
|
||||||
|
'resource': body
|
||||||
|
}),
|
||||||
|
success, error);
|
||||||
|
};
|
||||||
|
|
||||||
|
DriveComment.prototype.deleteComment = function(success, error)
|
||||||
|
{
|
||||||
|
this.file.ui.drive.executeRequest(
|
||||||
|
this.pCommentId?
|
||||||
|
gapi.client.drive.replies.delete({
|
||||||
|
'fileId': this.file.getId(),
|
||||||
|
'commentId': this.pCommentId,
|
||||||
|
'replyId': this.id
|
||||||
|
}):
|
||||||
|
gapi.client.drive.comments.delete({
|
||||||
|
'fileId': this.file.getId(),
|
||||||
|
'commentId': this.id
|
||||||
|
}),
|
||||||
|
success, error);
|
||||||
|
};
|
|
@ -662,3 +662,74 @@ DriveFile.prototype.loadDescriptor = function(success, error)
|
||||||
{
|
{
|
||||||
this.ui.drive.loadDescriptor(this.getId(), success, error);
|
this.ui.drive.loadDescriptor(this.getId(), success, error);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get comments of the file
|
||||||
|
*/
|
||||||
|
DriveFile.prototype.getComments = function(success, error)
|
||||||
|
{
|
||||||
|
var currentUser = this.ui.getCurrentUser();
|
||||||
|
|
||||||
|
function driveCommentToDrawio(file, gComment, pCommentId)
|
||||||
|
{
|
||||||
|
if (gComment.deleted) return null; //skip deleted comments
|
||||||
|
|
||||||
|
var comment = new DriveComment(file, gComment.commentId || gComment.replyId, gComment.content,
|
||||||
|
gComment.modifiedDate, gComment.createdDate, gComment.status == 'resolved',
|
||||||
|
gComment.author.isAuthenticatedUser? currentUser :
|
||||||
|
new DrawioUser(gComment.author.permissionId, gComment.author.emailAddress,
|
||||||
|
gComment.author.displayName, gComment.author.picture.url), pCommentId);
|
||||||
|
|
||||||
|
for (var i = 0; gComment.replies != null && i < gComment.replies.length; i++)
|
||||||
|
{
|
||||||
|
comment.addReplyDirect(driveCommentToDrawio(file, gComment.replies[i], gComment.commentId));
|
||||||
|
}
|
||||||
|
|
||||||
|
return comment;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.ui.drive.executeRequest(gapi.client.drive.comments.list({'fileId': this.getId()}),
|
||||||
|
mxUtils.bind(this, function(resp)
|
||||||
|
{
|
||||||
|
var comments = [];
|
||||||
|
|
||||||
|
for (var i = 0; i < resp.items.length; i++)
|
||||||
|
{
|
||||||
|
var comment = driveCommentToDrawio(this, resp.items[i]);
|
||||||
|
|
||||||
|
if (comment != null) comments.push(comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
success(comments);
|
||||||
|
}), error);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a comment to the file
|
||||||
|
*/
|
||||||
|
DriveFile.prototype.addComment = function(comment, success, error)
|
||||||
|
{
|
||||||
|
var body = {'content': comment.content};
|
||||||
|
|
||||||
|
this.ui.drive.executeRequest(gapi.client.drive.comments.insert({'fileId': this.getId(), 'resource': body}),
|
||||||
|
mxUtils.bind(this, function(resp)
|
||||||
|
{
|
||||||
|
success(resp.commentId); //pass comment id
|
||||||
|
}), error);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can add a reply to a reply
|
||||||
|
*/
|
||||||
|
DriveFile.prototype.canReplyToReplies = function()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a new comment object
|
||||||
|
*/
|
||||||
|
DriveFile.prototype.newComment = function(content, user)
|
||||||
|
{
|
||||||
|
return new DriveComment(this, null, content, Date.now(), Date.now(), false, user);
|
||||||
|
};
|
||||||
|
|
|
@ -37,6 +37,11 @@
|
||||||
*/
|
*/
|
||||||
Editor.globeImage = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNi45MyA2aC0yLjk1Yy0uMzItMS4yNS0uNzgtMi40NS0xLjM4LTMuNTYgMS44NC42MyAzLjM3IDEuOTEgNC4zMyAzLjU2ek0xMiA0LjA0Yy44MyAxLjIgMS40OCAyLjUzIDEuOTEgMy45NmgtMy44MmMuNDMtMS40MyAxLjA4LTIuNzYgMS45MS0zLjk2ek00LjI2IDE0QzQuMSAxMy4zNiA0IDEyLjY5IDQgMTJzLjEtMS4zNi4yNi0yaDMuMzhjLS4wOC42Ni0uMTQgMS4zMi0uMTQgMiAwIC42OC4wNiAxLjM0LjE0IDJINC4yNnptLjgyIDJoMi45NWMuMzIgMS4yNS43OCAyLjQ1IDEuMzggMy41Ni0xLjg0LS42My0zLjM3LTEuOS00LjMzLTMuNTZ6bTIuOTUtOEg1LjA4Yy45Ni0xLjY2IDIuNDktMi45MyA0LjMzLTMuNTZDOC44MSA1LjU1IDguMzUgNi43NSA4LjAzIDh6TTEyIDE5Ljk2Yy0uODMtMS4yLTEuNDgtMi41My0xLjkxLTMuOTZoMy44MmMtLjQzIDEuNDMtMS4wOCAyLjc2LTEuOTEgMy45NnpNMTQuMzQgMTRIOS42NmMtLjA5LS42Ni0uMTYtMS4zMi0uMTYtMiAwLS42OC4wNy0xLjM1LjE2LTJoNC42OGMuMDkuNjUuMTYgMS4zMi4xNiAyIDAgLjY4LS4wNyAxLjM0LS4xNiAyem0uMjUgNS41NmMuNi0xLjExIDEuMDYtMi4zMSAxLjM4LTMuNTZoMi45NWMtLjk2IDEuNjUtMi40OSAyLjkzLTQuMzMgMy41NnpNMTYuMzYgMTRjLjA4LS42Ni4xNC0xLjMyLjE0LTIgMC0uNjgtLjA2LTEuMzQtLjE0LTJoMy4zOGMuMTYuNjQuMjYgMS4zMS4yNiAycy0uMSAxLjM2LS4yNiAyaC0zLjM4eiIvPjwvc3ZnPg==';
|
Editor.globeImage = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNi45MyA2aC0yLjk1Yy0uMzItMS4yNS0uNzgtMi40NS0xLjM4LTMuNTYgMS44NC42MyAzLjM3IDEuOTEgNC4zMyAzLjU2ek0xMiA0LjA0Yy44MyAxLjIgMS40OCAyLjUzIDEuOTEgMy45NmgtMy44MmMuNDMtMS40MyAxLjA4LTIuNzYgMS45MS0zLjk2ek00LjI2IDE0QzQuMSAxMy4zNiA0IDEyLjY5IDQgMTJzLjEtMS4zNi4yNi0yaDMuMzhjLS4wOC42Ni0uMTQgMS4zMi0uMTQgMiAwIC42OC4wNiAxLjM0LjE0IDJINC4yNnptLjgyIDJoMi45NWMuMzIgMS4yNS43OCAyLjQ1IDEuMzggMy41Ni0xLjg0LS42My0zLjM3LTEuOS00LjMzLTMuNTZ6bTIuOTUtOEg1LjA4Yy45Ni0xLjY2IDIuNDktMi45MyA0LjMzLTMuNTZDOC44MSA1LjU1IDguMzUgNi43NSA4LjAzIDh6TTEyIDE5Ljk2Yy0uODMtMS4yLTEuNDgtMi41My0xLjkxLTMuOTZoMy44MmMtLjQzIDEuNDMtMS4wOCAyLjc2LTEuOTEgMy45NnpNMTQuMzQgMTRIOS42NmMtLjA5LS42Ni0uMTYtMS4zMi0uMTYtMiAwLS42OC4wNy0xLjM1LjE2LTJoNC42OGMuMDkuNjUuMTYgMS4zMi4xNiAyIDAgLjY4LS4wNyAxLjM0LS4xNiAyem0uMjUgNS41NmMuNi0xLjExIDEuMDYtMi4zMSAxLjM4LTMuNTZoMi45NWMtLjk2IDEuNjUtMi40OSAyLjkzLTQuMzMgMy41NnpNMTYuMzYgMTRjLjA4LS42Ni4xNC0xLjMyLjE0LTIgMC0uNjgtLjA2LTEuMzQtLjE0LTJoMy4zOGMuMTYuNjQuMjYgMS4zMS4yNiAycy0uMSAxLjM2LS4yNiAyaC0zLjM4eiIvPjwvc3ZnPg==';
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Editor.commentImage = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMjEuOTkgNGMwLTEuMS0uODktMi0xLjk5LTJINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNGw0IDQtLjAxLTE4ek0xOCAxNEg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3527,7 +3527,7 @@
|
||||||
* @param {number} dx X-coordinate of the translation.
|
* @param {number} dx X-coordinate of the translation.
|
||||||
* @param {number} dy Y-coordinate of the translation.
|
* @param {number} dy Y-coordinate of the translation.
|
||||||
*/
|
*/
|
||||||
EditorUi.prototype.handleError = function(resp, title, fn, invokeFnOnClose)
|
EditorUi.prototype.handleError = function(resp, title, fn, invokeFnOnClose, notFoundMessage)
|
||||||
{
|
{
|
||||||
var resume = (this.spinner != null && this.spinner.pause != null) ? this.spinner.pause() : function() {};
|
var resume = (this.spinner != null && this.spinner.pause != null) ? this.spinner.pause() : function() {};
|
||||||
var e = (resp != null && resp.error != null) ? resp.error : resp;
|
var e = (resp != null && resp.error != null) ? resp.error : resp;
|
||||||
|
@ -3566,14 +3566,17 @@
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg = mxUtils.htmlEntities(mxResources.get('fileNotFoundOrDenied'));
|
msg = (notFoundMessage != null) ? notFoundMessage :
|
||||||
|
mxUtils.htmlEntities(mxResources.get('fileNotFoundOrDenied'));
|
||||||
}
|
}
|
||||||
|
|
||||||
var id = window.location.hash;
|
var id = window.location.hash;
|
||||||
|
|
||||||
if (id != null && id.substring(0, 2) == '#G' && resp != null && resp.error != null &&
|
if (id != null && id.substring(0, 2) == '#G' && resp != null && resp.error != null &&
|
||||||
resp.error.errors != null && resp.error.errors.length > 0 &&
|
((resp.error.errors != null && resp.error.errors.length > 0 &&
|
||||||
resp.error.errors[0].reason == 'fileAccess')
|
resp.error.errors[0].reason == 'fileAccess') ||
|
||||||
|
(resp.error.data != null && resp.error.data.length > 0 &&
|
||||||
|
resp.error.data[0].reason == 'fileAccess')))
|
||||||
{
|
{
|
||||||
id = id.substring(2);
|
id = id.substring(2);
|
||||||
|
|
||||||
|
|
|
@ -2788,11 +2788,68 @@
|
||||||
'selectVertices', 'selectEdges', 'selectAll', 'selectNone', '-', 'lockUnlock']);
|
'selectVertices', 'selectEdges', 'selectAll', 'selectNone', '-', 'lockUnlock']);
|
||||||
})));
|
})));
|
||||||
|
|
||||||
|
var action = editorUi.actions.addAction('comments', mxUtils.bind(this, function()
|
||||||
|
{
|
||||||
|
if (this.commentsWindow == null)
|
||||||
|
{
|
||||||
|
// LATER: Check outline window for initial placement
|
||||||
|
this.commentsWindow = new CommentsWindow(editorUi, document.body.offsetWidth - 380, 120, 300, 350);
|
||||||
|
//TODO Are these events needed?
|
||||||
|
this.commentsWindow.window.addListener('show', function()
|
||||||
|
{
|
||||||
|
editorUi.fireEvent(new mxEventObject('comments'));
|
||||||
|
});
|
||||||
|
this.commentsWindow.window.addListener('hide', function()
|
||||||
|
{
|
||||||
|
editorUi.fireEvent(new mxEventObject('comments'));
|
||||||
|
});
|
||||||
|
this.commentsWindow.window.setVisible(true);
|
||||||
|
editorUi.fireEvent(new mxEventObject('comments'));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.commentsWindow.window.setVisible(!this.commentsWindow.window.isVisible());
|
||||||
|
this.commentsWindow.refreshCommentsTime();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
action.setToggleAction(true);
|
||||||
|
action.setSelectedCallback(mxUtils.bind(this, function() { return this.commentsWindow != null && this.commentsWindow.window.isVisible(); }));
|
||||||
|
|
||||||
|
// Destroys comments window to force update or disable if not supported
|
||||||
|
editorUi.editor.addListener('fileLoaded', mxUtils.bind(this, function()
|
||||||
|
{
|
||||||
|
if (this.commentsWindow != null)
|
||||||
|
{
|
||||||
|
this.commentsWindow.destroy();
|
||||||
|
this.commentsWindow = null;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Extends toolbar dropdown to add comments
|
||||||
|
var viewPanelsMenu = this.get('viewPanels');
|
||||||
|
var viewPanelsFunct = viewPanelsMenu.funct;
|
||||||
|
|
||||||
|
viewPanelsMenu.funct = function(menu, parent)
|
||||||
|
{
|
||||||
|
viewPanelsFunct.apply(this, arguments);
|
||||||
|
|
||||||
|
var file = editorUi.getCurrentFile();
|
||||||
|
|
||||||
|
if (file != null && file.constructor == DriveFile)
|
||||||
|
{
|
||||||
|
editorUi.menus.addMenuItems(menu, ['comments'], parent);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Overrides view menu to add search and scratchpad
|
// Overrides view menu to add search and scratchpad
|
||||||
this.put('view', new Menu(mxUtils.bind(this, function(menu, parent)
|
this.put('view', new Menu(mxUtils.bind(this, function(menu, parent)
|
||||||
{
|
{
|
||||||
|
var file = editorUi.getCurrentFile();
|
||||||
|
|
||||||
this.addMenuItems(menu, ((this.editorUi.format != null) ? ['formatPanel'] : []).
|
this.addMenuItems(menu, ((this.editorUi.format != null) ? ['formatPanel'] : []).
|
||||||
concat(['outline', 'layers', '-']));
|
concat(['outline', 'layers']).concat((file != null && file.constructor == DriveFile) ?
|
||||||
|
['comments', '-'] : ['-']));
|
||||||
|
|
||||||
this.addMenuItems(menu, ['-', 'search'], parent);
|
this.addMenuItems(menu, ['-', 'search'], parent);
|
||||||
|
|
||||||
if (isLocalStorage || mxClient.IS_CHROMEAPP)
|
if (isLocalStorage || mxClient.IS_CHROMEAPP)
|
||||||
|
|
|
@ -765,7 +765,16 @@ EditorUi.initMinimalTheme = function()
|
||||||
|
|
||||||
ui.menus.addSubmenu('exportAs', menu, parent);
|
ui.menus.addSubmenu('exportAs', menu, parent);
|
||||||
|
|
||||||
ui.menus.addMenuItems(menu, ['-', 'outline', 'layers', '-', 'find', 'tags'], parent);
|
ui.menus.addMenuItems(menu, ['-', 'outline', 'layers'], parent);
|
||||||
|
|
||||||
|
var file = ui.getCurrentFile();
|
||||||
|
|
||||||
|
if (file != null && file.constructor == DriveFile)
|
||||||
|
{
|
||||||
|
ui.menus.addMenuItems(menu, ['comments'], parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.menus.addMenuItems(menu, ['-', 'find', 'tags'], parent);
|
||||||
|
|
||||||
// Cannot use print in standalone mode on iOS as we cannot open new windows
|
// Cannot use print in standalone mode on iOS as we cannot open new windows
|
||||||
if (!mxClient.IS_IOS || !navigator.standalone)
|
if (!mxClient.IS_IOS || !navigator.standalone)
|
||||||
|
|
519
src/main/webapp/js/viewer.min.js
vendored
519
src/main/webapp/js/viewer.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Geschwisterknoten markieren
|
||||||
selectParent=Vaterknoten markieren
|
selectParent=Vaterknoten markieren
|
||||||
selectDescendants=Untergeordnete Knoten markieren
|
selectDescendants=Untergeordnete Knoten markieren
|
||||||
lastSaved=Zuletzt gespeichert vor {1}
|
lastSaved=Zuletzt gespeichert vor {1}
|
||||||
|
resolve=Klären
|
||||||
|
reopen=Erneut öffnen
|
||||||
|
showResolved=Geklärte anzeigen
|
||||||
|
reply=Antworten
|
||||||
|
objectNotFound=Objekt nicht gefunden
|
||||||
|
reOpened=Erneut geöffnet
|
||||||
|
markedAsResolved=Als geklärt gekennzeichnet
|
||||||
|
noCommentsFound=Keine Kommentare gefunden
|
||||||
|
comments=Kommentare
|
||||||
|
timeAgo=Vor {1}
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=selectSiblings
|
||||||
selectParent=selectParent
|
selectParent=selectParent
|
||||||
selectDescendants=selectDescendants
|
selectDescendants=selectDescendants
|
||||||
lastSaved=lastSaved
|
lastSaved=lastSaved
|
||||||
|
resolve=resolve
|
||||||
|
reopen=reopen
|
||||||
|
showResolved=showResolved
|
||||||
|
reply=reply
|
||||||
|
objectNotFound=objectNotFound
|
||||||
|
reOpened=reOpened
|
||||||
|
markedAsResolved=markedAsResolved
|
||||||
|
noCommentsFound=noCommentsFound
|
||||||
|
comments=comments
|
||||||
|
timeAgo=timeAgo
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -804,3 +804,13 @@ selectSiblings=Select Siblings
|
||||||
selectParent=Select Parent
|
selectParent=Select Parent
|
||||||
selectDescendants=Select Descendants
|
selectDescendants=Select Descendants
|
||||||
lastSaved=Last saved {1} ago
|
lastSaved=Last saved {1} ago
|
||||||
|
resolve=Resolve
|
||||||
|
reopen=Re-open
|
||||||
|
showResolved=Show Resolved
|
||||||
|
reply=Reply
|
||||||
|
objectNotFound=Object not found
|
||||||
|
reOpened=Re-opened
|
||||||
|
markedAsResolved=Marked as resolved
|
||||||
|
noCommentsFound=No comments found
|
||||||
|
comments=Comments
|
||||||
|
timeAgo={1} ago
|
||||||
|
|
|
@ -150,3 +150,9 @@ html body .geStatusAlert:hover {
|
||||||
background-color:#a20025;
|
background-color:#a20025;
|
||||||
border-color:#bd002b;
|
border-color:#bd002b;
|
||||||
}
|
}
|
||||||
|
html body .geCommentContainer {
|
||||||
|
background-color: transparent;
|
||||||
|
border-width: 1px;
|
||||||
|
box-shadow: none;
|
||||||
|
color: inherit;
|
||||||
|
}
|
|
@ -237,6 +237,12 @@
|
||||||
.geMenubarContainer .geItem:active {
|
.geMenubarContainer .geItem:active {
|
||||||
background: #e8f0fe;
|
background: #e8f0fe;
|
||||||
}
|
}
|
||||||
|
.geToolbarButton {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
.geToolbarButton:active {
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
.mxDisabled:hover {
|
.mxDisabled:hover {
|
||||||
background:inherit !important;
|
background:inherit !important;
|
||||||
}
|
}
|
||||||
|
@ -1262,3 +1268,165 @@ html td.mxWindowTitle {
|
||||||
height: 27px;
|
height: 27px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
/* Comments CSS */
|
||||||
|
.geCommentsWin {
|
||||||
|
user-select: none;
|
||||||
|
border: 1px solid whiteSmoke;
|
||||||
|
height: 100%;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentsToolbar {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
left: 0px;
|
||||||
|
right: 0px;
|
||||||
|
overflow: hidden;
|
||||||
|
border-width: 1px 0px 0px 0px;
|
||||||
|
border-color: #c3c3c3;
|
||||||
|
border-style: solid;
|
||||||
|
display: block;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentsList {
|
||||||
|
position: absolute;
|
||||||
|
overflow: auto;
|
||||||
|
left: 0px;
|
||||||
|
right: 0px;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentContainer {
|
||||||
|
position: relative;
|
||||||
|
padding: 12px;
|
||||||
|
margin: 5px;
|
||||||
|
min-height: 50px;
|
||||||
|
display: block;
|
||||||
|
background-color: white;
|
||||||
|
border-width: 0px 0px 1px 0px;
|
||||||
|
border-color: #c3c3c3;
|
||||||
|
border-style: solid;
|
||||||
|
border-radius: 10px;
|
||||||
|
white-space: nowrap;
|
||||||
|
box-shadow: 2px 2px 6px rgba(60,64,67,.15);
|
||||||
|
color: #3C4043;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentHeader {
|
||||||
|
width: 100%;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentUserImg {
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
border-radius: 50%;
|
||||||
|
float: left;
|
||||||
|
background-color: whitesmoke;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentHeaderTxt {
|
||||||
|
overflow: hidden;
|
||||||
|
height: 32px;
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentUsername {
|
||||||
|
overflow: hidden;
|
||||||
|
height: 18px;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentDate {
|
||||||
|
color: #707070;
|
||||||
|
overflow: hidden;
|
||||||
|
height: 14px;
|
||||||
|
font-size: 11px;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentDate::first-letter {
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentTxt {
|
||||||
|
font-size: 14px;
|
||||||
|
padding-top: 5px;
|
||||||
|
white-space: normal;
|
||||||
|
min-height: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentEditTxtArea {
|
||||||
|
margin-top: 5px;
|
||||||
|
font-size: 14px !important;
|
||||||
|
min-height: 12px;
|
||||||
|
max-width: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentEditBtns {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding-top: 5px;
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentEditBtn {
|
||||||
|
padding: 3px 8px 3px 8px !important;
|
||||||
|
float: right !important;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentActions {
|
||||||
|
color: #707070;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentActionsList {
|
||||||
|
list-style-type: disc;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 10px 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentAction {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentAction:before {
|
||||||
|
content: "\2022";
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentAction:first-child:before {
|
||||||
|
content: "";
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentActionLnk {
|
||||||
|
cursor: pointer;
|
||||||
|
color: #707070;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentActionLnk:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCheckedBtn {
|
||||||
|
background-color: #ccc;
|
||||||
|
border-top: 1px solid black !important;
|
||||||
|
border-left: 1px solid black !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.geCommentBusyImg {
|
||||||
|
position: absolute;
|
||||||
|
top: 5px;
|
||||||
|
right: 5px;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue