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