diff --git a/action.php b/action.php index 0ee9b23c6a2635f74f50bcbfe7ea66f88fa702a2..5edbb9e47bcafabc73c102cf872853822b9fef72 100644 --- a/action.php +++ b/action.php @@ -615,7 +615,7 @@ if ($action === 'getCommentsToPrint') { foreach ($conversations as $conversation) { $post = new stdClass(); $post->answeredquestion = pdfannotator_handle_latex($context, $conversation->answeredquestion); - $post->answeredquestion = pdfannotator_extract_images($post->answeredquestion); + $post->answeredquestion = pdfannotator_extract_images($post->answeredquestion, $conversation->id, $context); $post->page = $conversation->page; $post->annotationtypeid = $conversation->annotationtypeid; $post->author = $conversation->author; @@ -626,7 +626,7 @@ if ($action === 'getCommentsToPrint') { foreach ($conversation->answers as $ca) { $answer = new stdClass(); $answer->answer = pdfannotator_handle_latex($context, $ca->answer); - $answer->answer = pdfannotator_extract_images($answer->answer); + $answer->answer = pdfannotator_extract_images($answer->answer, $ca->id, $context); $answer->author = $ca->author; $answer->timemodified = $ca->timemodified; $post->answers[$answercount] = $answer; diff --git a/lib.php b/lib.php index c5355aa5f53031b57ff2194fc336d611b85a1717..84281b8af06ac726c21cc4d06baff30bb309300b 100644 --- a/lib.php +++ b/lib.php @@ -771,26 +771,40 @@ function pdfannotator_print_recent_mod_activity($activity, $courseid, $detail, $ */ function mod_pdfannotator_output_fragment_open_edit_comment_editor($args) { global $DB; + $context = context_module::instance($args['cmid']); - $html = ''; - $draftitemid = pdfannotator_data_preprocessing($context, 'editarea' . $args['commentid'], 'editor-editcomment-inputs' . $args['commentid'], 0); - $comment = $DB->get_record('pdfannotator_comments', ['id' => $args['commentid']]); - $html = pdfannotator_file_prepare_draft_area($draftitemid, $context->id, 'mod_pdfannotator', 'post', - $args['commentid'], pdfannotator_get_editor_options($context), $comment->content); + $data = pdfannotator_data_preprocessing($context, 'editarea' . $args['uuid'], 0); + $comment = $DB->get_record('pdfannotator_comments', ['id' => $args['uuid']]); + $displaycontent = pdfannotator_file_prepare_draft_area($data['draftItemId'], $context->id, 'mod_pdfannotator', 'post', + $args['uuid'], pdfannotator_get_editor_options($context), $comment->content); + + /* $params = ['draftitemid' => $data['draftItemId'], 'editorformat' => $data['editorFormat'], $args['action'], 'targetId' => 'editor-editcomment-inputs-' . $args['uuid'], $args['uuid']]; + $PAGE->requires->js_init_call('loadEditorInputFields', $params); */ - return $html; + // Input fields. + $out = ''; + $out .= html_writer::empty_tag('input', ['type' => 'hidden', 'class' => 'pdfannotator_' . $args['action'] . 'comment' . '_editoritemid', 'name' => 'input_value_editor', 'value' => $data['draftItemId']]); + $out .= html_writer::empty_tag('input', ['type' => 'hidden', 'class' => 'pdfannotator_' . $args['action'] . 'comment' . '_editorformat', 'name' => 'input_value_editor', 'value' => $data['editorFormat']]); + $out .= 'displaycontent:' . $displaycontent; + + return $out; } +/** + * Initialize the editor for adding a comment. + * @param type $args + * @return string + */ function mod_pdfannotator_output_fragment_open_add_comment_editor($args) { - global $DB; $context = context_module::instance($args['cmid']); - $data = pdfannotator_data_preprocessing($context, 'id_pdfannotator_content', "editor-commentlist-inputs", 0); - file_prepare_draft_area($draftitemid, $context->id, 'mod_pdfannotator', 'post', 0, pdfannotator_get_editor_options($context)); + $data = pdfannotator_data_preprocessing($context, 'id_pdfannotator_content', 0); + $text = file_prepare_draft_area($data['draftItemId'], $context->id, 'mod_pdfannotator', 'post', 0, pdfannotator_get_editor_options($context)); - $out = html_writer::empty_tag('input', ['type' => 'hidden', 'class' => 'pdfannotator_' . $args['section'] . '_editoritemid', 'name' => 'input_value_editor', 'value' => $data['draftItemId']]); - $out .= html_writer::empty_tag('input', ['type' => 'hidden', 'class' => 'pdfannotator_' . $args['section'] . '_editorformat', 'name' => 'input_value_editor', 'value' => $data['editorFormat']]); + $out = ''; + $out = html_writer::empty_tag('input', ['type' => 'hidden', 'class' => 'pdfannotator_' . $args['action'] . 'comment' . '_editoritemid', 'name' => 'input_value_editor', 'value' => $data['draftItemId']]); + $out .= html_writer::empty_tag('input', ['type' => 'hidden', 'class' => 'pdfannotator_' . $args['action'] . 'comment' . '_editorformat', 'name' => 'input_value_editor', 'value' => $data['editorFormat']]); return $out; -} +} \ No newline at end of file diff --git a/locallib.php b/locallib.php index a178ad12824534767cf01928c32a24f719418231..fc9a24772bb40199ec5f5b3ec55fe569289be44b 100644 --- a/locallib.php +++ b/locallib.php @@ -128,7 +128,7 @@ function pdfannotator_get_editor_options($context) { 'return_types' => 15, 'enable_filemanagement' => true, 'removeorphaneddrafts' => false, - 'autosave' => true, + 'autosave' => false, 'noclean' => false, 'trusttext' => 0, 'subdirs' => true, @@ -147,7 +147,7 @@ function pdfannotator_get_relativelink($content, $commentid, $context) { return $content; } -function pdfannotator_extract_images($contentarr) { +function pdfannotator_extract_images($contentarr, $itemid, $context=null) { // Remove quotes here, in case if there is no math form. if (gettype($contentarr) === 'string') { $str = preg_replace('/[\"]/', "", $contentarr); @@ -161,12 +161,12 @@ function pdfannotator_extract_images($contentarr) { $res[] = $content; continue; } - $res = pdfannotator_split_content_image($content, $res); + $res = pdfannotator_split_content_image($content, $res, $itemid, $context); } return $res; } -function pdfannotator_split_content_image($content, $res) { +function pdfannotator_split_content_image($content, $res, $itemid, $context=null) { $imgmatch = []; $firststr = ''; $data = []; @@ -190,11 +190,26 @@ function pdfannotator_split_content_image($content, $res) { $format[0] = 'jpeg'; } - $imagedata = file_get_contents($url[0]); - $data['image'] = $url[0]; + $data['format'] = strtoupper($format[0]); + + $fs = get_file_storage(); + $files = $fs->get_area_files($context->id, 'mod_pdfannotator', 'post', $itemid); + $fileinfo = []; + foreach($files as $file) { + if ($file->is_directory() and $file->get_filepath() === '/') { + continue; + } + //$fileinfo['fileid'] = $file->file_record['id']; + $fileinfo['filename'] = $file->get_filename(); + $fileinfo['filepath'] = $file->get_filepath(); + $fileinfo['filecontent'] = $file->get_content(); + $fileinfo['filesize'] = $file->get_filesize(); + } + //$imagedata = file_get_contents($fileinfo['filecontent']); + $imagedata = 'data:image/' . strtolower($data['format']) . ';base64,' . base64_encode($fileinfo['filecontent']); + $data['image'] = $imagedata; //$data['image'] = $url[0]; - $data['format'] = strtoupper($format[0]); preg_match('/height=[0-9]+/', $imgstr, $height); $data['imageheight'] = str_replace("\"", "", explode('=', $height[0])[1]); preg_match('/width=[0-9]+/', $imgstr, $width); @@ -208,7 +223,7 @@ function pdfannotator_split_content_image($content, $res) { return $res; } -function pdfannotator_data_preprocessing($context, $textarea, $classname, $draftitemid = 0) { +function pdfannotator_data_preprocessing($context, $textarea, $draftitemid = 0) { global $PAGE; $options = pdfannotator_get_editor_options($context); @@ -240,6 +255,8 @@ function pdfannotator_data_preprocessing($context, $textarea, $classname, $draft $args->env = 'filepicker'; // advimage plugin $image_options = (object)initialise_filepicker($args); + $image_options->context = $context; + $image_options->client_id = uniqid(); $image_options->maxbytes = get_config('mod_pdfannotator', 'maxbytes'); $image_options->maxfiles = PDFANNOTATOR_EDITOR_UNLIMITED_FILES; $image_options->autosave = false; @@ -256,7 +273,7 @@ function pdfannotator_data_preprocessing($context, $textarea, $classname, $draft //$PAGE->requires->js_init_call('inputDraftItemID', [$draftitemid, (int)$editorformat, $classname]); - return ['draftItemId' => $draftitemid, 'editorFormat' => $editorformat, 'className' => $classname]; + return ['draftItemId' => $draftitemid, 'editorFormat' => $editorformat]; } /** diff --git a/model/comment.class.php b/model/comment.class.php index 220e2bed1ac1d3370470413a78c0f5647258ad79..3b5e2c72622c0f2047b5920f95166689eb00d32b 100644 --- a/model/comment.class.php +++ b/model/comment.class.php @@ -61,7 +61,7 @@ class pdfannotator_comment { $datarecord->id = $commentuuid; // Get the draftitemid and prepare the draft area. - $draftitemid = required_param('pdfannotator_content_editoritemid', PARAM_INT); + $draftitemid = required_param('pdfannotator_addcomment_editoritemid', PARAM_INT); $options = pdfannotator_get_editor_options($context); $text = file_save_draft_area_files($draftitemid, $context->id, "mod_pdfannotator", "post", $commentuuid, $options, $datarecord->content, true); diff --git a/shared/index.js b/shared/index.js index f0f3ee73604d5bc1179413d76c2dc781e84af2c5..f3f1002a4ea528e4b7771036d12c11fe8d96b951 100644 --- a/shared/index.js +++ b/shared/index.js @@ -269,11 +269,11 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to * @returns {unresolved} */ addComment(documentId, annotationId, content, visibility = "public", isquestion = 0) { - var pdfannotator_content_editoritemid = document.querySelectorAll('.pdfannotator_content_editoritemid')[0].value; + var pdfannotator_addcomment_editoritemid = document.querySelectorAll('.pdfannotator_addcomment_editoritemid')[0].value; return $.ajax({ type: "POST", url: "action.php", - data: { "documentId": documentId, "annotationId": annotationId, "content": content, "visibility": visibility, "action": 'addComment', "isquestion": isquestion, "cmid":_cm.id, "pdfannotator_content_editoritemid": pdfannotator_content_editoritemid, sesskey: M.cfg.sesskey} + data: { "documentId": documentId, "annotationId": annotationId, "content": content, "visibility": visibility, "action": 'addComment', "isquestion": isquestion, "cmid":_cm.id, "pdfannotator_addcomment_editoritemid": pdfannotator_addcomment_editoritemid, sesskey: M.cfg.sesskey} }).then(function(data){ data = data.substring(data.indexOf('{'),data.length); //TODO compare to data before data.substring @@ -866,9 +866,10 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to } } function printImage(data) { + // var url = data['image']; + // var imageElement = document.createElement("img"); + // imageElement.src = url; var url = data['image']; - var imageElement = document.createElement("img"); - imageElement.src = url; var height = data['imageheight'] * 0.264583333333334; // Convert pixel into mm. // Reduce height and witdh if its size more than a4height. @@ -883,7 +884,7 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to doc.addPage(); count = contentTopBottomMargin; } - doc.addImage(imageElement, data['format'], contentRightMargin, count, width, height); // image data, format, offset to the left, offset to the top, width, height + doc.addImage(url, data['format'], contentRightMargin, count, width, height); // image data, format, offset to the left, offset to the top, width, height count += (5 + height); } /** @@ -1756,31 +1757,29 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to * @returns {undefined} */ function createEditFormHandler(comment) { - var editorExists = false; - var editForm; - var editArea; - // If there is no editor in the comment already, we will insert it and than call this function. - var handleClickIfEditorExists = function() { - editForm = document.getElementById("edit"+comment.uuid); - editArea = document.getElementById("editarea"+comment.uuid); - var editAreaEditable = document.getElementById("editarea"+comment.uuid+"editable"); - var text = document.getElementById("chatmessage"+comment.uuid); - if (editForm.style.display === "none") { - editForm.style.display = "block"; - text.innerHTML = ""; - - var isEmptyContent = false; + // Create an element for click. + var editButton = $('#editButton'+comment.uuid); + // Add an event handler to the click element that opens a textarea and fills it with the current comment. + editButton.click(function(e) { + UI.loadEditor('edit', comment.uuid, handleClickIfEditorExists); + function handleClickIfEditorExists() { // Add an event handler to the form for submitting any changes to the database. + let editForm = document.getElementById(`edit${comment.uuid}`); editForm.onsubmit = function (e) { - let newContent = editArea.value.trim(); - var commentEditContentElements = document.querySelectorAll(`#editarea${comment.uuid}editable`)[0]; - var imgContents = commentEditContentElements.querySelectorAll('img'); - if(commentEditContentElements.innerText.replace('/\n/g', '').trim() === '') { + let editTextarea = document.getElementById(`editarea${comment.uuid}`); + let editAreaEditable = document.getElementById(`editarea${comment.uuid}editable`); + let chatMessage = document.getElementById(`chatmessage${comment.uuid}`); + + let newContent = editTextarea.value.trim(); + let imgContents = editAreaEditable.querySelectorAll('img'); + let isEmptyContent = false; + if(editAreaEditable.innerText.replace('/\n/g', '').trim() === '') { isEmptyContent = true; } - var temp = commentEditContentElements.querySelectorAll('p')[0]; - if(temp) { - if (temp.innerText.replace('/\n/g', '').trim() === '' && imgContents.length === 0) { + let defaultPTag = editAreaEditable.querySelector('p'); + if(defaultPTag) { + // No text and no images in default p tag of editor. + if (defaultPTag.innerText.replace('/\n/g', '').trim() === '' && imgContents.length === 0) { isEmptyContent = true; } } @@ -1790,25 +1789,27 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to message: M.util.get_string('min0Chars','pdfannotator'), type: "error" }); - } else if(newContent === comment.content) { // No changes. + } else if(newContent === comment.displaycontent) { // No changes. editForm.style.display = "none"; - text.innerHTML = comment.displaycontent; - renderMathJax(text); + chatMessage.innerHTML = comment.displaycontent; + renderMathJax(chatMessage); } else { // Save changes. _2.default.getStoreAdapter().editComment(documentId, comment.uuid, newContent, editForm) .then(function(data){ if (data.status === "success") { editForm.style.display = "none"; + $(`edit_comment_editor_wrapper_${comment.uuid}`).remove(); if (data.modifiedby) { $('#comment_' + comment.uuid + ' .edited').html(M.util.get_string('editedComment', 'pdfannotator') + " " + data.timemodified + " " + M.util.get_string('modifiedby', 'pdfannotator') + " " + data.modifiedby); } else { $('#comment_' + comment.uuid + ' .edited').html( M.util.get_string('editedComment', 'pdfannotator') + " " + data.timemodified); } newContent = data.newContent; - text.innerHTML = newContent; + chatMessage.innerHTML = newContent; comment.content = newContent; - editArea = newContent; - renderMathJax(text); + comment.displaycontent = newContent; + editTextarea = newContent; + renderMathJax(chatMessage); notification.addNotification({ message: M.util.get_string('successfullyEdited', 'pdfannotator'), type: "success" @@ -1827,31 +1828,24 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to notificationpanel.removeChild(notificationpanel.firstChild); } }, 4000); - + return false; // Prevents normal POST and page reload in favour of an asynchronous load. }; - - $('#comment_' + comment.uuid + ' #commentCancel').click(function(e){ + + let cancelBtn = $('#comment_' + comment.uuid + ' #commentCancel'); + cancelBtn.click(function(e){ + let editTextarea = document.getElementById(`editarea${comment.uuid}`); + let editAreaEditable = document.getElementById(`editarea${comment.uuid}editable`); + let chatMessage = document.getElementById(`chatmessage${comment.uuid}`); editForm.style.display = "none"; - editArea.innerHTML = ''; - editArea.innerHTML = comment.displaycontent; + editTextarea.innerHTML = ''; + editTextarea.innerHTML = comment.displaycontent; editAreaEditable.innerHTML = ''; editAreaEditable.innerHTML = comment.displaycontent; - text.innerHTML = comment.displaycontent; - renderMathJax(text); + chatMessage.innerHTML = comment.displaycontent; + renderMathJax(chatMessage); }); - } else { - editForm.style.display = "none"; - text.innerHTML = comment.displaycontent; - renderMathJax(text); - } - } - // Create an element for click. - var editButton = $('#editButton'+comment.uuid); - // Add an event handler to the click element that opens a textarea and fills it with the current comment. - editButton.click(function(e) { - UI.loadEditor('editcomment', 'edit', comment.uuid); - handleClickIfEditorExists(); + } }); } @@ -1981,7 +1975,7 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to _2.default.getStoreAdapter().addComment(documentId, annotationId, commentContentElements.innerHTML, commentVisibility, isquestion) .then(function (response) { var fn = (response) => insertComments(response); - UI.loadEditor('content', 'add', 0, fn, response); + UI.loadEditor('add', 0, fn, response); }) .then(function (success) { if (!success) { @@ -2007,7 +2001,7 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to //render comments insertComments(comments, markCommentid); } - UI.loadEditor('content', 'add', 0, fn, params); + UI.loadEditor('add', 0, fn, params); }) .catch(function (err){ @@ -5783,7 +5777,7 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to [textarea,data] = (0,_commentWrapper.openComment)(e,handleCancelClick,handleSubmitClick,handleToolbarClick,handleSubmitBlur,'pin'); renderPin(); } - _commentWrapper.loadEditor('content', 'add', 0, fn); + _commentWrapper.loadEditor('add', 0, fn); } // Reset dragging to false. @@ -6168,14 +6162,14 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to let fn = () => { [textarea,data] = (0,_commentWrapper.openComment)(e,handleCancelClick,handleSubmitClick,handleToolbarClick,handleSubmitBlur,_type); } - _commentWrapper.loadEditor('content', 'add', 0, fn); + _commentWrapper.loadEditor('add', 0, fn); }else if((rectsSelection=getSelectionRects()) && _type!=='area'){ renderRect(_type,[].concat(_toConsumableArray(rectsSelection)).map(function(r){return{top:r.top,left:r.left,width:r.width,height:r.height};}),null); let fn = () => { [textarea,data] = (0,_commentWrapper.openComment)(e,handleCancelClick,handleSubmitClick,handleToolbarClick,handleSubmitBlur,_type); } - _commentWrapper.loadEditor('content', 'add', 0, fn); + _commentWrapper.loadEditor('add', 0, fn); }else{ enableRect(_type); //Do nothing! @@ -6386,8 +6380,7 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to document.querySelector('.toolbar').removeEventListener('click',handleToolbarClick); //simulate an click on cursor document.querySelector('button.cursor').click(); - (0,_commentWrapper.showCommentsAfterCreation)(annotation.uuid); - //_commentWrapper.loadEditor('content'); + (0,_commentWrapper.showCommentsAfterCreation)(annotation.uuid); }) .catch(function(){ //if there is an error in addComment, the annotation should be deleted! @@ -6945,26 +6938,25 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to /** * - * @param {type} section is a part of class name of editor input: pdfannotator_${section}_editoritemid, pdfannotator_${section}_editorFormat. - * @param {type} action can be add or edit + * @param {type} action can be add for adding comments. Or edit for editing comments. * @param {int} uuid * @param {Function} fn a callback funtion. It will be called after the Promises in this funktion finish. * * */ - function loadEditor(section, action='add', uuid=0, fn=null, fnParams=null){ - _ajaxloader.showLoader(`.editor-loader-placeholder-${action}`); - + function loadEditor(action='add', uuid=0, fn=null, fnParams=null){ // search the placeholder for editor. let addCommentEditor = document.querySelectorAll('#add_comment_editor_wrapper'); - let editCommentEditor = document.querySelectorAll('#edit_comment_editor_wrapper').length; + let editCommentEditor = document.querySelectorAll (`#edit_comment_editor_wrapper_${uuid}`); if (action === "add") { + _ajaxloader.showLoader(`.editor-loader-placeholder-${action}`); + // remove old editor and old input values of draftitemid and editorformat, if exists. if (addCommentEditor.length > 0) { - $('div').remove('#add_comment_editor_wrapper'); + addCommentEditor[0].remove(); } - $('input').remove('[name="input_value_editor"]'); + let data = {}; templates.render('mod_pdfannotator/add_comment_editor_placeholder', data) .then(function(html, js) { @@ -6972,10 +6964,9 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to templates.prependNodeContents(commentListForm, html, js); }) .then(function() { - let args = {'section': section, 'cmid': _cm.id}; + let args = {'action': action, 'cmid': _cm.id}; Fragment.loadFragment('mod_pdfannotator', 'open_add_comment_editor', _contextId, args) .done(function(html, js) { - _ajaxloader.hideLoader(`.editor-loader-placeholder-${action}`); if (!html) { throw new TypeError("Invalid HMTL Input"); } @@ -6983,29 +6974,68 @@ function startIndex(Y,_cm,_documentObject,_contextId, _userid,_capabilities, _to if (fn instanceof Function) { (0,fn)(fnParams); } + _ajaxloader.hideLoader(`.editor-loader-placeholder-${action}`); return true; + }) + .then(function() { + let commentText = document.getElementById('id_pdfannotator_contenteditable'); + if(commentText) { + commentText.focus(); + } }); }) .catch(notification.exception); - } else if(editCommentEditor > 0 && action === "edit") { + } else if(action === "edit") { + _ajaxloader.showLoader(`.editor-loader-placeholder-${action}-${uuid}`); + + // remove old editor and old input values of draftitemid and editorformat, if exists. + if (editCommentEditor.length > 0) { + editCommentEditor[0].remove(); + } + let data = {'uuid': uuid}; + let editTextarea; templates.render('mod_pdfannotator/edit_comment_editor_placeholder', data) .then(function(html, js) { - let editForm = document.querySelectorAll(`edit${uuid}`)[0]; - editForm.appendChild(html); - return html; + let editForm = document.getElementById(`edit${uuid}`); + templates.prependNodeContents(editForm, html, js); + editTextarea = document.getElementById(`editarea${uuid}`); + editTextarea.style.display = "none"; + return true; }) .then(function() { - $('input').remove('[name="input_value_editor"]'); - let args = {'section': section, 'cmid': _cm.id}; + let args = {'action': action, 'cmid': _cm.id, 'uuid': uuid}; Fragment.loadFragment('mod_pdfannotator', 'open_edit_comment_editor', _contextId, args) .then(function(html, js) { - _ajaxloader.hideLoader(`.editor-loader-placeholder-${action}`); if (!html) { throw new TypeError("Invalid HMTL Input"); } - templates.replaceNode(document.getElementById('editor-commentlist-inputs'), html, js); - return html; + //templates.runTemplateJS(js); + let editCommentEditorElement = document.getElementById(`edit_comment_editor_wrapper_${uuid}`); + html = html.split('displaycontent:'); + let isreplaced = templates.appendNodeContents(editCommentEditorElement, html[0], js); + editTextarea.innerText = html[1]; + + _ajaxloader.hideLoader(`.editor-loader-placeholder-${action}-${uuid}`); + + let editForm = document.getElementById(`edit${uuid}`) + let chatMessage = document.getElementById(`chatmessage${uuid}`); + let editAreaEditable = document.getElementById(`editarea${uuid}editable`); + editAreaEditable.innerHTML = editTextarea.value; + if(editForm.style.display === "none") { + editForm.style.cssText += ';display:block;'; + chatMessage.innerHTML = ""; + } + return true; + }) + .then(function() { + let commentText = document.getElementById(`editarea${uuid}`); + if(commentText) { + commentText.focus(); + } + if (fn instanceof Function) { + (0,fn)(fnParams); + } }); }) .catch(notification.exception); diff --git a/templates/comment.mustache b/templates/comment.mustache index 9851eaa10b2eb212d880cc8ef5482a9131bd263e..39e147d3819a2dbabf02f0a2aae85396932cbb26 100644 --- a/templates/comment.mustache +++ b/templates/comment.mustache @@ -57,6 +57,7 @@ {{#displayhidden}}<span id="taghidden{{uuid}}" class="tag tag-info">{{# str }} hiddenforparticipants, pdfannotator {{/ str }}</span>{{/displayhidden}} <form id="edit{{ uuid }}" class="edit-comment-form" style="display:none;"> + <div class="editor-loader-placeholder-edit-{{ uuid }}"></div> <input id="commentSubmit" class="owner btn btn-primary mb-1" type="submit" value="{{# str }} editButton, pdfannotator {{/ str }}"> <input id="commentCancel" class="owner btn btn-secondary mb-1" type="reset" value="{{# str }} cancelButton, pdfannotator {{/ str }}" > </form> diff --git a/templates/edit_comment_editor_placeholder.mustache b/templates/edit_comment_editor_placeholder.mustache index b74f95b377c4516c9aa9f91afecda55cf9101c8c..5e56a8bca2b0bc505dc6f07cc920024be94af8ac 100644 --- a/templates/edit_comment_editor_placeholder.mustache +++ b/templates/edit_comment_editor_placeholder.mustache @@ -1,5 +1,4 @@ -<div id="edit_comment_editor_wrapper"> {{! necessary for atto-editor }} - <textarea id="editarea{{ uuid }}" placeholder="" cols="40" rows="3">{{{ displaycontent }}}</textarea> - <div class="editor-editcomment-inputs{{ uuid }}"></div> - <div class="editor-loader-placeholder-edit"></div> +<div id="edit_comment_editor_wrapper_{{uuid}}"> {{! necessary for atto-editor }} + <div id="editor-editcomment-inputs-{{ uuid }}"></div> + <textarea id="editarea{{ uuid }}" placeholder="" cols="40" rows="3"></textarea> </div> \ No newline at end of file diff --git a/version.php b/version.php index 10465647309ce96f061d50f7f198cdb7e76d21f9..3ab891917f57cd7913584ccdfed2d80a2a40df55 100644 --- a/version.php +++ b/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'mod_pdfannotator'; -$plugin->version = 2022090800; +$plugin->version = 2022102600; $plugin->release = 'PDF Annotator v1.4 release 11'; $plugin->requires = 2021051700; $plugin->maturity = MATURITY_STABLE;