src/main/webapp/issue-editor.js

Tue, 06 Jan 2026 20:08:54 +0100

author
Mike Becker <universe@uap-core.de>
date
Tue, 06 Jan 2026 20:08:54 +0100
changeset 409
109850e92e95
parent 408
179bda934121
permissions
-rw-r--r--

add Markdown preview - resolves #774

207
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * Copyright 2021 Mike Becker. All rights reserved.
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Redistribution and use in source and binary forms, with or without
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * modification, are permitted provided that the following conditions are met:
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 *
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * 1. Redistributions of source code must retain the above copyright
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * notice, this list of conditions and the following disclaimer.
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 *
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * 2. Redistributions in binary form must reproduce the above copyright
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * notice, this list of conditions and the following disclaimer in the
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * documentation and/or other materials provided with the distribution.
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 *
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 */
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 /**
263
aa22103809cd #29 add possibility to relate issues
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
27 * Replaces the formatted comment text with a text area.
207
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 *
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 * @param {number} id the ID of the comment
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 */
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 function showCommentEditor(id) {
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 const editor = document.getElementById(`comment-editor-${id}`)
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 const view = document.getElementById(`comment-view-${id}`)
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 editor.style.display='block'
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 view.style.display='none'
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 }
334
2696337baa3d add cancel button to comment editor - fixes #455
Mike Becker <universe@uap-core.de>
parents: 263
diff changeset
37
2696337baa3d add cancel button to comment editor - fixes #455
Mike Becker <universe@uap-core.de>
parents: 263
diff changeset
38 function cancelCommentEditor(id) {
2696337baa3d add cancel button to comment editor - fixes #455
Mike Becker <universe@uap-core.de>
parents: 263
diff changeset
39 const editor = document.getElementById(`comment-editor-${id}`)
2696337baa3d add cancel button to comment editor - fixes #455
Mike Becker <universe@uap-core.de>
parents: 263
diff changeset
40 const view = document.getElementById(`comment-view-${id}`)
2696337baa3d add cancel button to comment editor - fixes #455
Mike Becker <universe@uap-core.de>
parents: 263
diff changeset
41 editor.style.display='none'
2696337baa3d add cancel button to comment editor - fixes #455
Mike Becker <universe@uap-core.de>
parents: 263
diff changeset
42 view.style.display='block'
2696337baa3d add cancel button to comment editor - fixes #455
Mike Becker <universe@uap-core.de>
parents: 263
diff changeset
43 }
351
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
44
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
45 function toggleVariantStatus() {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
46 const cbox = document.getElementById('use-variants')
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
47 if (!cbox) return
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
48 const issue_status = document.getElementById('issue-status')
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
49 const variant_status = document.getElementById('issue-variant-status')
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
50 if (cbox.checked) {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
51 issue_status.style.display = 'none'
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
52 variant_status.style.display = 'flex'
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
53 } else {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
54 issue_status.style.display = 'inline-block'
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
55 variant_status.style.display = 'none'
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
56 }
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
57 }
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 334
diff changeset
58
409
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
59 function initMarkdownEditor(id) {
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
60 const btn_preview = document.getElementById(`${id}-btn-preview`);
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
61 const btn_edit = document.getElementById(`${id}-btn-edit`);
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
62 const textarea = document.getElementById(`${id}`);
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
63 const preview = document.getElementById(`${id}-preview`);
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
64 btn_preview.addEventListener('click', () => {
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
65 textarea.style.display = 'none';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
66 preview.style.display = 'block';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
67 textarea.dataset.original = textarea.value;
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
68 btn_preview.style.display = 'none';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
69 btn_edit.style.display = 'inline-block';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
70 const req = new XMLHttpRequest();
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
71 req.addEventListener("load", (evt) => {
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
72 if (evt.target.status === 200) {
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
73 preview.innerHTML = evt.target.responseText;
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
74 } else {
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
75 // revert the button click as fallback
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
76 setTimeout(() => btn_edit.click(), 100);
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
77 }
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
78 });
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
79 let url = baseHref + 'issues/preview-markdown';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
80 req.open("POST", url);
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
81 req.setRequestHeader("Content-Type", "text/plain");
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
82 req.send(textarea.value);
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
83 });
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
84 btn_edit.addEventListener('click', () => {
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
85 textarea.readOnly = false;
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
86 textarea.value = textarea.dataset.original;
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
87 textarea.style.display = 'block';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
88 preview.style.display = 'none';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
89 textarea.focus();
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
90 btn_preview.style.display = 'inline-block';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
91 btn_edit.style.display = 'none';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
92 });
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
93 btn_edit.style.display = 'none';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
94 preview.style.display = 'none';
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
95 }
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 408
diff changeset
96
362
576bd8ac4d96 dynamically load suggestions for related issues
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
97 window.addEventListener("load", () => {
576bd8ac4d96 dynamically load suggestions for related issues
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
98 toggleVariantStatus();
408
179bda934121 fix javascript error when trying to configure non-existing linkable-issues search box
Mike Becker <universe@uap-core.de>
parents: 362
diff changeset
99 const sbox = document.getElementById('linkable-issues');
179bda934121 fix javascript error when trying to configure non-existing linkable-issues search box
Mike Becker <universe@uap-core.de>
parents: 362
diff changeset
100 if (!sbox) return;
179bda934121 fix javascript error when trying to configure non-existing linkable-issues search box
Mike Becker <universe@uap-core.de>
parents: 362
diff changeset
101 configureSearchBox('linkable-issues', sbox.dataset.project);
362
576bd8ac4d96 dynamically load suggestions for related issues
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
102 });

mercurial