xref: /plugin/bureaucracytoolbar/script.js (revision 7855bf4bb459961f5e9da8b9135eb211870c50c1)
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