Last active
November 20, 2025 23:02
-
-
Save fanuch/1511dd5423e0c68bb9d66f63b3a9c875 to your computer and use it in GitHub Desktop.
Block Click to Edit on Jira Issue
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ==UserScript== | |
| // @name Disable Jira Click Edit | |
| // @namespace http://tampermonkey.net/ | |
| // @version 0.1 | |
| // @description Disable click edit in Jira issue descriptions | |
| // @author fanuch | |
| // @match https://*.atlassian.net/browse/* | |
| // @icon https://www.google.com/s2/favicons?sz=64&domain=atlassian.net | |
| // @grant none | |
| // ==/UserScript== | |
| /** | |
| * Toggles the double-click-to-edit functionality in Jira issue descriptions. | |
| * The script creates a toggle button that allows the user to enable or disable editing. | |
| * The button uses emoji icons to represent the current state: | |
| * - π (locked) indicates that editing is disabled | |
| * - βοΈ (pencil) indicates that editing is enabled | |
| */ | |
| (function() { | |
| 'use strict'; | |
| let isDoubleClickEnabled = false; // Set initial value to false | |
| /** | |
| * Creates the toggle button and inserts it into the Jira issue description UI. | |
| */ | |
| function createToggleButton() { | |
| const listDivs = document.querySelectorAll('div[role="list"]'); | |
| if (listDivs.length >= 2 && listDivs[1].firstElementChild) { | |
| const toggleButton = listDivs[1].firstElementChild.cloneNode(true); | |
| toggleButton.textContent = 'π'; | |
| toggleButton.id = 'toggle-button'; | |
| toggleButton.addEventListener('click', toggleDoubleClickEdit); | |
| listDivs[1].insertBefore(toggleButton, listDivs[1].firstChild); | |
| } | |
| } | |
| /** | |
| * Toggles the double-click-to-edit functionality when the toggle button is clicked. | |
| * Updates the button icon and adds/removes the event listener on the description element. | |
| */ | |
| function toggleDoubleClickEdit() { | |
| isDoubleClickEnabled = !isDoubleClickEnabled; | |
| const button = document.getElementById('toggle-button'); | |
| const descriptionElement = document.querySelector('.ak-renderer-document'); | |
| if (isDoubleClickEnabled) { | |
| button.textContent = 'βοΈ'; | |
| descriptionElement.removeEventListener('click', handleClick, true); | |
| } else { | |
| button.textContent = 'π'; | |
| descriptionElement.addEventListener('click', handleClick, true); | |
| } | |
| } | |
| /** | |
| * Handles the click event on the Jira issue description element. | |
| * Stops the event propagation to prevent the default double-click-to-edit behavior. | |
| * @param {Event} e - The click event object. | |
| */ | |
| function handleClick(e) { | |
| e.stopPropagation(); | |
| console.log("Blocked click-edit of Jira issue description. You're welcome."); | |
| } | |
| // Wait for the Jira issue description UI to load before creating the toggle button | |
| setTimeout(function() { | |
| createToggleButton(); | |
| const descriptionElement = document.querySelector('.ak-renderer-document'); | |
| if (descriptionElement) { | |
| descriptionElement.addEventListener('click', handleClick, true); | |
| } | |
| }, 200); | |
| })(); |
Sadly all of these don't work anymore. I've dug deep into my soal and went on with my basic jscript knowledge and the help of F12 / console / chatgpt.com
Below is working as per today: september 9th 2025
// ==UserScript==
// @name Jira Disable Inline Edit with Toggle
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Toggle click-to-edit on Jira issues including title and body
// @author You
// @match https://transdev-nl.atlassian.net/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// ----------------------
// Config
// ----------------------
const bodySelector = '.ak-renderer-document';
const titleSelector = 'h1[data-testid="issue.views.issue-base.foundation.summary.heading"]';
let editBlocked = true; // start met blokkeren
// ----------------------
// Toggle knop toevoegen
// ----------------------
function addToggleButton() {
const header = document.querySelector('#jira-issue-header'); // parent element voor knop
if (!header) return;
if (document.getElementById('edit-block-toggle')) return; // knop al aanwezig
const btn = document.createElement('button');
btn.id = 'edit-block-toggle';
btn.innerText = editBlocked ? 'π' : 'π';
btn.style.marginLeft = '10px';
btn.style.cursor = 'pointer';
btn.title = 'Toggle Click-to-Edit Block';
btn.addEventListener('click', () => {
editBlocked = !editBlocked;
btn.innerText = editBlocked ? 'π' : 'π';
console.log('[Jira-edit-block] Edit mode', editBlocked ? 'blocked' : 'allowed');
});
header.appendChild(btn);
}
// ----------------------
// Click-to-edit blokkeren
// ----------------------
function blockClicks(e) {
if (!editBlocked) return;
if (e.target.closest(bodySelector) || e.target.closest(titleSelector)) {
e.stopImmediatePropagation();
e.preventDefault();
console.log('[Jira-edit-block] Click-to-edit blocked on', e.target);
}
}
// ----------------------
// Observer om pagina wijzigingen te volgen
// ----------------------
const observer = new MutationObserver(() => {
addToggleButton();
});
observer.observe(document.body, { childList: true, subtree: true });
// Event listener voor blokkeren
document.addEventListener('click', blockClicks, true); // capture=true zodat we eerder zijn dan Jira
})();
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Modifed it a bit for new elements structure on Jira: