Skip to content

Commit 600f010

Browse files
committed
insight用のJavaScriptを分離
insightページ特有の処理をjig.jsから分離し、insight.jsとして再配置しました。また、関連するHTMLテンプレートやリソースのコピー処理を更新しました。
1 parent 6dcec71 commit 600f010

4 files changed

Lines changed: 94 additions & 86 deletions

File tree

jig-core/src/main/java/org/dddjava/jig/adapter/JigDocumentGenerator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ private void generateAssets() {
159159
// 増えるごとにここに追加しなきゃいけないのはいかがなものか
160160
copyAsset("package.js", assetsPath);
161161
copyAsset("glossary.js", assetsPath);
162+
copyAsset("insight.js", assetsPath);
162163
} catch (IOException e) {
163164
throw new UncheckedIOException(e);
164165
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// 拡大アイコンをクリックしたときに、その行以外を非表示にする
2+
function setupZoomIcons() {
3+
const zoomIcons = document.querySelectorAll("i.zoom");
4+
5+
zoomIcons.forEach(icon => {
6+
icon.style.cursor = "pointer";
7+
8+
icon.addEventListener("click", function () {
9+
const row = this.closest("tr");
10+
const table = this.closest("table");
11+
const tbody = table.querySelector("tbody");
12+
const allRows = tbody.querySelectorAll("tr");
13+
const fqn = row.querySelector("td.fqn").textContent;
14+
15+
// クリックされた行以外を非表示にする
16+
allRows.forEach(r => {
17+
if (r !== row && !fqnStartsWith(fqn, r)) {
18+
r.classList.add("hidden-by-zoom");
19+
}
20+
});
21+
22+
zoomFamilyTables(table, row);
23+
// ズーム解除ボタンを表示
24+
document.getElementById("cancel-zoom").classList.remove("hidden");
25+
});
26+
});
27+
}
28+
29+
// ズームを解除する
30+
function cancelZoom(event) {
31+
// すべてのテーブルからhidden-by-zoomクラスを削除
32+
document.querySelectorAll("table tbody tr.hidden-by-zoom").forEach(row => {
33+
row.classList.remove("hidden-by-zoom");
34+
});
35+
event.target.classList.add("hidden");
36+
}
37+
38+
function fqnStartsWith(prefix, targetRow) {
39+
return targetRow.querySelector("td.fqn").textContent.startsWith(prefix);
40+
}
41+
42+
function zoomFamilyTables(baseTable, baseRow) {
43+
baseTable.parentElement.querySelectorAll("table").forEach(table => {
44+
if (table === baseTable) return;
45+
46+
const allRows = table.querySelectorAll("tbody tr");
47+
48+
// zoomされているものがあったら一旦解除して
49+
const hiddenRows = table.querySelectorAll("tbody tr.hidden-by-zoom");
50+
if (hiddenRows.length > 0) {
51+
allRows.forEach(r => {
52+
r.classList.remove("hidden-by-zoom");
53+
});
54+
}
55+
56+
// 関係するもの以外を非表示にする
57+
// 元テーブルと対象テーブルの組み合わせでprefixが変わる
58+
let prefix = baseRow.dataset.fqn;
59+
if (baseTable.id.includes("package")) {
60+
prefix = prefix + '.';
61+
} else if (baseTable.id.includes("type")) {
62+
if (table.id.includes("package")) {
63+
prefix = baseRow.dataset.packageFqn;
64+
} else if (table.id.includes("method")) {
65+
prefix = prefix + '#';
66+
}
67+
} else if (baseTable.id.includes("method")) {
68+
if (table.id.includes("package")) {
69+
prefix = baseRow.dataset.packageFqn;
70+
}
71+
if (table.id.includes("type")) {
72+
prefix = baseRow.dataset.typeFqn;
73+
}
74+
}
75+
allRows.forEach(r => {
76+
if (!fqnStartsWith(prefix, r)) r.classList.add("hidden-by-zoom");
77+
});
78+
})
79+
}
80+
81+
// ページ読み込み時のイベント
82+
document.addEventListener("DOMContentLoaded", function () {
83+
if (!document.body.classList.contains("insight")) {
84+
return;
85+
}
86+
87+
setupSortableTables();
88+
setupZoomIcons();
89+
document.getElementById("cancel-zoom").addEventListener("click", cancelZoom);
90+
});

jig-core/src/main/resources/templates/assets/jig.js

Lines changed: 1 addition & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -115,94 +115,10 @@ function setupSortableTables() {
115115
});
116116
}
117117

