PageSourceSearch

https://shigarouki.or.jp/js/js_sidemenu.js

js shigarouki.or.jp collected 2026-10-06 08:12:56 UTC 18,744 bytes, 409 lines download raw bytes

1//
2//	js_sidemenu.js
3//
4
5// **********************************************
6//		変数定義
7// **********************************************
8
9// 請求書フォームのURL定義
10const invoiceFormURL =	"https://docs.google.com/forms/d/e/1FAIpQLSeooKFBGdbzNhLyJveygrlkheANZXXjxFWjJYXxUsTRgbPrMg/viewform";
11
12// 請求書発行依頼書のPDF定義
13const invoiceFormPDF =	"/moushikomi/p_form/seikyusyo_irai_0609.pdf";
14
15// 領収書発行依頼書のPDF定義
16const ryosyuFormPDF =	"/moushikomi/p_form/ryoshusho_irai_0805.pdf";
17
18// 入会案内のPDF定義
19const nyukaiFormPDF = 	"/nyukai0806.pdf";
20
21// 今月の滋賀労基のURL定義
22const kikanshiURL = 	"/kikanshi/info_kikanshi0809.html";
23// 今月の滋賀労基のイメージ定義
24const kikanshiIMG = 	"/kikanshi/img/img_rouki09C.gif";
25
26// 年間計画表のURL・タイトル定義
27const nenkanURL = 	"/moushikomi/r8_nenkanyotei_ALL.pdf"
28const nenkanTITLE = "令和8年度年間計画表<br>    (pdf)"
29
30
31//	サブメニュー変数
32//	-->	hasSub  サブメニュー 1=作る 0=直接リンク
33const menuList = [
34        { hasSub: 0, url: "/index.shtml", 						title: "トップページ"	},
35        { hasSub: 1, url: "/gaikyou/kyokai01.html",	title: "滋賀労働基準協会とは"},
36        { hasSub: 0, url: "/nyukai0806.pdf", 					title: "入会のおすすめ(pdf)" },
37        { hasSub: 1, url: "/kousyu/ginou/kousyu_01.html",		title: "技能講習一覧<br> 〇本部主催"		},
38        { hasSub: 1, url: "/kousyu/toku/kousyu_11.html", 		title: "特別教育一覧<br> 〇本部主催●支部主催"	},
39        { hasSub: 1, url: "/kousyu/kokuji/kousyu_68.html", 		title: "その他告示教育1<br> 〇本部主催"},
40        { hasSub: 1, url: "/kousyu/shibu/kousyu_211.html",		title: "その他告示教育2<br> ●支部主催"	},
41		{ hasSub: 0, url: nenkanURL,							title: nenkanTITLE },
42        { hasSub: 1, url: "/moushikomi/moushikomi_01.html", 	title: "■受講申込について"},
43        { hasSub: 1, url: "/moushikomi/moushikomi_09.html",		title: "■予約申込(旧)について"},
44        { hasSub: 0, url: "/moushikomi/all_templates.html",		title: "■各種申込書・連絡書等" },
45        { hasSub: 0, url: "/moushikomi/moushikomi_04.html",		title: "■コース変更・取消連絡" },
46        { hasSub: 1, url: "/saikoufu/saikoufu.html", 			title: "■修了証再交付" },
47        { hasSub: 0, url: "/postmail_taikai/index.html",		title: "■滋賀地方安全衛生大会" },
48        { hasSub: 1, url: "/info_locations.html#label01",				title: "本部・支部案内<BR>  連絡先・所在地" },
49        { hasSub: 0, url: "/support_links.html", 				title: "関連機関LINK" },
50        { hasSub: 0, url: "/news/kyokai_news00.html", 			title: "労働安全衛生情報" },
51        { hasSub: 0, url: kikanshiURL,				 			title: "《今月の滋賀労基》" }
52	];
53
54// =========================================
55//  現代的な set_footer()(document.write 全廃)
56// =========================================
57
58function set_footer() {
59    const footer = document.createElement("div");
60    footer.id = "footer";
61
62    footer.innerHTML = `
63        <address>
64            Copyright (C) 公益社団法人滋賀労働基準協会, All Rights Reserved.
65        </address>
66    `;
67
68    document.body.appendChild(footer);
69}
70
71// =========================================
72// set_sidebar()(全面リファクタリング版)
73//
74//		2026.7.31 第2引数kaisouは使用しない
75// =========================================
76function set_sideber(menuNo) {
77
78    const currentPath = location.pathname;
79
80    const bread = document.getElementById("bread");
81
82    let sidebar = document.getElementById("sidebar");
83    if (!sidebar) {
84        sidebar = document.createElement("div");
85        sidebar.id = "sidebar";
86        bread.insertAdjacentElement("afterend", sidebar);
87    }
88
89    sidebar.innerHTML = "";
90
91    const ul = document.createElement("ul");
92    ul.className = "sidemenu";
93
94    menuList.forEach((item, index) => {
95
96        const li = document.createElement("li");
97        const a = document.createElement("a");
98
99        // 親メニューのリンク(サブメニューがある場合は1件目へ)
100        a.href = item.url;
101        a.innerHTML = item.title;
102
103        // ★ 親メニューの active 判定(index のサブメニューで判定)
104        if (item.hasSub === 1) {
105
106            const subDom = createSubMenu(index);   // ← index を使うのが正しい
107
108            if (subDom) {
109                const urls = [...subDom.querySelectorAll("a")].map(a =>
110                    a.href.replace(location.origin, "")
111                );
112
113                if (urls.includes(currentPath)) {
114                    a.classList.add("active");
115                }
116            }
117
118        } else {
119            if (item.url === currentPath) {
120                a.classList.add("active");
121            }
122        }
123
124        li.appendChild(a);
125        ul.appendChild(li);
126
127        // ★ クリックでサブメニュー展開(index を使う)
128        if (item.hasSub === 1) {
129            a.addEventListener("click", () => {
130
131                const oldSub = ul.querySelector(".submenu");
132                if (oldSub) oldSub.remove();
133
134                const sub = createSubMenu(index);   // ← index が正しい
135                ul.insertBefore(sub, li.nextSibling);
136            });
137        }
138
139        // ★ 初期表示でサブメニュー展開(index のサブメニューで判定)
140        if (item.hasSub === 1) {
141
142            const subDom = createSubMenu(index);
143
144            if (subDom) {
145                const urls = [...subDom.querySelectorAll("a")].map(a =>
146                    a.href.replace(location.origin, "")
147                );
148
149                // 現在のページがサブメニューのどれかに一致した場合だけ展開
150                if (urls.includes(currentPath)) {
151                    ul.appendChild(subDom);
152                }
153            }
154        }
155
156    });
157
158    sidebar.appendChild(ul);
159    sidebar.insertAdjacentHTML("beforeend", fixedBannerHTML());
160}
161
162
163// =========================================
164// 階層 prefix 判定
165//		もし将来「相対パスも使う可能性がある」なら
166//		絶対パスかどうかだけ判定する関数にします
167// =========================================
168function needsKaisouPrefix(url) {
169    // 絶対パス(先頭が /)なら prefix 不要
170    return !url.startsWith("/");
171}
172
173// =========================================
174//	サブメニュー生成(document.write 廃止)
175// =========================================
176function createSubMenu(menuNo, kaisou) {
177	// 絶対パスに変更したため、階層計算不要
178    // menuNo に応じてサブメニューを切り替える
179    switch (menuNo) {
180        case 1: // 協会について
181            return subMenu_kyoukai();
182        case 3: // 技能講習一覧
183            return subMenu_ginou();
184        case 4: // 特別教育一覧
185            return subMenu_toku();
186        case 5: // 告示教育一覧
187            return subMenu_kokuji1();
188        case 6: // 支部主催講習一覧
189            return subMenu_kokuji2();
190        case 8: // 申込手続きについて
191            return subMenu_tetsuzuki();
192        case 9: // 予約について
193            return subMenu_yoyaku();
194        case 12: // 再交付申請
195            return subMenu_saikoufu();
196        case 14: // 本部・支部案内
197            return subMenu_locations();
198        default:
199            return null;
200    }
201}
202
203// =========================================
204//	サブメニュー(例:滋賀労働基準協会とは)
205// =========================================
206function subMenu_kyoukai() {
207
208    const list = [
209        { url: "/gaikyou/kyokai01.html", 				title: '滋賀労働基準協会とは・・<br>(入会について)' },
210        { url: "/gaikyou/kyokai_gaikyo.html", 			title: '協会の概要<br><FONT class="f_red">R8.6.15up</font>' },
211        { url: "/gaikyou/kyokaicho_syuninR707.html",	title: '会長就任のご挨拶 <FONT class="f_red"> R7.7.16up</font>' },
212        { url: "/gaikyou/kyokaicho_newyearR8.html", 	title: '2026年 年頭のご挨拶 <FONT class="f_red"> R8.1.13up</font>' },
213        { url: "/gaikyou/mokuhyo_R8.pdf", 		title: '令和8年度労働災害防止に関する年間目標(PDF)<br><FONT class="f_red">R7.6.18up</font>', target: "_blank" }
214    ];
215   
216	return createSubMenuList(list);
217    
218}
219
220
221// =========================================
222//	技能講習サブメニュー(共通処理)
223// =========================================
224function subMenu_ginou() {
225 
226	const list = [
227        { url: "/kousyu/ginou/kousyu_01.html", title: "〇フォークリフト運転" },
228        { url: "/kousyu/ginou/kousyu_02.html", title: "〇ガス溶接" },
229        { url: "/kousyu/ginou/kousyu_03.html", title: "〇乾燥設備作業主任者" },
230        { url: "/kousyu/ginou/kousyu_04.html", title: "〇プレス機械作業主任者" },
231        { url: "/kousyu/ginou/kousyu_05.html", title: "〇酸素欠乏・硫化水素危険作業主任者" },
232        { url: "/kousyu/ginou/kousyu_06.html", title: "〇有機溶剤作業主任者" },
233        { url: "/kousyu/ginou/kousyu_07.html", title: "〇特定化学物質及び四アルキル鉛等作業主任者" },
234        { url: "/kousyu/ginou/kousyu_48.html", title: "〇石綿作業主任者" },
235        { url: "/kousyu/ginou/kousyu_99.html", title: "〇金属アーク溶接等作業主任者限定" }
236	];
237   
238	return createSubMenuList(list);
239    
240}
241// =========================================
242//	特別教育サブメニュー(共通処理)
243// =========================================
244function subMenu_toku() {
245
246	const list = [
247        { url: "/kousyu/toku/kousyu_11.html", 		title: "〇アーク溶接等特別教育" },
248        { url: "/kousyu/toku/sanketsu_202608.pdf", 	title: "〇酸素欠乏・硫化水素危険作業特別教育(pdf)" },
249        { url: "/kousyu/shibu/kousyu_08.html", 		title: "●産業用ロボット教示等の業務に係る特別教育" },
250        { url: "/kousyu/shibu/kousyu_10.html", 		title: "●粉じん作業特別教育" },
251        { url: "/kousyu/shibu/kousyu_09.html", 		title: "●機械研削といし取替等の業務特別教育" },
252        { url: "/kousyu/shibu/kousyu_201.html", 	title: "●自由研削といし取替等の業務特別教育" },
253        { url: "/kousyu/shibu/kousyu_202.html", 	title: "●動力プレスの金型等の取付け、取外し又は調整の業務特別教育" },
254        { url: "/kousyu/shibu/kousyu_203.html", 	title: "●低圧電気(開閉器の操作)特別教育" },
255        { url: "/kousyu/shibu/kousyu_60.html", 		title: "●フルハーネス型墜落制止用器具特別教育" }
256	];
257	return createSubMenuList(list);
258}
259
260
261// =========================================
262//	その他告示等(本部主催)教育サブメニュー(共通処理)
263// =========================================
264function subMenu_kokuji1() {
265	const list = [
266        { url: "/kousyu/kokuji/kousyu_68.html", 	title: "〇建築物石綿含有建材調査者講習(一般)" },
267        { url: "/kousyu/kokuji/kousyu_70.html", 	title: "〇工作物石綿事前調査者講習" },
268        { url: "/kousyu/kokuji/kousyu_54.html", 	title: "〇職長安全衛生責任者教育14時間コース" },
269        { url: "/kousyu/kokuji/kousyu_14.html", 	title: "〇フォークリフト運転業務従事者安全衛生教育" },
270        { url: "/kousyu/kokuji/kousyu_21.html", 	title: "〇ゼロ災職場運動リーダー研修" },
271        { url: "/kousyu/kokuji/kousyu_50.html", 	title: "〇安全管理者選任時研修" },
272        { url: "/kousyu/kokuji/kousyu_17.html", 	title: "〇局所排気装置等定期自主検査者養成講習会" },
273        { url: "/kousyu/kokuji/kousyu_80.html", 	title: "〇化学物質管理者講習" },
274        { url: "/kousyu/kokuji/kousyu_85.html", 	title: "〇化学物質管理者専門的講習" },
275        { url: "/kousyu/kokuji/kousyu_90.html", 	title: "〇保護具着用管理責任者教育" },
276        { url: "/kousyu/kokuji/kousyu_18.html", 	title: "〇第一種衛生管理者受験準備講習会" },
277        { url: "/kousyu/kokuji/kousyu_19.html", 	title: "〇第二種衛生管理者受験準備講習会" }
278	];
279	return createSubMenuList(list);
280}
281// =========================================
282//	その他告示等(支部主催)教育サブメニュー(共通処理)
283// =========================================
284function subMenu_kokuji2() {
285	const list = [
286        { url: "/kousyu/shibu/kousyu_211.html", 	title: "●安全衛生推進者養成講習" },
287        { url: "/kousyu/shibu/kousyu_212.html", 	title: "●職長教育12時間コース" },
288        { url: "/kousyu/shibu/kousyu_236.html", 	title: "●職長能力向上教育" },
289        { url: "/kousyu/shibu/kousyu_233.html", 	title: "●有機溶剤作業主任者能力向上教育" },
290     	{ url: "/kousyu/shibu/kousyu_234.html", 	title: "●特定化学物質作業主任者能力向上教育" },
291        { url: "/kousyu/shibu/kousyu_221.html", 	title: "●新入者安全衛生教育" },
292        { url: "/kousyu/shibu/kousyu_230.html", 	title: "●熱中症予防管理者教育" },
293        { url: "/kousyu/shibu/kousyu_241.html", 	title: "●リスクアセスメント講習会" }
294
295	];
296	return createSubMenuList(list);
297}
298
299// =========================================
300//	申込手続きサブメニュー(共通処理)
301// =========================================
302function subMenu_tetsuzuki() {
303
304	const list = [
305        { url: "/moushikomi/moushikomi_01.html", 	title: " 1 申込・受付・受講票" },
306        { url: "/moushikomi/moushikomi_02.html", 	title: " 2 受講申込書作成上の<BR>   注意事項" },
307        { url: "/moushikomi/moushikomi_03.html", 	title: " 3 受講料納入について" },
308     	{ url: "/moushikomi/moushikomi_05.html", 	title: " 4 受講に関する注意事項" },
309        { url: "/moushikomi/syashin.html", 			title: " 5 添付する証明写真について(技能講習のみ)" },
310        { url: invoiceFormURL, 						title: " 6 請求書発行依頼<BR> ※Googleフォーム利用" },
311        { url: invoiceFormPDF, 						title: " 7 請求書発行依頼<BR> ※PDF→FAX送付" },
312		{ url: ryosyuFormPDF, 						title: " 8 領収書発行依頼書(PDF)" },
313        { url: "/info_saigai.html", 				title: " 9 特別警報発令時の対応ã
313«ã¤ã„て" }
314
315	];
316	return createSubMenuList(list);
317}
318// =========================================
319//	予約サブメニュー(共通処理)
320// =========================================
321function subMenu_yoyaku() {
322
323	const list = [
324        { url: "/moushikomi/moushikomi_09.html", 		title: "1 予約受付について" },
325        { url: "/moushikomi/moushikomi_10.html", 		title: "2 キャンセル待ち" },
326        { url: "https://forms.gle/chbyN2eM8b9tuXJg6", 	title: "3 予約取消フォーム<br> ※Googleフォーム利用" },
327     	{ url: "https://forms.gle/VydP1ZjxTMXNzzCZ6", 	title: "4 予約体験版(動作確認) ※Googleフォーム利用" }
328
329	];
330	return createSubMenuList(list);
331}
332
333// =========================================
334//	再交付サブメニュー(共通処理)
335// =========================================
336function subMenu_saikoufu() {
337
338	const list = [
339        { url: "/saikoufu/saikoufu.html", 		title: "1 修了証再交付" },
340        { url: "/saikoufu/saikoufu1_R3.html", 	title: "2 技能講習修了証(統合)<BR> ※発行業務終了※" }
341	];
342
343	return createSubMenuList(list);
344}
345
346// =========================================
347//	本部支部案内サブメニュー(共通処理)
348// =========================================
349function subMenu_locations() {
350
351	const list = [
352        { url: "/info_locations.html#label01", 	title: "1 本部・大津支部" },
353        { url: "/info_locations.html#label02", 	title: "2 彦根長浜支部" },
354        { url: "/info_locations.html#label03", 	title: "3 東近江支部" },
355        { url: "/info_parking.html",			title: "4 当協会研修室へお越しの方へ(周辺駐車場のご案内)" }
356	];
357
358	return createSubMenuList(list);
359}
360// =========================================
361//	共通サブメニュー生成
362// =========================================
363function createSubMenuList(list) {
364
365    // ★ 現在のページのパスを取得(必須)
366    const currentPath = location.pathname;
367
368    const ul = document.createElement("ul");
369    ul.className = "submenu";
370
371    list.forEach(item => {
372        const li = document.createElement("li");
373        const a = document.createElement("a");
374        a.href = item.url;
375        a.innerHTML = item.title;
376
377        // ★ サブメニューの active 判定
378		if (item.url === currentPath) {
379			a.classList.add("active");
380		}
381
382        li.appendChild(a);
383        ul.appendChild(li);
384    });
385
386    return ul;
387}
388
389
390
391// =========================================
392//	固定バナー HTML
393// =========================================
394function fixedBannerHTML() {
395    return `
396		<a href="${invoiceFormURL}" target="_self"><img src="/toppage_img/imgtop_invoice05.gif" alt="請求書発行依頼フォーム"></a>
397        <p><a href="${invoiceFormPDF}" target="_blank"><img src="/toppage_img/imgtop_seikyusyo-irai.gif" alt="請求書発行依頼書"></a></p>
398        <p><a href="${ryosyuFormPDF}" target="_blank"><img src="/toppage_img/imgtop_ryousyusyo_05.gif" alt="領収書の発行依頼"></a></p>
399        <p><a href="${nyukaiFormPDF}" target="_blank"><img src="/toppage_img/imgtop_nyukaiannai_3.gif" alt="入会のおすすめ"></a></p>
400        <p><a href="${kikanshiURL}" target="_self"><img src="${kikanshiIMG}" alt="今月の滋賀労基"></a></p>
401        <img src="/linkbunner/img_title.gif" alt="関連機関のリンク" class="img_toppage"><br>
402        <a href="/linkbunner/chiryoutoshigoto_R7.pdf" target="_blank"><img src="/linkbunner/img_chiryoutoshigoto_R7.gif" alt="治療と仕事の両立支援"></a><br>
403        <a href="https://www.mhlw.go.jp/" target="_self"><img src="/linkbunner/img_kourousyou.gif" alt="厚生労働省のページへ"></a><br><br>
404        <a href="/linkbunner/shiga_roudousaigai_genjyou_R0804.pdf" target="_blank"><img src="/linkbunner/img_roudousaigai_R8.gif" alt="滋賀県の労働災害の現状"></a><br><br>
405        <a href="http://jsite.mhlw.go.jp/shiga-roudoukyoku/" target="_self"><img src="/linkbunner/img_roudoukyoku.gif" alt="滋賀労働局のページへ"></a><br><br>
406        <a href="http://www.jisha.or.jp/" target="_self">
406<img src="/linkbunner/img_cyusaibou.gif" alt="中災防のページへ"></a><br><br>
407    `;
408}
409

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.