xref: /plugin/mizarverifiabledocs/script.js (revision 6b7e227ce526b3ffe234cde59c47249d4e050425)
1document.addEventListener('DOMContentLoaded', function() {
2    var editButtons = document.querySelector('.editButtons');
3    if (editButtons && !document.getElementById('edbtn__miz2prel')) {
4        // URLに「&do=edit」が含まれているかチェックすることで全体編集を判定
5        const isFullEdit = document.location.search.includes('&do=edit');
6
7        // 全体編集の場合にのみmiz2prelボタンを表示
8        if (isFullEdit) {
9            const miz2prelButton = document.createElement('button');
10            miz2prelButton.textContent = 'miz2prel';
11            miz2prelButton.id = 'edbtn__miz2prel';
12            miz2prelButton.type = 'button';
13            miz2prelButton.style.fontSize = '17px';
14
15            miz2prelButton.addEventListener('click', function() {
16                const editor = document.getElementById('wiki__text');
17                if (!editor) {
18                    alert('Editor not found');
19                    return;
20                }
21
22                const pageContent = editor.value;
23                const editBar = document.getElementById('wiki__editbar');
24                let outputDiv = document.getElementById('compileResult');
25                if (!outputDiv) {
26                    outputDiv = document.createElement('div');
27                    outputDiv.id = 'compileResult';
28                    outputDiv.style = 'white-space: pre-wrap; margin-top: 10px;';
29                }
30
31                if (editBar) {
32                    editBar.parentNode.insertBefore(outputDiv, editBar.nextSibling);
33                }
34
35                fetch(DOKU_BASE + 'lib/exe/ajax.php?call=source_compile', {
36                    method: 'POST',
37                    headers: {
38                        'Content-Type': 'application/x-www-form-urlencoded'
39                    },
40                    body: 'content=' + encodeURIComponent(pageContent)
41                })
42                .then(response => response.json())
43                .then(data => {
44                    if (data.success) {
45                        // SSEで結果を受信
46                        const eventSource = new EventSource(DOKU_BASE + 'lib/exe/ajax.php?call=source_sse');
47                        eventSource.onmessage = function(event) {
48                            outputDiv.innerHTML += event.data + '<br>';
49                        };
50
51                        eventSource.addEventListener('end', function(event) {
52                            outputDiv.innerHTML += "Compilation complete<br>";
53                            eventSource.close(); // 接続を閉じる
54                        });
55
56                        eventSource.onerror = function(event) {
57                            console.error('EventSource failed:', event);
58                            eventSource.close(); // エラー発生時に接続を閉じる
59                        };
60                    } else {
61                        outputDiv.innerHTML = 'Error: ' + data.message;
62                    }
63                })
64                .catch((error) => {
65                    console.error('Error:', error);
66                    outputDiv.innerHTML = 'Error: ' + error;
67                });
68            });
69
70            editButtons.appendChild(miz2prelButton);
71        }
72    }
73});