From ee343c912f28260fd76a14cfeb39be1e109b9d44 Mon Sep 17 00:00:00 2001 From: jgwl Date: Tue, 11 Apr 2023 02:34:08 -0400 Subject: [PATCH 1/2] Allow editing of tags in highlights view --- taguette/static/js/taguette.js | 72 ++++++++++++++++++++++++---------- taguette/web/api.py | 2 + 2 files changed, 54 insertions(+), 20 deletions(-) diff --git a/taguette/static/js/taguette.js b/taguette/static/js/taguette.js index 399dccb8..80c9b133 100644 --- a/taguette/static/js/taguette.js +++ b/taguette/static/js/taguette.js @@ -1116,16 +1116,44 @@ function setHighlight(highlight) { highlights[id] = highlight; var tag_names = highlight.tags.map(function(id) { return tags[id].path; }); sortByKey(tag_names, function(path) { return path; }); - tag_names = tag_names.join(", "); - try { - highlightSelection([highlight.start_offset, highlight.end_offset], id, editHighlight, tag_names); - console.log("Highlight set:", highlight); - } catch(error) { - console.error( - "Error setting highlight ", highlight.id, " ", [highlight.start_offset, highlight.end_offset], - ":", error, - ); + var tag_names_display = tag_names.join(", "); + if(!highlight.document_id){ //only highlights from loadTag have a document_id (tag can be on multiple docs) + try { + highlightSelection([highlight.start_offset, highlight.end_offset], id, editHighlight, tag_names_display); + console.log("Highlight set:", highlight); + } catch(error) { + console.error( + "Error setting highlight ", highlight.id, " ", [highlight.start_offset, highlight.end_offset], + ":", error, + ); + } } + + //update highlights page + var hlEntry = document.getElementById('highlight-entry-' + id); + if(hlEntry){ + hlTags = hlEntry.getElementsByClassName('hltag'); + while(hlTags.length > 0){ + hlEntry.removeChild(hlTags[0]); + } + + addTagsToHighlight(hlEntry, tag_names); + } + +} + +function addTagsToHighlight(elem, tag_names){ + tag_names.sort(); + for(var j = 0; j < tag_names.length; ++j) { + if(j > 0) { + elem.appendChild(document.createTextNode(' ')); + } + var taglink = document.createElement('a'); + taglink.className = 'badge badge-dark hltag'; + taglink.textContent = tag_names[j]; + linkTag(taglink, taglink.textContent); + elem.appendChild(taglink); + } } // Remove a highlight @@ -1584,6 +1612,7 @@ function loadTag(tag_path, page) { highlights = {}; for(var i = 0; i < result.highlights.length; ++i) { var hl = result.highlights[i]; + highlights[hl.id] = hl; var content = document.createElement('div'); if(hl.text_direction === 'RIGHT_TO_LEFT') { content.style.direction = 'rtl'; @@ -1604,18 +1633,21 @@ function loadTag(tag_path, page) { elem.appendChild(doclink); elem.appendChild(document.createTextNode(' ')); + var editHighlightLink = document.createElement('a'); + editHighlightLink.textContent = 'edit highlights'; + editHighlightLink.setAttribute('data-highlight-id', '' + hl.id); + editHighlightLink.setAttribute('data-document-id', '' + hl.document_id); + editHighlightLink.className = 'badge badge-info'; + editHighlightLink.addEventListener('click', function(e){ + var hlid = this.getAttribute('data-highlight-id'); + current_document = this.getAttribute('data-document-id'); + editHighlight.call(this); + }); + elem.appendChild(editHighlightLink); + + elem.appendChild(document.createTextNode(' ')); var tag_names = hl.tags.map(function(tag) { return tags['' + tag].path; }); - tag_names.sort(); - for(var j = 0; j < tag_names.length; ++j) { - if(j > 0) { - elem.appendChild(document.createTextNode(' ')); - } - var taglink = document.createElement('a'); - taglink.className = 'badge badge-dark'; - taglink.textContent = tag_names[j]; - linkTag(taglink, taglink.textContent); - elem.appendChild(taglink); - } + addTagsToHighlight(elem, hl.tags) document_contents.appendChild(elem); } diff --git a/taguette/web/api.py b/taguette/web/api.py index f3af8d85..74a181b3 100644 --- a/taguette/web/api.py +++ b/taguette/web/api.py @@ -687,6 +687,8 @@ class Highlights(BaseHandler): 'content': hl.snippet, 'tags': [t.id for t in hl.tags], 'text_direction': direction.name, + 'start_offset': hl.start_offset, + 'end_offset': hl.end_offset } for hl, direction in highlights ], -- GitLab From cb0964e9d8a78dc1792566deb6d4dafd7a10c678 Mon Sep 17 00:00:00 2001 From: jgwl Date: Tue, 11 Apr 2023 02:39:58 -0400 Subject: [PATCH 2/2] fixed button label --- taguette/static/js/taguette.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/taguette/static/js/taguette.js b/taguette/static/js/taguette.js index 80c9b133..7b231650 100644 --- a/taguette/static/js/taguette.js +++ b/taguette/static/js/taguette.js @@ -1634,7 +1634,7 @@ function loadTag(tag_path, page) { elem.appendChild(document.createTextNode(' ')); var editHighlightLink = document.createElement('a'); - editHighlightLink.textContent = 'edit highlights'; + editHighlightLink.textContent = 'edit tags'; editHighlightLink.setAttribute('data-highlight-id', '' + hl.id); editHighlightLink.setAttribute('data-document-id', '' + hl.document_id); editHighlightLink.className = 'badge badge-info'; -- GitLab