3 // GETパラメータからrとeの値をそれぞれ取得する
4 const GetParams = () => {
9 let searchParams = new URLSearchParams(document.location.search.substring(1));
10 ParamsArray["release"] = searchParams.get("r")
11 ParamsArray["edition"] = searchParams.get("e")
15 // ダウンロードIDを取得してフォームを作成
16 const XmlReq = new XMLHttpRequest();
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])
24 if (JsonData[ReleaseId].disabled == true){
25 console.log(`${ReleaseId}をスキップしました`);
28 console.log(ReleaseId + "を追加しました");
32 let ReleaseIdOption = document.createElement("option");
33 ReleaseIdOption.value = ReleaseId;
34 ReleaseIdOption.innerText = ReleaseId;
35 ReleaseIdForm.insertAdjacentElement("afterbegin", ReleaseIdOption);
38 // URLのパラメータでリリース番号が指定されていた場合の処理
39 const ReleaseParam = GetParams()["release"];
40 let InitializeRelease = true // リリースフォームを初期化するかどうか
43 //console.log(GetParams()["release"])
44 Array.from(ReleaseIdForm.options).forEach((e)=>{
45 if (e.value.toLowerCase() === ReleaseParam.toLowerCase()){
47 InitializeRelease = false
52 // GETでリリース番号が指定されていなければリリースフォームの初期化を行う
53 // 指定されていれば、その番号でエディション一覧を更新する
54 if(InitializeRelease){
56 Array.from(ReleaseIdForm.options).slice(-1)[0].selected = true;
59 document.getElementById("editionform_div").classList.add("hidden");
66 Array.from(ReleaseIdForm.getElementsByTagName("option")).forEach((element) => {
67 element.classList.add("p-2", "cursor-pointer", "mt-1")
72 XmlReq.open("GET","/alter/alterlinux.json", true);
77 const Update_Edition = () => {
78 let SelectedReleaseId = ReleaseIdForm.value;
79 EditionForm.innerHTML = null;
81 if (SelectedReleaseId == "None" || SelectedReleaseId == undefined || SelectedReleaseId == null){
82 document.getElementById("editionform_div").classList.add("hidden");
83 ShowMsg("リリース番号を選択してください");
86 console.log("エディション一覧を" + SelectedReleaseId + "に更新しました");
87 document.getElementById("editionform_div").classList.remove("hidden");
91 const createOption = (value, text, selected) =>{
92 let Option = document.createElement("option");
98 Option.innerText = text;
99 Option.selected = selected;
104 EditionForm.insertAdjacentElement("afterbegin", createOption("None", "選択してください", true))
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}をスキップしました`);
115 EditionForm.insertAdjacentElement("afterbegin", createOption(EditionName, EditionName, false));
119 const EditionParam = GetParams()["edition"];
121 Array.from(EditionForm.getElementsByTagName("option")).forEach((e)=>{
122 if(e.value.toLowerCase() == EditionParam.toLowerCase()){
130 ReleaseIdForm.addEventListener("change", (e) => {
135 // ダウンロードのエラーメッセージを表示する
136 const ShowMsg = (message) => {
137 const messageElement = document.getElementById("message");
139 messageElement.innerText = message;
140 console.log(message);
142 messageElement.innerText = "";
148 const ShowEditionInfo = () => {
149 const ReleaseId = ReleaseIdForm.value;
150 const EditionName = EditionForm.value;
151 if (ReleaseId == "None" || EditionName == "None"){
153 DownloadButton.classList.add("hidden")
156 if (ReleaseId && EditionName){
157 ShowMsg(ReleaseId + "の" + EditionName + "が選択されました");
158 DownloadButton.classList.remove("hidden")
163 EditionForm.addEventListener("change", ShowEditionInfo);
164 ReleaseIdForm.addEventListener("change", ShowEditionInfo);
167 DownloadButton.addEventListener("click", (element) => {
169 const ReleaseId = ReleaseIdForm.value
170 const EditionName = EditionForm.value
171 if (! EditionName || EditionName == "None"){
172 ShowMsg("設定が不完全です。リリース番号とエディションを適切に指定してください。\n指定してるにも関わらずエラーが出る場合は開発者に連絡してください。");
175 const OsdnId = JsonData[ReleaseId][EditionName]
177 location.href = "https://osdn.net/projects/alterlinux/releases/" + OsdnId
179 ShowMsg(`不明なエラーが発生しました。\nリリースIDの取得に失敗しました。`)