var URL = window.URL || window.webkitURL;
var txtTheme = $("#txtTheme");
var txtaNarration = $("#txtaNarration");
var imageInput = document.getElementById("btnUploadImg");
$("input#btnUploadImg").on("change", uploadImage);
$("button#btnSubmit").on("click", btnSubmit_Click);
//設置錯誤訊息: message為null時則為取消錯誤訊息顯示
function setAlert(message) {
if ($("#divAlert").children().length > 0)
$("#divAlert").children().remove();
if (message) {
$("#divAlert").append($("
" + message + "
"));
}
}
//處理上傳的圖像
function uploadImage() {
if (!imageInput.files) {
alert("無法上傳: 您的瀏覽器對input元素中的files屬性不支援!");
return;
}
else if (!imageInput.files[0]) {
alert("取檔失敗: 請在完成動作之前選取所要上傳的影像!");
return;
}
var imgFile = imageInput.files[0];
if (imgFile.type != "image/jpeg" && imgFile.type != "image/png") {
alert("檔案類型錯誤: 請選擇jpg或png類型的圖檔!");
}
else if (imgFile.size > 131072) {
alert("檔案過大: 請選擇128KB以下的jpg或png檔案!");
}
else {
let image = new Image();
image.onload = () => {
if (image.width != image.height) {
alert("比例不符: 請選擇大小為1:1的jpg或png檔案。");
}
else {
$("#imgThemeImage").attr("src", image.src);
}
};
image.src = URL.createObjectURL(imgFile);
}
}
//當Submit按鈕按下時
function btnSubmit_Click() {
let themeTitle = txtTheme.val();
let narrative = txtaNarration.val();
if ( themeTitle.length < 1 || themeTitle.length > 32) {
setAlert("輸入錯誤: 主題名稱請輸入1~32間的字!");
return;
}
else if ( narrative.length < 8 || narrative.length > 100 ) {
setAlert("輸入錯誤: 主題敘述請輸入8~100間的字!");
return;
}
let datas = new FormData();
datas.append("theme", themeTitle);
datas.append("narrative", narrative);
datas.append("image", imageInput.files[0]);
$.ajax({
url: "/newtheme",
method: "POST",
cache: false,
processData: false,
contentType: false,
timeout: 5000,
data: datas,
success: SubmitTheme_Success,
error: SubmitTheme_OnError
});
}
/**
* 將投稿新主題的相關資料傳送至伺服端後,伺服端所傳回的訊息。
* @param {Object} response 自伺服端所傳回的訊息。
*/
function SubmitTheme_Success(response) {
if (response.isOK) {
window.location.replace(response.url);
}
else {
setAlert(response.message);
}
}
function SubmitTheme_OnError(jqXHR, statusText, err) {
setAlert("將資料傳送至伺服時發生了錯誤,請稍後再嘗試。");
}