1*7855bf4bSedwardlab/* DokuWiki Bureaucracy Toolbar Plugin */ 2*7855bf4bSedwardlabvar bureaucracyToolbar = { 3*7855bf4bSedwardlab lastTextarea: null, 4*7855bf4bSedwardlab addSyntax: function(type) { 5*7855bf4bSedwardlab var textareas = document.querySelectorAll('textarea[name^="bureaucracy["]'); 6*7855bf4bSedwardlab if (!textareas.length) { 7*7855bf4bSedwardlab console.error('No bureaucracy textareas found!'); 8*7855bf4bSedwardlab return; 9*7855bf4bSedwardlab } 10*7855bf4bSedwardlab var textarea; 11*7855bf4bSedwardlab var active = document.activeElement; 12*7855bf4bSedwardlab if (active.tagName === 'TEXTAREA' && active.name.startsWith('bureaucracy[')) { 13*7855bf4bSedwardlab textarea = active; 14*7855bf4bSedwardlab } else { 15*7855bf4bSedwardlab textarea = bureaucracyToolbar.lastTextarea || textareas[0]; 16*7855bf4bSedwardlab } 17*7855bf4bSedwardlab if (!textarea) { 18*7855bf4bSedwardlab console.error('No active bureaucracy textarea found!'); 19*7855bf4bSedwardlab return; 20*7855bf4bSedwardlab } 21*7855bf4bSedwardlab var start = textarea.selectionStart; 22*7855bf4bSedwardlab var end = textarea.selectionEnd; 23*7855bf4bSedwardlab var selectedText = textarea.value.substring(start, end); 24*7855bf4bSedwardlab var newText = ''; 25*7855bf4bSedwardlab switch(type) { 26*7855bf4bSedwardlab case 'bold': 27*7855bf4bSedwardlab newText = '**' + selectedText + '**'; 28*7855bf4bSedwardlab break; 29*7855bf4bSedwardlab case 'italic': 30*7855bf4bSedwardlab newText = '//' + selectedText + '//'; 31*7855bf4bSedwardlab break; 32*7855bf4bSedwardlab case 'underscore': 33*7855bf4bSedwardlab newText = '__' + selectedText + '__'; 34*7855bf4bSedwardlab break; 35*7855bf4bSedwardlab case 'code': 36*7855bf4bSedwardlab newText = '<code>' + selectedText + '</code>'; 37*7855bf4bSedwardlab break; 38*7855bf4bSedwardlab case 'list': 39*7855bf4bSedwardlab newText = ' * ' + selectedText; 40*7855bf4bSedwardlab break; 41*7855bf4bSedwardlab case 'link': 42*7855bf4bSedwardlab newText = '[[' + selectedText + ']]'; 43*7855bf4bSedwardlab break; 44*7855bf4bSedwardlab default: 45*7855bf4bSedwardlab return; 46*7855bf4bSedwardlab } 47*7855bf4bSedwardlab var before = textarea.value.substring(0, start); 48*7855bf4bSedwardlab var after = textarea.value.substring(end); 49*7855bf4bSedwardlab textarea.value = before + newText + after; 50*7855bf4bSedwardlab var offsetStart = (type === 'list' ? 3 : type === 'code' ? 6 : 2); 51*7855bf4bSedwardlab textarea.setSelectionRange(start + offsetStart, start + offsetStart + (end - start)); 52*7855bf4bSedwardlab textarea.focus(); 53*7855bf4bSedwardlab }, 54*7855bf4bSedwardlab}; 55*7855bf4bSedwardlab// Initialize lastTextarea tracking 56*7855bf4bSedwardlab(function() { 57*7855bf4bSedwardlab var textareas = document.querySelectorAll('textarea[name^="bureaucracy["]'); 58*7855bf4bSedwardlab 59*7855bf4bSedwardlab function handleFocus() { 60*7855bf4bSedwardlab bureaucracyToolbar.lastTextarea = this; 61*7855bf4bSedwardlab } 62*7855bf4bSedwardlab 63*7855bf4bSedwardlab for (var i = 0; i < textareas.length; i++) { 64*7855bf4bSedwardlab textareas[i].addEventListener('focus', handleFocus); 65*7855bf4bSedwardlab } 66*7855bf4bSedwardlab 67*7855bf4bSedwardlab // Check for initially focused textarea 68*7855bf4bSedwardlab var active = document.activeElement; 69*7855bf4bSedwardlab if (active.tagName === 'TEXTAREA' && active.name.startsWith('bureaucracy[')) { 70*7855bf4bSedwardlab bureaucracyToolbar.lastTextarea = active; 71*7855bf4bSedwardlab } 72*7855bf4bSedwardlab})(); 73*7855bf4bSedwardlab 74*7855bf4bSedwardlab// Expose insertImage globally for the media manager callback 75*7855bf4bSedwardlabwindow.bureaucracyToolbarInsertImage = bureaucracyToolbar.insertImage; 76*7855bf4bSedwardlab// console.log('Bureaucracy Toolbar script loaded'); 77*7855bf4bSedwardlabvar textareas = document.querySelectorAll('textarea[name^="bureaucracy["]'); 78*7855bf4bSedwardlab// console.log('Found textareas:', textareas.length); 79