#GWC UI Library : gwcCreateModalDialog 함수

웹 UI 라이브러리인 GWC에서 제공하는 gwcCreateModalDialog 함수에 대한 예제 코드입니다.

먼저 DOM 구성은 다음과 같습니다.

그리고 CSS 구성은 다음과 같구요.

.center {
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    width: 100%;
    height: 100vh;
}

.hcenter {
    display: flex;
    align-items: center;
    flex-direction: column;
    gap: 0.5em;
}
 
.content {
    padding: .5em;
}

.vcenter {
    display: flex;
    align-items: center;
}

gwc-textinput {
    width: 20em;
}

.something {
    width: 100%;
    height: 100px;
    background: rgba(0,0,0,0.4);
    border: 1px dashed rgba(255,255,255,0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    color: wheat;
    padding: 20px;
}

js 코드는 다음과 같습니다.

window.onload = () => {
    btn.addEventListener("click", () => {
        const dlg = gwcCreateModalDialog("모달 대화상자");
        dlg.content = `
            
앨든링(Elden Ring)..
그대가 왕이될지.. 아니 어쩌면 신이될지..
`; dlg.resizablePanel.style.width = "30em"; // 대화상자의 크기 지정(대화상자 자체에 대한 크기 조절로는 안됨) dlg.resizablePanel.minWidth = 400; // 대화창의 크기 조절 시 가로 최소 크기 dlg.resizablePanel.minHeight = 200; // 대화창의 크기 조절 시 세로 최소 크기 // 대화 상자의 크기 조절에 따른 구성 UI의 크기 조절 // CSS 만으로 제어할 수 없는 구성 UI는 크기 변경 이벤트를 통해 제어할 수 있음 dlg.resizablePanel.addEventListener("change", (event) => { const { mode, oldHeight, newHeight } = event.detail; if(mode === "BOTTOM" || mode == "TOP") { const domSomething = dlg.content.querySelector(".something"); const height = parseFloat(window.getComputedStyle(domSomething).getPropertyValue("height")); domSomething.style.height = `${height - (oldHeight - newHeight)}px`; } }); dlg.content.querySelector("gwc-button").addEventListener("click", () => { dlg.remove(); }); dlg.show(); GeoServiceWebComponentManager.instance.update(); }); };

실행 결과는 다음과 같습니다.

대화창을 구성하는 UI의 상태(값)이 변경되면 변경에 대한 처리를 한곳에서 처리할 수 있는 state 관리가 가능합니다. 코드의 예는 다음과 같습니다.

dlg.setState((ui) => {
    console.log("변경통지", typeof ui);
});

setState로 상태 변경에 대한 이벤트를 등록할 수 있으며 변경 이벤트는 다음처럼 직접적으로 호출할 수도 있습니다.

this.#dialog.state.change(this.#selectedFile);

대화창이 닫힐때 수동이든 자동이든 remove 매서드가 호출되는데요. 이때 close 이벤트가 발생합니다. 이 이벤트를 통해 창이 닫힐때 무언가를 처리할 수 있고, 창을 정말로 닫을지 제어할 수 있습니다.

this.#dialog.addEventListener("close", (event) => {
    // cancel을 true로 설정하면 대화창이 닫히지 않습니다.
    event.cancel = true;
});

Java에서 JSON 문자열을 통해 값 얻기

JSON은 Javascript를 위해 탄생했고, Javascript가 웹의 대세 언어이다보니 다른 언어에서도 JSON 형식의 값을 읽을 상황이 많이 발생합니다.

다음은 Java에서 json-simple이라는 라이브러리를 통해 JSON 문자열에서 특정값을 얻어오는 소스입니다.

String strJson = "[{"v": "0 *\/3 * * *"}]";
JSONParser parser = new JSONParser();
JSONArray values = (JSONArray)parser.parse(strJson);
JSONObject value = (JSONObject)values.get(0);
System.out.println((String)value.get("v"));

결과는 다음과 같습니다.

0 *\/3 * * *

주말에 THREE.JS를 이용해 만든 것

제 유튜브 채널을 통해 강좌로 소개할 것들에 대해 먼저 결과 만을 찍어 먼저 올려 봅니다. 아마 바로 돌아오는 이번주 토요일 쯤.. 아래 2개 중 한 개를 찍어 올릴 듯 합니다.

제 유튜브 채널 이름은 GIS Developer 입니다. 채널을 구독하시면 영상 업로드 시 바로 알 수 있습니다.

#GWC UI Library : gwcInput 함수

웹 UI 라이브러리인 GWC에서 제공하는 gwcInput 함수에 대한 예제 코드입니다.

먼저 DOM 구성은 다음과 같습니다.

그리고 CSS 구성은 다음과 같구요.

.center {
    display: flex;
    width: 100%;
    height: 100%;
    justify-content: center;
    align-items: center;
    gap: 3em;
}

js 코드는 다음과 같습니다.

window.onload = () => {
    button.onclick = event => { 
        gwcInput({
            message: "폴더 이름을 입력하세요",
            value: "이름", // optional
            onOkay: (value) => { // 확인 버튼 처리
                console.log(value);
                if(value.trim().length === 0) {
                    gwcMessage("값을 입력하세요.", true);
                    return false; // false를 반환하면 입력창이 닫히지 않음
                } else {
                    gwcMessage(`입력한 값은 ${value} 입니다.`);
                }
            },
            onCancel: (value) => { // 취소 버튼 처리
                // false를 반환하면 입력창이 닫히지 않음
                //return false; 
            }
        });
    };
};

실행 결과는 다음과 같습니다.

gwcInput 함수는 표시되는 대화상자에 대한 객체를 반환합니다. 이 객체가 dlg라고 할때 내부에 표시되는 메세지를 1초마다 변경하다가 수초 경과 후 자동으로 닫히게 하는 코드는 다음과 같습니다.

let i = 0;
setInterval(() => {
    i++;
    dlg.message = i;

    if(i === 4) dlg.remove();
}, 1000);