js2ts: entrance, webpack(entrance/dist_js)
This commit is contained in:
@@ -0,0 +1,332 @@
|
||||
|
||||
import $ from 'jquery';
|
||||
import axios from 'axios';
|
||||
import { setAxiosXMLHttpRequest } from '../hwe/ts/util/setAxiosXMLHttpRequest';
|
||||
import { InvalidResponse } from '../hwe/ts/defs';
|
||||
import { convertFormData } from '../hwe/ts/util/convertFormData';
|
||||
import { TemplateEngine } from '../hwe/ts/common_legacy';
|
||||
import { unwrap_any } from '../hwe/ts/util/unwrap_any';
|
||||
import { unwrap } from '../hwe/ts/util/unwrap';
|
||||
|
||||
type ServerUpdateResponse = {
|
||||
result: true,
|
||||
version: string,
|
||||
server: string,
|
||||
imgResult: false,
|
||||
}
|
||||
|
||||
type ServerRootUpdateResponse = {
|
||||
result: true,
|
||||
version: string,
|
||||
server: string,
|
||||
imgResult: true,
|
||||
imgDetail: string,
|
||||
}
|
||||
|
||||
type ServerStateItem = {
|
||||
name: string,
|
||||
korName: string,
|
||||
color: string,
|
||||
isRoot: boolean,
|
||||
lastGitPath: string,
|
||||
valid: boolean,
|
||||
run: boolean,
|
||||
installed: boolean,
|
||||
version: string,
|
||||
reason: string,
|
||||
status?: string,
|
||||
}
|
||||
|
||||
type ServerStateResponse = {
|
||||
acl: Record<string, string[]>,
|
||||
server: ServerStateItem[],
|
||||
grade: number,
|
||||
}
|
||||
|
||||
type ServerChangeResponse = {
|
||||
result: true,
|
||||
installURL?: string,
|
||||
}
|
||||
|
||||
const serverAdminTemplate = '\
|
||||
<tr class="bg0 server_admin_<%name%>" data-server_name="<%name%>" data-is_root="<%isRoot%>" data-git-path="<%lastGitPath%>">\
|
||||
<th style="color:<%color%>;"><%korName%>(<%name%>)</th>\
|
||||
<td><%status%></td>\
|
||||
<td><%version%></td>\
|
||||
<td><button type="button" class="serv_act_close with_skin valid_if_set with_border obj_fill" onclick="modifyServerStatus(this, \'close\');">폐쇄</button></td>\
|
||||
<td><button type="button" class="serv_act_open with_skin valid_if_set with_border obj_fill" onclick="modifyServerStatus(this, \'open\');">오픈</button></td>\
|
||||
<td><a class="just_link" href="../<%name%>/install.php"><button type="button" class="serv_act_reset with_skin valid_if_set with_border obj_fill">리셋</button></a></td>\
|
||||
<td><a class="just_link" href="../<%name%>/install_db.php"><button type="button" class="serv_act_hard_reset with_skin valid_if_installed only_admin with_border obj_fill">하드리셋</button></a></td>\
|
||||
<td><button type="button" class="serv_act_login_close with_skin valid_if_set with_border obj_fill" onclick="Entrance_AdminClosedLogin(this);">폐쇄중 로그인</button></td>\
|
||||
<td><button type="button" class="serv_act_119 with_skin valid_if_set with_border obj_fill" onclick="Entrance_AdminOpen119(this);">서버119</button></td>\
|
||||
<td><button type="button" class="serv_act_update with_skin with_border obj_fill" onclick="serverUpdate(this);">업데이트</button></td>\
|
||||
</tr>\
|
||||
';//TODO: npm install 관련 기능 추가, js/css output 경로 변경
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
modifyServerStatus: (caller: HTMLElement, action: string) => void;
|
||||
Entrance_AdminClosedLogin: (caller: HTMLElement) => void;
|
||||
Entrance_AdminOpen119: (caller: HTMLElement) => void;
|
||||
serverUpdate: (caller: HTMLElement) => void;
|
||||
adminGrade: number;
|
||||
aclList: Record<string, string[]>;
|
||||
}
|
||||
}
|
||||
|
||||
async function serverUpdate(caller: HTMLElement) {
|
||||
const $caller = $(caller);
|
||||
const $tr = $caller.parents('tr');
|
||||
const server = unwrap_any<string>($tr.data('server_name'));
|
||||
let isRoot: string | boolean = unwrap_any<string>($tr.data('is_root'));
|
||||
|
||||
let target = $tr.data('gitPath');
|
||||
|
||||
if (typeof isRoot !== 'boolean') {
|
||||
isRoot = (isRoot != 'false');
|
||||
}
|
||||
|
||||
let allowFullUpdate = (server in window.aclList && window.aclList[server].indexOf('fullUpdate') >= 0);
|
||||
allowFullUpdate = allowFullUpdate || window.adminGrade > 5;
|
||||
|
||||
let allowUpdate = (server in window.aclList && window.aclList[server].indexOf('update') >= 0);
|
||||
allowUpdate = allowUpdate || window.adminGrade >= 5;
|
||||
allowUpdate = allowUpdate || allowFullUpdate;
|
||||
|
||||
if (!allowUpdate) {
|
||||
alert('권한이 없습니다!');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (allowFullUpdate) {
|
||||
target = prompt('가져올 git tree-ish 명을 입력해주세요.', target)
|
||||
if (!target) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (isRoot) {
|
||||
if (!confirm('서버 라이브러리, 루트 서버에 대해 git pull을 실행합니다.')) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (!confirm('다음 git tree-ish 주소로 업데이트를 시도합니다 : ' + target)) {
|
||||
return;
|
||||
}
|
||||
|
||||
let result: InvalidResponse | ServerUpdateResponse | ServerRootUpdateResponse;
|
||||
|
||||
try {
|
||||
const response = await axios({
|
||||
url: '../j_updateServer.php',
|
||||
responseType: 'json',
|
||||
method: 'post',
|
||||
data: convertFormData({
|
||||
server: server,
|
||||
target: target
|
||||
})
|
||||
});
|
||||
result = response.data;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
alert(`에러: ${e}`);
|
||||
location.reload();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!result.result) {
|
||||
alert(`실패했습니다: ${result.reason}`);
|
||||
return;
|
||||
}
|
||||
|
||||
let aux = '';
|
||||
if (result.imgResult) {
|
||||
aux = ` (이미지 서버 갱신:${result.imgResult}, ${result.imgDetail})`;
|
||||
}
|
||||
alert(`${result.server} 서버가 ${result.version} 버전으로 업데이트 되었습니다.${aux}`);
|
||||
}
|
||||
|
||||
function drawServerAdminList(serverList: ServerStateResponse) {
|
||||
const $table = $('#server_admin_list');
|
||||
const $showErrorLog = $('#showErrorLog');
|
||||
|
||||
if (serverList.grade >= 5) {
|
||||
$showErrorLog.show();
|
||||
}
|
||||
$.each(serverList.server, function (idx, server) {
|
||||
console.log(server);
|
||||
let status: string;
|
||||
if (!server.valid) {
|
||||
status = '에러, {0}'.format(server.reason);
|
||||
}
|
||||
else if (!server.run) {
|
||||
status = '폐쇄됨';
|
||||
}
|
||||
else {
|
||||
status = '운영 중';
|
||||
}
|
||||
server.status = status;
|
||||
|
||||
const $tr = $(TemplateEngine(serverAdminTemplate, server));
|
||||
$table.append($tr);
|
||||
if (serverList.grade < 4) {
|
||||
$tr.find('button').prop('disabled', true);
|
||||
}
|
||||
if (!server.valid) {
|
||||
$tr.find('.valid_if_set').prop('disabled', true);
|
||||
}
|
||||
if (!server.installed) {
|
||||
$tr.find('.valid_if_installed').prop('disabled', true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
const aclByServer = serverList.acl[server.name];
|
||||
|
||||
$.each(aclByServer, function (idx, action) {
|
||||
console.log(action);
|
||||
if (action == 'update' || action == 'fullUpdate') {
|
||||
if (!server.installed) {
|
||||
return true;
|
||||
}
|
||||
$tr.find('.serv_act_update').prop('disabled', false);
|
||||
$showErrorLog.show();
|
||||
}
|
||||
else if (action == 'openClose') {
|
||||
if (!server.valid) {
|
||||
return true;
|
||||
}
|
||||
$tr.find('.serv_act_open, .serv_act_close').prop('disabled', false);
|
||||
}
|
||||
else if (action == 'reset') {
|
||||
if (!server.installed) {
|
||||
return true;
|
||||
}
|
||||
$tr.find('.serv_act_reset, .serv_act_close').prop('disabled', false);
|
||||
}
|
||||
});
|
||||
});
|
||||
window.adminGrade = serverList.grade;
|
||||
window.aclList = serverList.acl;
|
||||
if (serverList.grade <= 5) {
|
||||
$table.find('.only_admin').prop('disabled', true);
|
||||
}
|
||||
}
|
||||
|
||||
export async function loadPlugin(): Promise<void> {
|
||||
setAxiosXMLHttpRequest();
|
||||
|
||||
Entrance_AdminInit();
|
||||
|
||||
window.modifyServerStatus = modifyServerStatus;
|
||||
window.Entrance_AdminClosedLogin = Entrance_AdminClosedLogin;
|
||||
window.Entrance_AdminOpen119 = Entrance_AdminOpen119;
|
||||
window.serverUpdate = serverUpdate;
|
||||
|
||||
const response = await axios({
|
||||
url: 'j_server_get_admin_status.php',
|
||||
method: 'post',
|
||||
responseType: 'json'
|
||||
});
|
||||
|
||||
drawServerAdminList(response.data);
|
||||
}
|
||||
|
||||
function Entrance_AdminInit() {
|
||||
console.log('adminInit');
|
||||
$("#Entrance_000202").on('click', Entrance_Member);
|
||||
$("#notice_change_btn").on('click', Entrance_AdminChangeNotice);
|
||||
}
|
||||
|
||||
function Entrance_Member(e: JQuery.Event) {
|
||||
e.preventDefault();
|
||||
$("#Entrance_00").hide();
|
||||
$("#EntranceMember_00").show();
|
||||
}
|
||||
|
||||
async function Entrance_AdminChangeNotice(e: JQuery.Event) {
|
||||
e.preventDefault();
|
||||
const notice = unwrap_any<string>($("#notice_edit").val());
|
||||
|
||||
if (!confirm('정말 실행하시겠습니까?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
let result: InvalidResponse | ServerChangeResponse;
|
||||
try {
|
||||
const response = await axios({
|
||||
url: 'j_server_change_status.php',
|
||||
method: 'post',
|
||||
responseType: 'json',
|
||||
data: convertFormData({
|
||||
action: 'notice',
|
||||
notice: notice
|
||||
})
|
||||
});
|
||||
result = response.data;
|
||||
}
|
||||
catch (e) {
|
||||
console.error(e);
|
||||
alert(`실패했습니다: ${e}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!result.result) {
|
||||
alert(`실패했습니다: ${result.reason}`);
|
||||
return;
|
||||
}
|
||||
|
||||
location.reload();
|
||||
}
|
||||
|
||||
async function modifyServerStatus(caller: HTMLElement, action: string) {
|
||||
const $caller = $(caller);
|
||||
const server = unwrap_any<string>($caller.parents('tr').data('server_name'));
|
||||
|
||||
if (!confirm('정말 실행하시겠습니까?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
let result: InvalidResponse | ServerChangeResponse;
|
||||
|
||||
try {
|
||||
const response = await axios({
|
||||
url: 'j_server_change_status.php',
|
||||
method: 'post',
|
||||
responseType: 'json',
|
||||
data: convertFormData({
|
||||
server: server,
|
||||
action: action
|
||||
})
|
||||
});
|
||||
result = response.data;
|
||||
}
|
||||
catch (e) {
|
||||
console.error(e);
|
||||
alert(`실패했습니다: ${e}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!result.result) {
|
||||
alert(`실패했습니다: ${result.reason}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (action == 'reset') {
|
||||
location.href = unwrap(result.installURL);
|
||||
} else {
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
function Entrance_AdminClosedLogin(caller: HTMLElement) {
|
||||
const $caller = $(caller);
|
||||
const serverDir = $caller.parents('tr').data('server_name');
|
||||
location.href = serverDir + "/npc_login.php";
|
||||
}
|
||||
|
||||
function Entrance_AdminOpen119(caller: HTMLElement) {
|
||||
const $caller = $(caller);
|
||||
const serverDir = $caller.parents('tr').data('server_name');
|
||||
location.href = `../${serverDir}/_119.php`;
|
||||
}
|
||||
Reference in New Issue
Block a user