UNPKG

@web-atoms/core-docs

Version:
118 lines 4.96 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; (function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "../../core/Colors", "../../di/DISingleton", "../controls/AtomControl", "../styles/AtomStyle"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PopupStyle = void 0; const Colors_1 = require("../../core/Colors"); const DISingleton_1 = require("../../di/DISingleton"); const AtomControl_1 = require("../controls/AtomControl"); const AtomStyle_1 = require("../styles/AtomStyle"); const containerKey = Symbol("popupContainer"); class PopupStyle extends AtomStyle_1.AtomStyle { get root() { return { padding: "5px", backgroundColor: Colors_1.default.white, border: "solid 1px lightgray", borderRadius: "5px", boxShadow: "rgba(50, 50, 105, 0.15) 0px 2px 5px 0px, rgba(0, 0, 0, 0.05) 0px 1px 1px 0px;", display: "inline-block" }; } } exports.PopupStyle = PopupStyle; class PopupContainer extends AtomControl_1.AtomControl { preCreate() { super.preCreate(); this.defaultControlStyle = PopupStyle; this.runAfterInit(() => { this.element.classList.add(this.controlStyle.name); }); } } let PopupService = class PopupService { show(opener, popup, popupStyle) { const container = new PopupContainer(popup.app); if (popupStyle) { container.controlStyle = popupStyle; } container.element.appendChild(popup.element); popup[containerKey] = container; const offset = { x: opener.offsetLeft, y: opener.offsetHeight, handler: null }; // find host... let host = opener.parentElement; while (host) { const current = host; host = host.parentElement; if (host === document.body) { // we have reached top... break; } if (host.classList.contains("page-host")) { // we have reached popup host... host = current; break; } offset.x += host.offsetLeft; offset.y += host.offsetTop; } if (!host) { // tslint:disable-next-line: no-console console.warn("Aborting popup display as host no longer exists"); return; } const style = container.element.style; style.position = "absolute"; style.left = offset.x + "px"; style.top = offset.y + "px"; style.zIndex = "1000"; host.appendChild(container.element); container.registerDisposable({ dispose: () => host.removeEventListener("click", offset.handler) }); offset.handler = (e) => { let start = e.target; while (start) { if (start === opener) { return; } if (start === container.element) { return; } start = start.parentElement; } container.element.remove(); container.dispose(); }; host.addEventListener("click", offset.handler); } hide(popup) { var _a; const container = popup[containerKey]; (_a = container === null || container === void 0 ? void 0 : container.element) === null || _a === void 0 ? void 0 : _a.remove(); container === null || container === void 0 ? void 0 : container.dispose(); } }; PopupService = __decorate([ DISingleton_1.default({}) ], PopupService); exports.default = PopupService; }); //# sourceMappingURL=PopupService.js.map