sync
This commit is contained in:
@ -39,16 +39,17 @@ function trimPx(px) {
|
||||
}
|
||||
|
||||
export class Popup {
|
||||
#mask;
|
||||
#option;
|
||||
#bounds;
|
||||
// #cursor;
|
||||
_var = {};
|
||||
// _var.mask;
|
||||
// _var.option;
|
||||
// _var.bounds;
|
||||
// _var.cursor;
|
||||
|
||||
constructor(opts = {}) {
|
||||
this.#option = opts;
|
||||
this._var.option = opts;
|
||||
}
|
||||
|
||||
get container() { return this.#mask.querySelector('.ui-popup-container') }
|
||||
get container() { return this._var.mask.querySelector('.ui-popup-container') }
|
||||
|
||||
get rect() {
|
||||
const container = this.container;
|
||||
@ -57,7 +58,7 @@ export class Popup {
|
||||
}
|
||||
const style = global.getComputedStyle(container);
|
||||
const collapsed = container.classList.contains('ui-popup-collapse');
|
||||
const bounds = this.#bounds;
|
||||
const bounds = this._var.bounds;
|
||||
return {
|
||||
collapsed,
|
||||
left: trimPx(style.left),
|
||||
@ -81,7 +82,7 @@ export class Popup {
|
||||
const collapse = container.querySelector('.ui-popup-header-icons>.icon-expand');
|
||||
if (r.collapsed === true) {
|
||||
css.push('width: 160px', 'height: 40px');
|
||||
this.#bounds = r;
|
||||
this._var.bounds = r;
|
||||
container.classList.add('ui-popup-collapse');
|
||||
if (collapse != null) {
|
||||
changeIcon(collapse, 'fa-regular', 'expand-alt');
|
||||
@ -94,7 +95,7 @@ export class Popup {
|
||||
css.push(`height: ${r.height}px`);
|
||||
}
|
||||
container.classList.remove('ui-popup-collapse');
|
||||
this.#bounds = null;
|
||||
this._var.bounds = null;
|
||||
if (collapse != null) {
|
||||
changeIcon(collapse, 'fa-regular', 'compress-alt');
|
||||
}
|
||||
@ -105,7 +106,7 @@ export class Popup {
|
||||
}
|
||||
|
||||
close(animation = true) {
|
||||
const mask = this.#mask;
|
||||
const mask = this._var.mask;
|
||||
if (animation) {
|
||||
mask.classList.add('ui-popup-active');
|
||||
mask.style.opacity = 0;
|
||||
@ -113,17 +114,17 @@ export class Popup {
|
||||
} else {
|
||||
mask.remove();
|
||||
}
|
||||
if (typeof this.#option.onMasking === 'function') {
|
||||
this.#option.onMasking.call(this, false);
|
||||
if (typeof this._var.option.onMasking === 'function') {
|
||||
this._var.option.onMasking.call(this, false);
|
||||
}
|
||||
if (typeof this.#option.resolve === 'function') {
|
||||
this.#option.resolve();
|
||||
if (typeof this._var.option.resolve === 'function') {
|
||||
this._var.option.resolve();
|
||||
}
|
||||
}
|
||||
|
||||
create() {
|
||||
const mask = createElement('div', 'ui-popup-mask');
|
||||
const option = this.#option;
|
||||
const option = this._var.option;
|
||||
if (option.mask === false) {
|
||||
mask.classList.add('ui-popup-transparent');
|
||||
} else if (typeof option.onMasking === 'function') {
|
||||
@ -135,7 +136,7 @@ export class Popup {
|
||||
const container = createElement('div', 'ui-popup-container');
|
||||
if (option.changeZIndex === true) {
|
||||
container.addEventListener('mousedown', () => {
|
||||
const masks = [...this.#mask.parentElement.children].filter(e => e.classList.contains('ui-popup-mask'));
|
||||
const masks = [...this._var.mask.parentElement.children].filter(e => e.classList.contains('ui-popup-mask'));
|
||||
let max = 200;
|
||||
masks.forEach(m => {
|
||||
let index;
|
||||
@ -223,16 +224,16 @@ export class Popup {
|
||||
});
|
||||
collapse.addEventListener('click', () => {
|
||||
if (container.classList.contains('ui-popup-collapse')) {
|
||||
const bounds = this.#bounds;
|
||||
const bounds = this._var.bounds;
|
||||
if (bounds != null) {
|
||||
container.style.cssText += `width: ${bounds.width}px; height: ${bounds.height}px`;
|
||||
this.#bounds = null;
|
||||
this._var.bounds = null;
|
||||
}
|
||||
container.classList.remove('ui-popup-collapse');
|
||||
changeIcon(collapse, 'fa-regular', 'compress-alt');
|
||||
} else {
|
||||
const rect = this.rect;
|
||||
this.#bounds = rect;
|
||||
this._var.bounds = rect;
|
||||
container.style.cssText += `width: 160px; height: 40px`;
|
||||
container.classList.add('ui-popup-collapse');
|
||||
changeIcon(collapse, 'fa-regular', 'expand-alt');
|
||||
@ -310,40 +311,40 @@ export class Popup {
|
||||
container.append(
|
||||
createElement('layer', layer => {
|
||||
layer.className = 'ui-popup-border ui-popup-border-right';
|
||||
layer.addEventListener('mousedown', e => this.#resize(ResizeMods.right, e));
|
||||
layer.addEventListener('mousedown', e => this._resize(ResizeMods.right, e));
|
||||
}),
|
||||
createElement('layer', layer => {
|
||||
layer.className = 'ui-popup-border ui-popup-border-bottom';
|
||||
layer.addEventListener('mousedown', e => this.#resize(ResizeMods.bottom, e));
|
||||
layer.addEventListener('mousedown', e => this._resize(ResizeMods.bottom, e));
|
||||
}),
|
||||
createElement('layer', layer => {
|
||||
layer.className = 'ui-popup-border ui-popup-border-left';
|
||||
layer.addEventListener('mousedown', e => this.#resize(ResizeMods.left, e));
|
||||
layer.addEventListener('mousedown', e => this._resize(ResizeMods.left, e));
|
||||
}),
|
||||
createElement('layer', layer => {
|
||||
layer.className = 'ui-popup-border ui-popup-border-top';
|
||||
layer.addEventListener('mousedown', e => this.#resize(ResizeMods.top, e));
|
||||
layer.addEventListener('mousedown', e => this._resize(ResizeMods.top, e));
|
||||
}),
|
||||
createElement('layer', layer => {
|
||||
layer.className = 'ui-popup-border ui-popup-border-bottom-right';
|
||||
layer.addEventListener('mousedown', e => this.#resize(ResizeMods.bottomRight, e));
|
||||
layer.addEventListener('mousedown', e => this._resize(ResizeMods.bottomRight, e));
|
||||
}),
|
||||
createElement('layer', layer => {
|
||||
layer.className = 'ui-popup-border ui-popup-border-bottom-left';
|
||||
layer.addEventListener('mousedown', e => this.#resize(ResizeMods.bottomLeft, e));
|
||||
layer.addEventListener('mousedown', e => this._resize(ResizeMods.bottomLeft, e));
|
||||
}),
|
||||
createElement('layer', layer => {
|
||||
layer.className = 'ui-popup-border ui-popup-border-top-left';
|
||||
layer.addEventListener('mousedown', e => this.#resize(ResizeMods.topLeft, e));
|
||||
layer.addEventListener('mousedown', e => this._resize(ResizeMods.topLeft, e));
|
||||
}),
|
||||
createElement('layer', layer => {
|
||||
layer.className = 'ui-popup-border ui-popup-border-top-right';
|
||||
layer.addEventListener('mousedown', e => this.#resize(ResizeMods.topRight, e));
|
||||
layer.addEventListener('mousedown', e => this._resize(ResizeMods.topRight, e));
|
||||
})
|
||||
)
|
||||
}
|
||||
mask.appendChild(container);
|
||||
this.#mask = mask;
|
||||
this._var.mask = mask;
|
||||
return mask;
|
||||
}
|
||||
|
||||
@ -351,7 +352,7 @@ export class Popup {
|
||||
if (parent == null) {
|
||||
return;
|
||||
}
|
||||
let mask = this.#mask ?? this.create();
|
||||
let mask = this._var.mask ?? this.create();
|
||||
// const exists = [...parent.children].filter(e => e.classList.contains('ui-popup-mask'));
|
||||
const exists = parent.querySelectorAll('.ui-popup-mask');
|
||||
let zindex = 0;
|
||||
@ -365,7 +366,7 @@ export class Popup {
|
||||
mask.style.zIndex = String(zindex + 1);
|
||||
}
|
||||
parent.appendChild(mask);
|
||||
if (this.#option.mask === false) {
|
||||
if (this._var.option.mask === false) {
|
||||
// calculator position
|
||||
const container = this.container;
|
||||
container.style.left = String((parent.offsetWidth - container.offsetWidth) / 2) + 'px';
|
||||
@ -380,9 +381,9 @@ export class Popup {
|
||||
});
|
||||
}
|
||||
|
||||
get loading() { return this.#mask?.querySelector('.ui-popup-body>.ui-popup-loading')?.style?.visibility === 'visible' }
|
||||
get loading() { return this._var.mask?.querySelector('.ui-popup-body>.ui-popup-loading')?.style?.visibility === 'visible' }
|
||||
set loading(flag) {
|
||||
let loading = this.#mask?.querySelector('.ui-popup-body>.ui-popup-loading');
|
||||
let loading = this._var.mask?.querySelector('.ui-popup-body>.ui-popup-loading');
|
||||
if (loading == null) {
|
||||
return;
|
||||
}
|
||||
@ -395,17 +396,17 @@ export class Popup {
|
||||
}
|
||||
}
|
||||
|
||||
#resize(mod, e) {
|
||||
_resize(mod, e) {
|
||||
if (e.buttons !== 1) {
|
||||
return;
|
||||
}
|
||||
const container = this.container;
|
||||
const option = this.#option;
|
||||
const option = this._var.option;
|
||||
if (typeof option.onResizeStarted === 'function') {
|
||||
option.onResizeStarted.call(this);
|
||||
}
|
||||
const mask = this.#mask;
|
||||
// this.#cursor = mask.style.cursor;
|
||||
const mask = this._var.mask;
|
||||
// this._var.cursor = mask.style.cursor;
|
||||
// mask.style.cursor = Cursors[mod];
|
||||
const originalX = e.clientX;
|
||||
const originalY = e.clientY;
|
||||
@ -471,7 +472,7 @@ export class Popup {
|
||||
const up = () => {
|
||||
parent.removeEventListener('mousemove', move, { passive: false });
|
||||
parent.removeEventListener('mouseup', up);
|
||||
// mask.style.cursor = this.#cursor;
|
||||
// mask.style.cursor = this._var.cursor;
|
||||
if (resized === true && typeof option.onResizeEnded === 'function') {
|
||||
option.onResizeEnded.call(this);
|
||||
}
|
||||
|
Reference in New Issue
Block a user