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