OSDN Git Service

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