UNPKG

@visactor/vrender-kits

Version:
251 lines (244 loc) 10.1 kB
var __decorate = this && this.__decorate || function(decorators, target, key, desc) { var d, c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc; if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (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; }, __metadata = this && this.__metadata || function(k, v) { if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(k, v); }, __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { var value; result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) { resolve(value); }))).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); }; import { injectable, Generator, BaseEnvContribution, application } from "@visactor/vrender-core"; import { AABBBounds, isString, isValidNumber } from "@visactor/vutils"; class DynamicB { get x1() { return this.dom.getBoundingClientRect().left; } get x2() { return this.dom.getBoundingClientRect().right; } get y1() { return this.dom.getBoundingClientRect().top; } get y2() { return this.dom.getBoundingClientRect().bottom; } get width() { return this.dom.getBoundingClientRect().width; } get height() { return this.dom.getBoundingClientRect().height; } constructor(dom) { this.dom = dom; } } export function createImageElement(src, isSvg = !1) { const img = document.createElement("img"); if (application.global.isImageAnonymous && (img.crossOrigin = "anonymous"), isSvg) { const data = new Blob([ src ], { type: "image/svg+xml" }); src = window.URL.createObjectURL(data); } if (img.src = src, img.complete) return Promise.resolve(img); return new Promise(((resolve, reject) => { img.onload = () => { resolve(img); }, img.onerror = () => { reject(new Error("加载失败")); }; })); } let BrowserEnvContribution = class extends BaseEnvContribution { constructor() { super(), this.type = "browser", this.supportEvent = !0; try { this.supportsTouchEvents = "ontouchstart" in globalThis, this.supportsPointerEvents = !!globalThis.PointerEvent, this.supportsMouseEvents = !!globalThis.MouseEvent; } catch (err) { this.supportsTouchEvents = !1, this.supportsPointerEvents = !1, this.supportsPointerEvents = !1; } this.applyStyles = !0; } mapToCanvasPoint(nativeEvent, domElement) { var _a, _b; let clientX = 0, clientY = 0, offsetX = 0, offsetY = 0; if (nativeEvent.changedTouches) { const data = null !== (_a = nativeEvent.changedTouches[0]) && void 0 !== _a ? _a : {}; clientX = data.clientX || 0, clientY = data.clientY || 0, offsetX = clientX, offsetY = clientY; } else clientX = nativeEvent.clientX || 0, clientY = nativeEvent.clientY || 0, offsetX = nativeEvent.offsetX || 0, offsetY = nativeEvent.offsetY || 0; if (domElement) { const x = clientX, y = clientY, rect = domElement.getBoundingClientRect(), nativeCanvas = null === (_b = domElement.getNativeHandler) || void 0 === _b ? void 0 : _b.call(domElement).nativeCanvas; let scaleX, scaleY; return nativeCanvas && (scaleX = rect.width / nativeCanvas.offsetWidth, scaleY = rect.height / nativeCanvas.offsetHeight), { x: (x - rect.left) / (isValidNumber(scaleX) ? scaleX : 1), y: (y - rect.top) / (isValidNumber(scaleY) ? scaleY : 1) }; } return { x: offsetX, y: offsetY }; } getNativeAABBBounds(_dom) { let dom = _dom; if ("string" == typeof _dom && (dom = (new DOMParser).parseFromString(_dom, "text/html").firstChild, dom.lastChild && (dom = dom.lastChild.firstChild)), dom.getBoundingClientRect) { const b = dom.getBoundingClientRect(); return new DynamicB(b); } return new AABBBounds; } removeDom(dom) { return dom.parentElement.removeChild(dom), !0; } updateDom(dom, params) { const {width: width, height: height, style: style} = params; return style && (isString(style) ? dom.setAttribute("style", style) : Object.keys(style).forEach((k => { dom.style[k] = style[k]; }))), null != width && (dom.style.width = `${width}px`), null != height && (dom.style.height = `${height}px`), !0; } createDom(params) { const {tagName: tagName = "div", parent: parent} = params, element = document.createElement(tagName); if (this.updateDom(element, params), parent) { const pd = isString(parent) ? this.getElementById(parent) : parent; pd && pd.appendChild && pd.appendChild(element); } return element; } loadImage(url) { return createImageElement(url, !1).then((img => ({ data: img, loadState: "success" }))).catch((() => ({ data: null, loadState: "fail" }))); } loadSvg(url) { return createImageElement(url, !0).then((img => ({ data: img, loadState: "success" }))).catch((() => ({ data: null, loadState: "fail" }))); } createCanvas(params) { var _a, _b; const canvas = document.createElement("canvas"); params.id && (canvas.id = null !== (_a = params.id) && void 0 !== _a ? _a : Generator.GenAutoIncrementId().toString()); const dpr = null !== (_b = params.dpr) && void 0 !== _b ? _b : window.devicePixelRatio; return params.width && params.height && (canvas.style.width = `${params.width}px`, canvas.style.height = `${params.height}px`, canvas.width = params.width * dpr, canvas.height = params.height * dpr), canvas; } createOffscreenCanvas(params) { var _a; const dpr = null !== (_a = params.dpr) && void 0 !== _a ? _a : window.devicePixelRatio; return new OffscreenCanvas(params.width * dpr, params.height * dpr); } releaseCanvas(canvas) { let c; c = "string" == typeof canvas ? document.getElementById(canvas) : canvas, c && c.parentElement && c.parentElement.removeChild(c); } getDevicePixelRatio() { return window.devicePixelRatio; } getRequestAnimationFrame() { return window.requestAnimationFrame; } getCancelAnimationFrame() { return window.cancelAnimationFrame; } addEventListener(type, listener, options) { return document.addEventListener(type, listener, options); } removeEventListener(type, listener, options) { return document.removeEventListener(type, listener, options); } dispatchEvent(event) { return document.dispatchEvent(event); } getElementById(str) { return document.getElementById(str); } getRootElement() { return document.body; } getDocument() { return document; } release(...params) {} getElementTop(element, baseWindow) { let actualTop = element.offsetTop, current = element.offsetParent; for (;null !== current; ) actualTop += current.offsetTop, current = current.offsetParent; return actualTop; } getElementLeft(element, baseWindow) { let actualLeft = element.offsetLeft, current = element.offsetParent; for (;null !== current; ) actualLeft += current.offsetLeft, current = current.offsetParent; return actualLeft; } getElementTopLeft(element, baseWindow) { let actualTop = element.offsetTop, actualLeft = element.offsetLeft, current = element.offsetParent; for (;null !== current; ) actualTop += current.offsetTop, actualLeft += current.offsetLeft, current = current.offsetParent; return { top: actualTop, left: actualLeft }; } loadFont(font, source, descriptors) { return __awaiter(this, void 0, void 0, (function*() { return new FontFace(font, isString(source) ? `url(${source})` : source, descriptors).load().then((function(loadedFont) { return document.fonts.add(loadedFont), { loadState: "success" }; })).catch((function(error) { return console.error("Failed to load font:", error), { loadState: "fail" }; })); })); } isMacOS() { if (void 0 === this._isMacOS) try { this._isMacOS = navigator.platform.toUpperCase().indexOf("MAC") >= 0; } catch (err) { this._isMacOS = !1; } return this._isMacOS; } copyToClipBoard(text) { return navigator.clipboard.writeText(text).then((() => {})).catch((err => {})); } }; BrowserEnvContribution = __decorate([ injectable(), __metadata("design:paramtypes", []) ], BrowserEnvContribution); export { BrowserEnvContribution }; //# sourceMappingURL=browser-contribution.js.map