Add notes column and ensure correct column order with proper header (identifier | notes | action)
// ==UserScript==
// @name FiveGuard Notes (Fixed # Edited coderbirisi)
// @namespace http://tampermonkey.net/
// @version 1.6
// @description Add notes column and ensure correct column order with proper header (identifier | notes | action)
// @author R4Z0R - edited @coderbirisi
// @contributor coderbirisi - edited & fixed v1.6
// @match *://*/*
// @grant GM_getValue
// @grant GM_setValue
// @license MIT
// ==/UserScript==
(function () {
'use strict';
const style = `
.note-input {
width: 100%;
padding: 3px 6px;
font-size: 13px;
border: 1px solid #ccc;
border-radius: 4px;
}
`;
const styleSheet = document.createElement('style');
styleSheet.textContent = style;
document.head.appendChild(styleSheet);
function loadNote(id) {
return GM_getValue(id, '');
}
function saveNote(id, note) {
GM_setValue(id, note);
}
function fixTableHeader() {
const table = document.getElementById("Permissions_AlternativePermissions");
if (!table) return;
const headerRow = table.querySelector("thead tr");
if (!headerRow) return;
const ths = headerRow.querySelectorAll("th");
if (ths.length === 2) {
const notesTh = document.createElement("th");
notesTh.textContent = "Notes";
headerRow.insertBefore(notesTh, ths[1]);
}
}
function updateNotesUI() {
const rows = document.querySelectorAll('tr[id^="Permissions_AlternativePermissions_"]');
rows.forEach(row => {
const id = row.id;
const cells = row.children;
if (cells.length === 2) {
const actionCell = cells[1];
const noteCell = document.createElement('td');
const noteInput = document.createElement('input');
noteInput.className = 'note-input';
noteInput.type = 'text';
noteInput.placeholder = 'Enter note...';
noteInput.value = loadNote(id);
noteInput.addEventListener('change', () => {
saveNote(id, noteInput.value);
});
noteInput.addEventListener('keyup', (e) => {
if (e.key === 'Enter') {
saveNote(id, noteInput.value);
noteInput.blur();
}
});
noteCell.appendChild(noteInput);
const identifierCell = cells[0];
row.innerHTML = '';
row.appendChild(identifierCell);
row.appendChild(noteCell);
row.appendChild(actionCell);
}
});
}
const observer = new MutationObserver(() => {
fixTableHeader();
updateNotesUI();
});
observer.observe(document.body, {
childList: true,
subtree: true
});
fixTableHeader();
updateNotesUI();
})();