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