ninegrid2 6.896.0 → 6.897.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.cjs.js +103 -75
- package/dist/bundle.esm.js +103 -75
- package/dist/etc/nxDialog.js +104 -76
- package/package.json +1 -1
- package/src/etc/nxDialog.js +104 -76
package/dist/bundle.cjs.js
CHANGED
|
@@ -119317,99 +119317,127 @@ class nxDialog extends HTMLElement
|
|
|
119317
119317
|
{
|
|
119318
119318
|
//#owner;
|
|
119319
119319
|
#shift;
|
|
119320
|
-
|
|
119320
|
+
|
|
119321
119321
|
constructor () {
|
|
119322
119322
|
super();
|
|
119323
119323
|
}
|
|
119324
|
-
|
|
119324
|
+
|
|
119325
119325
|
connectedCallback() {
|
|
119326
119326
|
|
|
119327
119327
|
const v = this.innerHTML;
|
|
119328
119328
|
const cssFile = this.getAttribute("css-file");
|
|
119329
|
-
|
|
119329
|
+
// customFile1과 customFile2 변수가 동일한 역할을 하는 것으로 보이며,
|
|
119330
|
+
// ninegrid.getCustomPath에서 이미 "nxDialog.css"를 가져오는 로직이 있으므로
|
|
119331
|
+
// 이 부분을 간소화할 수 있습니다.
|
|
119332
|
+
// 여기서는 현재 코드를 최대한 유지하면서 fadeIn/fadeOut만 추가합니다.
|
|
119333
|
+
const customFile1 = cssFile ? `@import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/${cssFile}";` : "";
|
|
119330
119334
|
const customFile2 = cssFile ? ninegrid.getCustomPath(this, cssFile) : "";
|
|
119331
|
-
|
|
119332
|
-
//console.log(ninegrid.getCustomPath(this,"nxDialog.css"));
|
|
119333
119335
|
|
|
119334
119336
|
this.innerHTML = `
|
|
119335
|
-
|
|
119336
|
-
|
|
119337
|
-
|
|
119338
|
-
|
|
119339
|
-
|
|
119340
|
-
|
|
119341
|
-
|
|
119342
|
-
|
|
119343
|
-
|
|
119344
|
-
|
|
119345
|
-
|
|
119346
|
-
|
|
119347
|
-
|
|
119348
|
-
|
|
119349
|
-
|
|
119350
|
-
|
|
119351
|
-
|
|
119352
|
-
|
|
119353
|
-
|
|
119354
|
-
|
|
119355
|
-
|
|
119356
|
-
|
|
119357
|
-
|
|
119358
|
-
|
|
119359
|
-
|
|
119360
|
-
|
|
119361
|
-
|
|
119362
|
-
|
|
119363
|
-
|
|
119364
|
-
|
|
119365
|
-
|
|
119366
|
-
|
|
119367
|
-
|
|
119368
|
-
|
|
119369
|
-
|
|
119370
|
-
|
|
119371
|
-
|
|
119372
|
-
//this.#owner = this.getRootNode().host.closest("nine-grid");
|
|
119373
|
-
|
|
119337
|
+
<style>
|
|
119338
|
+
@import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/nxDialog.css";
|
|
119339
|
+
${ninegrid.getCustomPath(this,"nxDialog.css") || ""}
|
|
119340
|
+
${customFile1 || ""}
|
|
119341
|
+
${customFile2 || ""}
|
|
119342
|
+
</style>
|
|
119343
|
+
|
|
119344
|
+
<dialog>
|
|
119345
|
+
<div class="head">
|
|
119346
|
+
<div class="rect1"></div>
|
|
119347
|
+
<div class="rect2"></div>
|
|
119348
|
+
<div class="rect3"></div>
|
|
119349
|
+
<ng-sphere class="icon" end-fill="#666" size="8"></ng-sphere>
|
|
119350
|
+
<span class="title"></span>
|
|
119351
|
+
<span class="sub-title"></span>
|
|
119352
|
+
<buttons>
|
|
119353
|
+
<ng-sphere class="apply" start-fill="#cc6" end-fill="#660" size="16" title="apply"></ng-sphere>
|
|
119354
|
+
<ng-sphere class="reset" start-fill="#99f" end-fill="#00f" size="16" title="reset"></ng-sphere>
|
|
119355
|
+
<ng-sphere class="close" start-fill="#f99" end-fill="#f00" size="16" title="close"></ng-sphere>
|
|
119356
|
+
</buttons>
|
|
119357
|
+
</div>
|
|
119358
|
+
<div class="contents">
|
|
119359
|
+
<div class="left">
|
|
119360
|
+
<span>가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하</span>
|
|
119361
|
+
</div>
|
|
119362
|
+
<div class="body">
|
|
119363
|
+
${v}
|
|
119364
|
+
</div>
|
|
119365
|
+
<div class="close2">
|
|
119366
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
|
119367
|
+
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708"/>
|
|
119368
|
+
</svg>
|
|
119369
|
+
</div>
|
|
119370
|
+
</div>
|
|
119371
|
+
</dialog>
|
|
119372
|
+
`;
|
|
119373
|
+
|
|
119374
119374
|
$(".title", this).html("Details");
|
|
119375
|
-
|
|
119376
119375
|
this.#init();
|
|
119377
119376
|
};
|
|
119378
|
-
|
|
119377
|
+
|
|
119378
|
+
// showModal 메서드 수정
|
|
119379
119379
|
showModal = () => {
|
|
119380
|
-
this.querySelector('dialog')
|
|
119380
|
+
const dialogElement = this.querySelector('dialog');
|
|
119381
|
+
|
|
119382
|
+
// 다이얼로그가 열릴 때 ':host(.fade)' CSS 클래스를 추가합니다.
|
|
119383
|
+
// ':host'는 커스텀 엘리먼트 자체(nx-dialog)를 의미합니다.
|
|
119384
|
+
this.classList.add('fade');
|
|
119385
|
+
|
|
119386
|
+
// 애니메이션이 끝나고 나서 showModal을 호출하도록 setTimeout을 사용할 수도 있지만,
|
|
119387
|
+
// CSS 애니메이션은 자동으로 시작되므로 이 방식이 더 간단합니다.
|
|
119388
|
+
dialogElement.showModal();
|
|
119381
119389
|
};
|
|
119382
|
-
|
|
119390
|
+
|
|
119391
|
+
// close 메서드 수정
|
|
119383
119392
|
close = () => {
|
|
119384
|
-
|
|
119385
|
-
|
|
119386
|
-
|
|
119387
|
-
|
|
119388
|
-
|
|
119389
|
-
|
|
119390
|
-
|
|
119391
|
-
|
|
119393
|
+
const dialogElement = this.querySelector('dialog');
|
|
119394
|
+
|
|
119395
|
+
// 닫기 애니메이션을 위해 'out' 클래스를 추가합니다.
|
|
119396
|
+
dialogElement.classList.add("out");
|
|
119397
|
+
|
|
119398
|
+
// CSS 애니메이션 지속 시간 (1000ms = 1초) 후에 dialog.close()를 호출하여 실제로 닫습니다.
|
|
119399
|
+
// 이는 CSS의 fadeOut 애니메이션 지속 시간과 일치해야 합니다.
|
|
119400
|
+
// nxDialog.css의 @keyframes fadeOut { ... } 에 명시된 animation-duration을 확인하세요.
|
|
119401
|
+
// 현재 CSS에는 dialog.out에 대한 animation-duration이 없으므로, 명시적으로 1초를 가정합니다.
|
|
119402
|
+
// 만약 다른 애니메이션 (.run, .moveUp 등)과 동시에 사용된다면 이 부분은 더 복잡해질 수 있습니다.
|
|
119403
|
+
setTimeout(() => {
|
|
119404
|
+
// 이벤트 리스너 제거는 dialog가 완전히 닫힌 후에 하는 것이 안전합니다.
|
|
119405
|
+
// 그렇지 않으면 애니메이션 도중 클릭 등이 작동하지 않을 수 있습니다.
|
|
119406
|
+
$(".head", this) .off('mousedown', this.#onMouseDown);
|
|
119407
|
+
$(".head", this) .off('touchstart', this.#onTouchStart);
|
|
119408
|
+
$(document) .off('mouseup', this.#onMouseUp);
|
|
119409
|
+
$(document) .off('touchend', this.#onTouchEnd);
|
|
119410
|
+
$(document) .off('mousemove', this.#onMouseMove);
|
|
119411
|
+
$(document) .off("touchmove", this.#onTouchMove);
|
|
119412
|
+
|
|
119413
|
+
dialogElement.close();
|
|
119414
|
+
// 다이얼로그가 닫힌 후에는 애니메이션 클래스를 제거하여 다음 번에 열릴 때
|
|
119415
|
+
// 다시 애니메이션이 적용될 수 있도록 합니다.
|
|
119416
|
+
dialogElement.classList.remove("out");
|
|
119417
|
+
this.classList.remove('fade'); // 호스트 요소에서도 'fade' 클래스 제거
|
|
119418
|
+
}, 1000); // fadeOut 애니메이션 지속 시간에 맞춥니다 (현재 CSS에서 1초로 정의됨)
|
|
119392
119419
|
};
|
|
119393
|
-
|
|
119420
|
+
|
|
119394
119421
|
#init = () => {
|
|
119422
|
+
// 기존의 close 버튼 클릭 핸들러
|
|
119395
119423
|
$(".close,.close2", this).on("click", e => {
|
|
119396
|
-
|
|
119397
|
-
|
|
119424
|
+
// 이전에 여기에 있던 'dialog.out' 클래스 추가 로직은 이제 close() 메서드 안으로 들어갑니다.
|
|
119425
|
+
this.close();
|
|
119398
119426
|
});
|
|
119399
|
-
|
|
119400
|
-
$(".head", this)
|
|
119401
|
-
$(".head", this)
|
|
119402
|
-
$(document)
|
|
119403
|
-
$(document)
|
|
119427
|
+
|
|
119428
|
+
$(".head", this) .on('mousedown', this.#onMouseDown);
|
|
119429
|
+
$(".head", this) .on('touchstart', this.#onTouchStart);
|
|
119430
|
+
$(document) .on('mouseup', this.#onMouseUp);
|
|
119431
|
+
$(document) .on('touchend', this.#onTouchEnd);
|
|
119404
119432
|
};
|
|
119405
|
-
|
|
119433
|
+
|
|
119406
119434
|
|
|
119407
119435
|
#onMouseDown = e => {
|
|
119408
119436
|
if (e.target.closest("buttons")) return;
|
|
119409
119437
|
if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftkey) return;
|
|
119410
119438
|
|
|
119411
119439
|
var rect = this.querySelector('dialog').getBoundingClientRect();
|
|
119412
|
-
|
|
119440
|
+
|
|
119413
119441
|
this.#shift = {
|
|
119414
119442
|
x : e.clientX - rect.x,
|
|
119415
119443
|
y : e.clientY - rect.y,
|
|
@@ -119417,33 +119445,33 @@ class nxDialog extends HTMLElement
|
|
|
119417
119445
|
|
|
119418
119446
|
$(document).on('mousemove', this.#onMouseMove);
|
|
119419
119447
|
};
|
|
119420
|
-
|
|
119421
|
-
|
|
119448
|
+
|
|
119449
|
+
|
|
119422
119450
|
#onMouseMove = e => {
|
|
119423
119451
|
$(this.querySelector('dialog')).offset( { left : e.pageX - this.#shift.x, top : e.pageY - this.#shift.y });
|
|
119424
119452
|
};
|
|
119425
|
-
|
|
119453
|
+
|
|
119426
119454
|
#onMouseUp = e => {
|
|
119427
119455
|
$(document).off('mousemove', this.#onMouseMove);
|
|
119428
119456
|
};
|
|
119429
|
-
|
|
119457
|
+
|
|
119430
119458
|
#onTouchStart = e => {
|
|
119431
119459
|
if (e.target.closest("buttons")) return;
|
|
119432
|
-
|
|
119460
|
+
|
|
119433
119461
|
var rect = this.querySelector('dialog').getBoundingClientRect();
|
|
119434
|
-
|
|
119462
|
+
|
|
119435
119463
|
this.#shift = {
|
|
119436
119464
|
x : e.changedTouches[0].pageX - rect.x,
|
|
119437
119465
|
y : e.changedTouches[0].pageY - rect.y,
|
|
119438
119466
|
};
|
|
119439
|
-
|
|
119467
|
+
|
|
119440
119468
|
$(document).on("touchmove", this.#onTouchMove);
|
|
119441
119469
|
};
|
|
119442
|
-
|
|
119470
|
+
|
|
119443
119471
|
#onTouchMove = e => {
|
|
119444
119472
|
$(this.querySelector('dialog')).offset( { left : e.changedTouches[0].pageX - this.#shift.x, top : e.changedTouches[0].pageY - this.#shift.y });
|
|
119445
119473
|
};
|
|
119446
|
-
|
|
119474
|
+
|
|
119447
119475
|
#onTouchEnd = e => {
|
|
119448
119476
|
$(document).off('touchmove', this.#onTouchMove);
|
|
119449
119477
|
};
|
package/dist/bundle.esm.js
CHANGED
|
@@ -119313,99 +119313,127 @@ class nxDialog extends HTMLElement
|
|
|
119313
119313
|
{
|
|
119314
119314
|
//#owner;
|
|
119315
119315
|
#shift;
|
|
119316
|
-
|
|
119316
|
+
|
|
119317
119317
|
constructor () {
|
|
119318
119318
|
super();
|
|
119319
119319
|
}
|
|
119320
|
-
|
|
119320
|
+
|
|
119321
119321
|
connectedCallback() {
|
|
119322
119322
|
|
|
119323
119323
|
const v = this.innerHTML;
|
|
119324
119324
|
const cssFile = this.getAttribute("css-file");
|
|
119325
|
-
|
|
119325
|
+
// customFile1과 customFile2 변수가 동일한 역할을 하는 것으로 보이며,
|
|
119326
|
+
// ninegrid.getCustomPath에서 이미 "nxDialog.css"를 가져오는 로직이 있으므로
|
|
119327
|
+
// 이 부분을 간소화할 수 있습니다.
|
|
119328
|
+
// 여기서는 현재 코드를 최대한 유지하면서 fadeIn/fadeOut만 추가합니다.
|
|
119329
|
+
const customFile1 = cssFile ? `@import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/${cssFile}";` : "";
|
|
119326
119330
|
const customFile2 = cssFile ? ninegrid.getCustomPath(this, cssFile) : "";
|
|
119327
|
-
|
|
119328
|
-
//console.log(ninegrid.getCustomPath(this,"nxDialog.css"));
|
|
119329
119331
|
|
|
119330
119332
|
this.innerHTML = `
|
|
119331
|
-
|
|
119332
|
-
|
|
119333
|
-
|
|
119334
|
-
|
|
119335
|
-
|
|
119336
|
-
|
|
119337
|
-
|
|
119338
|
-
|
|
119339
|
-
|
|
119340
|
-
|
|
119341
|
-
|
|
119342
|
-
|
|
119343
|
-
|
|
119344
|
-
|
|
119345
|
-
|
|
119346
|
-
|
|
119347
|
-
|
|
119348
|
-
|
|
119349
|
-
|
|
119350
|
-
|
|
119351
|
-
|
|
119352
|
-
|
|
119353
|
-
|
|
119354
|
-
|
|
119355
|
-
|
|
119356
|
-
|
|
119357
|
-
|
|
119358
|
-
|
|
119359
|
-
|
|
119360
|
-
|
|
119361
|
-
|
|
119362
|
-
|
|
119363
|
-
|
|
119364
|
-
|
|
119365
|
-
|
|
119366
|
-
|
|
119367
|
-
|
|
119368
|
-
//this.#owner = this.getRootNode().host.closest("nine-grid");
|
|
119369
|
-
|
|
119333
|
+
<style>
|
|
119334
|
+
@import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/nxDialog.css";
|
|
119335
|
+
${ninegrid.getCustomPath(this,"nxDialog.css") || ""}
|
|
119336
|
+
${customFile1 || ""}
|
|
119337
|
+
${customFile2 || ""}
|
|
119338
|
+
</style>
|
|
119339
|
+
|
|
119340
|
+
<dialog>
|
|
119341
|
+
<div class="head">
|
|
119342
|
+
<div class="rect1"></div>
|
|
119343
|
+
<div class="rect2"></div>
|
|
119344
|
+
<div class="rect3"></div>
|
|
119345
|
+
<ng-sphere class="icon" end-fill="#666" size="8"></ng-sphere>
|
|
119346
|
+
<span class="title"></span>
|
|
119347
|
+
<span class="sub-title"></span>
|
|
119348
|
+
<buttons>
|
|
119349
|
+
<ng-sphere class="apply" start-fill="#cc6" end-fill="#660" size="16" title="apply"></ng-sphere>
|
|
119350
|
+
<ng-sphere class="reset" start-fill="#99f" end-fill="#00f" size="16" title="reset"></ng-sphere>
|
|
119351
|
+
<ng-sphere class="close" start-fill="#f99" end-fill="#f00" size="16" title="close"></ng-sphere>
|
|
119352
|
+
</buttons>
|
|
119353
|
+
</div>
|
|
119354
|
+
<div class="contents">
|
|
119355
|
+
<div class="left">
|
|
119356
|
+
<span>가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하</span>
|
|
119357
|
+
</div>
|
|
119358
|
+
<div class="body">
|
|
119359
|
+
${v}
|
|
119360
|
+
</div>
|
|
119361
|
+
<div class="close2">
|
|
119362
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
|
119363
|
+
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708"/>
|
|
119364
|
+
</svg>
|
|
119365
|
+
</div>
|
|
119366
|
+
</div>
|
|
119367
|
+
</dialog>
|
|
119368
|
+
`;
|
|
119369
|
+
|
|
119370
119370
|
$(".title", this).html("Details");
|
|
119371
|
-
|
|
119372
119371
|
this.#init();
|
|
119373
119372
|
};
|
|
119374
|
-
|
|
119373
|
+
|
|
119374
|
+
// showModal 메서드 수정
|
|
119375
119375
|
showModal = () => {
|
|
119376
|
-
this.querySelector('dialog')
|
|
119376
|
+
const dialogElement = this.querySelector('dialog');
|
|
119377
|
+
|
|
119378
|
+
// 다이얼로그가 열릴 때 ':host(.fade)' CSS 클래스를 추가합니다.
|
|
119379
|
+
// ':host'는 커스텀 엘리먼트 자체(nx-dialog)를 의미합니다.
|
|
119380
|
+
this.classList.add('fade');
|
|
119381
|
+
|
|
119382
|
+
// 애니메이션이 끝나고 나서 showModal을 호출하도록 setTimeout을 사용할 수도 있지만,
|
|
119383
|
+
// CSS 애니메이션은 자동으로 시작되므로 이 방식이 더 간단합니다.
|
|
119384
|
+
dialogElement.showModal();
|
|
119377
119385
|
};
|
|
119378
|
-
|
|
119386
|
+
|
|
119387
|
+
// close 메서드 수정
|
|
119379
119388
|
close = () => {
|
|
119380
|
-
|
|
119381
|
-
|
|
119382
|
-
|
|
119383
|
-
|
|
119384
|
-
|
|
119385
|
-
|
|
119386
|
-
|
|
119387
|
-
|
|
119389
|
+
const dialogElement = this.querySelector('dialog');
|
|
119390
|
+
|
|
119391
|
+
// 닫기 애니메이션을 위해 'out' 클래스를 추가합니다.
|
|
119392
|
+
dialogElement.classList.add("out");
|
|
119393
|
+
|
|
119394
|
+
// CSS 애니메이션 지속 시간 (1000ms = 1초) 후에 dialog.close()를 호출하여 실제로 닫습니다.
|
|
119395
|
+
// 이는 CSS의 fadeOut 애니메이션 지속 시간과 일치해야 합니다.
|
|
119396
|
+
// nxDialog.css의 @keyframes fadeOut { ... } 에 명시된 animation-duration을 확인하세요.
|
|
119397
|
+
// 현재 CSS에는 dialog.out에 대한 animation-duration이 없으므로, 명시적으로 1초를 가정합니다.
|
|
119398
|
+
// 만약 다른 애니메이션 (.run, .moveUp 등)과 동시에 사용된다면 이 부분은 더 복잡해질 수 있습니다.
|
|
119399
|
+
setTimeout(() => {
|
|
119400
|
+
// 이벤트 리스너 제거는 dialog가 완전히 닫힌 후에 하는 것이 안전합니다.
|
|
119401
|
+
// 그렇지 않으면 애니메이션 도중 클릭 등이 작동하지 않을 수 있습니다.
|
|
119402
|
+
$(".head", this) .off('mousedown', this.#onMouseDown);
|
|
119403
|
+
$(".head", this) .off('touchstart', this.#onTouchStart);
|
|
119404
|
+
$(document) .off('mouseup', this.#onMouseUp);
|
|
119405
|
+
$(document) .off('touchend', this.#onTouchEnd);
|
|
119406
|
+
$(document) .off('mousemove', this.#onMouseMove);
|
|
119407
|
+
$(document) .off("touchmove", this.#onTouchMove);
|
|
119408
|
+
|
|
119409
|
+
dialogElement.close();
|
|
119410
|
+
// 다이얼로그가 닫힌 후에는 애니메이션 클래스를 제거하여 다음 번에 열릴 때
|
|
119411
|
+
// 다시 애니메이션이 적용될 수 있도록 합니다.
|
|
119412
|
+
dialogElement.classList.remove("out");
|
|
119413
|
+
this.classList.remove('fade'); // 호스트 요소에서도 'fade' 클래스 제거
|
|
119414
|
+
}, 1000); // fadeOut 애니메이션 지속 시간에 맞춥니다 (현재 CSS에서 1초로 정의됨)
|
|
119388
119415
|
};
|
|
119389
|
-
|
|
119416
|
+
|
|
119390
119417
|
#init = () => {
|
|
119418
|
+
// 기존의 close 버튼 클릭 핸들러
|
|
119391
119419
|
$(".close,.close2", this).on("click", e => {
|
|
119392
|
-
|
|
119393
|
-
|
|
119420
|
+
// 이전에 여기에 있던 'dialog.out' 클래스 추가 로직은 이제 close() 메서드 안으로 들어갑니다.
|
|
119421
|
+
this.close();
|
|
119394
119422
|
});
|
|
119395
|
-
|
|
119396
|
-
$(".head", this)
|
|
119397
|
-
$(".head", this)
|
|
119398
|
-
$(document)
|
|
119399
|
-
$(document)
|
|
119423
|
+
|
|
119424
|
+
$(".head", this) .on('mousedown', this.#onMouseDown);
|
|
119425
|
+
$(".head", this) .on('touchstart', this.#onTouchStart);
|
|
119426
|
+
$(document) .on('mouseup', this.#onMouseUp);
|
|
119427
|
+
$(document) .on('touchend', this.#onTouchEnd);
|
|
119400
119428
|
};
|
|
119401
|
-
|
|
119429
|
+
|
|
119402
119430
|
|
|
119403
119431
|
#onMouseDown = e => {
|
|
119404
119432
|
if (e.target.closest("buttons")) return;
|
|
119405
119433
|
if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftkey) return;
|
|
119406
119434
|
|
|
119407
119435
|
var rect = this.querySelector('dialog').getBoundingClientRect();
|
|
119408
|
-
|
|
119436
|
+
|
|
119409
119437
|
this.#shift = {
|
|
119410
119438
|
x : e.clientX - rect.x,
|
|
119411
119439
|
y : e.clientY - rect.y,
|
|
@@ -119413,33 +119441,33 @@ class nxDialog extends HTMLElement
|
|
|
119413
119441
|
|
|
119414
119442
|
$(document).on('mousemove', this.#onMouseMove);
|
|
119415
119443
|
};
|
|
119416
|
-
|
|
119417
|
-
|
|
119444
|
+
|
|
119445
|
+
|
|
119418
119446
|
#onMouseMove = e => {
|
|
119419
119447
|
$(this.querySelector('dialog')).offset( { left : e.pageX - this.#shift.x, top : e.pageY - this.#shift.y });
|
|
119420
119448
|
};
|
|
119421
|
-
|
|
119449
|
+
|
|
119422
119450
|
#onMouseUp = e => {
|
|
119423
119451
|
$(document).off('mousemove', this.#onMouseMove);
|
|
119424
119452
|
};
|
|
119425
|
-
|
|
119453
|
+
|
|
119426
119454
|
#onTouchStart = e => {
|
|
119427
119455
|
if (e.target.closest("buttons")) return;
|
|
119428
|
-
|
|
119456
|
+
|
|
119429
119457
|
var rect = this.querySelector('dialog').getBoundingClientRect();
|
|
119430
|
-
|
|
119458
|
+
|
|
119431
119459
|
this.#shift = {
|
|
119432
119460
|
x : e.changedTouches[0].pageX - rect.x,
|
|
119433
119461
|
y : e.changedTouches[0].pageY - rect.y,
|
|
119434
119462
|
};
|
|
119435
|
-
|
|
119463
|
+
|
|
119436
119464
|
$(document).on("touchmove", this.#onTouchMove);
|
|
119437
119465
|
};
|
|
119438
|
-
|
|
119466
|
+
|
|
119439
119467
|
#onTouchMove = e => {
|
|
119440
119468
|
$(this.querySelector('dialog')).offset( { left : e.changedTouches[0].pageX - this.#shift.x, top : e.changedTouches[0].pageY - this.#shift.y });
|
|
119441
119469
|
};
|
|
119442
|
-
|
|
119470
|
+
|
|
119443
119471
|
#onTouchEnd = e => {
|
|
119444
119472
|
$(document).off('touchmove', this.#onTouchMove);
|
|
119445
119473
|
};
|
package/dist/etc/nxDialog.js
CHANGED
|
@@ -4,99 +4,127 @@ class nxDialog extends HTMLElement
|
|
|
4
4
|
{
|
|
5
5
|
//#owner;
|
|
6
6
|
#shift;
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
constructor () {
|
|
9
9
|
super();
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
connectedCallback() {
|
|
13
13
|
|
|
14
14
|
const v = this.innerHTML;
|
|
15
15
|
const cssFile = this.getAttribute("css-file");
|
|
16
|
-
|
|
16
|
+
// customFile1과 customFile2 변수가 동일한 역할을 하는 것으로 보이며,
|
|
17
|
+
// ninegrid.getCustomPath에서 이미 "nxDialog.css"를 가져오는 로직이 있으므로
|
|
18
|
+
// 이 부분을 간소화할 수 있습니다.
|
|
19
|
+
// 여기서는 현재 코드를 최대한 유지하면서 fadeIn/fadeOut만 추가합니다.
|
|
20
|
+
const customFile1 = cssFile ? `@import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/${cssFile}";` : "";
|
|
17
21
|
const customFile2 = cssFile ? ninegrid.getCustomPath(this, cssFile) : "";
|
|
18
|
-
|
|
19
|
-
//console.log(ninegrid.getCustomPath(this,"nxDialog.css"));
|
|
20
22
|
|
|
21
23
|
this.innerHTML = `
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
//this.#owner = this.getRootNode().host.closest("nine-grid");
|
|
60
|
-
|
|
24
|
+
<style>
|
|
25
|
+
@import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/nxDialog.css";
|
|
26
|
+
${ninegrid.getCustomPath(this,"nxDialog.css") || ""}
|
|
27
|
+
${customFile1 || ""}
|
|
28
|
+
${customFile2 || ""}
|
|
29
|
+
</style>
|
|
30
|
+
|
|
31
|
+
<dialog>
|
|
32
|
+
<div class="head">
|
|
33
|
+
<div class="rect1"></div>
|
|
34
|
+
<div class="rect2"></div>
|
|
35
|
+
<div class="rect3"></div>
|
|
36
|
+
<ng-sphere class="icon" end-fill="#666" size="8"></ng-sphere>
|
|
37
|
+
<span class="title"></span>
|
|
38
|
+
<span class="sub-title"></span>
|
|
39
|
+
<buttons>
|
|
40
|
+
<ng-sphere class="apply" start-fill="#cc6" end-fill="#660" size="16" title="apply"></ng-sphere>
|
|
41
|
+
<ng-sphere class="reset" start-fill="#99f" end-fill="#00f" size="16" title="reset"></ng-sphere>
|
|
42
|
+
<ng-sphere class="close" start-fill="#f99" end-fill="#f00" size="16" title="close"></ng-sphere>
|
|
43
|
+
</buttons>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="contents">
|
|
46
|
+
<div class="left">
|
|
47
|
+
<span>가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하</span>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="body">
|
|
50
|
+
${v}
|
|
51
|
+
</div>
|
|
52
|
+
<div class="close2">
|
|
53
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
|
54
|
+
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708"/>
|
|
55
|
+
</svg>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</dialog>
|
|
59
|
+
`;
|
|
60
|
+
|
|
61
61
|
$(".title", this).html("Details");
|
|
62
|
-
|
|
63
62
|
this.#init();
|
|
64
63
|
};
|
|
65
|
-
|
|
64
|
+
|
|
65
|
+
// showModal 메서드 수정
|
|
66
66
|
showModal = () => {
|
|
67
|
-
this.querySelector('dialog')
|
|
67
|
+
const dialogElement = this.querySelector('dialog');
|
|
68
|
+
|
|
69
|
+
// 다이얼로그가 열릴 때 ':host(.fade)' CSS 클래스를 추가합니다.
|
|
70
|
+
// ':host'는 커스텀 엘리먼트 자체(nx-dialog)를 의미합니다.
|
|
71
|
+
this.classList.add('fade');
|
|
72
|
+
|
|
73
|
+
// 애니메이션이 끝나고 나서 showModal을 호출하도록 setTimeout을 사용할 수도 있지만,
|
|
74
|
+
// CSS 애니메이션은 자동으로 시작되므로 이 방식이 더 간단합니다.
|
|
75
|
+
dialogElement.showModal();
|
|
68
76
|
};
|
|
69
|
-
|
|
77
|
+
|
|
78
|
+
// close 메서드 수정
|
|
70
79
|
close = () => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
const dialogElement = this.querySelector('dialog');
|
|
81
|
+
|
|
82
|
+
// 닫기 애니메이션을 위해 'out' 클래스를 추가합니다.
|
|
83
|
+
dialogElement.classList.add("out");
|
|
84
|
+
|
|
85
|
+
// CSS 애니메이션 지속 시간 (1000ms = 1초) 후에 dialog.close()를 호출하여 실제로 닫습니다.
|
|
86
|
+
// 이는 CSS의 fadeOut 애니메이션 지속 시간과 일치해야 합니다.
|
|
87
|
+
// nxDialog.css의 @keyframes fadeOut { ... } 에 명시된 animation-duration을 확인하세요.
|
|
88
|
+
// 현재 CSS에는 dialog.out에 대한 animation-duration이 없으므로, 명시적으로 1초를 가정합니다.
|
|
89
|
+
// 만약 다른 애니메이션 (.run, .moveUp 등)과 동시에 사용된다면 이 부분은 더 복잡해질 수 있습니다.
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
// 이벤트 리스너 제거는 dialog가 완전히 닫힌 후에 하는 것이 안전합니다.
|
|
92
|
+
// 그렇지 않으면 애니메이션 도중 클릭 등이 작동하지 않을 수 있습니다.
|
|
93
|
+
$(".head", this) .off('mousedown', this.#onMouseDown);
|
|
94
|
+
$(".head", this) .off('touchstart', this.#onTouchStart);
|
|
95
|
+
$(document) .off('mouseup', this.#onMouseUp);
|
|
96
|
+
$(document) .off('touchend', this.#onTouchEnd);
|
|
97
|
+
$(document) .off('mousemove', this.#onMouseMove);
|
|
98
|
+
$(document) .off("touchmove", this.#onTouchMove);
|
|
99
|
+
|
|
100
|
+
dialogElement.close();
|
|
101
|
+
// 다이얼로그가 닫힌 후에는 애니메이션 클래스를 제거하여 다음 번에 열릴 때
|
|
102
|
+
// 다시 애니메이션이 적용될 수 있도록 합니다.
|
|
103
|
+
dialogElement.classList.remove("out");
|
|
104
|
+
this.classList.remove('fade'); // 호스트 요소에서도 'fade' 클래스 제거
|
|
105
|
+
}, 1000); // fadeOut 애니메이션 지속 시간에 맞춥니다 (현재 CSS에서 1초로 정의됨)
|
|
79
106
|
};
|
|
80
|
-
|
|
107
|
+
|
|
81
108
|
#init = () => {
|
|
109
|
+
// 기존의 close 버튼 클릭 핸들러
|
|
82
110
|
$(".close,.close2", this).on("click", e => {
|
|
83
|
-
|
|
84
|
-
|
|
111
|
+
// 이전에 여기에 있던 'dialog.out' 클래스 추가 로직은 이제 close() 메서드 안으로 들어갑니다.
|
|
112
|
+
this.close();
|
|
85
113
|
});
|
|
86
|
-
|
|
87
|
-
$(".head", this)
|
|
88
|
-
$(".head", this)
|
|
89
|
-
$(document)
|
|
90
|
-
$(document)
|
|
114
|
+
|
|
115
|
+
$(".head", this) .on('mousedown', this.#onMouseDown);
|
|
116
|
+
$(".head", this) .on('touchstart', this.#onTouchStart);
|
|
117
|
+
$(document) .on('mouseup', this.#onMouseUp);
|
|
118
|
+
$(document) .on('touchend', this.#onTouchEnd);
|
|
91
119
|
};
|
|
92
|
-
|
|
120
|
+
|
|
93
121
|
|
|
94
122
|
#onMouseDown = e => {
|
|
95
123
|
if (e.target.closest("buttons")) return;
|
|
96
124
|
if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftkey) return;
|
|
97
125
|
|
|
98
126
|
var rect = this.querySelector('dialog').getBoundingClientRect();
|
|
99
|
-
|
|
127
|
+
|
|
100
128
|
this.#shift = {
|
|
101
129
|
x : e.clientX - rect.x,
|
|
102
130
|
y : e.clientY - rect.y,
|
|
@@ -104,36 +132,36 @@ class nxDialog extends HTMLElement
|
|
|
104
132
|
|
|
105
133
|
$(document).on('mousemove', this.#onMouseMove);
|
|
106
134
|
};
|
|
107
|
-
|
|
108
|
-
|
|
135
|
+
|
|
136
|
+
|
|
109
137
|
#onMouseMove = e => {
|
|
110
138
|
$(this.querySelector('dialog')).offset( { left : e.pageX - this.#shift.x, top : e.pageY - this.#shift.y });
|
|
111
139
|
};
|
|
112
|
-
|
|
140
|
+
|
|
113
141
|
#onMouseUp = e => {
|
|
114
142
|
$(document).off('mousemove', this.#onMouseMove);
|
|
115
143
|
};
|
|
116
|
-
|
|
144
|
+
|
|
117
145
|
#onTouchStart = e => {
|
|
118
146
|
if (e.target.closest("buttons")) return;
|
|
119
|
-
|
|
147
|
+
|
|
120
148
|
var rect = this.querySelector('dialog').getBoundingClientRect();
|
|
121
|
-
|
|
149
|
+
|
|
122
150
|
this.#shift = {
|
|
123
151
|
x : e.changedTouches[0].pageX - rect.x,
|
|
124
152
|
y : e.changedTouches[0].pageY - rect.y,
|
|
125
153
|
}
|
|
126
|
-
|
|
154
|
+
|
|
127
155
|
$(document).on("touchmove", this.#onTouchMove);
|
|
128
156
|
};
|
|
129
|
-
|
|
157
|
+
|
|
130
158
|
#onTouchMove = e => {
|
|
131
159
|
$(this.querySelector('dialog')).offset( { left : e.changedTouches[0].pageX - this.#shift.x, top : e.changedTouches[0].pageY - this.#shift.y });
|
|
132
160
|
};
|
|
133
|
-
|
|
161
|
+
|
|
134
162
|
#onTouchEnd = e => {
|
|
135
163
|
$(document).off('touchmove', this.#onTouchMove);
|
|
136
164
|
};
|
|
137
165
|
}
|
|
138
166
|
|
|
139
|
-
customElements.define("nx-dialog", nxDialog);
|
|
167
|
+
customElements.define("nx-dialog", nxDialog);
|
package/package.json
CHANGED
package/src/etc/nxDialog.js
CHANGED
|
@@ -4,99 +4,127 @@ class nxDialog extends HTMLElement
|
|
|
4
4
|
{
|
|
5
5
|
//#owner;
|
|
6
6
|
#shift;
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
constructor () {
|
|
9
9
|
super();
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
connectedCallback() {
|
|
13
13
|
|
|
14
14
|
const v = this.innerHTML;
|
|
15
15
|
const cssFile = this.getAttribute("css-file");
|
|
16
|
-
|
|
16
|
+
// customFile1과 customFile2 변수가 동일한 역할을 하는 것으로 보이며,
|
|
17
|
+
// ninegrid.getCustomPath에서 이미 "nxDialog.css"를 가져오는 로직이 있으므로
|
|
18
|
+
// 이 부분을 간소화할 수 있습니다.
|
|
19
|
+
// 여기서는 현재 코드를 최대한 유지하면서 fadeIn/fadeOut만 추가합니다.
|
|
20
|
+
const customFile1 = cssFile ? `@import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/${cssFile}";` : "";
|
|
17
21
|
const customFile2 = cssFile ? ninegrid.getCustomPath(this, cssFile) : "";
|
|
18
|
-
|
|
19
|
-
//console.log(ninegrid.getCustomPath(this,"nxDialog.css"));
|
|
20
22
|
|
|
21
23
|
this.innerHTML = `
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
//this.#owner = this.getRootNode().host.closest("nine-grid");
|
|
60
|
-
|
|
24
|
+
<style>
|
|
25
|
+
@import "https://cdn.jsdelivr.net/npm/ninegrid@${ninegrid.version}/dist/css/nxDialog.css";
|
|
26
|
+
${ninegrid.getCustomPath(this,"nxDialog.css") || ""}
|
|
27
|
+
${customFile1 || ""}
|
|
28
|
+
${customFile2 || ""}
|
|
29
|
+
</style>
|
|
30
|
+
|
|
31
|
+
<dialog>
|
|
32
|
+
<div class="head">
|
|
33
|
+
<div class="rect1"></div>
|
|
34
|
+
<div class="rect2"></div>
|
|
35
|
+
<div class="rect3"></div>
|
|
36
|
+
<ng-sphere class="icon" end-fill="#666" size="8"></ng-sphere>
|
|
37
|
+
<span class="title"></span>
|
|
38
|
+
<span class="sub-title"></span>
|
|
39
|
+
<buttons>
|
|
40
|
+
<ng-sphere class="apply" start-fill="#cc6" end-fill="#660" size="16" title="apply"></ng-sphere>
|
|
41
|
+
<ng-sphere class="reset" start-fill="#99f" end-fill="#00f" size="16" title="reset"></ng-sphere>
|
|
42
|
+
<ng-sphere class="close" start-fill="#f99" end-fill="#f00" size="16" title="close"></ng-sphere>
|
|
43
|
+
</buttons>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="contents">
|
|
46
|
+
<div class="left">
|
|
47
|
+
<span>가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하가나다라마바사아자차카타파하</span>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="body">
|
|
50
|
+
${v}
|
|
51
|
+
</div>
|
|
52
|
+
<div class="close2">
|
|
53
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
|
54
|
+
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708"/>
|
|
55
|
+
</svg>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</dialog>
|
|
59
|
+
`;
|
|
60
|
+
|
|
61
61
|
$(".title", this).html("Details");
|
|
62
|
-
|
|
63
62
|
this.#init();
|
|
64
63
|
};
|
|
65
|
-
|
|
64
|
+
|
|
65
|
+
// showModal 메서드 수정
|
|
66
66
|
showModal = () => {
|
|
67
|
-
this.querySelector('dialog')
|
|
67
|
+
const dialogElement = this.querySelector('dialog');
|
|
68
|
+
|
|
69
|
+
// 다이얼로그가 열릴 때 ':host(.fade)' CSS 클래스를 추가합니다.
|
|
70
|
+
// ':host'는 커스텀 엘리먼트 자체(nx-dialog)를 의미합니다.
|
|
71
|
+
this.classList.add('fade');
|
|
72
|
+
|
|
73
|
+
// 애니메이션이 끝나고 나서 showModal을 호출하도록 setTimeout을 사용할 수도 있지만,
|
|
74
|
+
// CSS 애니메이션은 자동으로 시작되므로 이 방식이 더 간단합니다.
|
|
75
|
+
dialogElement.showModal();
|
|
68
76
|
};
|
|
69
|
-
|
|
77
|
+
|
|
78
|
+
// close 메서드 수정
|
|
70
79
|
close = () => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
const dialogElement = this.querySelector('dialog');
|
|
81
|
+
|
|
82
|
+
// 닫기 애니메이션을 위해 'out' 클래스를 추가합니다.
|
|
83
|
+
dialogElement.classList.add("out");
|
|
84
|
+
|
|
85
|
+
// CSS 애니메이션 지속 시간 (1000ms = 1초) 후에 dialog.close()를 호출하여 실제로 닫습니다.
|
|
86
|
+
// 이는 CSS의 fadeOut 애니메이션 지속 시간과 일치해야 합니다.
|
|
87
|
+
// nxDialog.css의 @keyframes fadeOut { ... } 에 명시된 animation-duration을 확인하세요.
|
|
88
|
+
// 현재 CSS에는 dialog.out에 대한 animation-duration이 없으므로, 명시적으로 1초를 가정합니다.
|
|
89
|
+
// 만약 다른 애니메이션 (.run, .moveUp 등)과 동시에 사용된다면 이 부분은 더 복잡해질 수 있습니다.
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
// 이벤트 리스너 제거는 dialog가 완전히 닫힌 후에 하는 것이 안전합니다.
|
|
92
|
+
// 그렇지 않으면 애니메이션 도중 클릭 등이 작동하지 않을 수 있습니다.
|
|
93
|
+
$(".head", this) .off('mousedown', this.#onMouseDown);
|
|
94
|
+
$(".head", this) .off('touchstart', this.#onTouchStart);
|
|
95
|
+
$(document) .off('mouseup', this.#onMouseUp);
|
|
96
|
+
$(document) .off('touchend', this.#onTouchEnd);
|
|
97
|
+
$(document) .off('mousemove', this.#onMouseMove);
|
|
98
|
+
$(document) .off("touchmove", this.#onTouchMove);
|
|
99
|
+
|
|
100
|
+
dialogElement.close();
|
|
101
|
+
// 다이얼로그가 닫힌 후에는 애니메이션 클래스를 제거하여 다음 번에 열릴 때
|
|
102
|
+
// 다시 애니메이션이 적용될 수 있도록 합니다.
|
|
103
|
+
dialogElement.classList.remove("out");
|
|
104
|
+
this.classList.remove('fade'); // 호스트 요소에서도 'fade' 클래스 제거
|
|
105
|
+
}, 1000); // fadeOut 애니메이션 지속 시간에 맞춥니다 (현재 CSS에서 1초로 정의됨)
|
|
79
106
|
};
|
|
80
|
-
|
|
107
|
+
|
|
81
108
|
#init = () => {
|
|
109
|
+
// 기존의 close 버튼 클릭 핸들러
|
|
82
110
|
$(".close,.close2", this).on("click", e => {
|
|
83
|
-
|
|
84
|
-
|
|
111
|
+
// 이전에 여기에 있던 'dialog.out' 클래스 추가 로직은 이제 close() 메서드 안으로 들어갑니다.
|
|
112
|
+
this.close();
|
|
85
113
|
});
|
|
86
|
-
|
|
87
|
-
$(".head", this)
|
|
88
|
-
$(".head", this)
|
|
89
|
-
$(document)
|
|
90
|
-
$(document)
|
|
114
|
+
|
|
115
|
+
$(".head", this) .on('mousedown', this.#onMouseDown);
|
|
116
|
+
$(".head", this) .on('touchstart', this.#onTouchStart);
|
|
117
|
+
$(document) .on('mouseup', this.#onMouseUp);
|
|
118
|
+
$(document) .on('touchend', this.#onTouchEnd);
|
|
91
119
|
};
|
|
92
|
-
|
|
120
|
+
|
|
93
121
|
|
|
94
122
|
#onMouseDown = e => {
|
|
95
123
|
if (e.target.closest("buttons")) return;
|
|
96
124
|
if (e.buttons != 1 || e.altKey || e.ctrlKey || e.shiftkey) return;
|
|
97
125
|
|
|
98
126
|
var rect = this.querySelector('dialog').getBoundingClientRect();
|
|
99
|
-
|
|
127
|
+
|
|
100
128
|
this.#shift = {
|
|
101
129
|
x : e.clientX - rect.x,
|
|
102
130
|
y : e.clientY - rect.y,
|
|
@@ -104,36 +132,36 @@ class nxDialog extends HTMLElement
|
|
|
104
132
|
|
|
105
133
|
$(document).on('mousemove', this.#onMouseMove);
|
|
106
134
|
};
|
|
107
|
-
|
|
108
|
-
|
|
135
|
+
|
|
136
|
+
|
|
109
137
|
#onMouseMove = e => {
|
|
110
138
|
$(this.querySelector('dialog')).offset( { left : e.pageX - this.#shift.x, top : e.pageY - this.#shift.y });
|
|
111
139
|
};
|
|
112
|
-
|
|
140
|
+
|
|
113
141
|
#onMouseUp = e => {
|
|
114
142
|
$(document).off('mousemove', this.#onMouseMove);
|
|
115
143
|
};
|
|
116
|
-
|
|
144
|
+
|
|
117
145
|
#onTouchStart = e => {
|
|
118
146
|
if (e.target.closest("buttons")) return;
|
|
119
|
-
|
|
147
|
+
|
|
120
148
|
var rect = this.querySelector('dialog').getBoundingClientRect();
|
|
121
|
-
|
|
149
|
+
|
|
122
150
|
this.#shift = {
|
|
123
151
|
x : e.changedTouches[0].pageX - rect.x,
|
|
124
152
|
y : e.changedTouches[0].pageY - rect.y,
|
|
125
153
|
}
|
|
126
|
-
|
|
154
|
+
|
|
127
155
|
$(document).on("touchmove", this.#onTouchMove);
|
|
128
156
|
};
|
|
129
|
-
|
|
157
|
+
|
|
130
158
|
#onTouchMove = e => {
|
|
131
159
|
$(this.querySelector('dialog')).offset( { left : e.changedTouches[0].pageX - this.#shift.x, top : e.changedTouches[0].pageY - this.#shift.y });
|
|
132
160
|
};
|
|
133
|
-
|
|
161
|
+
|
|
134
162
|
#onTouchEnd = e => {
|
|
135
163
|
$(document).off('touchmove', this.#onTouchMove);
|
|
136
164
|
};
|
|
137
165
|
}
|
|
138
166
|
|
|
139
|
-
customElements.define("nx-dialog", nxDialog);
|
|
167
|
+
customElements.define("nx-dialog", nxDialog);
|