diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml
index 91f9558..eebfe8e 100644
--- a/.idea/deviceManager.xml
+++ b/.idea/deviceManager.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/config.properties b/config.properties
index d5a804e..02d4505 100644
--- a/config.properties
+++ b/config.properties
@@ -1,11 +1,12 @@
#Configuration file
-#Fri Oct 24 10:57:19 WIB 2025
+#Mon Oct 27 15:51:50 WIB 2025
database.host=localhost
database.name=aas
database.password=admin
database.port=3306
database.user=admin
-remark.FLD=Gate Change [4]
+default.voice.type=VOICE_1
+remark.FLD=Arrival [9]
remark.GBD=Second Call [2]
remark.GFC=Last Call [3]
remark.GOP=First Call [1]
diff --git a/html/webpage/assets/css/bss-overrides.css b/html/webpage/assets/css/bss-overrides.css
index e4c6b12..f977d16 100644
--- a/html/webpage/assets/css/bss-overrides.css
+++ b/html/webpage/assets/css/bss-overrides.css
@@ -46,6 +46,10 @@
margin-top: 0!important;
}
+.mt-3 {
+ margin-top: 1rem!important;
+}
+
.me-2 {
margin-right: .5rem!important;
}
diff --git a/html/webpage/assets/css/styles.css b/html/webpage/assets/css/styles.css
index 0f45c33..3fc979b 100644
--- a/html/webpage/assets/css/styles.css
+++ b/html/webpage/assets/css/styles.css
@@ -128,6 +128,66 @@ body {
width: 25%;
}
+.class30 {
+ width: 30%;
+}
+
+.class35 {
+ width: 35%;
+}
+
+.class40 {
+ width: 40%;
+}
+
+.class45 {
+ width: 45%;
+}
+
+.class50 {
+ width: 50%;
+}
+
+.class55 {
+ width: 55%;
+}
+
+.class60 {
+ width: 60%;
+}
+
+.class65 {
+ width: 65%;
+}
+
+.class70 {
+ width: 70%;
+}
+
+.class75 {
+ width: 75%;
+}
+
+.class80 {
+ width: 80%;
+}
+
+.class85 {
+ width: 85%;
+}
+
+.class90 {
+ width: 90%;
+}
+
+.class95 {
+ width: 95%;
+}
+
+.class100 {
+ width: 100%;
+}
+
.card-login {
background-color: white;
box-shadow: rgba(0, 0, 0, 0.15) 0px 15px 25px, rgba(0, 0, 0, 0.05) 0px 5px 10px;
@@ -302,8 +362,8 @@ table {
border: 2px dashed #ccc;
border-radius: 20px;
width: 400px;
- height: 200px;
- display: flex;
+ height: 310px;
+ /*display: flex;*/
justify-content: center;
align-items: center;
font-family: sans-serif;
@@ -318,3 +378,58 @@ table {
color: #0d6efd;
}
+#table_user_management {
+ table-layout: fixed;
+ width: 100%;
+}
+
+#table_user_management th, #table_user_management td {
+ text-overflow: ellipsis;
+ white-space: normal !important;
+ word-wrap: break-word;
+ overflow-wrap: anywhere;
+}
+
+.pad-result {
+ padding-left: 1rem;
+ padding-right: 1rem;
+ border-radius: 8px;
+}
+
+.pad-icon-menu {
+ margin-top: -0.3rem;
+}
+
+.div-file-list {
+ height: 20vh;
+ overflow-y: auto;
+ overflow-x: hidden;
+ padding: 10px;
+ /*border: dashed;*/
+}
+
+.pad-select {
+ margin-top: 0.3rem;
+}
+
+.div-label-drop {
+ display: flex;
+ text-align: center;
+ justify-content: center;
+ padding-top: 2rem;
+ /*padding-bottom: 1.5rem;*/
+}
+
+.pad-drop {
+ padding-top: 1rem;
+}
+
+.div-search {
+ padding: 0.5rem;
+}
+
+.hr-dashed {
+ border: none;
+ border-bottom: 1px dashed #000000;
+}
+
diff --git a/html/webpage/assets/js/filemanagement.js b/html/webpage/assets/js/filemanagement.js
new file mode 100644
index 0000000..3deab66
--- /dev/null
+++ b/html/webpage/assets/js/filemanagement.js
@@ -0,0 +1,293 @@
+
+/**
+ * Load setting language dropdown
+ */
+function load_setting_language() {
+ $("#setting_language").empty().off('change');
+
+ getLanguages(() => {
+ window.languages.forEach((lang) => {
+ let $option = $("").attr("value", lang).text(lang);
+ $("#setting_language").append($option);
+ });
+ $("#setting_language").on('change', function () {
+ change_droparea_enable();
+ });
+ });
+}
+
+/**
+ * Load setting category dropdown
+ */
+function load_setting_category() {
+ $("#setting_category").empty().off('change');
+ getCategories(() => {
+ window.categories.forEach((cat) => {
+ let $option = $("").attr("value", cat).text(cat);
+ $("#setting_category").append($option);
+ });
+ $("#setting_category").on('change', function () {
+ change_droparea_enable();
+ });
+ });
+}
+
+/**
+ * Load setting voice dropdown
+ */
+function load_setting_voice() {
+ $("#setting_voice").empty().off('change');
+ getVoiceTypes(() => {
+ window.voiceTypes.forEach((voice) => {
+ let $option = $("").attr("value", voice).text(voice);
+ $("#setting_voice").append($option);
+ });
+ $("#setting_voice").on('change', function () {
+ change_droparea_enable();
+ });
+ });
+}
+
+/**
+ * Get soundbank files from server based on category, language, and voice
+ * @param {String} category
+ * @param {String} language
+ * @param {String} voice
+ */
+function getSoundBankFiles(category, language, voice) {
+ let URL = `FileManager/ListSoundbank/${language}/${voice}/${category}`;
+ fetchAPI(URL, "GET", {}, null, (okdata) => {
+ $("#file-list").empty();
+ if (Array.isArray(okdata) && okdata.length > 0) {
+ okdata.forEach((file) => {
+ // get only the file name from the full path
+ let fileName = file.split(/[/\\]/).pop();
+ let $li = $("
").text(fileName);
+ $("#file-list").append($li);
+ });
+ }
+ }, (errdata) => {
+ alert("Error getting soundbank files : " + errdata.message);
+ });
+}
+
+/**
+ * Enable or disable drop area based on selections
+ */
+function change_droparea_enable() {
+ let selected_category = $("#setting_category").val();
+ let selected_language = $("#setting_language").val();
+ let selected_voice = $("#setting_voice").val();
+ $("#file-list").empty();
+ $("#searchfilelist").val("");
+ $("#searchfilelist").off('input').on('input', function () {
+ let searchTerm = $(this).val().toLowerCase();
+ $("#file-list li").each(function () {
+ let fileName = $(this).text().toLowerCase();
+ if (fileName.includes(searchTerm)) {
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ });
+ console.log(`Selected Category: ${selected_category}, Language: ${selected_language}, Voice: ${selected_voice}`);
+ if (selected_category && selected_language && selected_voice) {
+ $("#drop-area").removeClass("disabled");
+ getSoundBankFiles(selected_category, selected_language, selected_voice);
+ } else {
+ $("#drop-area").addClass("disabled");
+
+ }
+}
+
+
+/**
+ * Get Soundbank path from server
+ */
+function get_soundbank_path() {
+ $("#setting_path").val("");
+ fetchAPI("Settings/SoundbankDirectory", "GET", {}, null, (okdata) => {
+ if (okdata.message && okdata.message.trim().length > 0) {
+ let path = okdata.message.trim();
+ //console.log("Soundbank path retrieved: " + path);
+ $("#setting_path").val(path);
+ }
+ }, (errdata) => {
+ alert("Error getting soundbank path : " + errdata.message);
+ });
+}
+
+function download(path, filename) {
+ let downloadurl = `/api/FileManager/${path}`;
+ let reqdata = { filename: filename };
+ fetch(downloadurl, {
+ method: 'POST',
+ headers: {},
+ body: JSON.stringify(reqdata)
+ })
+ .then(response => {
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.blob();
+ })
+ .then(blob => {
+ const url = window.URL.createObjectURL(blob);
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = filename;
+ document.body.appendChild(a);
+ a.click();
+ a.remove();
+ window.URL.revokeObjectURL(url);
+ })
+ .catch(errdata => {
+ alert("Error downloading paging result file: " + errdata.message);
+ });
+}
+
+function get_pagingresult_files() {
+ const url = `FileManager/PagingResultList`;
+ $("#tbody_resultpaging").empty();
+ fetchAPI(url, "GET", {}, null, (okdata) => {
+ if (Array.isArray(okdata) && okdata.length > 0) {
+ console.log("Paging result files: ", JSON.stringify(okdata));
+ okdata.forEach((file) => {
+ let filename = file.split(/[/\\]/).pop();
+ let $tr = $("
");
+ let $tdtitle = $(" | ").text(filename);
+ // add button inside td to download the file
+ let $btndownload = $("").text("Download").addClass("btn btn-primary");
+ $btndownload.on('click', function () {
+ download("DownloadPagingResultFile", filename);
+ });
+
+ let $tdbutton = $(" | ").append($btndownload).addClass("text-center");
+ $tr.append($tdtitle);
+ $tr.append($tdbutton);
+ $("#tbody_resultpaging").append($tr);
+ });
+ }
+ }, (errdata) => {
+ alert("Error getting paging result files : " + errdata.message);
+ });
+}
+
+function get_soundbankresult_files() {
+ const url = `FileManager/SoundbankResultList`;
+ $("#tbody_resultsoundbank").empty();
+ fetchAPI(url, "GET", {}, null, (okdata) => {
+ if (Array.isArray(okdata) && okdata.length > 0) {
+ console.log("Soundbank result files: ", JSON.stringify(okdata));
+ okdata.forEach((file) => {
+ let filename = file.split(/[/\\]/).pop();
+ let $tr = $("
");
+ let $tdtitle = $(" | ").text(filename);
+ // add button inside td to download the file
+ let $btndownload = $("").text("Download").addClass("btn btn-primary");
+ let $tdbutton = $(" | ").append($btndownload).addClass("text-center");
+ $btndownload.on('click', function () {
+ download("DownloadSoundbankResultFile", filename);
+ });
+ $tr.append($tdtitle);
+ $tr.append($tdbutton);
+ $("#tbody_resultsoundbank").append($tr);
+ });
+ }
+ }, (errdata) => {
+ alert("Error getting soundbank result files : " + errdata.message);
+ });
+}
+
+
+
+$(document).ready(function () {
+ console.log("filemanagement.js xx loaded");
+ load_setting_category();
+ load_setting_language();
+ load_setting_voice();
+ get_soundbank_path();
+ setTimeout(() => {
+ change_droparea_enable();
+ }, 1000);
+ get_pagingresult_files();
+ get_soundbankresult_files();
+ $("#save_directory").off('click').on('click', function () {
+ let new_path = $("#setting_path").val();
+ if (new_path && new_path.trim().length > 0) {
+ fetchAPI("Settings/SoundbankDirectory", "POST", {}, { directory: new_path }, (okdata) => {
+ alert("Soundbank directory path saved successfully.");
+ }, (errdata) => {
+ alert("Error saving soundbank directory path : " + errdata.message);
+ });
+ } else {
+ alert("Please enter a valid soundbank directory path.");
+ }
+ });
+ $("#drop-area").on('dragover', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).addClass('dragover');
+ }).on('dragleave', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).removeClass('dragover');
+ }).on('drop', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).removeClass('dragover');
+ if ($(this).hasClass('disabled')) {
+ alert("Please select Category, Language, and Voice Type before uploading files.");
+ return;
+ }
+ let lang = $("#setting_language").val().trim();
+ let category = $("#setting_category").val().trim();
+ let voice = $("#setting_voice").val().trim();
+ let files = e.originalEvent.dataTransfer.files;
+ if (lang && lang.length > 0) {
+ if (category && category.length > 0) {
+ if (voice && voice.length > 0) {
+ if (files.length > 0) {
+ // check if each file have type audio/wav , size more than 0, and name ends with .wav
+ let allValid = true;
+ for (let i = 0; i < files.length; i++) {
+ let file = files[i];
+ if (file.type !== 'audio/wav' && !file.name.toLowerCase().endsWith('.wav')) {
+ allValid = false;
+ }
+ if (file.size <= 0) {
+ allValid = false;
+ }
+ }
+ if (allValid) {
+ if (confirm(`Are you sure want to upload ${files.length} file(s) to the soundbank directory for Category: ${$("#setting_category").val()}, Language: ${$("#setting_language").val()}, Voice Type: ${$("#setting_voice").val()}?`)) {
+ let url = `api/Settings/UploadSoundbank/${lang}/${voice}/${category}`;
+ const formdata = new FormData();
+ for (let i = 0; i < files.length; i++) {
+ formdata.append('files', files[i]);
+ }
+ try {
+ fetch(url, {
+ method: 'POST',
+ body: formdata
+ })
+ .then(response => response.json())
+ .then(okdata => {
+ console.log("Upload result: ", JSON.stringify(okdata));
+ })
+ .catch(errdata => {
+ alert("Error uploading files to soundbank directory : " + errdata.message);
+ });
+ } catch (err) {
+ alert("Error preparing file upload: " + err.message);
+ }
+ }
+ } else alert("Please upload only valid WAV audio files. Type must be audio/wav and size must be more than 0 bytes.");
+ } else alert("No files detected for upload.");
+ } else alert("Please select Voice Type before uploading files.");
+ } else alert("Please select Category before uploading files.");
+ } else alert("Please select Language before uploading files.");
+
+ });
+});
\ No newline at end of file
diff --git a/html/webpage/assets/js/script.js b/html/webpage/assets/js/script.js
index aa0b862..90e42a7 100644
--- a/html/webpage/assets/js/script.js
+++ b/html/webpage/assets/js/script.js
@@ -444,8 +444,15 @@ $(document).ready(function () {
let json = JSON.parse(data);
if (Array.isArray(json) && json.length > 0) {
json.forEach((net) => {
- if (result.length > 0) result += "\n"
+ if (net){
+ if (net.displayName && net.displayName.length>0){
+ if (net.ipV4addr && Array.isArray(net.ipV4addr) && net.ipV4addr.length>0){
+ if (result.length > 0) result += "\n"
result += `${net.displayName} (${net.ipV4addr.join(";")}) TX:${(net.txSpeed / 1024).toFixed(1)} KB/s RX:${(net.rxSpeed / 1024).toFixed(1)} KB/s`
+ }
+ }
+ }
+
})
} else result = "N/A";
$('#networkstatus').text(result)
@@ -585,6 +592,15 @@ $(document).ready(function () {
}
});
})
+ $('#filemanagement').click(() => {
+ sidemenu.hide();
+ $('#content').load('filemanagement.html', function (response, status, xhr) {
+ if (status === "success") {
+ console.log("File Management content loaded successfully");
+ // pindah ke filemanagement.js
+ }
+ });
+ });
$('#logoutlink').click(() => {
//window.location.href = "login.html"
fetch("/logout", {method: 'GET'})
diff --git a/html/webpage/assets/js/setting.js b/html/webpage/assets/js/setting.js
index 1dd1577..afa3aa3 100644
--- a/html/webpage/assets/js/setting.js
+++ b/html/webpage/assets/js/setting.js
@@ -1,82 +1,7 @@
-/**
- * Load setting language dropdown
- */
-function load_setting_language() {
- $("#setting_language").empty().off('change');
- getLanguages(() => {
- window.languages.forEach((lang) => {
- let $option = $("").attr("value", lang).text(lang);
- $("#setting_language").append($option);
- });
- $("#setting_language").on('change', function () {
- change_droparea_enable();
- });
- });
-}
-/**
- * Load setting category dropdown
- */
-function load_setting_category() {
- $("#setting_category").empty().off('change');
- getCategories(() => {
- window.categories.forEach((cat) => {
- let $option = $("").attr("value", cat).text(cat);
- $("#setting_category").append($option);
- });
- $("#setting_category").on('change', function () {
- change_droparea_enable();
- });
- });
-}
-/**
- * Load setting voice dropdown
- */
-function load_setting_voice() {
- $("#setting_voice").empty().off('change');
- getVoiceTypes(() => {
- window.voiceTypes.forEach((voice) => {
- let $option = $("").attr("value", voice).text(voice);
- $("#setting_voice").append($option);
- });
- $("#setting_voice").on('change', function () {
- change_droparea_enable();
- });
- });
-}
-
-/**
- * Get Soundbank path from server
- */
-function get_soundbank_path() {
- $("#setting_path").val("");
- fetchAPI("Settings/SoundbankDirectory", "GET", {}, null, (okdata) => {
- if (okdata.message && okdata.message.trim().length > 0) {
- let path = okdata.message.trim();
- //console.log("Soundbank path retrieved: " + path);
- $("#setting_path").val(path);
- }
- }, (errdata) => {
- alert("Error getting soundbank path : " + errdata.message);
- });
-}
-
-/**
- * Enable or disable drop area based on selections
- */
-function change_droparea_enable() {
- let selected_category = $("#setting_category").val();
- let selected_language = $("#setting_language").val();
- let selected_voice = $("#setting_voice").val();
- if (selected_category && selected_language && selected_voice) {
- $("#drop-area").removeClass("disabled");
- } else {
- $("#drop-area").addClass("disabled");
- }
-}
/**
* Load message bank data into selection dropdowns
@@ -90,9 +15,7 @@ function load_messagebank(cbOK = null) {
// get messagebank data from server, which contains [FLIGHT_NUMBER]
let messageData = [...new Set(window.messagebankdata.filter(mb => mb.message_Detail.includes('[FLIGHT_NUMBER]')).map(mb => `${mb.description} [${mb.aNN_ID}]`))];
- //console.log("Message bank data with [FLIGHT_NUMBER]: ", messageData);
messageData.forEach((item) => {
- //console.log("Adding option: " + item);
$("#input_GOP").append($("").attr("value", item).text(item));
$("#input_GBD").append($("").attr("value", item).text(item));
$("#input_GFC").append($("").attr("value", item).text(item));
@@ -105,51 +28,41 @@ function load_messagebank(cbOK = null) {
function load_remark_selection() {
fetchAPI("Settings/FISCode", "GET", {}, null, (okdata) => {
- //console.log("FIS codes retrieved: ", JSON.stringify(okdata));
$("#input_GOP").val(okdata.gop)
$("#input_GBD").val(okdata.gbd);
$("#input_GFC").val(okdata.gfc);
$("#input_FLD").val(okdata.fld);
+ $("#input_defaultvoice").val(okdata.defaultvoice);
}, (errdata) => {
alert("Error getting FIS codes : " + errdata.message);
});
}
+function load_default_voice(){
+ $("#input_defaultvoice").empty();
+ window.voiceTypes.forEach((voice) => {
+ $("#input_defaultvoice").append($("").attr("value", voice).text(voice));
+ });
+}
+
$(document).ready(function () {
console.log("setting.js loaded");
-
-
- $("#save_directory").off('click').on('click', function () {
- let new_path = $("#setting_path").val();
- if (new_path && new_path.trim().length > 0) {
- fetchAPI("Settings/SoundbankDirectory", "POST", {}, { directory: new_path }, (okdata) => {
- alert("Soundbank directory path saved successfully.");
- }, (errdata) => {
- alert("Error saving soundbank directory path : " + errdata.message);
- });
- } else {
- alert("Please enter a valid soundbank directory path.");
- }
- });
-
-
- get_soundbank_path();
- load_setting_category();
- load_setting_language();
- load_setting_voice();
+ load_default_voice();
load_messagebank(() => load_remark_selection());
$("#fiscodesave").off('click').on('click', function () {
let gop = $("#input_GOP").val();
let gbd = $("#input_GBD").val();
let gfc = $("#input_GFC").val();
let fld = $("#input_FLD").val();
- if (gop && gbd && gfc && fld) {
+ let voice = $("#input_defaultvoice").val();
+ if (gop && gbd && gfc && fld && voice) {
let data = {
GOP: gop,
GBD: gbd,
GFC: gfc,
- FLD: fld
+ FLD: fld,
+ defaultvoice: voice
};
fetchAPI("Settings/FISCode", "POST", {}, data, (okdata) => {
alert("FIS codes saved successfully.");
@@ -157,75 +70,11 @@ $(document).ready(function () {
alert("Error saving FIS codes : " + errdata.message);
});
} else {
- alert("Please select all FIS codes (GOP, GBD, GFC, FLD) before saving.");
+ alert("Please select all FIS codes (GOP, GBD, GFC, FLD) and Default Voice before saving.");
}
});
- $("#drop-area").on('dragover', function (e) {
- e.preventDefault();
- e.stopPropagation();
- $(this).addClass('dragover');
- }).on('dragleave', function (e) {
- e.preventDefault();
- e.stopPropagation();
- $(this).removeClass('dragover');
- }).on('drop', function (e) {
- e.preventDefault();
- e.stopPropagation();
- $(this).removeClass('dragover');
- if ($(this).hasClass('disabled')) {
- alert("Please select Category, Language, and Voice Type before uploading files.");
- return;
- }
- let lang = $("#setting_language").val().trim();
- let category = $("#setting_category").val().trim();
- let voice = $("#setting_voice").val().trim();
- let files = e.originalEvent.dataTransfer.files;
- if (lang && lang.length > 0) {
- if (category && category.length > 0) {
- if (voice && voice.length > 0) {
- if (files.length > 0) {
- // check if each file have type audio/wav , size more than 0, and name ends with .wav
- let allValid = true;
- for (let i = 0; i < files.length; i++) {
- let file = files[i];
- if (file.type !== 'audio/wav' && !file.name.toLowerCase().endsWith('.wav')) {
- allValid = false;
- }
- if (file.size <= 0) {
- allValid = false;
- }
- }
- if (allValid) {
- if (confirm(`Are you sure want to upload ${files.length} file(s) to the soundbank directory for Category: ${$("#setting_category").val()}, Language: ${$("#setting_language").val()}, Voice Type: ${$("#setting_voice").val()}?`)) {
- let url = `api/Settings/UploadSoundbank/${lang}/${voice}/${category}`;
- const formdata = new FormData();
- for (let i = 0; i < files.length; i++) {
- formdata.append('files', files[i]);
- }
- try{
- fetch(url, {
- method: 'POST',
- body: formdata
- })
- .then(response => response.json())
- .then(okdata => {
- console.log("Upload result: ", JSON.stringify(okdata));
- })
- .catch(errdata => {
- alert("Error uploading files to soundbank directory : " + errdata.message);
- });
- } catch(err){
- alert("Error preparing file upload: " + err.message);
- }
- }
- } else alert("Please upload only valid WAV audio files. Type must be audio/wav and size must be more than 0 bytes.");
- } else alert("No files detected for upload.");
- } else alert("Please select Voice Type before uploading files.");
- } else alert("Please select Category before uploading files.");
- } else alert("Please select Language before uploading files.");
-
- });
+
});
\ No newline at end of file
diff --git a/html/webpage/broadcastzones.html b/html/webpage/broadcastzones.html
index ef34350..57f3239 100644
--- a/html/webpage/broadcastzones.html
+++ b/html/webpage/broadcastzones.html
@@ -4,7 +4,7 @@
- AAS_NewGen_17OKT25
+ AAS_NewGen_27OKT25
diff --git a/html/webpage/filemanagement.html b/html/webpage/filemanagement.html
new file mode 100644
index 0000000..8c1f2f0
--- /dev/null
+++ b/html/webpage/filemanagement.html
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+ AAS_NewGen_27OKT25
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Upload Soundbank
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Soundbank Result
+
+
+
+
+
+ | File Name |
+ Action |
+
+
+
+
+ | Result Soundbank 001 |
+ |
+
+
+
+
+
+
+
Paging Result
+
+
+
+
+
+ | File Name |
+ Action |
+
+
+
+
+ | Result Paging 001 |
+ |
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/html/webpage/home.html b/html/webpage/home.html
index d9d349e..4c63b1e 100644
--- a/html/webpage/home.html
+++ b/html/webpage/home.html
@@ -34,7 +34,7 @@
-