diff --git a/app/www/annotate.html b/app/www/annotate.html index 1b284a0..f3da257 100644 --- a/app/www/annotate.html +++ b/app/www/annotate.html @@ -199,6 +199,14 @@ pointer-events: all; } + .controls .annotation-comment{ + width: 100%; + visibility: hidden; + } + .selected-annotation .controls .annotation-comment{ + visibility: visible; + } + .noUi-handle:focus { /* background: red;; */ border: solid 2px #601be0; diff --git a/app/www/annotate.js b/app/www/annotate.js index 09738bb..f12a794 100644 --- a/app/www/annotate.js +++ b/app/www/annotate.js @@ -1,8 +1,9 @@ class Annotation { - constructor(tag, t_in, t_out) { + constructor(tag, t_in, t_out, comment) { this.tag = tag; this.t_in = Number.parseFloat(t_in); this.t_out = Number.parseFloat(t_out); + this.comment = comment; } } @@ -271,6 +272,24 @@ class Annotator extends EventTarget { this.controlsEl.appendChild(this.tagsEl); + this.commentEl = document.createElement('input'); + this.commentEl.type = 'text'; + this.commentEl.classList.add('annotation-comment'); + this.commentEl.title = "Add comment to annotation"; + this.commentEl.placeholder = "comment"; + this.commentEl.value = ""; + this.commentEl.addEventListener('keyup', (e) => { + e.stopPropagation(); // prevent keyup event to propagate and set i/o points + }); + this.commentEl.addEventListener('input', (e) => { + e.stopPropagation(); // prevent keyup event + if (this.selectedAnnotation) { + this.selectedAnnotation.comment = this.commentEl.value; + this.updateAnnotations(true) + } + }); + this.controlsEl.appendChild(this.commentEl); + this.load(fileurl); }); } @@ -311,7 +330,7 @@ class Annotator extends EventTarget { if (this.selectedAnnotationI == annotation_i) { this.annotationEl.classList.add('selected'); } - this.annotationEl.title = annotation.tag; + this.annotationEl.title = `[${annotation.tag}] ${annotation.comment}`; this.annotationEl.addEventListener('mouseover', (e) => { @@ -360,6 +379,7 @@ class Annotator extends EventTarget { this.updateAnnotations(false); //selects the right tag & highlights the annotation this.wrapperEl.classList.add('selected-annotation'); + this.commentEl.value = this.selectedAnnotation.comment; } deselectAnnotation(keep_position) { @@ -368,6 +388,7 @@ class Annotator extends EventTarget { } this.wrapperEl.classList.remove('selected-annotation'); + this.commentEl.value = ""; this.selectedAnnotationI = null; this.selectedAnnotation = null; @@ -434,7 +455,7 @@ class Annotator extends EventTarget { .then(response => response.ok ? response.json() : null) .then(metadata => { if (metadata !== null) { - metadata.annotations = metadata.annotations.map((a) => new Annotation(a.tag, a.t_in, a.t_out)) + metadata.annotations = metadata.annotations.map((a) => new Annotation(a.tag, a.t_in, a.t_out, a.hasOwnProperty('comment') ? a.comment : "")) } this.loadStrokes(data, metadata) }) @@ -517,7 +538,7 @@ class Annotator extends EventTarget { this.slider.destroy(); } - this.annotations.push(new Annotation(tag, t_in, t_out)); + this.annotations.push(new Annotation(tag, t_in, t_out, "")); this.updateAnnotations(true); this._currentTimeMs = t_out;