cryptpad/www/pad/comment.js

127 lines
4.6 KiB
JavaScript
Raw Normal View History

2020-04-08 14:16:04 +00:00
(function () {
function isUnstylable (el) {
console.log(el);
console.log(el.getAttribute('contentEditable'));
console.log(el.getAttribute('data-nostyle'));
var b = el.getAttribute( 'contentEditable' ) == 'false' ||
el.getAttribute( 'data-nostyle' );
console.log(b);
return b;
}
CKEDITOR.plugins.add('comments', {
//requires: 'dialog,widget',
//icons: 'image',
//hidpi: true,
onLoad: function () {
2020-04-20 13:22:45 +00:00
CKEDITOR.addCss('comment { background-color: rgba(252, 165, 3, 0.8); }' +
'comment * { background-color: transparent !important; }');
2020-04-08 14:16:04 +00:00
},
init: function (editor) {
var pluginName = 'comment';
var Messages = CKEDITOR._commentsTranslations; // XXX
var targetWidget;
var styles = {};
var styleDef = {
element: 'comment',
attributes: {
'data-uid': '#(uid)'
},
overrides: [ {
element: 'comment'
} ],
childRule: isUnstylable
};
// Register the command.
var removeStyle = new CKEDITOR.style(styleDef, { 'uid': '' });
2020-04-22 14:23:45 +00:00
editor.addCommand('comment', {
2020-04-08 14:16:04 +00:00
exec: function (editor, data) {
if (editor.readOnly) { return; }
editor.focus();
2020-04-20 13:22:45 +00:00
// If we're inside another comment, abort
var isComment = removeStyle.checkActive(editor.elementPath(), editor);
if (isComment) { return; }
// We can't comment on empty text!
if (!editor.getSelection().getSelectedText()) { return; }
2020-04-08 14:16:04 +00:00
var uid = CKEDITOR.tools.getUniqueId();
2020-04-20 13:22:45 +00:00
editor.plugins.comments.addComment(uid, function () {
2020-04-22 14:23:45 +00:00
// Make an undo spnashot
2020-04-20 13:22:45 +00:00
editor.fire('saveSnapshot');
2020-04-22 14:23:45 +00:00
// Make sure comments won't overlap
2020-04-20 13:22:45 +00:00
editor.removeStyle(removeStyle);
2020-04-22 14:23:45 +00:00
// Add the comment marker
var s = new CKEDITOR.style(styleDef, { 'uid': uid });
editor.applyStyle(s);
2020-04-20 13:22:45 +00:00
// Save the undo snapshot after all changes are affected.
setTimeout( function() {
editor.fire('saveSnapshot');
}, 0 );
});
2020-04-08 14:16:04 +00:00
2020-04-20 13:22:45 +00:00
}
});
editor.addCommand('uncomment', {
exec: function (editor, data) {
if (editor.readOnly) { return; }
editor.fire('saveSnapshot');
2020-04-22 14:23:45 +00:00
if (!data || !data.id) {
// XXX Uncomment the selection, remove on prod, only used for dev
editor.focus();
editor.removeStyle(removeStyle);
setTimeout( function() {
editor.fire('saveSnapshot');
}, 0 );
return;
}
// Uncomment provided element
//Create style for this id
var style = new CKEDITOR.style({
element: 'comment',
attributes: {
'data-uid': data.id
},
});
// Create range for the entire document
var range = editor.createRange();
range.selectNodeContents( editor.document.getBody() );
// Remove style for the document
style.removeFromRange(range, editor);
2020-04-08 14:16:04 +00:00
setTimeout( function() {
editor.fire('saveSnapshot');
}, 0 );
}
});
// Register the toolbar button.
2020-04-22 14:23:45 +00:00
// XXX Uncomment selection, remove on prod, only used for dev
2020-04-08 14:16:04 +00:00
editor.ui.addButton && editor.ui.addButton('UnComment', {
label: 'UNCOMMENT',
command: 'uncomment',
toolbar: 'insert,10'
});
editor.ui.addButton && editor.ui.addButton('Comment', {
label: 'COMMENT',
command: pluginName,
icon : '/pad/icons/comment.png',
toolbar: 'insert,10'
});
},
afterInit: function (editor) {
editor.plugins.comments.removeComment = function () {};
}
});
})();