118-
// 拡大アイコンをクリックしたときに、その行以外を非表示にする
119-
function setupZoomIcons() {
120-
const zoomIcons = document.querySelectorAll("i.zoom");
121-
122-
zoomIcons.forEach(icon => {
123-
icon.style.cursor = "pointer";
124-
125-
icon.addEventListener("click", function () {
126-
const row = this.closest("tr");
127-
const table = this.closest("table");
128-
const tbody = table.querySelector("tbody");
129-
const allRows = tbody.querySelectorAll("tr");
130-
const fqn = row.querySelector("td.fqn").textContent;
131-
132-
// クリックされた行以外を非表示にする
133-
allRows.forEach(r => {
134-
if (r !== row && !fqnStartsWith(fqn, r)) {
135-
r.classList.add("hidden-by-zoom");
136-
}
137-
});
138-
139-
zoomFamilyTables(table, row);
140-
// ズーム解除ボタンを表示
141-
document.getElementById("cancel-zoom").classList.remove("hidden");
142-
});
143-
});
144-
}
145-
146-
// ズームを解除する
147-
function cancelZoom(event) {
148-
// すべてのテーブルからhidden-by-zoomクラスを削除
149-
document.querySelectorAll("table tbody tr.hidden-by-zoom").forEach(row => {
150-
row.classList.remove("hidden-by-zoom");
151-
});
152-
event.target.classList.add("hidden");
153-
}
154-
155-
function fqnStartsWith(prefix, targetRow) {
156-
return targetRow.querySelector("td.fqn").textContent.startsWith(prefix);
157-
}
158-
159-
function zoomFamilyTables(baseTable, baseRow) {
160-
baseTable.parentElement.querySelectorAll("table").forEach(table => {
161-
if (table === baseTable) return;
162-
163-
const allRows = table.querySelectorAll("tbody tr");
164-
165-
// zoomされているものがあったら一旦解除して
166-
const hiddenRows = table.querySelectorAll("tbody tr.hidden-by-zoom");
167-
if (hiddenRows.length > 0) {
168-
allRows.forEach(r => {
169-
r.classList.remove("hidden-by-zoom");
170-
});
171-
}
172-
173-
// 関係するもの以外を非表示にする
174-
// 元テーブルと対象テーブルの組み合わせでprefixが変わる
175-
let prefix = baseRow.dataset.fqn;
176-
if (baseTable.id.includes("package")) {
177-
prefix = prefix + '.';
178-
} else if (baseTable.id.includes("type")) {
179-
if (table.id.includes("package")) {
180-
prefix = baseRow.dataset.packageFqn;
181-
} else if (table.id.includes("method")) {
182-
prefix = prefix + '#';
183-
}
184-
} else if (baseTable.id.includes("method")) {
185-
if (table.id.includes("package")) {
186-
prefix = baseRow.dataset.packageFqn;
187-
}
188-
if (table.id.includes("type")) {
189-
prefix = baseRow.dataset.typeFqn;
190-
}
191-
}
192-
allRows.forEach(r => {
193-
if (!fqnStartsWith(prefix, r)) r.classList.add("hidden-by-zoom");
194-
});
195-
})
196-
}
197-
198118
// ページ読み込み時のイベント
199119
// リスナーの登録はそのページだけでやる
200120
document.addEventListener("DOMContentLoaded", function () {
201-
if (document.body.classList.contains("insight")) {
202-
setupSortableTables();
203-
setupZoomIcons();
204-
document.getElementById("cancel-zoom").addEventListener("click", cancelZoom);
205-
} else if (document.body.classList.contains("repository")) {
121+
if (document.body.classList.contains("repository")) {
206122
setupSortableTables();
207123
}
208124
});

jig-core/src/main/resources/templates/insight.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,5 +105,6 @@ <h2>メソッド (<span th:text="${methodInsightList.size()}">1</span>)</h2>
105105
<script src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script>
106106
<script src="./assets/jig.js"></script>
107107
</th:block>
108+
<script src="./assets/insight.js"></script>
108109
</body>
109-
</html>
110+
</html>

0 commit comments

Comments
 (0)