OSDN Git Service

[fix] : GETで指定された時メッセージが表示されないのを修正
[alterlinux/hayao.fascode.net.git] / alter / Download.js
1 // GETパラメータからrとeの値をそれぞれ取得する
2 const GetParams = () => {
3     let ParamsArray = {
4         release: undefined,
5         edition: undefined,
6     };
7     let searchParams = new URLSearchParams(document.location.search.substring(1));
8     ParamsArray["release"] = searchParams.get("r")
9     ParamsArray["edition"] = searchParams.get("e")
10     return ParamsArray;
11 }
12
13 // ダウンロードIDを取得してフォームを作成
14 const XmlReq = new XMLHttpRequest();
15 let JsonData = null;
16 XmlReq.onreadystatechange = function() {
17     if ((XmlReq.readyState === 4) && (XmlReq.status === 200)) {
18         JsonData = JSON.parse(XmlReq.responseText);
19         Object.keys(JsonData).reverse().forEach((ReleaseId) => {
20             //console.log(JsonData[ReleaseId])
21
22             if (JsonData[ReleaseId].disabled == true){
23                 return;
24             }else{
25                 console.log(ReleaseId + "を追加しました");
26             }
27
28             // セレクトボックス
29             let ReleaseIdOption = document.createElement("option");
30             ReleaseIdOption.value = ReleaseId;
31             ReleaseIdOption.innerText = ReleaseId;
32             ReleaseIdForm.insertAdjacentElement("afterbegin", ReleaseIdOption);
33         });
34
35         // URLのパラメータでリリース番号が指定されていた場合の処理
36         const ReleaseParam = GetParams()["release"];
37         let InitializeRelease = true // リリースフォームを初期化するかどうか
38
39         if (ReleaseParam){
40             //console.log(GetParams()["release"])
41             Array.from(ReleaseIdForm.options).forEach((e)=>{
42                 if (e.value.toLowerCase() === ReleaseParam.toLowerCase()){
43                     e.selected = true;
44                     InitializeRelease = false
45                 }
46             })
47         }
48
49         // GETでリリース番号が指定されていなければリリースフォームの初期化を行う
50         // 指定されていれば、その番号でエディション一覧を更新する
51         if(InitializeRelease){
52             // 「選択してください」にする
53             Array.from(ReleaseIdForm.options).slice(-1)[0].selected = true;
54
55             // エディションフォームを隠す
56             document.getElementById("editionform_div").classList.add("hidden");
57         }else{
58             Update_Edition();
59         }
60         
61
62         // ダウンロードリンクのClassを設定
63         Array.from(ReleaseIdForm.getElementsByTagName("option")).forEach((element) => {
64             element.classList.add("p-2", "cursor-pointer", "mt-1")
65         })
66
67     }
68 }
69 XmlReq.open("GET","/alter/alterlinux.json", true);
70 XmlReq.send(null);
71
72
73 // リリース番号が変更された時
74 const Update_Edition = () => {
75     let SelectedReleaseId = ReleaseIdForm.value;
76     EditionForm.innerHTML = null;
77
78     if (SelectedReleaseId == "None" || SelectedReleaseId == undefined || SelectedReleaseId == null){
79         document.getElementById("editionform_div").classList.add("hidden");
80         ShowMsg("リリース番号を選択してください");
81         return 0;
82     }else{
83         console.log("エディション一覧を" + SelectedReleaseId + "に更新しました");
84         document.getElementById("editionform_div").classList.remove("hidden");
85     }
86
87     Object.keys(JsonData[SelectedReleaseId]).forEach((EditionName) => {
88         if (EditionName != "disabled"){
89             let EditionOption = document.createElement("option");
90             EditionOption.value = EditionName;
91             EditionOption.innerText = EditionName;  
92             EditionForm.insertAdjacentElement("afterbegin", EditionOption)
93         }
94     })
95
96     const EditionParam = GetParams()["edition"];
97     if (EditionParam){
98         Array.from(EditionForm.getElementsByTagName("option")).forEach((e)=>{
99             if(e.value.toLowerCase() == EditionParam.toLowerCase()){
100                 e.selected = true;
101             }
102         })
103     }
104     ShowEditionInfo();
105 }
106
107 ReleaseIdForm.addEventListener("change", (e) => {
108     Update_Edition();
109 });
110
111
112 // ダウンロードのエラーメッセージを表示する
113 const ShowMsg = (message) => {
114     const messageElement = document.getElementById("message");
115     if (message){
116         messageElement.innerText = message;
117         console.log(message);
118     }else{
119         messageElement.innerText = null;
120     }
121     
122 }
123
124 // エディションが変更された時
125 const ShowEditionInfo = () => {
126     const ReleaseId = ReleaseIdForm.value;
127     const EditionName = EditionForm.value;
128     if (ReleaseId && EditionName){
129         ShowMsg(ReleaseId + "の" + EditionName + "が選択されました");
130     }else{
131         //ShowMsg();
132     }
133 }
134 EditionForm.addEventListener("change", ShowEditionInfo);
135 ReleaseIdForm.addEventListener("change", ShowEditionInfo);
136
137 //ダウンロードボタン
138 DownloadButton.addEventListener("click", (element) => {
139
140     const ReleaseId = ReleaseIdForm.value
141     const EditionName = EditionForm.value
142     if (! EditionName){
143         ShowMsg("設定が不完全です。リリース番号とエディションを適切に指定してください。\n指定してるにも関わらずエラーが出る場合は開発者に連絡してください。");
144         return 0;
145     }else{
146         const OsdnId = JsonData[ReleaseId][EditionName]
147         //console.log(OsdnId)
148         location.href = "https://osdn.net/projects/alterlinux/releases/" + OsdnId
149     }
150 })