uicore-ts 1.0.175 → 1.0.177
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/compiledScripts/UIView.d.ts +3 -4
- package/compiledScripts/UIView.js +13 -11
- package/compiledScripts/UIView.js.map +2 -2
- package/package.json +1 -1
- package/scripts/UIView.ts +81 -78
|
@@ -116,9 +116,9 @@ export declare class UIView extends UIObject {
|
|
|
116
116
|
isInternalScaling: boolean;
|
|
117
117
|
private _resizeObserver;
|
|
118
118
|
private _isMovable;
|
|
119
|
-
|
|
119
|
+
makeNotMovable?: () => void;
|
|
120
120
|
private _isResizable;
|
|
121
|
-
|
|
121
|
+
makeNotResizable?: () => void;
|
|
122
122
|
private _isMoving;
|
|
123
123
|
constructor(elementID?: string, viewHTMLElement?: HTMLElement & LooseObject | null, elementType?: string | null, initViewData?: any);
|
|
124
124
|
static get nextIndex(): number;
|
|
@@ -281,13 +281,12 @@ export declare class UIView extends UIObject {
|
|
|
281
281
|
get isMovable(): boolean;
|
|
282
282
|
set isMovable(isMovable: boolean);
|
|
283
283
|
makeMovable(optionalParameters?: {
|
|
284
|
-
overlayElement?: HTMLElement;
|
|
285
284
|
shouldMoveWithDragEvent?: (sender: UIView, event: DragEvent) => boolean;
|
|
286
285
|
viewDidMoveToPosition?: (view: UIView, isMovementCompleted: boolean) => void;
|
|
287
286
|
}): void;
|
|
288
287
|
get isResizable(): boolean;
|
|
289
288
|
set isResizable(isResizable: boolean);
|
|
290
|
-
|
|
289
|
+
makeResizable(optionalParameters?: {
|
|
291
290
|
overlayElement?: HTMLElement;
|
|
292
291
|
borderWidth?: number;
|
|
293
292
|
borderColor?: UIColor;
|
|
@@ -1040,16 +1040,15 @@ const _UIView = class extends import_UIObject.UIObject {
|
|
|
1040
1040
|
if (isMovable) {
|
|
1041
1041
|
this.makeMovable();
|
|
1042
1042
|
} else {
|
|
1043
|
-
(_a = this.
|
|
1043
|
+
(_a = this.makeNotMovable) == null ? void 0 : _a.call(this);
|
|
1044
1044
|
}
|
|
1045
1045
|
}
|
|
1046
1046
|
makeMovable(optionalParameters = {}) {
|
|
1047
|
-
var _a
|
|
1047
|
+
var _a;
|
|
1048
1048
|
if (this.isMovable) {
|
|
1049
1049
|
return;
|
|
1050
1050
|
}
|
|
1051
|
-
const
|
|
1052
|
-
const shouldMoveWithDragEvent = (_b = optionalParameters.shouldMoveWithDragEvent) != null ? _b : (sender, event) => (0, import_UIObject.IS)(event.altKey);
|
|
1051
|
+
const shouldMoveWithDragEvent = (_a = optionalParameters.shouldMoveWithDragEvent) != null ? _a : (sender, event) => (0, import_UIObject.IS)(event.altKey);
|
|
1053
1052
|
let viewValuesBeforeModifications = [];
|
|
1054
1053
|
let startPoint;
|
|
1055
1054
|
let views;
|
|
@@ -1102,12 +1101,12 @@ const _UIView = class extends import_UIObject.UIObject {
|
|
|
1102
1101
|
movementStopFunction
|
|
1103
1102
|
);
|
|
1104
1103
|
this._isMovable = import_UIObject.NO;
|
|
1105
|
-
this.
|
|
1104
|
+
this.makeNotMovable = void 0;
|
|
1106
1105
|
};
|
|
1107
1106
|
this.controlEventTargetAccumulator.PointerDrag = movementFunction;
|
|
1108
1107
|
this.controlEventTargetAccumulator.PointerUp.PointerCancel = movementStopFunction;
|
|
1109
1108
|
this._isMovable = import_UIObject.YES;
|
|
1110
|
-
this.
|
|
1109
|
+
this.makeNotMovable = cleanupFunction;
|
|
1111
1110
|
}
|
|
1112
1111
|
get isResizable() {
|
|
1113
1112
|
return this._isResizable;
|
|
@@ -1115,12 +1114,12 @@ const _UIView = class extends import_UIObject.UIObject {
|
|
|
1115
1114
|
set isResizable(isResizable) {
|
|
1116
1115
|
var _a;
|
|
1117
1116
|
if (isResizable) {
|
|
1118
|
-
this.
|
|
1117
|
+
this.makeResizable();
|
|
1119
1118
|
} else {
|
|
1120
|
-
(_a = this.
|
|
1119
|
+
(_a = this.makeNotResizable) == null ? void 0 : _a.call(this);
|
|
1121
1120
|
}
|
|
1122
1121
|
}
|
|
1123
|
-
|
|
1122
|
+
makeResizable(optionalParameters = {}) {
|
|
1124
1123
|
var _a, _b, _c, _d, _e;
|
|
1125
1124
|
if (this.isResizable) {
|
|
1126
1125
|
return;
|
|
@@ -1518,9 +1517,12 @@ const _UIView = class extends import_UIObject.UIObject {
|
|
|
1518
1517
|
];
|
|
1519
1518
|
views.forEach((view) => overlayElement.appendChild(view.viewHTMLElement));
|
|
1520
1519
|
this._isResizable = import_UIObject.YES;
|
|
1521
|
-
this.
|
|
1520
|
+
this.makeNotResizable = () => {
|
|
1521
|
+
if (!this.isResizable) {
|
|
1522
|
+
return;
|
|
1523
|
+
}
|
|
1522
1524
|
views.everyElement.viewHTMLElement.remove();
|
|
1523
|
-
this.
|
|
1525
|
+
this.makeNotResizable = void 0;
|
|
1524
1526
|
this._isResizable = import_UIObject.NO;
|
|
1525
1527
|
};
|
|
1526
1528
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UIView.ts"],
|
|
4
|
-
"sourcesContent": ["import { IS_FIREFOX, IS_SAFARI } from \"./ClientCheckers\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport \"./UICoreExtensions\"\nimport type { UIDialogView } from \"./UIDialogView\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport {\n EXTEND,\n FIRST,\n FIRST_OR_NIL, IF,\n IS,\n IS_DEFINED,\n IS_NIL,\n IS_NOT,\n nil,\n NO,\n RETURNER,\n UIObject,\n YES\n} from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIViewController } from \"./UIViewController\"\n\n\ndeclare module AutoLayout {\n \n \n class Constraint {\n \n [key: string]: any\n \n }\n \n \n class View {\n \n [key: string]: any\n \n }\n \n \n class VisualFormat {\n \n static parse(arg0: any, arg1: any): any;\n \n [key: string]: any\n \n }\n \n \n enum Attribute {\n \n LEFT, RIGHT, BOTTOM, TOP, CENTERX, CENTERY, WIDTH, HEIGHT, ZINDEX, VARIABLE, NOTANATTRIBUTE\n \n }\n \n \n enum Relation {\n \n EQU, LEQ, GEQ\n \n }\n \n \n}\n\n// @ts-ignore\nif (!window.AutoLayout) {\n \n // @ts-ignore\n window.AutoLayout = nil\n \n}\n\n\nexport interface LooseObject {\n [key: string]: any\n}\n\n\nexport interface ControlEventTargetsObject {\n \n [key: string]: Function[];\n \n}\n\n\nexport interface UIViewBroadcastEvent {\n \n name: string;\n parameters: {\n [key: string]: string | string[];\n }\n \n}\n\n\nexport type UIViewAddControlEventTargetObject<T extends { controlEvent: Record<string, any> }> = {\n \n [K in keyof T[\"controlEvent\"]]: ((\n sender: UIView,\n event: Event\n) => void) & Partial<UIViewAddControlEventTargetObject<T>>\n\n}\n\n\ninterface Constraint {\n constant: number;\n multiplier: number;\n view1: any;\n attr2: any;\n priority: number;\n attr1: any;\n view2: any;\n relation: any\n}\n\n\nexport class UIView extends UIObject {\n \n \n \n _nativeSelectionEnabled: boolean = YES\n _shouldLayout?: boolean\n _UITableViewRowIndex?: number\n _UITableViewReusabilityIdentifier: any\n _UIViewIntrinsicTemporaryWidth?: string\n _UIViewIntrinsicTemporaryHeight?: string\n _enabled: boolean = YES\n _frame?: UIRectangle & { zIndex?: number }\n _backgroundColor: UIColor = UIColor.transparentColor\n \n _viewHTMLElement!: HTMLElement & LooseObject\n \n // Dynamic innerHTML\n _innerHTMLKey?: string\n _defaultInnerHTML?: string\n _parameters?: { [x: string]: (string | UILocalizedTextObject) }\n \n _localizedTextObject?: UILocalizedTextObject = nil\n \n _controlEventTargets: ControlEventTargetsObject = {} //{ \"PointerDown\": Function[]; \"PointerMove\": Function[]; \"PointerLeave\": Function[]; \"PointerEnter\": Function[]; \"PointerUpInside\": Function[]; \"PointerUp\": Function[]; \"PointerHover\": Function[]; };\n _frameTransform: string\n viewController: UIViewController = nil\n _updateLayoutFunction: any = nil\n // @ts-ignore\n _constraints: any[] //AutoLayout.Constraint[];\n superview: UIView\n subviews: UIView[]\n _styleClasses: any[]\n _isHidden: boolean = NO\n \n pausesPointerEvents: boolean = NO\n stopsPointerEventPropagation: boolean = YES\n pointerDraggingPoint: UIPoint = new UIPoint(0, 0)\n _previousClientPoint: UIPoint = new UIPoint(0, 0)\n _isPointerInside?: boolean\n _isPointerValid?: boolean\n _isPointerValidForMovement?: boolean\n _isPointerDown = NO\n _initialPointerPosition?: UIPoint\n _hasPointerDragged?: boolean\n _pointerDragThreshold = 2\n \n ignoresTouches: boolean = NO\n ignoresMouse: boolean = NO\n \n core: UICore = UICore.main\n \n static _UIViewIndex: number = -1\n _UIViewIndex: number\n \n static _viewsToLayout: UIView[] = []\n \n forceIntrinsicSizeZero: boolean = NO\n _touchEventTime?: number\n \n static _pageScale = 1\n _scale: number = 1\n isInternalScaling: boolean = YES\n private _resizeObserver!: ResizeObserver\n \n private _isMovable = NO\n _makeNotMovable?: () => void\n \n private _isResizable = NO\n _makeNotResizable?: () => void\n \n private _isMoving: boolean = NO\n \n constructor(\n elementID: string = (\"UIView\" + UIView.nextIndex),\n viewHTMLElement: HTMLElement & LooseObject | null = null,\n elementType: string | null = null,\n initViewData?: any\n ) {\n \n super()\n \n // Instance variables\n \n UIView._UIViewIndex = UIView.nextIndex\n this._UIViewIndex = UIView._UIViewIndex\n \n this._styleClasses = []\n \n this._initViewHTMLElement(elementID, viewHTMLElement, elementType)\n \n this.subviews = []\n this.superview = nil\n \n this._constraints = []\n this._updateLayoutFunction = nil\n \n \n this._frameTransform = \"\"\n \n this._initViewCSSSelectorsIfNeeded()\n \n this._loadUIEvents()\n this.setNeedsLayout()\n \n }\n \n static get nextIndex() {\n return UIView._UIViewIndex + 1\n }\n \n static get pageHeight() {\n const body = document.body\n const html = document.documentElement\n return Math.max(\n body.scrollHeight,\n body.offsetHeight,\n html.clientHeight,\n html.scrollHeight,\n html.offsetHeight\n )\n }\n \n \n static get pageWidth() {\n const body = document.body\n const html = document.documentElement\n return Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth)\n }\n \n centerInContainer() {\n this.style.left = \"50%\"\n this.style.top = \"50%\"\n this.style.transform = \"translateX(-50%) translateY(-50%)\"\n }\n \n centerXInContainer() {\n this.style.left = \"50%\"\n this.style.transform = \"translateX(-50%)\"\n }\n \n \n centerYInContainer() {\n this.style.top = \"50%\"\n this.style.transform = \"translateY(-50%)\"\n }\n \n \n _initViewHTMLElement(\n elementID: string,\n viewHTMLElement: (HTMLElement & LooseObject) | null,\n elementType?: string | null\n ) {\n \n if (!IS(elementType)) {\n elementType = \"div\"\n }\n \n if (!IS(viewHTMLElement)) {\n \n this._viewHTMLElement = this.createElement(elementID, elementType)\n \n this.style.position = \"absolute\"\n this.style.margin = \"0\"\n \n }\n else {\n \n this._viewHTMLElement = viewHTMLElement\n \n }\n \n if (IS(elementID)) {\n this.viewHTMLElement.id = elementID\n }\n \n this.viewHTMLElement.obeyAutolayout = YES\n this.viewHTMLElement.UIView = this\n this.addStyleClass(this.styleClassName)\n \n this._resizeObserver = new ResizeObserver(() => this.setNeedsLayout())\n this._resizeObserver.observe(this.viewHTMLElement)\n \n }\n \n \n set nativeSelectionEnabled(selectable: boolean) {\n this._nativeSelectionEnabled = selectable\n if (!selectable) {\n this.style.cssText = this.style.cssText +\n \" -webkit-touch-callout: none; -webkit-user-select: none; \" +\n \"-khtml-user-select: none; -moz-user-select: none; \" +\n \"-ms-user-select: none; user-select: none;\"\n }\n else {\n this.style.cssText = this.style.cssText +\n \" -webkit-touch-callout: text; -webkit-user-select: text; \" +\n \"-khtml-user-select: text; -moz-user-select: text; \" +\n \"-ms-user-select: text; user-select: text;\"\n }\n }\n \n \n get nativeSelectionEnabled() {\n return this._nativeSelectionEnabled\n }\n \n get styleClassName() {\n return \"UICore_UIView_\" + this.class.name\n }\n \n protected _initViewCSSSelectorsIfNeeded() {\n if (!this.class._areViewCSSSelectorsInitialized) {\n this.initViewStyleSelectors()\n this.class._areViewCSSSelectorsInitialized = YES\n }\n }\n \n initViewStyleSelectors() {\n \n // Override this in a subclass\n \n }\n \n \n initStyleSelector(selector: string, style: string) {\n const styleRules = UIView.getStyleRules(selector)\n if (!styleRules) {\n UIView.createStyleSelector(selector, style)\n }\n }\n \n createElement(elementID: string, elementType: string) {\n let result = document.getElementById(elementID)\n if (!result) {\n result = document.createElement(elementType)\n }\n return result\n }\n \n public get viewHTMLElement() {\n return this._viewHTMLElement\n }\n \n \n public get elementID() {\n return this.viewHTMLElement.id\n }\n \n \n setInnerHTML(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n \n this._innerHTMLKey = key\n this._defaultInnerHTML = defaultString\n this._parameters = parameters\n \n const languageName = UICore.languageService.currentLanguageKey\n const result = UICore.languageService.stringForKey(key, languageName, defaultString, parameters)\n \n this.innerHTML = result ?? \"\"\n \n }\n \n protected _setInnerHTMLFromKeyIfPossible() {\n if (this._innerHTMLKey && this._defaultInnerHTML) {\n this.setInnerHTML(this._innerHTMLKey, this._defaultInnerHTML, this._parameters)\n }\n }\n \n \n protected _setInnerHTMLFromLocalizedTextObjectIfPossible() {\n if (IS(this._localizedTextObject)) {\n this.innerHTML = UICore.languageService.stringForCurrentLanguage(this._localizedTextObject)\n }\n }\n \n get localizedTextObject() {\n return this._localizedTextObject\n }\n \n \n set localizedTextObject(localizedTextObject: UILocalizedTextObject | undefined) {\n this._localizedTextObject = localizedTextObject\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n \n get innerHTML() {\n return this.viewHTMLElement.innerHTML\n }\n \n \n set innerHTML(innerHTML) {\n if (this.innerHTML != innerHTML) {\n this.viewHTMLElement.innerHTML = FIRST(innerHTML, \"\")\n }\n }\n \n set hoverText(hoverText: string) {\n this.viewHTMLElement.setAttribute(\"title\", hoverText)\n }\n \n \n get hoverText() {\n return this.viewHTMLElement.getAttribute(\"title\") ?? \"\"\n }\n \n \n get scrollSize() {\n return new UIRectangle(0, 0, this.viewHTMLElement.scrollHeight, this.viewHTMLElement.scrollWidth)\n }\n \n \n get dialogView(): UIDialogView {\n if (!IS(this.superview)) {\n return nil\n }\n if (!((this as any)[\"_isAUIDialogView\"])) {\n return this.superview.dialogView\n }\n return this as any as UIDialogView\n }\n \n \n get rootView(): UIView {\n if (IS(this.superview)) {\n return this.superview.rootView\n }\n return this\n }\n \n public set enabled(enabled: boolean) {\n this._enabled = enabled\n this.updateContentForCurrentEnabledState()\n }\n \n public get enabled(): boolean {\n return this._enabled\n }\n \n \n updateContentForCurrentEnabledState() {\n this.hidden = !this.enabled\n this.userInteractionEnabled = this.enabled\n }\n \n public get tabIndex(): number {\n return Number(this.viewHTMLElement.getAttribute(\"tabindex\"))\n }\n \n \n public set tabIndex(index: number) {\n this.viewHTMLElement.setAttribute(\"tabindex\", \"\" + index)\n }\n \n \n get propertyDescriptors(): { object: UIObject; name: string }[] {\n let result: any[] = []\n this.withAllSuperviews.forEach(view => {\n FIRST_OR_NIL(view.viewController).forEach((value, key, stopLooping) => {\n if (this == value) {\n result.push({ object: view.viewController, name: key })\n }\n })\n view.forEach((value, key, stopLooping) => {\n if (this == value) {\n result.push({ object: view, name: key })\n }\n })\n })\n return result\n }\n \n get styleClasses() {\n return this._styleClasses\n }\n \n set styleClasses(styleClasses) {\n this._styleClasses = styleClasses\n }\n \n hasStyleClass(styleClass: string) {\n \n // This is for performance reasons\n if (!IS(styleClass)) {\n return NO\n }\n \n const index = this.styleClasses.indexOf(styleClass)\n if (index > -1) {\n return YES\n }\n return NO\n \n }\n \n addStyleClass(styleClass: string) {\n \n if (!IS(styleClass)) {\n return\n }\n \n if (!this.hasStyleClass(styleClass)) {\n this._styleClasses.push(styleClass)\n }\n \n }\n \n \n removeStyleClass(styleClass: string) {\n \n // This is for performance reasons\n if (!IS(styleClass)) {\n return\n }\n \n const index = this.styleClasses.indexOf(styleClass)\n if (index > -1) {\n this.styleClasses.splice(index, 1)\n }\n \n }\n \n \n static findViewWithElementID(elementID: string): UIView {\n const viewHTMLElement = document.getElementById(elementID)\n if (IS_NOT(viewHTMLElement)) {\n return nil\n }\n // @ts-ignore\n return viewHTMLElement.UIView\n }\n \n \n static createStyleSelector(selector: string, style: string) {\n \n return\n \n // // @ts-ignore\n // if (!document.styleSheets) {\n // return\n // }\n // if (document.getElementsByTagName(\"head\").length == 0) {\n // return\n // }\n //\n // let styleSheet\n // let mediaType\n //\n // if (document.styleSheets.length > 0) {\n // for (var i = 0, l: any = document.styleSheets.length; i < l; i++) {\n // if (document.styleSheets[i].disabled) {\n // continue\n // }\n // const media = document.styleSheets[i].media\n // mediaType = typeof media\n //\n // if (mediaType === \"string\") {\n // if (media as any === \"\" || ((media as any).indexOf(\"screen\") !== -1)) {\n // styleSheet = document.styleSheets[i]\n // }\n // }\n // else if (mediaType == \"object\") {\n // if (media.mediaText === \"\" || (media.mediaText.indexOf(\"screen\") !== -1)) {\n // styleSheet = document.styleSheets[i]\n // }\n // }\n //\n // if (typeof styleSheet !== \"undefined\") {\n // break\n // }\n // }\n // }\n //\n // if (typeof styleSheet === \"undefined\") {\n // const styleSheetElement = document.createElement(\"style\")\n // styleSheetElement.type = \"text/css\"\n // document.getElementsByTagName(\"head\")[0].appendChild(styleSheetElement)\n //\n // for (i = 0; i < document.styleSheets.length; i++) {\n // if (document.styleSheets[i].disabled) {\n // continue\n // }\n // styleSheet = document.styleSheets[i]\n // }\n //\n // mediaType = typeof styleSheet.media\n // }\n //\n // if (mediaType === \"string\") {\n // for (var i = 0, l = styleSheet.rules.length; i < l; i++) {\n // if (styleSheet.rules[i].selectorText && styleSheet.rules[i].selectorText.toLowerCase() ==\n // selector.toLowerCase()) {\n // styleSheet.rules[i].style.cssText = style\n // return\n // }\n // }\n // styleSheet.addRule(selector, style)\n // }\n // else if (mediaType === \"object\") {\n //\n // var styleSheetLength = 0\n //\n // try {\n //\n // styleSheetLength = (styleSheet.cssRules) ? styleSheet.cssRules.length : 0\n //\n // } catch (error) {\n //\n // }\n //\n //\n // for (var i = 0; i < styleSheetLength; i++) {\n // if (styleSheet.cssRules[i].selectorText && styleSheet.cssRules[i].selectorText.toLowerCase() ==\n // selector.toLowerCase()) {\n // styleSheet.cssRules[i].style.cssText = style\n // return\n // }\n // }\n // styleSheet.insertRule(selector + \"{\" + style + \"}\", styleSheetLength)\n // }\n }\n \n \n static getStyleRules(selector: string) {\n \n // https://stackoverflow.com/questions/324486/how-do-you-read-css-rule-values-with-javascript\n //Inside closure so that the inner functions don't need regeneration on every call.\n const getCssClasses = (function () {\n function normalize(str: string) {\n if (!str) {\n return \"\"\n }\n str = String(str).replace(/\\s*([>~+])\\s*/g, \" $1 \") //Normalize symbol spacing.\n return str.replace(/(\\s+)/g, \" \").trim() //Normalize whitespace\n }\n \n function split(str: string, on: string) { //Split, Trim, and remove empty elements\n return str.split(on).map(x => x.trim()).filter(x => x)\n }\n \n function containsAny(selText: string | any[], ors: any[]) {\n return selText ? ors.some(x => selText.indexOf(x) >= 0) : false\n }\n \n return function (selector: string) {\n const logicalORs = split(normalize(selector), \",\")\n const sheets = Array.from(window.document.styleSheets)\n const ruleArrays = sheets.map((x) => Array.from(x.rules || x.cssRules || []))\n const allRules = ruleArrays.reduce((all, x) => all.concat(x), [])\n // @ts-ignore\n return allRules.filter((x) => containsAny(normalize(x.selectorText), logicalORs))\n }\n })()\n \n return getCssClasses(selector)\n \n // selector = selector.toLowerCase()\n // let styleRules\n // for (let i = 0; i < document.styleSheets.length; i++) {\n // const styleSheet = document.styleSheets[i] as any\n //\n // try {\n //\n // styleRules = styleSheet.cssRules ? styleSheet.cssRules : styleSheet.rules\n //\n // } catch (error) {\n //\n // console.log(error)\n //\n // }\n //\n // }\n //\n // return styleRules\n \n }\n \n get style() {\n return this.viewHTMLElement.style\n }\n \n get computedStyle() {\n return getComputedStyle(this.viewHTMLElement)\n }\n \n \n public get hidden(): boolean {\n return this._isHidden\n }\n \n public set hidden(v: boolean) {\n \n this._isHidden = v\n \n if (this._isHidden) {\n this.style.visibility = \"hidden\"\n }\n else {\n this.style.visibility = \"visible\"\n }\n \n \n }\n \n static set pageScale(scale: number) {\n \n UIView._pageScale = scale\n \n const zoom = scale\n const width = 100 / zoom\n const viewHTMLElement = UICore.main.rootViewController.view.viewHTMLElement\n viewHTMLElement.style.transformOrigin = \"left top\"\n viewHTMLElement.style.transform = \"scale(\" + zoom + \")\"\n viewHTMLElement.style.width = width + \"%\"\n \n }\n \n \n static get pageScale() {\n return UIView._pageScale\n }\n \n set scale(scale: number) {\n \n this._scale = scale\n \n const zoom = scale\n // const width = 100 / zoom\n // const height = 100 / zoom\n const viewHTMLElement = this.viewHTMLElement\n viewHTMLElement.style.transformOrigin = \"left top\"\n viewHTMLElement.style.transform = viewHTMLElement.style.transform.replace(\n (viewHTMLElement.style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\"),\n \"\"\n ) + \"scale(\" + zoom + \")\"\n // viewHTMLElement.style.width = width + \"%\"\n // viewHTMLElement.style.height = height + \"%\"\n \n if (this.isInternalScaling) {\n \n this.setFrame(this.frame, this.frame.zIndex, YES)\n \n }\n \n }\n \n \n get scale() {\n \n return this._scale\n \n }\n // Use this method to calculate the frame for the view itself\n // This can be used when adding subviews to existing views like buttons\n \n \n calculateAndSetViewFrame() {\n \n }\n \n public get frame() {\n let result: UIRectangle & { zIndex?: number } = this._frame?.copy() as any\n if (!result) {\n result = new UIRectangle(\n this.viewHTMLElement.offsetLeft,\n this.viewHTMLElement.offsetTop,\n this.viewHTMLElement.offsetHeight,\n this.viewHTMLElement.offsetWidth\n ) as any\n result.zIndex = 0\n }\n return result\n }\n \n public set frame(rectangle: UIRectangle & { zIndex?: number }) {\n if (IS(rectangle)) {\n this.setFrame(rectangle, rectangle.zIndex)\n }\n }\n \n \n setFrame(rectangle: UIRectangle & { zIndex?: number }, zIndex = 0, performUncheckedLayout = NO) {\n \n const frame: (UIRectangle & { zIndex?: number }) = this._frame || new UIRectangle(nil, nil, nil, nil) as any\n \n if (zIndex != undefined) {\n rectangle.zIndex = zIndex\n }\n this._frame = rectangle\n \n if (frame && frame.isEqualTo(rectangle) && frame.zIndex == rectangle.zIndex && !performUncheckedLayout) {\n return\n }\n \n if (this.isInternalScaling) {\n rectangle.scale(1 / this.scale)\n }\n \n UIView._setAbsoluteSizeAndPosition(\n this.viewHTMLElement,\n rectangle.topLeft.x,\n rectangle.topLeft.y,\n rectangle.width,\n rectangle.height,\n rectangle.zIndex\n )\n \n if (frame.height != rectangle.height || frame.width != rectangle.width || performUncheckedLayout) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n get bounds() {\n let result: UIRectangle\n if (IS_NOT(this._frame)) {\n result = new UIRectangle(0, 0, this.viewHTMLElement.offsetHeight, this.viewHTMLElement.offsetWidth)\n }\n else {\n result = this.frame.copy()\n result.x = 0\n result.y = 0\n }\n return result\n }\n \n \n set bounds(rectangle) {\n const frame = this.frame\n const newFrame = new UIRectangle(frame.topLeft.x, frame.topLeft.y, rectangle.height, rectangle.width)\n // @ts-ignore\n newFrame.zIndex = frame.zIndex\n this.frame = newFrame\n }\n \n \n boundsDidChange() {\n \n \n }\n \n setPosition(\n left: number | string = nil,\n right: number | string = nil,\n bottom: number | string = nil,\n top: number | string = nil,\n height: number | string = nil,\n width: number | string = nil\n ) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"left\", left)\n this.setStyleProperty(\"right\", right)\n this.setStyleProperty(\"bottom\", bottom)\n this.setStyleProperty(\"top\", top)\n this.setStyleProperty(\"height\", height)\n this.setStyleProperty(\"width\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"height\", height)\n this.setStyleProperty(\"width\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setMinSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"minHeight\", height)\n this.setStyleProperty(\"minWidth\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setMaxSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"maxHeight\", height)\n this.setStyleProperty(\"maxWidth\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setMargin(margin?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"margin\", margin)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setMargins(left?: number | string, right?: number | string, bottom?: number | string, top?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"marginLeft\", left)\n this.setStyleProperty(\"marginRight\", right)\n this.setStyleProperty(\"marginBottom\", bottom)\n this.setStyleProperty(\"marginTop\", top)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setPadding(padding?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"padding\", padding)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n \n setPaddings(left?: number | string, right?: number | string, bottom?: number | string, top?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"paddingLeft\", left)\n this.setStyleProperty(\"paddingRight\", right)\n this.setStyleProperty(\"paddingBottom\", bottom)\n this.setStyleProperty(\"paddingTop\", top)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n \n setBorder(\n radius: number | string = nil,\n width: number | string = 1,\n color: UIColor = UIColor.blackColor,\n style: string = \"solid\"\n ) {\n \n this.setStyleProperty(\"borderStyle\", style)\n \n this.setStyleProperty(\"borderRadius\", radius)\n \n this.setStyleProperty(\"borderColor\", color.stringValue)\n \n this.setStyleProperty(\"borderWidth\", width)\n \n }\n \n \n setStyleProperty(propertyName: string, value?: number | string) {\n \n try {\n \n if (IS_NIL(value)) {\n return\n }\n if (IS_DEFINED(value) && (value as Number).isANumber) {\n value = \"\" + (value as number).integerValue + \"px\"\n }\n \n // @ts-ignore\n this.style[propertyName] = value\n \n } catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n get userInteractionEnabled() {\n return (this.style.pointerEvents != \"none\")\n }\n \n \n set userInteractionEnabled(userInteractionEnabled) {\n if (userInteractionEnabled) {\n this.style.pointerEvents = \"\"\n }\n else {\n this.style.pointerEvents = \"none\"\n }\n }\n \n get backgroundColor() {\n return this._backgroundColor\n }\n \n \n set backgroundColor(backgroundColor: UIColor) {\n this._backgroundColor = backgroundColor\n this.style.backgroundColor = backgroundColor.stringValue\n }\n \n get alpha() {\n return 1 * (this.style.opacity as any)\n }\n \n \n set alpha(alpha) {\n this.style.opacity = \"\" + alpha\n }\n \n \n static animateViewOrViewsWithDurationDelayAndFunction(\n viewOrViews: UIView | HTMLElement | UIView[] | HTMLElement[],\n duration: number,\n delay: number,\n timingStyle = \"cubic-bezier(0.25,0.1,0.25,1)\",\n transformFunction: Function,\n transitioncompletionFunction: Function\n ) {\n \n function callTransitioncompletionFunction() {\n (transitioncompletionFunction || nil)();\n (viewOrViews as UIView[] | HTMLElement[]).forEach(view => {\n if (view instanceof UIView) {\n view.animationDidFinish()\n }\n })\n }\n \n if (IS_FIREFOX) {\n \n // Firefox does not fire the transition completion event properly\n new UIObject().performFunctionWithDelay(delay + duration, callTransitioncompletionFunction)\n \n }\n \n \n if (!(viewOrViews instanceof Array)) {\n viewOrViews = [viewOrViews] as any\n }\n \n const transitionStyles: any[] = []\n const transitionDurations: any[] = []\n const transitionDelays: any[] = []\n const transitionTimings: any[] = []\n \n function isUIView(view: any): view is UIView {\n return IS(view.viewHTMLElement)\n }\n \n for (var i = 0; i < (viewOrViews as any).length; i++) {\n \n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n \n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n \n // @ts-ignore\n view.addEventListener(\"transitionend\", transitionDidFinish, true)\n \n transitionStyles.push(view.style.transition)\n transitionDurations.push(view.style.transitionDuration)\n transitionDelays.push(view.style.transitionDelay)\n transitionTimings.push(view.style.transitionTimingFunction)\n \n view.style.transition = \"all\"\n view.style.transitionDuration = \"\" + duration + \"s\"\n view.style.transitionDelay = \"\" + delay + \"s\"\n view.style.transitionTimingFunction = timingStyle\n \n }\n \n transformFunction()\n \n const transitionObject = {\n \"finishImmediately\": finishTransitionImmediately,\n \"didFinish\": transitionDidFinishManually,\n \"views\": viewOrViews,\n \"registrationTime\": Date.now()\n }\n \n function finishTransitionImmediately() {\n for (var i = 0; i < (viewOrViews as any).length; i++) {\n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n view.style.transition = \"all\"\n view.style.transitionDuration = \"\" + duration + \"s\"\n view.style.transitionDelay = \"\" + delay + \"s\"\n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n }\n }\n \n function transitionDidFinish(this: HTMLElement, event: { srcElement: HTMLElement | UIView }) {\n let view = event.srcElement\n if (!view) {\n return\n }\n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n \n callTransitioncompletionFunction()\n \n // @ts-ignore\n view.removeEventListener(\"transitionend\", transitionDidFinish, true)\n \n }\n \n function transitionDidFinishManually() {\n for (let i = 0; i < (viewOrViews as any).length; i++) {\n \n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n \n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n \n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n \n // @ts-ignore\n view.removeEventListener(\"transitionend\", transitionDidFinish, true)\n \n }\n \n \n }\n \n return transitionObject\n \n }\n \n \n animationDidFinish() {\n \n \n }\n \n static _transformAttribute = ((\"transform\" in document.documentElement.style) ? \"transform\" : undefined) ||\n ((\"-webkit-transform\" in document.documentElement.style) ? \"-webkit-transform\" : \"undefined\") ||\n ((\"-moz-transform\" in document.documentElement.style) ? \"-moz-transform\" : \"undefined\") ||\n ((\"-ms-transform\" in document.documentElement.style) ? \"-ms-transform\" : \"undefined\") ||\n ((\"-o-transform\" in document.documentElement.style) ? \"-o-transform\" : \"undefined\")\n \n \n static _setAbsoluteSizeAndPosition(\n element: HTMLElement & LooseObject,\n left: number,\n top: number,\n width: string | number,\n height: string | number,\n zIndex = 0\n ) {\n \n if (!IS(element) || !element.obeyAutolayout && !element.getAttribute(\"obeyAutolayout\")) {\n return\n }\n \n if (IS(height)) {\n height = height.integerValue + \"px\"\n }\n \n if (IS(width)) {\n width = width.integerValue + \"px\"\n }\n \n let str = element.style.cssText\n \n const frameTransform = UIView._transformAttribute + \": translate3d(\" + (left).integerValue + \"px, \" +\n (top).integerValue + \"px, 0px)\"\n \n if (element.UIView) {\n \n str = str + frameTransform +\n (element.style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\") + \";\"\n \n }\n \n if (IS_NIL(height)) {\n str = str + \" height: unset;\"\n }\n else {\n str = str + \" height:\" + height + \";\"\n }\n \n if (IS_NIL(width)) {\n str = str + \" width: unset;\"\n }\n else {\n str = str + \" width:\" + width + \";\"\n }\n \n if (IS_NIL(zIndex)) {\n str = str + \" z-index: unset;\"\n }\n else {\n str = str + \" z-index:\" + zIndex + \";\"\n }\n \n element.style.cssText = element.style.cssText + str\n \n }\n \n \n static performAutoLayout(\n parentElement: HTMLElement & LooseObject,\n visualFormatArray: string | any[] | null,\n constraintsArray: string | any[]\n ) {\n \n const view = new AutoLayout.View()\n \n if (IS(visualFormatArray) && IS(visualFormatArray.length)) {\n view.addConstraints(AutoLayout.VisualFormat.parse(visualFormatArray, { extended: true }))\n }\n \n if (IS(constraintsArray) && IS(constraintsArray.length)) {\n view.addConstraints(constraintsArray)\n }\n \n const elements: Record<string, HTMLElement> = {}\n for (var key in view.subViews) {\n \n if (!view.subViews.hasOwnProperty(key)) {\n continue\n }\n \n var element = nil\n \n try {\n \n element = parentElement.querySelector(\"#\" + key)\n \n } catch (error) {\n \n //console.log(\"Error occurred \" + error);\n \n }\n \n if (!(element && !element.obeyAutolayout && !element.getAttribute(\"obeyAutolayout\")) && element) {\n element.className += element.className ? \" abs\" : \"abs\"\n elements[key] = element\n }\n \n }\n \n let parentUIView = nil\n \n if (parentElement.UIView) {\n parentUIView = parentElement.UIView\n }\n \n const updateLayout = function () {\n view.setSize(\n parentElement ? parentElement.clientWidth : window.innerWidth,\n parentElement ? parentElement.clientHeight : window.innerHeight\n )\n for (key in view.subViews) {\n \n if (!view.subViews.hasOwnProperty(key)) {\n continue\n }\n \n const subView = view.subViews[key]\n \n if (elements[key]) {\n UIView._setAbsoluteSizeAndPosition(\n elements[key],\n subView.left,\n subView.top,\n subView.width,\n subView.height\n )\n }\n }\n \n parentUIView.didLayoutSubviews()\n \n }\n \n updateLayout()\n return updateLayout\n \n }\n \n \n static runFunctionBeforeNextFrame(step: () => void) {\n \n if (IS_SAFARI) {\n \n // This creates a microtask\n Promise.resolve().then(step)\n \n }\n else {\n \n window.requestAnimationFrame(step)\n \n }\n \n }\n \n \n static scheduleLayoutViewsIfNeeded() {\n \n UIView.runFunctionBeforeNextFrame(UIView.layoutViewsIfNeeded)\n \n }\n \n \n static layoutViewsIfNeeded() {\n for (var i = 0; i < UIView._viewsToLayout.length; i++) {\n const view = UIView._viewsToLayout[i]\n view.layoutIfNeeded()\n }\n UIView._viewsToLayout = []\n }\n \n \n setNeedsLayout() {\n \n if (this._shouldLayout) {\n return\n }\n \n this._shouldLayout = YES\n \n // Register view for layout before next frame\n UIView._viewsToLayout.push(this)\n \n if (UIView._viewsToLayout.length == 1) {\n UIView.scheduleLayoutViewsIfNeeded()\n }\n \n }\n \n \n get needsLayout() {\n \n return this._shouldLayout\n \n }\n \n \n layoutIfNeeded() {\n \n if (!this._shouldLayout) {\n return\n }\n \n this._shouldLayout = NO\n \n try {\n \n this.layoutSubviews()\n \n } catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n \n layoutSubviews() {\n \n this.willLayoutSubviews()\n \n this._shouldLayout = NO\n \n // Autolayout\n if (this.constraints.length) {\n this._updateLayoutFunction = UIView.performAutoLayout(this.viewHTMLElement, null, this.constraints)\n }\n this._updateLayoutFunction()\n \n this.viewController.layoutViewSubviews()\n \n this.applyClassesAndStyles()\n \n for (let i = 0; i < this.subviews.length; i++) {\n \n const subview = this.subviews[i]\n subview.calculateAndSetViewFrame()\n \n }\n \n this.didLayoutSubviews()\n \n }\n \n applyClassesAndStyles() {\n for (let i = 0; i < this.styleClasses.length; i++) {\n const styleClass = this.styleClasses[i]\n if (styleClass) {\n this.viewHTMLElement.classList.add(styleClass)\n }\n }\n }\n \n willLayoutSubviews() {\n \n this.viewController.viewWillLayoutSubviews()\n \n }\n \n didLayoutSubviews() {\n \n this.viewController.viewDidLayoutSubviews()\n \n }\n \n get constraints() {\n return this._constraints\n }\n \n set constraints(constraints) {\n this._constraints = constraints\n }\n \n \n addConstraint(constraint: any) {\n this.constraints.push(constraint)\n }\n \n addConstraintsWithVisualFormat(visualFormatArray: string[]) {\n this.constraints = this.constraints.concat(AutoLayout.VisualFormat.parse(\n visualFormatArray,\n { extended: true }\n ))\n }\n \n static constraintWithView(\n view: { isKindOfClass: (arg0: typeof UIView) => any; viewHTMLElement: any; id: any },\n attribute: any,\n relation: any,\n toView: { isKindOfClass: any; viewHTMLElement: any; id: any },\n toAttribute: any,\n multiplier: number,\n constant: number,\n priority: number\n ): Constraint {\n \n let UIViewObject = nil\n let viewID = null\n if (view) {\n if (view.isKindOfClass && view.isKindOfClass(UIView)) {\n UIViewObject = view\n view = view.viewHTMLElement\n }\n viewID = view.id\n }\n \n let toUIViewObject = nil\n let toViewID = null\n if (toView) {\n if (toView.isKindOfClass && view.isKindOfClass(UIView)) {\n toUIViewObject = toView\n toView = toView.viewHTMLElement\n }\n toViewID = toView.id\n }\n \n const constraint = {\n \n view1: viewID,\n attr1: attribute,\n relation: relation,\n view2: toViewID,\n attr2: toAttribute,\n multiplier: multiplier,\n constant: constant,\n priority: priority\n \n }\n \n return constraint\n \n }\n \n static constraintAttribute = {\n \n \"left\": AutoLayout.Attribute.LEFT,\n \"right\": AutoLayout.Attribute.RIGHT,\n \"bottom\": AutoLayout.Attribute.BOTTOM,\n \"top\": AutoLayout.Attribute.TOP,\n \"centerX\": AutoLayout.Attribute.CENTERX,\n \"centerY\": AutoLayout.Attribute.CENTERY,\n \"height\": AutoLayout.Attribute.HEIGHT,\n \"width\": AutoLayout.Attribute.WIDTH,\n \"zIndex\": AutoLayout.Attribute.ZINDEX,\n // Not sure what these are for\n \"constant\": AutoLayout.Attribute.NOTANATTRIBUTE,\n \"variable\": AutoLayout.Attribute.VARIABLE\n \n }\n \n \n static constraintRelation = {\n \n \"equal\": AutoLayout.Relation.EQU,\n \"lessThanOrEqual\": AutoLayout.Relation.LEQ,\n \"greaterThanOrEqual\": AutoLayout.Relation.GEQ\n \n }\n \n \n subviewWithID(viewID: string): UIView {\n let resultHTMLElement = nil\n \n try {\n resultHTMLElement = this.viewHTMLElement.querySelector(\"#\" + viewID)\n } catch (error) {\n console.log(error)\n }\n \n if (resultHTMLElement && resultHTMLElement.UIView) {\n return resultHTMLElement.UIView\n }\n return nil\n }\n \n \n rectangleContainingSubviews() {\n const center = this.bounds.center\n let result = new UIRectangle(center.x, center.y, 0, 0)\n for (let i = 0; i < this.subviews.length; i++) {\n const subview = this.subviews[i]\n let frame = subview.frame\n const rectangleContainingSubviews = subview.rectangleContainingSubviews()\n frame = frame.concatenateWithRectangle(rectangleContainingSubviews)\n result = result.concatenateWithRectangle(frame)\n }\n return result\n }\n \n hasSubview(view: UIView) {\n \n // This is for performance reasons\n if (!IS(view)) {\n return NO\n }\n \n for (let i = 0; i < this.subviews.length; i++) {\n const subview = this.subviews[i]\n if (subview == view) {\n return YES\n }\n }\n return NO\n }\n \n get viewBelowThisView() {\n const result: UIView = (this.viewHTMLElement.previousElementSibling as any || {}).UIView\n return result\n }\n \n get viewAboveThisView() {\n const result: UIView = (this.viewHTMLElement.nextElementSibling as any || {}).UIView\n return result\n }\n \n addSubview(view: UIView, aboveView?: UIView) {\n \n if (!this.hasSubview(view) && IS(view)) {\n \n view.willMoveToSuperview(this)\n \n if (IS(aboveView)) {\n this.viewHTMLElement.insertBefore(view.viewHTMLElement, aboveView.viewHTMLElement.nextSibling)\n this.subviews.insertElementAtIndex(this.subviews.indexOf(aboveView), view)\n }\n else {\n this.viewHTMLElement.appendChild(view.viewHTMLElement)\n this.subviews.push(view)\n }\n \n view.core = this.core\n view.didMoveToSuperview(this)\n \n if (this.superview && this.isMemberOfViewTree) {\n \n view.broadcastEventInSubtree({\n name: UIView.broadcastEventName.AddedToViewTree,\n parameters: nil\n })\n \n }\n \n this.setNeedsLayout()\n \n }\n \n }\n \n \n addSubviews(views: UIView[]) {\n views.forEach(view => this.addSubview(view))\n }\n \n \n addedAsSubviewToView(view: UIView, aboveView?: UIView) {\n view.addSubview(this, aboveView)\n return this\n }\n \n moveToBottomOfSuperview() {\n \n if (IS(this.superview)) {\n \n const bottomView = this.superview.subviews.firstElement\n \n if (bottomView == this) {\n return\n }\n \n this.superview.subviews.removeElement(this)\n this.superview.subviews.insertElementAtIndex(0, this)\n this.superview.viewHTMLElement.insertBefore(this.viewHTMLElement, bottomView.viewHTMLElement)\n \n }\n \n }\n \n \n moveToTopOfSuperview() {\n \n if (IS(this.superview)) {\n \n const topView = this.superview.subviews.lastElement\n \n if (topView == this) {\n return\n }\n \n this.superview.subviews.removeElement(this)\n this.superview.subviews.push(this)\n this.superview.viewHTMLElement.appendChild(this.viewHTMLElement)\n \n }\n \n }\n \n \n removeFromSuperview() {\n if (IS(this.superview)) {\n this.forEachViewInSubtree(view => view.blur())\n const index = this.superview.subviews.indexOf(this)\n if (index > -1) {\n this.superview.subviews.splice(index, 1)\n this.superview.viewHTMLElement.removeChild(this.viewHTMLElement)\n this.superview = nil\n this.broadcastEventInSubtree({\n name: UIView.broadcastEventName.RemovedFromViewTree,\n parameters: nil\n })\n \n }\n }\n }\n \n \n willAppear() {\n \n \n }\n \n willMoveToSuperview(superview: UIView) {\n this._setInnerHTMLFromKeyIfPossible()\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n didMoveToSuperview(superview: UIView) {\n this.superview = superview\n }\n \n wasAddedToViewTree() {\n \n }\n \n wasRemovedFromViewTree() {\n \n }\n \n \n get isMemberOfViewTree() {\n let element: HTMLElement & LooseObject | null = this.viewHTMLElement\n for (let i = 0; element; i = i) {\n if (element.parentElement && element.parentElement == document.body) {\n return YES\n }\n element = element.parentElement\n }\n return NO\n }\n \n \n get withAllSuperviews() {\n const result = []\n let view: UIView = this\n for (let i = 0; IS(view); i = i) {\n result.push(view)\n view = view.superview\n }\n return result\n }\n \n \n setNeedsLayoutOnAllSuperviews() {\n this.withAllSuperviews.reverse().everyElement.setNeedsLayout()\n }\n \n \n setNeedsLayoutUpToRootView() {\n this.setNeedsLayoutOnAllSuperviews()\n this.setNeedsLayout()\n }\n \n \n focus() {\n this.viewHTMLElement.focus()\n }\n \n \n blur() {\n this.viewHTMLElement.blur()\n }\n \n \n \n get isMovable(): boolean {\n return this._isMovable\n }\n \n set isMovable(isMovable: boolean) {\n \n if (isMovable) {\n \n this.makeMovable()\n \n }\n else {\n \n this._makeNotMovable?.()\n \n }\n \n }\n \n \n makeMovable(\n optionalParameters: {\n overlayElement?: HTMLElement; shouldMoveWithDragEvent?: (\n sender: UIView,\n event: DragEvent\n ) => boolean; viewDidMoveToPosition?: (view: UIView, isMovementCompleted: boolean) => void\n } = {}\n ) {\n \n if (this.isMovable) {\n return;\n }\n \n const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement\n const shouldMoveWithDragEvent = optionalParameters.shouldMoveWithDragEvent ?? ((\n sender,\n event\n ) => IS(event.altKey))\n \n \n let viewValuesBeforeModifications: any[] = []\n \n let startPoint: UIPoint\n let views: UIView[]\n \n const movementFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent && shouldMoveWithDragEvent(sender, event)) {\n \n if (!this._isMoving) {\n \n startPoint = this.frame.min\n \n sender.pointerDraggingPoint = new UIPoint(0, 0)\n //const neighbouringViews = sender.superview.subviews\n views = sender.withAllSuperviews //.concat(neighbouringViews)\n // sender.moveToTopOfSuperview()\n \n sender.forEachViewInSubtree(view => {\n \n // Cancel pointer\n view.sendControlEventForKey(UIView.controlEvent.PointerCancel, nil)\n \n })\n \n viewValuesBeforeModifications = views.everyElement.configureWithObject({\n style: { cursor: \"move\" },\n nativeSelectionEnabled: NO,\n pausesPointerEvents: YES,\n shouldCallPointerUpInside: async () => NO\n }) as any[]\n \n this._isMoving = YES\n \n }\n \n sender.frame = sender.frame\n .rectangleWithX(startPoint.x + sender.pointerDraggingPoint.x)\n .rectangleWithY(startPoint.y + sender.pointerDraggingPoint.y)\n \n optionalParameters.viewDidMoveToPosition?.(this, NO)\n \n }\n else if (this._isMoving) {\n \n movementStopFunction(sender, event)\n \n }\n \n }\n \n const movementStopFunction = (sender: UIView, event: Event) => {\n \n if (IS_NIL(event) || !this._isMoving) {\n return\n }\n \n views?.forEach(\n (view, index) => {\n \n view.configureWithObject(viewValuesBeforeModifications[index])\n //view.shouldCallPointerUpInside = () => UIView.shouldCallPointerUpInsideOnView(view)\n \n }\n )\n \n optionalParameters.viewDidMoveToPosition?.(this, YES)\n \n this._isMoving = NO\n \n }\n \n const cleanupFunction = () => {\n \n if (!this.isMovable) {\n return;\n }\n \n this.removeTargetForControlEvent(UIView.controlEvent.PointerDrag, movementFunction)\n this.removeTargetForControlEvents(\n [UIView.controlEvent.PointerUp, UIView.controlEvent.PointerCancel],\n movementStopFunction\n )\n \n this._isMovable = NO\n \n this._makeNotMovable = undefined\n \n }\n \n this.controlEventTargetAccumulator.PointerDrag = movementFunction\n this.controlEventTargetAccumulator.PointerUp.PointerCancel = movementStopFunction\n \n //UIObject.configureWithObject(overlayElement, { remove: EXTEND(() => cleanupFunction()) })\n \n this._isMovable = YES\n \n this._makeNotMovable = cleanupFunction\n \n }\n \n \n get isResizable(): boolean {\n return this._isResizable\n }\n \n set isResizable(isResizable: boolean) {\n if (isResizable) {\n this._makeResizable()\n }\n else {\n this._makeNotResizable?.()\n }\n }\n \n _makeResizable(\n optionalParameters: {\n overlayElement?: HTMLElement; borderWidth?: number; borderColor?: UIColor; cornerSize?: string; maxCornerSize?: string; viewDidChangeToSize?: (\n view: UIView,\n isMovementCompleted: boolean\n ) => void\n } = {}\n ) {\n \n if (this.isResizable) {\n \n return;\n \n }\n \n const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement\n \n const borderWidth = IF(optionalParameters.borderWidth)(RETURNER(optionalParameters.borderWidth + \"px\"))\n .ELSE(RETURNER(undefined)) ||\n overlayElement.style.borderWidth ||\n this.style.borderWidth || \"5px\"\n \n const borderColor = optionalParameters.borderColor?.stringValue ??\n // overlayElement.style.borderColor ??\n // view.style.borderColor ??\n UIColor.transparentColor.stringValue\n //this.transformColorForView(view).stringValue\n \n const maxCornerSize = optionalParameters.maxCornerSize ?? \"10px\"\n const cornerSize = optionalParameters.cornerSize ?? \"5%\"\n \n const pointerUpFunction = () => optionalParameters.viewDidChangeToSize?.(this, YES)\n \n const leftEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"leftEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n left: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n leftEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(event.movementX / UIView.pageScale, 0, 0, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n const rightEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"rightEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n right: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n rightEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, -event.movementX / UIView.pageScale, 0, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n rightEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n // noinspection JSSuspiciousNameCombination\n const bottomEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomEdge\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: \"100%\",\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"row-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n bottomEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, 0, -event.movementY / UIView.pageScale, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n bottomEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n // noinspection JSSuspiciousNameCombination\n const topEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topEdge\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: \"100%\",\n top: \"0px\",\n right: \"0px\",\n cursor: \"row-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n topEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, 0, 0, event.movementY / UIView.pageScale)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n topEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n const topLeftCornerTop = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topLeftCornerTop\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n top: \"0px\",\n left: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n const pointerDragTLFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n event.movementX / UIView.pageScale,\n 0,\n 0,\n event.movementY / UIView.pageScale\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n topLeftCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n \n topLeftCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const topLeftCornerLeft = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topLeftCornerLeft\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n top: \"0px\",\n left: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n topLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n \n topLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const bottomLeftCornerLeft = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomLeftCornerLeft\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n const pointerDragBLFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n event.movementX / UIView.pageScale,\n 0,\n -event.movementY / UIView.pageScale,\n 0\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n \n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const bottomLeftCornerBottom = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomLeftCornerBottom\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n \n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const bottomRightCornerBottom = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomRightCornerBottom\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n bottom: \"0px\",\n right: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n const pointerDragBRFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n 0,\n -event.movementX / UIView.pageScale,\n -event.movementY / UIView.pageScale,\n 0\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n bottomRightCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n \n bottomRightCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const bottomRightCornerRight = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomRightCornerRight\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n bottom: \"0px\",\n right: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n bottomRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n \n bottomRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const topRightCornerRight = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topRightCornerRight\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n top: \"0px\",\n right: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n const pointerDragTRFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n 0,\n -event.movementX / UIView.pageScale,\n 0,\n event.movementY / UIView.pageScale\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n topRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n \n topRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const topRightCornerTop = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topRightCornerTop\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n top: \"0px\",\n right: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n topRightCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n \n topRightCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const views = [\n \n leftEdge,\n rightEdge,\n bottomEdge,\n topEdge,\n \n topRightCornerTop,\n topLeftCornerTop,\n topLeftCornerLeft,\n bottomLeftCornerLeft,\n bottomLeftCornerBottom,\n bottomRightCornerBottom,\n bottomRightCornerRight,\n topRightCornerRight\n \n ]\n \n views.forEach(view => overlayElement.appendChild(view.viewHTMLElement))\n \n this._isResizable = YES\n \n this._makeNotResizable = () => {\n \n views.everyElement.viewHTMLElement.remove()\n \n this._makeNotResizable = undefined\n \n this._isResizable = NO\n \n }\n \n }\n \n \n static async shouldCallPointerUpInsideOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerHoverOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerLeaveOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerCancelOnView(view: UIView) {\n \n return YES\n \n }\n \n \n shouldCallPointerUpInside() {\n return UIView.shouldCallPointerUpInsideOnView(this)\n }\n \n shouldCallPointerCancel() {\n return UIView.shouldCallPointerCancelOnView(this)\n }\n \n shouldCallPointerHover() {\n return UIView.shouldCallPointerHoverOnView(this)\n }\n \n shouldCallPointerLeave() {\n return UIView.shouldCallPointerLeaveOnView(this)\n }\n \n \n protected _loadUIEvents() {\n \n \n const isTouchEventClassDefined: boolean = NO || (window as any).TouchEvent\n \n const pauseEvent = (event: Event, forced = NO) => {\n \n if (this.pausesPointerEvents || forced) {\n \n if (event.stopPropagation) {\n event.stopPropagation()\n }\n if (event.preventDefault) {\n event.preventDefault()\n }\n event.cancelBubble = true\n event.returnValue = false\n return false\n \n }\n \n if (event.stopPropagation && this.stopsPointerEventPropagation) {\n event.stopPropagation()\n }\n \n }\n \n const onMouseDown = (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n ((this.ignoresMouse || (IS(this._touchEventTime) && (Date.now() - this._touchEventTime) > 500)) &&\n event instanceof MouseEvent)) {\n return\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerDown, event)\n \n this._isPointerInside = YES\n this._isPointerValid = YES\n this._isPointerValidForMovement = YES\n this._isPointerDown = YES\n this._initialPointerPosition = new UIPoint(event.clientX, event.clientY)\n if (isTouchEventClassDefined && event instanceof TouchEvent) {\n this._touchEventTime = Date.now()\n this._initialPointerPosition = new UIPoint(event.touches[0].clientX, event.touches[0].clientY)\n if (event.touches.length > 1) {\n onTouchCancel(event)\n return\n }\n }\n else {\n this._touchEventTime = nil\n pauseEvent(event)\n }\n \n this._hasPointerDragged = NO\n \n const windowMouseMoveFunction = (event: MouseEvent) => {\n onMouseMove(event)\n //pauseEvent(event, YES)\n }\n const windowMouseUpOrLeaveFunction = (event: MouseEvent) => {\n \n window.removeEventListener(\"mousemove\", windowMouseMoveFunction)\n window.removeEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n document.body.removeEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n onmouseup(event)\n \n }\n window.addEventListener(\"mousemove\", windowMouseMoveFunction)\n window.addEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n document.body.addEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n \n const windowTouchFunction = () => {\n window.removeEventListener(\"touchmove\", onTouchMove, true)\n window.removeEventListener(\"mouseup\", windowTouchFunction, true)\n }\n window.addEventListener(\"touchmove\", onTouchMove, true)\n window.addEventListener(\"mouseup\", windowTouchFunction, true)\n \n }\n \n const onTouchStart = onMouseDown as any\n \n const onmouseup = async (event: MouseEvent) => {\n \n this._isPointerDown = NO\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (this._isPointerInside && await this.shouldCallPointerUpInside()) {\n onPointerUpInside(event)\n if (!this._hasPointerDragged) {\n this.sendControlEventForKey(UIView.controlEvent.PointerTap, event)\n }\n }\n \n // This has to be sent after the more specific event so that UIButton can ignore it when not highlighted\n this.sendControlEventForKey(UIView.controlEvent.PointerUp, event)\n \n pauseEvent(event)\n \n }\n \n const onTouchEnd = onmouseup\n \n const onmouseout = async (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (await this.shouldCallPointerLeave()) {\n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n }\n \n this._isPointerInside = NO\n \n pauseEvent(event)\n \n }\n \n const onTouchLeave = onmouseout\n \n const onmouseover = async (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (await this.shouldCallPointerHover()) {\n this.sendControlEventForKey(UIView.controlEvent.PointerHover, event)\n }\n \n this._isPointerInside = YES\n this._isPointerValid = YES\n this._isPointerValidForMovement = YES\n \n pauseEvent(event)\n \n }\n \n const onMouseMove = (event: MouseEvent) => {\n \n // if (this._isPointerDown) {\n //\n // console.log(\"Mouse move\")\n //\n // }\n \n if (!this._isPointerValid && !this._isPointerValidForMovement) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n const clientPoint = new UIPoint(\n event.clientX,\n event.clientY\n )\n if (IS_NOT(this._initialPointerPosition)) {\n this._initialPointerPosition = clientPoint\n }\n \n const distanceToInitialPoint = clientPoint.to(this._initialPointerPosition).length\n if (distanceToInitialPoint > this._pointerDragThreshold) {\n this._hasPointerDragged = YES\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerMove, event)\n \n if (this._hasPointerDragged && this._isPointerDown) {\n const movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / UIView.pageScale)\n .add(this.pointerDraggingPoint)\n this.sendControlEventForKey(UIView.controlEvent.PointerDrag, event)\n }\n \n this._previousClientPoint = clientPoint\n \n pauseEvent(event)\n \n }\n \n const onTouchMove = async (event: TouchEvent) => {\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (event.touches.length > 1) {\n onTouchZoom(event)\n return\n }\n \n const touch = event.touches[0]\n \n const clientPoint = new UIPoint(\n touch.clientX,\n touch.clientY\n )\n const distanceToInitialPoint = clientPoint.to(this._initialPointerPosition!).length\n if (distanceToInitialPoint > this._pointerDragThreshold) {\n this._hasPointerDragged = YES\n }\n \n if (this._isPointerInside && this.viewHTMLElement !=\n document.elementFromPoint(touch.clientX, touch.clientY)) {\n this._isPointerInside = NO\n if (await this.shouldCallPointerLeave()) {\n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n }\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerMove, event)\n \n \n if (this._hasPointerDragged) {\n const movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / UIView.pageScale)\n .add(this.pointerDraggingPoint)\n this.sendControlEventForKey(UIView.controlEvent.PointerDrag, event)\n }\n \n this._previousClientPoint = clientPoint\n \n }\n \n const onTouchZoom = (event: TouchEvent) => {\n this.sendControlEventForKey(UIView.controlEvent.MultipleTouches, event)\n }\n const onPointerUpInside = (event: Event) => {\n \n pauseEvent(event)\n this._isPointerDown = NO\n this.sendControlEventForKey(UIView.controlEvent.PointerUpInside, event)\n \n \n }\n \n const onTouchCancel = async (event: Event) => {\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n this._isPointerValid = NO\n this._isPointerValidForMovement = NO\n this._isPointerDown = NO\n \n if (await this.shouldCallPointerCancel()) {\n this.sendControlEventForKey(UIView.controlEvent.PointerCancel, event)\n }\n \n }\n \n function eventKeyIsEnter(event: { keyCode: number }) {\n if (event.keyCode !== 13) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsTab(event: { keyCode: number }) {\n if (event.keyCode !== 9) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsEsc(event: { key: string; keyCode: number }) {\n let result: boolean\n if (\"key\" in event) {\n result = (event.key == \"Escape\" || event.key == \"Esc\")\n }\n else {\n // @ts-ignore\n result = (event.keyCode == 27)\n }\n return result\n }\n \n function eventKeyIsLeft(event: KeyboardEvent) {\n if (event.keyCode != 37) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsRight(event: KeyboardEvent) {\n if (event.keyCode != 39) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsDown(event: KeyboardEvent) {\n if (event.keyCode != 40) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsUp(event: KeyboardEvent) {\n if (event.keyCode != 38) {\n return NO\n }\n return YES\n }\n \n const onKeyDown = (event: KeyboardEvent) => {\n \n if (eventKeyIsEnter(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EnterDown, event)\n }\n \n if (eventKeyIsEsc(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EscDown, event)\n }\n \n if (eventKeyIsTab(event) && this._controlEventTargets.TabDown && this._controlEventTargets.TabDown.length) {\n this.sendControlEventForKey(UIView.controlEvent.TabDown, event)\n pauseEvent(event, YES)\n }\n \n if (eventKeyIsLeft(event)) {\n this.sendControlEventForKey(UIView.controlEvent.LeftArrowDown, event)\n }\n \n if (eventKeyIsRight(event)) {\n this.sendControlEventForKey(UIView.controlEvent.RightArrowDown, event)\n }\n \n if (eventKeyIsDown(event)) {\n this.sendControlEventForKey(UIView.controlEvent.DownArrowDown, event)\n }\n \n if (eventKeyIsUp(event)) {\n this.sendControlEventForKey(UIView.controlEvent.UpArrowDown, event)\n }\n \n }\n \n const onKeyUp = (event: KeyboardEvent) => {\n \n if (eventKeyIsEnter(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EnterUp, event)\n }\n \n }\n \n \n const onfocus = (event: Event) => {\n this.sendControlEventForKey(UIView.controlEvent.Focus, event)\n }\n \n const onblur = (event: Event) => {\n this.sendControlEventForKey(UIView.controlEvent.Blur, event)\n }\n \n \n // Mouse and touch start events\n // this._viewHTMLElement.onmousedown = onMouseDown\n // this._viewHTMLElement.ontouchstart = onTouchStart\n this.viewHTMLElement.addEventListener(\"mousedown\", onMouseDown, false)\n this.viewHTMLElement.addEventListener(\"touchstart\", onTouchStart, false)\n // //this.viewHTMLElement.addEventListener(\"mouseenter\", onMouseEnter.bind(this), false);\n \n // Mouse and touch move events\n // this._viewHTMLElement.onmousemove = onMouseMove\n // this._viewHTMLElement.ontouchmove = onTouchMove\n //this.viewHTMLElement.addEventListener(\"mousemove\", onMouseMove, false)\n this.viewHTMLElement.addEventListener(\"touchmove\", onTouchMove, false)\n \n //this.viewHTMLElement.addEventListener(\"mousewheel\", onmousewheel.bind(this), false)\n \n this._viewHTMLElement.onmouseover = onmouseover\n // this.viewHTMLElement.addEventListener(\"mouseover\", onmouseover.bind(this), false)\n \n // Mouse and touch end events\n // this._viewHTMLElement.onmouseup = onmouseup\n // // @ts-ignore\n // this._viewHTMLElement.ontouchend = onTouchEnd\n // this._viewHTMLElement.ontouchcancel = onTouchCancel\n this.viewHTMLElement.addEventListener(\"mouseup\", onmouseup, false)\n // @ts-ignore\n this.viewHTMLElement.addEventListener(\"touchend\", onTouchEnd, false)\n this.viewHTMLElement.addEventListener(\"touchcancel\", onTouchCancel, false)\n \n //this._viewHTMLElement.onmouseout = onmouseout\n this.viewHTMLElement.addEventListener(\"mouseout\", onmouseout, false)\n // @ts-ignore\n this._viewHTMLElement.addEventListener(\"touchleave\", onTouchLeave, true)\n \n // this.viewHTMLElement.onkeydown = onkeydown\n // this.viewHTMLElement.onkeyup = onkeyup\n this._viewHTMLElement.addEventListener(\"keydown\", onKeyDown, false)\n this._viewHTMLElement.addEventListener(\"keyup\", onKeyUp, false)\n \n // Focus events\n this._viewHTMLElement.onfocus = onfocus\n this._viewHTMLElement.onblur = onblur\n // this.viewHTMLElement.addEventListener(\"focus\", onfocus, true)\n // this.viewHTMLElement.addEventListener(\"blur\", onblur, true)\n \n \n }\n \n public static controlEvent = {\n \n \"PointerDown\": \"PointerDown\",\n \"PointerMove\": \"PointerMove\",\n \"PointerDrag\": \"PointerDrag\",\n \"PointerLeave\": \"PointerLeave\",\n \"PointerEnter\": \"PointerEnter\",\n \"PointerUpInside\": \"PointerUpInside\",\n \"PointerTap\": \"PointerTap\",\n \"PointerUp\": \"PointerUp\",\n \"MultipleTouches\": \"PointerZoom\",\n \"PointerCancel\": \"PointerCancel\",\n \"PointerHover\": \"PointerHover\",\n \"EnterDown\": \"EnterDown\",\n \"EnterUp\": \"EnterUp\",\n \"EscDown\": \"EscDown\",\n \"TabDown\": \"TabDown\",\n \"LeftArrowDown\": \"LeftArrowDown\",\n \"RightArrowDown\": \"RightArrowDown\",\n \"DownArrowDown\": \"DownArrowDown\",\n \"UpArrowDown\": \"UpArrowDown\",\n \"Focus\": \"Focus\",\n \"Blur\": \"Blur\"\n \n }\n \n controlEvent = UIView.controlEvent\n \n \n public get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<UIView> {\n \n const eventKeys: string[] = []\n \n const result: any = new Proxy(\n (this.constructor as any).controlEvent,\n {\n \n get: (target, key: string, _receiver) => {\n \n eventKeys.push(key)\n \n return result\n \n },\n set: (target, key: string, value, _receiver) => {\n \n eventKeys.push(key)\n this.addTargetForControlEvents(eventKeys, value)\n \n return true\n \n }\n \n }\n )\n \n return result\n \n }\n \n \n addTargetForControlEvents(eventKeys: string[], targetFunction: (sender: UIView, event: Event) => void) {\n eventKeys.forEach(key => this.addTargetForControlEvent(key, targetFunction))\n }\n \n \n addTargetForControlEvent(eventKey: string, targetFunction: (sender: UIView, event: Event) => void) {\n \n let targets = this._controlEventTargets[eventKey]\n \n if (!targets) {\n // @ts-ignore\n targets = []\n this._controlEventTargets[eventKey] = targets\n }\n \n if (targets.indexOf(targetFunction) == -1) {\n targets.push(targetFunction)\n }\n \n }\n \n removeTargetForControlEvent(eventKey: string, targetFunction: (sender: UIView, event: Event) => void) {\n const targets = this._controlEventTargets[eventKey]\n if (!targets) {\n return\n }\n const index = targets.indexOf(targetFunction)\n if (index != -1) {\n targets.splice(index, 1)\n }\n }\n \n removeTargetForControlEvents(eventKeys: string[], targetFunction: (sender: UIView, event: Event) => void) {\n eventKeys.forEach(key => this.removeTargetForControlEvent(key, targetFunction))\n }\n \n sendControlEventForKey(eventKey: string, nativeEvent: Event) {\n let targets = this._controlEventTargets[eventKey]\n if (!targets) {\n return\n }\n targets = targets.copy()\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n target(this, nativeEvent)\n }\n }\n \n \n static broadcastEventName = {\n \n \"LanguageChanged\": \"LanguageChanged\",\n \"RemovedFromViewTree\": \"RemovedFromViewTree\",\n \"AddedToViewTree\": \"AddedToViewTree\",\n \"PageDidScroll\": \"PageDidScroll\"\n \n }\n \n \n broadcastEventInSubtree(event: UIViewBroadcastEvent) {\n this.forEachViewInSubtree(view => {\n view.didReceiveBroadcastEvent(event)\n if (IS(view.viewController)) {\n view.viewController.viewDidReceiveBroadcastEvent(event)\n }\n })\n }\n \n didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n if (event.name == UIView.broadcastEventName.PageDidScroll) {\n this._isPointerValid = NO\n }\n \n if (event.name == UIView.broadcastEventName.AddedToViewTree) {\n this.wasAddedToViewTree()\n }\n \n if (event.name == UIView.broadcastEventName.RemovedFromViewTree) {\n this.wasRemovedFromViewTree()\n }\n \n if (event.name == UIView.broadcastEventName.LanguageChanged || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n this._setInnerHTMLFromKeyIfPossible()\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n }\n \n \n forEachViewInSubtree(functionToCall: (view: UIView) => void) {\n functionToCall(this)\n this.subviews.everyElement.forEachViewInSubtree(functionToCall)\n }\n \n \n rectangleInView(rectangle: UIRectangle, view: UIView) {\n if (!view.isMemberOfViewTree || !this.isMemberOfViewTree) {\n return nil\n }\n \n const viewClientRectangle = view.viewHTMLElement.getBoundingClientRect()\n const viewLocation = new UIPoint(viewClientRectangle.left, viewClientRectangle.top)\n \n const selfClientRectangle = this.viewHTMLElement.getBoundingClientRect()\n const selfLocation = new UIPoint(selfClientRectangle.left, selfClientRectangle.top)\n \n const offsetPoint = selfLocation.subtract(viewLocation)\n \n return rectangle.copy().offsetByPoint(offsetPoint)\n }\n \n rectangleFromView(rectangle: UIRectangle, view: UIView) {\n return view.rectangleInView(rectangle, this)\n }\n \n \n intrinsicContentSizeWithConstraints(constrainingHeight: number = 0, constrainingWidth: number = 0) {\n \n // This works but is slow\n \n const result = new UIRectangle(0, 0, 0, 0)\n if (this.rootView.forceIntrinsicSizeZero) {\n return result\n }\n \n let temporarilyInViewTree = NO\n let nodeAboveThisView: Node | null = null\n if (!this.isMemberOfViewTree) {\n document.body.appendChild(this.viewHTMLElement)\n temporarilyInViewTree = YES\n nodeAboveThisView = this.viewHTMLElement.nextSibling\n }\n \n const height = this.style.height\n const width = this.style.width\n \n this.style.height = \"\" + constrainingHeight\n this.style.width = \"\" + constrainingWidth\n \n \n const left = this.style.left\n const right = this.style.right\n const bottom = this.style.bottom\n const top = this.style.top\n \n this.style.left = \"\"\n this.style.right = \"\"\n this.style.bottom = \"\"\n this.style.top = \"\"\n \n \n const resultHeight = this.viewHTMLElement.scrollHeight\n \n \n const whiteSpace = this.style.whiteSpace\n this.style.whiteSpace = \"nowrap\"\n \n const resultWidth = this.viewHTMLElement.scrollWidth\n \n this.style.whiteSpace = whiteSpace\n \n \n this.style.height = height\n this.style.width = width\n \n this.style.left = left\n this.style.right = right\n this.style.bottom = bottom\n this.style.top = top\n \n if (temporarilyInViewTree) {\n document.body.removeChild(this.viewHTMLElement)\n if (this.superview) {\n if (nodeAboveThisView) {\n this.superview.viewHTMLElement.insertBefore(this.viewHTMLElement, nodeAboveThisView)\n }\n else {\n this.superview.viewHTMLElement.appendChild(this.viewHTMLElement)\n }\n }\n }\n \n result.height = resultHeight\n result.width = resultWidth\n \n \n return result\n \n }\n \n \n intrinsicContentWidth(constrainingHeight: number = 0): number {\n \n return this.intrinsicContentSizeWithConstraints(constrainingHeight).width\n \n }\n \n intrinsicContentHeight(constrainingWidth: number = 0): number {\n \n return this.intrinsicContentSizeWithConstraints(undefined, constrainingWidth).height\n \n \n }\n \n intrinsicContentSize(): UIRectangle {\n \n return nil\n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { IS_FIREFOX, IS_SAFARI } from \"./ClientCheckers\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport \"./UICoreExtensions\"\nimport type { UIDialogView } from \"./UIDialogView\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport {\n EXTEND,\n FIRST,\n FIRST_OR_NIL, IF,\n IS,\n IS_DEFINED,\n IS_NIL,\n IS_NOT,\n nil,\n NO,\n RETURNER,\n UIObject,\n YES\n} from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIViewController } from \"./UIViewController\"\n\n\ndeclare module AutoLayout {\n \n \n class Constraint {\n \n [key: string]: any\n \n }\n \n \n class View {\n \n [key: string]: any\n \n }\n \n \n class VisualFormat {\n \n static parse(arg0: any, arg1: any): any;\n \n [key: string]: any\n \n }\n \n \n enum Attribute {\n \n LEFT, RIGHT, BOTTOM, TOP, CENTERX, CENTERY, WIDTH, HEIGHT, ZINDEX, VARIABLE, NOTANATTRIBUTE\n \n }\n \n \n enum Relation {\n \n EQU, LEQ, GEQ\n \n }\n \n \n}\n\n// @ts-ignore\nif (!window.AutoLayout) {\n \n // @ts-ignore\n window.AutoLayout = nil\n \n}\n\n\nexport interface LooseObject {\n [key: string]: any\n}\n\n\nexport interface ControlEventTargetsObject {\n \n [key: string]: Function[];\n \n}\n\n\nexport interface UIViewBroadcastEvent {\n \n name: string;\n parameters: {\n [key: string]: string | string[];\n }\n \n}\n\n\nexport type UIViewAddControlEventTargetObject<T extends { controlEvent: Record<string, any> }> = {\n \n [K in keyof T[\"controlEvent\"]]: ((\n sender: UIView,\n event: Event\n) => void) & Partial<UIViewAddControlEventTargetObject<T>>\n\n}\n\n\ninterface Constraint {\n constant: number;\n multiplier: number;\n view1: any;\n attr2: any;\n priority: number;\n attr1: any;\n view2: any;\n relation: any\n}\n\n\nexport class UIView extends UIObject {\n \n \n _nativeSelectionEnabled: boolean = YES\n _shouldLayout?: boolean\n _UITableViewRowIndex?: number\n _UITableViewReusabilityIdentifier: any\n _UIViewIntrinsicTemporaryWidth?: string\n _UIViewIntrinsicTemporaryHeight?: string\n _enabled: boolean = YES\n _frame?: UIRectangle & { zIndex?: number }\n _backgroundColor: UIColor = UIColor.transparentColor\n \n _viewHTMLElement!: HTMLElement & LooseObject\n \n // Dynamic innerHTML\n _innerHTMLKey?: string\n _defaultInnerHTML?: string\n _parameters?: { [x: string]: (string | UILocalizedTextObject) }\n \n _localizedTextObject?: UILocalizedTextObject = nil\n \n _controlEventTargets: ControlEventTargetsObject = {} //{ \"PointerDown\": Function[]; \"PointerMove\": Function[]; \"PointerLeave\": Function[]; \"PointerEnter\": Function[]; \"PointerUpInside\": Function[]; \"PointerUp\": Function[]; \"PointerHover\": Function[]; };\n _frameTransform: string\n viewController: UIViewController = nil\n _updateLayoutFunction: any = nil\n // @ts-ignore\n _constraints: any[] //AutoLayout.Constraint[];\n superview: UIView\n subviews: UIView[]\n _styleClasses: any[]\n _isHidden: boolean = NO\n \n pausesPointerEvents: boolean = NO\n stopsPointerEventPropagation: boolean = YES\n pointerDraggingPoint: UIPoint = new UIPoint(0, 0)\n _previousClientPoint: UIPoint = new UIPoint(0, 0)\n _isPointerInside?: boolean\n _isPointerValid?: boolean\n _isPointerValidForMovement?: boolean\n _isPointerDown = NO\n _initialPointerPosition?: UIPoint\n _hasPointerDragged?: boolean\n _pointerDragThreshold = 2\n \n ignoresTouches: boolean = NO\n ignoresMouse: boolean = NO\n \n core: UICore = UICore.main\n \n static _UIViewIndex: number = -1\n _UIViewIndex: number\n \n static _viewsToLayout: UIView[] = []\n \n forceIntrinsicSizeZero: boolean = NO\n _touchEventTime?: number\n \n static _pageScale = 1\n _scale: number = 1\n isInternalScaling: boolean = YES\n private _resizeObserver!: ResizeObserver\n \n private _isMovable = NO\n makeNotMovable?: () => void\n \n private _isResizable = NO\n makeNotResizable?: () => void\n \n private _isMoving: boolean = NO\n \n constructor(\n elementID: string = (\"UIView\" + UIView.nextIndex),\n viewHTMLElement: HTMLElement & LooseObject | null = null,\n elementType: string | null = null,\n initViewData?: any\n ) {\n \n super()\n \n // Instance variables\n \n UIView._UIViewIndex = UIView.nextIndex\n this._UIViewIndex = UIView._UIViewIndex\n \n this._styleClasses = []\n \n this._initViewHTMLElement(elementID, viewHTMLElement, elementType)\n \n this.subviews = []\n this.superview = nil\n \n this._constraints = []\n this._updateLayoutFunction = nil\n \n \n this._frameTransform = \"\"\n \n this._initViewCSSSelectorsIfNeeded()\n \n this._loadUIEvents()\n this.setNeedsLayout()\n \n }\n \n static get nextIndex() {\n return UIView._UIViewIndex + 1\n }\n \n static get pageHeight() {\n const body = document.body\n const html = document.documentElement\n return Math.max(\n body.scrollHeight,\n body.offsetHeight,\n html.clientHeight,\n html.scrollHeight,\n html.offsetHeight\n )\n }\n \n \n static get pageWidth() {\n const body = document.body\n const html = document.documentElement\n return Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth)\n }\n \n centerInContainer() {\n this.style.left = \"50%\"\n this.style.top = \"50%\"\n this.style.transform = \"translateX(-50%) translateY(-50%)\"\n }\n \n centerXInContainer() {\n this.style.left = \"50%\"\n this.style.transform = \"translateX(-50%)\"\n }\n \n \n centerYInContainer() {\n this.style.top = \"50%\"\n this.style.transform = \"translateY(-50%)\"\n }\n \n \n _initViewHTMLElement(\n elementID: string,\n viewHTMLElement: (HTMLElement & LooseObject) | null,\n elementType?: string | null\n ) {\n \n if (!IS(elementType)) {\n elementType = \"div\"\n }\n \n if (!IS(viewHTMLElement)) {\n \n this._viewHTMLElement = this.createElement(elementID, elementType)\n \n this.style.position = \"absolute\"\n this.style.margin = \"0\"\n \n }\n else {\n \n this._viewHTMLElement = viewHTMLElement\n \n }\n \n if (IS(elementID)) {\n this.viewHTMLElement.id = elementID\n }\n \n this.viewHTMLElement.obeyAutolayout = YES\n this.viewHTMLElement.UIView = this\n this.addStyleClass(this.styleClassName)\n \n this._resizeObserver = new ResizeObserver(() => this.setNeedsLayout())\n this._resizeObserver.observe(this.viewHTMLElement)\n \n }\n \n \n set nativeSelectionEnabled(selectable: boolean) {\n this._nativeSelectionEnabled = selectable\n if (!selectable) {\n this.style.cssText = this.style.cssText +\n \" -webkit-touch-callout: none; -webkit-user-select: none; \" +\n \"-khtml-user-select: none; -moz-user-select: none; \" +\n \"-ms-user-select: none; user-select: none;\"\n }\n else {\n this.style.cssText = this.style.cssText +\n \" -webkit-touch-callout: text; -webkit-user-select: text; \" +\n \"-khtml-user-select: text; -moz-user-select: text; \" +\n \"-ms-user-select: text; user-select: text;\"\n }\n }\n \n \n get nativeSelectionEnabled() {\n return this._nativeSelectionEnabled\n }\n \n get styleClassName() {\n return \"UICore_UIView_\" + this.class.name\n }\n \n protected _initViewCSSSelectorsIfNeeded() {\n if (!this.class._areViewCSSSelectorsInitialized) {\n this.initViewStyleSelectors()\n this.class._areViewCSSSelectorsInitialized = YES\n }\n }\n \n initViewStyleSelectors() {\n \n // Override this in a subclass\n \n }\n \n \n initStyleSelector(selector: string, style: string) {\n const styleRules = UIView.getStyleRules(selector)\n if (!styleRules) {\n UIView.createStyleSelector(selector, style)\n }\n }\n \n createElement(elementID: string, elementType: string) {\n let result = document.getElementById(elementID)\n if (!result) {\n result = document.createElement(elementType)\n }\n return result\n }\n \n public get viewHTMLElement() {\n return this._viewHTMLElement\n }\n \n \n public get elementID() {\n return this.viewHTMLElement.id\n }\n \n \n setInnerHTML(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n \n this._innerHTMLKey = key\n this._defaultInnerHTML = defaultString\n this._parameters = parameters\n \n const languageName = UICore.languageService.currentLanguageKey\n const result = UICore.languageService.stringForKey(key, languageName, defaultString, parameters)\n \n this.innerHTML = result ?? \"\"\n \n }\n \n protected _setInnerHTMLFromKeyIfPossible() {\n if (this._innerHTMLKey && this._defaultInnerHTML) {\n this.setInnerHTML(this._innerHTMLKey, this._defaultInnerHTML, this._parameters)\n }\n }\n \n \n protected _setInnerHTMLFromLocalizedTextObjectIfPossible() {\n if (IS(this._localizedTextObject)) {\n this.innerHTML = UICore.languageService.stringForCurrentLanguage(this._localizedTextObject)\n }\n }\n \n get localizedTextObject() {\n return this._localizedTextObject\n }\n \n \n set localizedTextObject(localizedTextObject: UILocalizedTextObject | undefined) {\n this._localizedTextObject = localizedTextObject\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n \n get innerHTML() {\n return this.viewHTMLElement.innerHTML\n }\n \n \n set innerHTML(innerHTML) {\n if (this.innerHTML != innerHTML) {\n this.viewHTMLElement.innerHTML = FIRST(innerHTML, \"\")\n }\n }\n \n set hoverText(hoverText: string) {\n this.viewHTMLElement.setAttribute(\"title\", hoverText)\n }\n \n \n get hoverText() {\n return this.viewHTMLElement.getAttribute(\"title\") ?? \"\"\n }\n \n \n get scrollSize() {\n return new UIRectangle(0, 0, this.viewHTMLElement.scrollHeight, this.viewHTMLElement.scrollWidth)\n }\n \n \n get dialogView(): UIDialogView {\n if (!IS(this.superview)) {\n return nil\n }\n if (!((this as any)[\"_isAUIDialogView\"])) {\n return this.superview.dialogView\n }\n return this as any as UIDialogView\n }\n \n \n get rootView(): UIView {\n if (IS(this.superview)) {\n return this.superview.rootView\n }\n return this\n }\n \n public set enabled(enabled: boolean) {\n this._enabled = enabled\n this.updateContentForCurrentEnabledState()\n }\n \n public get enabled(): boolean {\n return this._enabled\n }\n \n \n updateContentForCurrentEnabledState() {\n this.hidden = !this.enabled\n this.userInteractionEnabled = this.enabled\n }\n \n public get tabIndex(): number {\n return Number(this.viewHTMLElement.getAttribute(\"tabindex\"))\n }\n \n \n public set tabIndex(index: number) {\n this.viewHTMLElement.setAttribute(\"tabindex\", \"\" + index)\n }\n \n \n get propertyDescriptors(): { object: UIObject; name: string }[] {\n let result: any[] = []\n this.withAllSuperviews.forEach(view => {\n FIRST_OR_NIL(view.viewController).forEach((value, key, stopLooping) => {\n if (this == value) {\n result.push({ object: view.viewController, name: key })\n }\n })\n view.forEach((value, key, stopLooping) => {\n if (this == value) {\n result.push({ object: view, name: key })\n }\n })\n })\n return result\n }\n \n get styleClasses() {\n return this._styleClasses\n }\n \n set styleClasses(styleClasses) {\n this._styleClasses = styleClasses\n }\n \n hasStyleClass(styleClass: string) {\n \n // This is for performance reasons\n if (!IS(styleClass)) {\n return NO\n }\n \n const index = this.styleClasses.indexOf(styleClass)\n if (index > -1) {\n return YES\n }\n return NO\n \n }\n \n addStyleClass(styleClass: string) {\n \n if (!IS(styleClass)) {\n return\n }\n \n if (!this.hasStyleClass(styleClass)) {\n this._styleClasses.push(styleClass)\n }\n \n }\n \n \n removeStyleClass(styleClass: string) {\n \n // This is for performance reasons\n if (!IS(styleClass)) {\n return\n }\n \n const index = this.styleClasses.indexOf(styleClass)\n if (index > -1) {\n this.styleClasses.splice(index, 1)\n }\n \n }\n \n \n static findViewWithElementID(elementID: string): UIView {\n const viewHTMLElement = document.getElementById(elementID)\n if (IS_NOT(viewHTMLElement)) {\n return nil\n }\n // @ts-ignore\n return viewHTMLElement.UIView\n }\n \n \n static createStyleSelector(selector: string, style: string) {\n \n return\n \n // // @ts-ignore\n // if (!document.styleSheets) {\n // return\n // }\n // if (document.getElementsByTagName(\"head\").length == 0) {\n // return\n // }\n //\n // let styleSheet\n // let mediaType\n //\n // if (document.styleSheets.length > 0) {\n // for (var i = 0, l: any = document.styleSheets.length; i < l; i++) {\n // if (document.styleSheets[i].disabled) {\n // continue\n // }\n // const media = document.styleSheets[i].media\n // mediaType = typeof media\n //\n // if (mediaType === \"string\") {\n // if (media as any === \"\" || ((media as any).indexOf(\"screen\") !== -1)) {\n // styleSheet = document.styleSheets[i]\n // }\n // }\n // else if (mediaType == \"object\") {\n // if (media.mediaText === \"\" || (media.mediaText.indexOf(\"screen\") !== -1)) {\n // styleSheet = document.styleSheets[i]\n // }\n // }\n //\n // if (typeof styleSheet !== \"undefined\") {\n // break\n // }\n // }\n // }\n //\n // if (typeof styleSheet === \"undefined\") {\n // const styleSheetElement = document.createElement(\"style\")\n // styleSheetElement.type = \"text/css\"\n // document.getElementsByTagName(\"head\")[0].appendChild(styleSheetElement)\n //\n // for (i = 0; i < document.styleSheets.length; i++) {\n // if (document.styleSheets[i].disabled) {\n // continue\n // }\n // styleSheet = document.styleSheets[i]\n // }\n //\n // mediaType = typeof styleSheet.media\n // }\n //\n // if (mediaType === \"string\") {\n // for (var i = 0, l = styleSheet.rules.length; i < l; i++) {\n // if (styleSheet.rules[i].selectorText && styleSheet.rules[i].selectorText.toLowerCase() ==\n // selector.toLowerCase()) {\n // styleSheet.rules[i].style.cssText = style\n // return\n // }\n // }\n // styleSheet.addRule(selector, style)\n // }\n // else if (mediaType === \"object\") {\n //\n // var styleSheetLength = 0\n //\n // try {\n //\n // styleSheetLength = (styleSheet.cssRules) ? styleSheet.cssRules.length : 0\n //\n // } catch (error) {\n //\n // }\n //\n //\n // for (var i = 0; i < styleSheetLength; i++) {\n // if (styleSheet.cssRules[i].selectorText && styleSheet.cssRules[i].selectorText.toLowerCase() ==\n // selector.toLowerCase()) {\n // styleSheet.cssRules[i].style.cssText = style\n // return\n // }\n // }\n // styleSheet.insertRule(selector + \"{\" + style + \"}\", styleSheetLength)\n // }\n }\n \n \n static getStyleRules(selector: string) {\n \n // https://stackoverflow.com/questions/324486/how-do-you-read-css-rule-values-with-javascript\n //Inside closure so that the inner functions don't need regeneration on every call.\n const getCssClasses = (function () {\n function normalize(str: string) {\n if (!str) {\n return \"\"\n }\n str = String(str).replace(/\\s*([>~+])\\s*/g, \" $1 \") //Normalize symbol spacing.\n return str.replace(/(\\s+)/g, \" \").trim() //Normalize whitespace\n }\n \n function split(str: string, on: string) { //Split, Trim, and remove empty elements\n return str.split(on).map(x => x.trim()).filter(x => x)\n }\n \n function containsAny(selText: string | any[], ors: any[]) {\n return selText ? ors.some(x => selText.indexOf(x) >= 0) : false\n }\n \n return function (selector: string) {\n const logicalORs = split(normalize(selector), \",\")\n const sheets = Array.from(window.document.styleSheets)\n const ruleArrays = sheets.map((x) => Array.from(x.rules || x.cssRules || []))\n const allRules = ruleArrays.reduce((all, x) => all.concat(x), [])\n // @ts-ignore\n return allRules.filter((x) => containsAny(normalize(x.selectorText), logicalORs))\n }\n })()\n \n return getCssClasses(selector)\n \n // selector = selector.toLowerCase()\n // let styleRules\n // for (let i = 0; i < document.styleSheets.length; i++) {\n // const styleSheet = document.styleSheets[i] as any\n //\n // try {\n //\n // styleRules = styleSheet.cssRules ? styleSheet.cssRules : styleSheet.rules\n //\n // } catch (error) {\n //\n // console.log(error)\n //\n // }\n //\n // }\n //\n // return styleRules\n \n }\n \n get style() {\n return this.viewHTMLElement.style\n }\n \n get computedStyle() {\n return getComputedStyle(this.viewHTMLElement)\n }\n \n \n public get hidden(): boolean {\n return this._isHidden\n }\n \n public set hidden(v: boolean) {\n \n this._isHidden = v\n \n if (this._isHidden) {\n this.style.visibility = \"hidden\"\n }\n else {\n this.style.visibility = \"visible\"\n }\n \n \n }\n \n static set pageScale(scale: number) {\n \n UIView._pageScale = scale\n \n const zoom = scale\n const width = 100 / zoom\n const viewHTMLElement = UICore.main.rootViewController.view.viewHTMLElement\n viewHTMLElement.style.transformOrigin = \"left top\"\n viewHTMLElement.style.transform = \"scale(\" + zoom + \")\"\n viewHTMLElement.style.width = width + \"%\"\n \n }\n \n \n static get pageScale() {\n return UIView._pageScale\n }\n \n set scale(scale: number) {\n \n this._scale = scale\n \n const zoom = scale\n // const width = 100 / zoom\n // const height = 100 / zoom\n const viewHTMLElement = this.viewHTMLElement\n viewHTMLElement.style.transformOrigin = \"left top\"\n viewHTMLElement.style.transform = viewHTMLElement.style.transform.replace(\n (viewHTMLElement.style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\"),\n \"\"\n ) + \"scale(\" + zoom + \")\"\n // viewHTMLElement.style.width = width + \"%\"\n // viewHTMLElement.style.height = height + \"%\"\n \n if (this.isInternalScaling) {\n \n this.setFrame(this.frame, this.frame.zIndex, YES)\n \n }\n \n }\n \n \n get scale() {\n \n return this._scale\n \n }\n \n // Use this method to calculate the frame for the view itself\n // This can be used when adding subviews to existing views like buttons\n calculateAndSetViewFrame() {\n \n }\n \n \n public get frame() {\n let result: UIRectangle & { zIndex?: number } = this._frame?.copy() as any\n if (!result) {\n result = new UIRectangle(\n this.viewHTMLElement.offsetLeft,\n this.viewHTMLElement.offsetTop,\n this.viewHTMLElement.offsetHeight,\n this.viewHTMLElement.offsetWidth\n ) as any\n result.zIndex = 0\n }\n return result\n }\n \n public set frame(rectangle: UIRectangle & { zIndex?: number }) {\n if (IS(rectangle)) {\n this.setFrame(rectangle, rectangle.zIndex)\n }\n }\n \n \n setFrame(rectangle: UIRectangle & { zIndex?: number }, zIndex = 0, performUncheckedLayout = NO) {\n \n const frame: (UIRectangle & { zIndex?: number }) = this._frame || new UIRectangle(nil, nil, nil, nil) as any\n \n if (zIndex != undefined) {\n rectangle.zIndex = zIndex\n }\n this._frame = rectangle\n \n if (frame && frame.isEqualTo(rectangle) && frame.zIndex == rectangle.zIndex && !performUncheckedLayout) {\n return\n }\n \n if (this.isInternalScaling) {\n rectangle.scale(1 / this.scale)\n }\n \n UIView._setAbsoluteSizeAndPosition(\n this.viewHTMLElement,\n rectangle.topLeft.x,\n rectangle.topLeft.y,\n rectangle.width,\n rectangle.height,\n rectangle.zIndex\n )\n \n if (frame.height != rectangle.height || frame.width != rectangle.width || performUncheckedLayout) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n get bounds() {\n let result: UIRectangle\n if (IS_NOT(this._frame)) {\n result = new UIRectangle(0, 0, this.viewHTMLElement.offsetHeight, this.viewHTMLElement.offsetWidth)\n }\n else {\n result = this.frame.copy()\n result.x = 0\n result.y = 0\n }\n return result\n }\n \n \n set bounds(rectangle) {\n const frame = this.frame\n const newFrame = new UIRectangle(frame.topLeft.x, frame.topLeft.y, rectangle.height, rectangle.width)\n // @ts-ignore\n newFrame.zIndex = frame.zIndex\n this.frame = newFrame\n }\n \n \n boundsDidChange() {\n \n \n }\n \n setPosition(\n left: number | string = nil,\n right: number | string = nil,\n bottom: number | string = nil,\n top: number | string = nil,\n height: number | string = nil,\n width: number | string = nil\n ) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"left\", left)\n this.setStyleProperty(\"right\", right)\n this.setStyleProperty(\"bottom\", bottom)\n this.setStyleProperty(\"top\", top)\n this.setStyleProperty(\"height\", height)\n this.setStyleProperty(\"width\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"height\", height)\n this.setStyleProperty(\"width\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setMinSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"minHeight\", height)\n this.setStyleProperty(\"minWidth\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setMaxSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"maxHeight\", height)\n this.setStyleProperty(\"maxWidth\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setMargin(margin?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"margin\", margin)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setMargins(left?: number | string, right?: number | string, bottom?: number | string, top?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"marginLeft\", left)\n this.setStyleProperty(\"marginRight\", right)\n this.setStyleProperty(\"marginBottom\", bottom)\n this.setStyleProperty(\"marginTop\", top)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n setPadding(padding?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"padding\", padding)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n \n setPaddings(left?: number | string, right?: number | string, bottom?: number | string, top?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"paddingLeft\", left)\n this.setStyleProperty(\"paddingRight\", right)\n this.setStyleProperty(\"paddingBottom\", bottom)\n this.setStyleProperty(\"paddingTop\", top)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n \n setBorder(\n radius: number | string = nil,\n width: number | string = 1,\n color: UIColor = UIColor.blackColor,\n style: string = \"solid\"\n ) {\n \n this.setStyleProperty(\"borderStyle\", style)\n \n this.setStyleProperty(\"borderRadius\", radius)\n \n this.setStyleProperty(\"borderColor\", color.stringValue)\n \n this.setStyleProperty(\"borderWidth\", width)\n \n }\n \n \n setStyleProperty(propertyName: string, value?: number | string) {\n \n try {\n \n if (IS_NIL(value)) {\n return\n }\n if (IS_DEFINED(value) && (value as Number).isANumber) {\n value = \"\" + (value as number).integerValue + \"px\"\n }\n \n // @ts-ignore\n this.style[propertyName] = value\n \n } catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n get userInteractionEnabled() {\n return (this.style.pointerEvents != \"none\")\n }\n \n \n set userInteractionEnabled(userInteractionEnabled) {\n if (userInteractionEnabled) {\n this.style.pointerEvents = \"\"\n }\n else {\n this.style.pointerEvents = \"none\"\n }\n }\n \n get backgroundColor() {\n return this._backgroundColor\n }\n \n \n set backgroundColor(backgroundColor: UIColor) {\n this._backgroundColor = backgroundColor\n this.style.backgroundColor = backgroundColor.stringValue\n }\n \n get alpha() {\n return 1 * (this.style.opacity as any)\n }\n \n \n set alpha(alpha) {\n this.style.opacity = \"\" + alpha\n }\n \n \n static animateViewOrViewsWithDurationDelayAndFunction(\n viewOrViews: UIView | HTMLElement | UIView[] | HTMLElement[],\n duration: number,\n delay: number,\n timingStyle = \"cubic-bezier(0.25,0.1,0.25,1)\",\n transformFunction: Function,\n transitioncompletionFunction: Function\n ) {\n \n function callTransitioncompletionFunction() {\n (transitioncompletionFunction || nil)();\n (viewOrViews as UIView[] | HTMLElement[]).forEach(view => {\n if (view instanceof UIView) {\n view.animationDidFinish()\n }\n })\n }\n \n if (IS_FIREFOX) {\n \n // Firefox does not fire the transition completion event properly\n new UIObject().performFunctionWithDelay(delay + duration, callTransitioncompletionFunction)\n \n }\n \n \n if (!(viewOrViews instanceof Array)) {\n viewOrViews = [viewOrViews] as any\n }\n \n const transitionStyles: any[] = []\n const transitionDurations: any[] = []\n const transitionDelays: any[] = []\n const transitionTimings: any[] = []\n \n function isUIView(view: any): view is UIView {\n return IS(view.viewHTMLElement)\n }\n \n for (var i = 0; i < (viewOrViews as any).length; i++) {\n \n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n \n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n \n // @ts-ignore\n view.addEventListener(\"transitionend\", transitionDidFinish, true)\n \n transitionStyles.push(view.style.transition)\n transitionDurations.push(view.style.transitionDuration)\n transitionDelays.push(view.style.transitionDelay)\n transitionTimings.push(view.style.transitionTimingFunction)\n \n view.style.transition = \"all\"\n view.style.transitionDuration = \"\" + duration + \"s\"\n view.style.transitionDelay = \"\" + delay + \"s\"\n view.style.transitionTimingFunction = timingStyle\n \n }\n \n transformFunction()\n \n const transitionObject = {\n \"finishImmediately\": finishTransitionImmediately,\n \"didFinish\": transitionDidFinishManually,\n \"views\": viewOrViews,\n \"registrationTime\": Date.now()\n }\n \n function finishTransitionImmediately() {\n for (var i = 0; i < (viewOrViews as any).length; i++) {\n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n view.style.transition = \"all\"\n view.style.transitionDuration = \"\" + duration + \"s\"\n view.style.transitionDelay = \"\" + delay + \"s\"\n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n }\n }\n \n function transitionDidFinish(this: HTMLElement, event: { srcElement: HTMLElement | UIView }) {\n let view = event.srcElement\n if (!view) {\n return\n }\n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n \n callTransitioncompletionFunction()\n \n // @ts-ignore\n view.removeEventListener(\"transitionend\", transitionDidFinish, true)\n \n }\n \n function transitionDidFinishManually() {\n for (let i = 0; i < (viewOrViews as any).length; i++) {\n \n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n \n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n \n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n \n // @ts-ignore\n view.removeEventListener(\"transitionend\", transitionDidFinish, true)\n \n }\n \n \n }\n \n return transitionObject\n \n }\n \n \n animationDidFinish() {\n \n \n }\n \n static _transformAttribute = ((\"transform\" in document.documentElement.style) ? \"transform\" : undefined) ||\n ((\"-webkit-transform\" in document.documentElement.style) ? \"-webkit-transform\" : \"undefined\") ||\n ((\"-moz-transform\" in document.documentElement.style) ? \"-moz-transform\" : \"undefined\") ||\n ((\"-ms-transform\" in document.documentElement.style) ? \"-ms-transform\" : \"undefined\") ||\n ((\"-o-transform\" in document.documentElement.style) ? \"-o-transform\" : \"undefined\")\n \n \n static _setAbsoluteSizeAndPosition(\n element: HTMLElement & LooseObject,\n left: number,\n top: number,\n width: string | number,\n height: string | number,\n zIndex = 0\n ) {\n \n if (!IS(element) || !element.obeyAutolayout && !element.getAttribute(\"obeyAutolayout\")) {\n return\n }\n \n if (IS(height)) {\n height = height.integerValue + \"px\"\n }\n \n if (IS(width)) {\n width = width.integerValue + \"px\"\n }\n \n let str = element.style.cssText\n \n const frameTransform = UIView._transformAttribute + \": translate3d(\" + (left).integerValue + \"px, \" +\n (top).integerValue + \"px, 0px)\"\n \n if (element.UIView) {\n \n str = str + frameTransform +\n (element.style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\") + \";\"\n \n }\n \n if (IS_NIL(height)) {\n str = str + \" height: unset;\"\n }\n else {\n str = str + \" height:\" + height + \";\"\n }\n \n if (IS_NIL(width)) {\n str = str + \" width: unset;\"\n }\n else {\n str = str + \" width:\" + width + \";\"\n }\n \n if (IS_NIL(zIndex)) {\n str = str + \" z-index: unset;\"\n }\n else {\n str = str + \" z-index:\" + zIndex + \";\"\n }\n \n element.style.cssText = element.style.cssText + str\n \n }\n \n \n static performAutoLayout(\n parentElement: HTMLElement & LooseObject,\n visualFormatArray: string | any[] | null,\n constraintsArray: string | any[]\n ) {\n \n const view = new AutoLayout.View()\n \n if (IS(visualFormatArray) && IS(visualFormatArray.length)) {\n view.addConstraints(AutoLayout.VisualFormat.parse(visualFormatArray, { extended: true }))\n }\n \n if (IS(constraintsArray) && IS(constraintsArray.length)) {\n view.addConstraints(constraintsArray)\n }\n \n const elements: Record<string, HTMLElement> = {}\n for (var key in view.subViews) {\n \n if (!view.subViews.hasOwnProperty(key)) {\n continue\n }\n \n var element = nil\n \n try {\n \n element = parentElement.querySelector(\"#\" + key)\n \n } catch (error) {\n \n //console.log(\"Error occurred \" + error);\n \n }\n \n if (!(element && !element.obeyAutolayout && !element.getAttribute(\"obeyAutolayout\")) && element) {\n element.className += element.className ? \" abs\" : \"abs\"\n elements[key] = element\n }\n \n }\n \n let parentUIView = nil\n \n if (parentElement.UIView) {\n parentUIView = parentElement.UIView\n }\n \n const updateLayout = function () {\n view.setSize(\n parentElement ? parentElement.clientWidth : window.innerWidth,\n parentElement ? parentElement.clientHeight : window.innerHeight\n )\n for (key in view.subViews) {\n \n if (!view.subViews.hasOwnProperty(key)) {\n continue\n }\n \n const subView = view.subViews[key]\n \n if (elements[key]) {\n UIView._setAbsoluteSizeAndPosition(\n elements[key],\n subView.left,\n subView.top,\n subView.width,\n subView.height\n )\n }\n }\n \n parentUIView.didLayoutSubviews()\n \n }\n \n updateLayout()\n return updateLayout\n \n }\n \n \n static runFunctionBeforeNextFrame(step: () => void) {\n \n if (IS_SAFARI) {\n \n // This creates a microtask\n Promise.resolve().then(step)\n \n }\n else {\n \n window.requestAnimationFrame(step)\n \n }\n \n }\n \n \n static scheduleLayoutViewsIfNeeded() {\n \n UIView.runFunctionBeforeNextFrame(UIView.layoutViewsIfNeeded)\n \n }\n \n \n static layoutViewsIfNeeded() {\n for (var i = 0; i < UIView._viewsToLayout.length; i++) {\n const view = UIView._viewsToLayout[i]\n view.layoutIfNeeded()\n }\n UIView._viewsToLayout = []\n }\n \n \n setNeedsLayout() {\n \n if (this._shouldLayout) {\n return\n }\n \n this._shouldLayout = YES\n \n // Register view for layout before next frame\n UIView._viewsToLayout.push(this)\n \n if (UIView._viewsToLayout.length == 1) {\n UIView.scheduleLayoutViewsIfNeeded()\n }\n \n }\n \n \n get needsLayout() {\n \n return this._shouldLayout\n \n }\n \n \n layoutIfNeeded() {\n \n if (!this._shouldLayout) {\n return\n }\n \n this._shouldLayout = NO\n \n try {\n \n this.layoutSubviews()\n \n } catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n \n layoutSubviews() {\n \n this.willLayoutSubviews()\n \n this._shouldLayout = NO\n \n // Autolayout\n if (this.constraints.length) {\n this._updateLayoutFunction = UIView.performAutoLayout(this.viewHTMLElement, null, this.constraints)\n }\n this._updateLayoutFunction()\n \n this.viewController.layoutViewSubviews()\n \n this.applyClassesAndStyles()\n \n for (let i = 0; i < this.subviews.length; i++) {\n \n const subview = this.subviews[i]\n subview.calculateAndSetViewFrame()\n \n }\n \n this.didLayoutSubviews()\n \n }\n \n applyClassesAndStyles() {\n for (let i = 0; i < this.styleClasses.length; i++) {\n const styleClass = this.styleClasses[i]\n if (styleClass) {\n this.viewHTMLElement.classList.add(styleClass)\n }\n }\n }\n \n willLayoutSubviews() {\n \n this.viewController.viewWillLayoutSubviews()\n \n }\n \n didLayoutSubviews() {\n \n this.viewController.viewDidLayoutSubviews()\n \n }\n \n get constraints() {\n return this._constraints\n }\n \n set constraints(constraints) {\n this._constraints = constraints\n }\n \n \n addConstraint(constraint: any) {\n this.constraints.push(constraint)\n }\n \n addConstraintsWithVisualFormat(visualFormatArray: string[]) {\n this.constraints = this.constraints.concat(AutoLayout.VisualFormat.parse(\n visualFormatArray,\n { extended: true }\n ))\n }\n \n static constraintWithView(\n view: { isKindOfClass: (arg0: typeof UIView) => any; viewHTMLElement: any; id: any },\n attribute: any,\n relation: any,\n toView: { isKindOfClass: any; viewHTMLElement: any; id: any },\n toAttribute: any,\n multiplier: number,\n constant: number,\n priority: number\n ): Constraint {\n \n let UIViewObject = nil\n let viewID = null\n if (view) {\n if (view.isKindOfClass && view.isKindOfClass(UIView)) {\n UIViewObject = view\n view = view.viewHTMLElement\n }\n viewID = view.id\n }\n \n let toUIViewObject = nil\n let toViewID = null\n if (toView) {\n if (toView.isKindOfClass && view.isKindOfClass(UIView)) {\n toUIViewObject = toView\n toView = toView.viewHTMLElement\n }\n toViewID = toView.id\n }\n \n const constraint = {\n \n view1: viewID,\n attr1: attribute,\n relation: relation,\n view2: toViewID,\n attr2: toAttribute,\n multiplier: multiplier,\n constant: constant,\n priority: priority\n \n }\n \n return constraint\n \n }\n \n static constraintAttribute = {\n \n \"left\": AutoLayout.Attribute.LEFT,\n \"right\": AutoLayout.Attribute.RIGHT,\n \"bottom\": AutoLayout.Attribute.BOTTOM,\n \"top\": AutoLayout.Attribute.TOP,\n \"centerX\": AutoLayout.Attribute.CENTERX,\n \"centerY\": AutoLayout.Attribute.CENTERY,\n \"height\": AutoLayout.Attribute.HEIGHT,\n \"width\": AutoLayout.Attribute.WIDTH,\n \"zIndex\": AutoLayout.Attribute.ZINDEX,\n // Not sure what these are for\n \"constant\": AutoLayout.Attribute.NOTANATTRIBUTE,\n \"variable\": AutoLayout.Attribute.VARIABLE\n \n }\n \n \n static constraintRelation = {\n \n \"equal\": AutoLayout.Relation.EQU,\n \"lessThanOrEqual\": AutoLayout.Relation.LEQ,\n \"greaterThanOrEqual\": AutoLayout.Relation.GEQ\n \n }\n \n \n subviewWithID(viewID: string): UIView {\n let resultHTMLElement = nil\n \n try {\n resultHTMLElement = this.viewHTMLElement.querySelector(\"#\" + viewID)\n } catch (error) {\n console.log(error)\n }\n \n if (resultHTMLElement && resultHTMLElement.UIView) {\n return resultHTMLElement.UIView\n }\n return nil\n }\n \n \n rectangleContainingSubviews() {\n const center = this.bounds.center\n let result = new UIRectangle(center.x, center.y, 0, 0)\n for (let i = 0; i < this.subviews.length; i++) {\n const subview = this.subviews[i]\n let frame = subview.frame\n const rectangleContainingSubviews = subview.rectangleContainingSubviews()\n frame = frame.concatenateWithRectangle(rectangleContainingSubviews)\n result = result.concatenateWithRectangle(frame)\n }\n return result\n }\n \n hasSubview(view: UIView) {\n \n // This is for performance reasons\n if (!IS(view)) {\n return NO\n }\n \n for (let i = 0; i < this.subviews.length; i++) {\n const subview = this.subviews[i]\n if (subview == view) {\n return YES\n }\n }\n return NO\n }\n \n get viewBelowThisView() {\n const result: UIView = (this.viewHTMLElement.previousElementSibling as any || {}).UIView\n return result\n }\n \n get viewAboveThisView() {\n const result: UIView = (this.viewHTMLElement.nextElementSibling as any || {}).UIView\n return result\n }\n \n addSubview(view: UIView, aboveView?: UIView) {\n \n if (!this.hasSubview(view) && IS(view)) {\n \n view.willMoveToSuperview(this)\n \n if (IS(aboveView)) {\n this.viewHTMLElement.insertBefore(view.viewHTMLElement, aboveView.viewHTMLElement.nextSibling)\n this.subviews.insertElementAtIndex(this.subviews.indexOf(aboveView), view)\n }\n else {\n this.viewHTMLElement.appendChild(view.viewHTMLElement)\n this.subviews.push(view)\n }\n \n view.core = this.core\n view.didMoveToSuperview(this)\n \n if (this.superview && this.isMemberOfViewTree) {\n \n view.broadcastEventInSubtree({\n name: UIView.broadcastEventName.AddedToViewTree,\n parameters: nil\n })\n \n }\n \n this.setNeedsLayout()\n \n }\n \n }\n \n \n addSubviews(views: UIView[]) {\n views.forEach(view => this.addSubview(view))\n }\n \n \n addedAsSubviewToView(view: UIView, aboveView?: UIView) {\n view.addSubview(this, aboveView)\n return this\n }\n \n moveToBottomOfSuperview() {\n \n if (IS(this.superview)) {\n \n const bottomView = this.superview.subviews.firstElement\n \n if (bottomView == this) {\n return\n }\n \n this.superview.subviews.removeElement(this)\n this.superview.subviews.insertElementAtIndex(0, this)\n this.superview.viewHTMLElement.insertBefore(this.viewHTMLElement, bottomView.viewHTMLElement)\n \n }\n \n }\n \n \n moveToTopOfSuperview() {\n \n if (IS(this.superview)) {\n \n const topView = this.superview.subviews.lastElement\n \n if (topView == this) {\n return\n }\n \n this.superview.subviews.removeElement(this)\n this.superview.subviews.push(this)\n this.superview.viewHTMLElement.appendChild(this.viewHTMLElement)\n \n }\n \n }\n \n \n removeFromSuperview() {\n if (IS(this.superview)) {\n this.forEachViewInSubtree(view => view.blur())\n const index = this.superview.subviews.indexOf(this)\n if (index > -1) {\n this.superview.subviews.splice(index, 1)\n this.superview.viewHTMLElement.removeChild(this.viewHTMLElement)\n this.superview = nil\n this.broadcastEventInSubtree({\n name: UIView.broadcastEventName.RemovedFromViewTree,\n parameters: nil\n })\n \n }\n }\n }\n \n \n willAppear() {\n \n \n }\n \n willMoveToSuperview(superview: UIView) {\n this._setInnerHTMLFromKeyIfPossible()\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n didMoveToSuperview(superview: UIView) {\n this.superview = superview\n }\n \n wasAddedToViewTree() {\n \n }\n \n wasRemovedFromViewTree() {\n \n }\n \n \n get isMemberOfViewTree() {\n let element: HTMLElement & LooseObject | null = this.viewHTMLElement\n for (let i = 0; element; i = i) {\n if (element.parentElement && element.parentElement == document.body) {\n return YES\n }\n element = element.parentElement\n }\n return NO\n }\n \n \n get withAllSuperviews() {\n const result = []\n let view: UIView = this\n for (let i = 0; IS(view); i = i) {\n result.push(view)\n view = view.superview\n }\n return result\n }\n \n \n setNeedsLayoutOnAllSuperviews() {\n this.withAllSuperviews.reverse().everyElement.setNeedsLayout()\n }\n \n \n setNeedsLayoutUpToRootView() {\n this.setNeedsLayoutOnAllSuperviews()\n this.setNeedsLayout()\n }\n \n \n focus() {\n this.viewHTMLElement.focus()\n }\n \n \n blur() {\n this.viewHTMLElement.blur()\n }\n \n \n get isMovable(): boolean {\n return this._isMovable\n }\n \n set isMovable(isMovable: boolean) {\n \n if (isMovable) {\n \n this.makeMovable()\n \n }\n else {\n \n this.makeNotMovable?.()\n \n }\n \n }\n \n \n makeMovable(\n optionalParameters: {\n shouldMoveWithDragEvent?: (\n sender: UIView,\n event: DragEvent\n ) => boolean; viewDidMoveToPosition?: (view: UIView, isMovementCompleted: boolean) => void\n } = {}\n ) {\n \n if (this.isMovable) {\n return\n }\n \n //const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement\n const shouldMoveWithDragEvent = optionalParameters.shouldMoveWithDragEvent ?? ((\n sender,\n event\n ) => IS(event.altKey))\n \n \n let viewValuesBeforeModifications: any[] = []\n \n let startPoint: UIPoint\n let views: UIView[]\n \n const movementFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent && shouldMoveWithDragEvent(sender, event)) {\n \n if (!this._isMoving) {\n \n startPoint = this.frame.min\n \n sender.pointerDraggingPoint = new UIPoint(0, 0)\n //const neighbouringViews = sender.superview.subviews\n views = sender.withAllSuperviews //.concat(neighbouringViews)\n // sender.moveToTopOfSuperview()\n \n sender.forEachViewInSubtree(view => {\n \n // Cancel pointer\n view.sendControlEventForKey(UIView.controlEvent.PointerCancel, nil)\n \n })\n \n viewValuesBeforeModifications = views.everyElement.configureWithObject({\n style: { cursor: \"move\" },\n nativeSelectionEnabled: NO,\n pausesPointerEvents: YES,\n shouldCallPointerUpInside: async () => NO\n }) as any[]\n \n this._isMoving = YES\n \n }\n \n sender.frame = sender.frame\n .rectangleWithX(startPoint.x + sender.pointerDraggingPoint.x)\n .rectangleWithY(startPoint.y + sender.pointerDraggingPoint.y)\n \n optionalParameters.viewDidMoveToPosition?.(this, NO)\n \n }\n else if (this._isMoving) {\n \n movementStopFunction(sender, event)\n \n }\n \n }\n \n const movementStopFunction = (sender: UIView, event: Event) => {\n \n if (IS_NIL(event) || !this._isMoving) {\n return\n }\n \n views?.forEach(\n (view, index) => {\n \n view.configureWithObject(viewValuesBeforeModifications[index])\n //view.shouldCallPointerUpInside = () => UIView.shouldCallPointerUpInsideOnView(view)\n \n }\n )\n \n optionalParameters.viewDidMoveToPosition?.(this, YES)\n \n this._isMoving = NO\n \n }\n \n const cleanupFunction = () => {\n \n if (!this.isMovable) {\n return\n }\n \n this.removeTargetForControlEvent(UIView.controlEvent.PointerDrag, movementFunction)\n this.removeTargetForControlEvents(\n [UIView.controlEvent.PointerUp, UIView.controlEvent.PointerCancel],\n movementStopFunction\n )\n \n this._isMovable = NO\n \n this.makeNotMovable = undefined\n \n }\n \n this.controlEventTargetAccumulator.PointerDrag = movementFunction\n this.controlEventTargetAccumulator.PointerUp.PointerCancel = movementStopFunction\n \n //UIObject.configureWithObject(overlayElement, { remove: EXTEND(() => cleanupFunction()) })\n \n this._isMovable = YES\n \n this.makeNotMovable = cleanupFunction\n \n }\n \n \n get isResizable(): boolean {\n return this._isResizable\n }\n \n set isResizable(isResizable: boolean) {\n if (isResizable) {\n this.makeResizable()\n }\n else {\n this.makeNotResizable?.()\n }\n }\n \n \n makeResizable(\n optionalParameters: {\n overlayElement?: HTMLElement; borderWidth?: number; borderColor?: UIColor; cornerSize?: string; maxCornerSize?: string; viewDidChangeToSize?: (\n view: UIView,\n isMovementCompleted: boolean\n ) => void\n } = {}\n ) {\n \n if (this.isResizable) {\n return\n }\n \n const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement\n \n const borderWidth = IF(optionalParameters.borderWidth)(RETURNER(optionalParameters.borderWidth + \"px\"))\n .ELSE(RETURNER(undefined)) ||\n overlayElement.style.borderWidth ||\n this.style.borderWidth || \"5px\"\n \n const borderColor = optionalParameters.borderColor?.stringValue ??\n // overlayElement.style.borderColor ??\n // view.style.borderColor ??\n UIColor.transparentColor.stringValue\n //this.transformColorForView(view).stringValue\n \n const maxCornerSize = optionalParameters.maxCornerSize ?? \"10px\"\n const cornerSize = optionalParameters.cornerSize ?? \"5%\"\n \n const pointerUpFunction = () => optionalParameters.viewDidChangeToSize?.(this, YES)\n \n const leftEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"leftEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n left: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n leftEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(event.movementX / UIView.pageScale, 0, 0, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n const rightEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"rightEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n right: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n rightEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, -event.movementX / UIView.pageScale, 0, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n rightEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n // noinspection JSSuspiciousNameCombination\n const bottomEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomEdge\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: \"100%\",\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"row-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n bottomEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, 0, -event.movementY / UIView.pageScale, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n bottomEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n // noinspection JSSuspiciousNameCombination\n const topEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topEdge\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: \"100%\",\n top: \"0px\",\n right: \"0px\",\n cursor: \"row-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n topEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, 0, 0, event.movementY / UIView.pageScale)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n topEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n // noinspection JSSuspiciousNameCombination\n const topLeftCornerTop = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topLeftCornerTop\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n top: \"0px\",\n left: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n const pointerDragTLFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n event.movementX / UIView.pageScale,\n 0,\n 0,\n event.movementY / UIView.pageScale\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n topLeftCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n \n topLeftCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const topLeftCornerLeft = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topLeftCornerLeft\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n top: \"0px\",\n left: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n topLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n \n topLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const bottomLeftCornerLeft = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomLeftCornerLeft\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n const pointerDragBLFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n event.movementX / UIView.pageScale,\n 0,\n -event.movementY / UIView.pageScale,\n 0\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n \n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n // noinspection JSSuspiciousNameCombination\n const bottomLeftCornerBottom = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomLeftCornerBottom\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n \n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n // noinspection JSSuspiciousNameCombination\n const bottomRightCornerBottom = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomRightCornerBottom\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n bottom: \"0px\",\n right: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n const pointerDragBRFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n 0,\n -event.movementX / UIView.pageScale,\n -event.movementY / UIView.pageScale,\n 0\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n bottomRightCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n \n bottomRightCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const bottomRightCornerRight = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomRightCornerRight\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n bottom: \"0px\",\n right: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n bottomRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n \n bottomRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const topRightCornerRight = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topRightCornerRight\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n top: \"0px\",\n right: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n const pointerDragTRFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n 0,\n -event.movementX / UIView.pageScale,\n 0,\n event.movementY / UIView.pageScale\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n topRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n \n topRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n // noinspection JSSuspiciousNameCombination\n const topRightCornerTop = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topRightCornerTop\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n top: \"0px\",\n right: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \n \n topRightCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n \n topRightCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const views = [\n \n leftEdge,\n rightEdge,\n bottomEdge,\n topEdge,\n \n topRightCornerTop,\n topLeftCornerTop,\n topLeftCornerLeft,\n bottomLeftCornerLeft,\n bottomLeftCornerBottom,\n bottomRightCornerBottom,\n bottomRightCornerRight,\n topRightCornerRight\n \n ]\n \n views.forEach(view => overlayElement.appendChild(view.viewHTMLElement))\n \n this._isResizable = YES\n \n this.makeNotResizable = () => {\n \n if (!this.isResizable) {\n return\n }\n \n views.everyElement.viewHTMLElement.remove()\n this.makeNotResizable = undefined\n this._isResizable = NO\n \n }\n \n }\n \n \n static async shouldCallPointerUpInsideOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerHoverOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerLeaveOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerCancelOnView(view: UIView) {\n \n return YES\n \n }\n \n \n shouldCallPointerUpInside() {\n return UIView.shouldCallPointerUpInsideOnView(this)\n }\n \n shouldCallPointerCancel() {\n return UIView.shouldCallPointerCancelOnView(this)\n }\n \n shouldCallPointerHover() {\n return UIView.shouldCallPointerHoverOnView(this)\n }\n \n shouldCallPointerLeave() {\n return UIView.shouldCallPointerLeaveOnView(this)\n }\n \n \n protected _loadUIEvents() {\n \n \n const isTouchEventClassDefined: boolean = NO || (window as any).TouchEvent\n \n const pauseEvent = (event: Event, forced = NO) => {\n \n if (this.pausesPointerEvents || forced) {\n \n if (event.stopPropagation) {\n event.stopPropagation()\n }\n if (event.preventDefault) {\n event.preventDefault()\n }\n event.cancelBubble = true\n event.returnValue = false\n return false\n \n }\n \n if (event.stopPropagation && this.stopsPointerEventPropagation) {\n event.stopPropagation()\n }\n \n }\n \n const onMouseDown = (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n ((this.ignoresMouse || (IS(this._touchEventTime) && (Date.now() - this._touchEventTime) > 500)) &&\n event instanceof MouseEvent)) {\n return\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerDown, event)\n \n this._isPointerInside = YES\n this._isPointerValid = YES\n this._isPointerValidForMovement = YES\n this._isPointerDown = YES\n this._initialPointerPosition = new UIPoint(event.clientX, event.clientY)\n if (isTouchEventClassDefined && event instanceof TouchEvent) {\n this._touchEventTime = Date.now()\n this._initialPointerPosition = new UIPoint(event.touches[0].clientX, event.touches[0].clientY)\n if (event.touches.length > 1) {\n onTouchCancel(event)\n return\n }\n }\n else {\n this._touchEventTime = nil\n pauseEvent(event)\n }\n \n this._hasPointerDragged = NO\n \n const windowMouseMoveFunction = (event: MouseEvent) => {\n onMouseMove(event)\n //pauseEvent(event, YES)\n }\n const windowMouseUpOrLeaveFunction = (event: MouseEvent) => {\n \n window.removeEventListener(\"mousemove\", windowMouseMoveFunction)\n window.removeEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n document.body.removeEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n onmouseup(event)\n \n }\n window.addEventListener(\"mousemove\", windowMouseMoveFunction)\n window.addEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n document.body.addEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n \n const windowTouchFunction = () => {\n window.removeEventListener(\"touchmove\", onTouchMove, true)\n window.removeEventListener(\"mouseup\", windowTouchFunction, true)\n }\n window.addEventListener(\"touchmove\", onTouchMove, true)\n window.addEventListener(\"mouseup\", windowTouchFunction, true)\n \n }\n \n const onTouchStart = onMouseDown as any\n \n const onmouseup = async (event: MouseEvent) => {\n \n this._isPointerDown = NO\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (this._isPointerInside && await this.shouldCallPointerUpInside()) {\n onPointerUpInside(event)\n if (!this._hasPointerDragged) {\n this.sendControlEventForKey(UIView.controlEvent.PointerTap, event)\n }\n }\n \n // This has to be sent after the more specific event so that UIButton can ignore it when not highlighted\n this.sendControlEventForKey(UIView.controlEvent.PointerUp, event)\n \n pauseEvent(event)\n \n }\n \n const onTouchEnd = onmouseup\n \n const onmouseout = async (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (await this.shouldCallPointerLeave()) {\n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n }\n \n this._isPointerInside = NO\n \n pauseEvent(event)\n \n }\n \n const onTouchLeave = onmouseout\n \n const onmouseover = async (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (await this.shouldCallPointerHover()) {\n this.sendControlEventForKey(UIView.controlEvent.PointerHover, event)\n }\n \n this._isPointerInside = YES\n this._isPointerValid = YES\n this._isPointerValidForMovement = YES\n \n pauseEvent(event)\n \n }\n \n const onMouseMove = (event: MouseEvent) => {\n \n // if (this._isPointerDown) {\n //\n // console.log(\"Mouse move\")\n //\n // }\n \n if (!this._isPointerValid && !this._isPointerValidForMovement) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n const clientPoint = new UIPoint(\n event.clientX,\n event.clientY\n )\n if (IS_NOT(this._initialPointerPosition)) {\n this._initialPointerPosition = clientPoint\n }\n \n const distanceToInitialPoint = clientPoint.to(this._initialPointerPosition).length\n if (distanceToInitialPoint > this._pointerDragThreshold) {\n this._hasPointerDragged = YES\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerMove, event)\n \n if (this._hasPointerDragged && this._isPointerDown) {\n const movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / UIView.pageScale)\n .add(this.pointerDraggingPoint)\n this.sendControlEventForKey(UIView.controlEvent.PointerDrag, event)\n }\n \n this._previousClientPoint = clientPoint\n \n pauseEvent(event)\n \n }\n \n const onTouchMove = async (event: TouchEvent) => {\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (event.touches.length > 1) {\n onTouchZoom(event)\n return\n }\n \n const touch = event.touches[0]\n \n const clientPoint = new UIPoint(\n touch.clientX,\n touch.clientY\n )\n const distanceToInitialPoint = clientPoint.to(this._initialPointerPosition!).length\n if (distanceToInitialPoint > this._pointerDragThreshold) {\n this._hasPointerDragged = YES\n }\n \n if (this._isPointerInside && this.viewHTMLElement !=\n document.elementFromPoint(touch.clientX, touch.clientY)) {\n this._isPointerInside = NO\n if (await this.shouldCallPointerLeave()) {\n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n }\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerMove, event)\n \n \n if (this._hasPointerDragged) {\n const movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / UIView.pageScale)\n .add(this.pointerDraggingPoint)\n this.sendControlEventForKey(UIView.controlEvent.PointerDrag, event)\n }\n \n this._previousClientPoint = clientPoint\n \n }\n \n const onTouchZoom = (event: TouchEvent) => {\n this.sendControlEventForKey(UIView.controlEvent.MultipleTouches, event)\n }\n const onPointerUpInside = (event: Event) => {\n \n pauseEvent(event)\n this._isPointerDown = NO\n this.sendControlEventForKey(UIView.controlEvent.PointerUpInside, event)\n \n \n }\n \n const onTouchCancel = async (event: Event) => {\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n this._isPointerValid = NO\n this._isPointerValidForMovement = NO\n this._isPointerDown = NO\n \n if (await this.shouldCallPointerCancel()) {\n this.sendControlEventForKey(UIView.controlEvent.PointerCancel, event)\n }\n \n }\n \n function eventKeyIsEnter(event: { keyCode: number }) {\n if (event.keyCode !== 13) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsTab(event: { keyCode: number }) {\n if (event.keyCode !== 9) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsEsc(event: { key: string; keyCode: number }) {\n let result: boolean\n if (\"key\" in event) {\n result = (event.key == \"Escape\" || event.key == \"Esc\")\n }\n else {\n // @ts-ignore\n result = (event.keyCode == 27)\n }\n return result\n }\n \n function eventKeyIsLeft(event: KeyboardEvent) {\n if (event.keyCode != 37) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsRight(event: KeyboardEvent) {\n if (event.keyCode != 39) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsDown(event: KeyboardEvent) {\n if (event.keyCode != 40) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsUp(event: KeyboardEvent) {\n if (event.keyCode != 38) {\n return NO\n }\n return YES\n }\n \n const onKeyDown = (event: KeyboardEvent) => {\n \n if (eventKeyIsEnter(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EnterDown, event)\n }\n \n if (eventKeyIsEsc(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EscDown, event)\n }\n \n if (eventKeyIsTab(event) && this._controlEventTargets.TabDown && this._controlEventTargets.TabDown.length) {\n this.sendControlEventForKey(UIView.controlEvent.TabDown, event)\n pauseEvent(event, YES)\n }\n \n if (eventKeyIsLeft(event)) {\n this.sendControlEventForKey(UIView.controlEvent.LeftArrowDown, event)\n }\n \n if (eventKeyIsRight(event)) {\n this.sendControlEventForKey(UIView.controlEvent.RightArrowDown, event)\n }\n \n if (eventKeyIsDown(event)) {\n this.sendControlEventForKey(UIView.controlEvent.DownArrowDown, event)\n }\n \n if (eventKeyIsUp(event)) {\n this.sendControlEventForKey(UIView.controlEvent.UpArrowDown, event)\n }\n \n }\n \n const onKeyUp = (event: KeyboardEvent) => {\n \n if (eventKeyIsEnter(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EnterUp, event)\n }\n \n }\n \n \n const onfocus = (event: Event) => {\n this.sendControlEventForKey(UIView.controlEvent.Focus, event)\n }\n \n const onblur = (event: Event) => {\n this.sendControlEventForKey(UIView.controlEvent.Blur, event)\n }\n \n \n // Mouse and touch start events\n // this._viewHTMLElement.onmousedown = onMouseDown\n // this._viewHTMLElement.ontouchstart = onTouchStart\n this.viewHTMLElement.addEventListener(\"mousedown\", onMouseDown, false)\n this.viewHTMLElement.addEventListener(\"touchstart\", onTouchStart, false)\n // //this.viewHTMLElement.addEventListener(\"mouseenter\", onMouseEnter.bind(this), false);\n \n // Mouse and touch move events\n // this._viewHTMLElement.onmousemove = onMouseMove\n // this._viewHTMLElement.ontouchmove = onTouchMove\n //this.viewHTMLElement.addEventListener(\"mousemove\", onMouseMove, false)\n this.viewHTMLElement.addEventListener(\"touchmove\", onTouchMove, false)\n \n //this.viewHTMLElement.addEventListener(\"mousewheel\", onmousewheel.bind(this), false)\n \n this._viewHTMLElement.onmouseover = onmouseover\n // this.viewHTMLElement.addEventListener(\"mouseover\", onmouseover.bind(this), false)\n \n // Mouse and touch end events\n // this._viewHTMLElement.onmouseup = onmouseup\n // // @ts-ignore\n // this._viewHTMLElement.ontouchend = onTouchEnd\n // this._viewHTMLElement.ontouchcancel = onTouchCancel\n this.viewHTMLElement.addEventListener(\"mouseup\", onmouseup, false)\n // @ts-ignore\n this.viewHTMLElement.addEventListener(\"touchend\", onTouchEnd, false)\n this.viewHTMLElement.addEventListener(\"touchcancel\", onTouchCancel, false)\n \n //this._viewHTMLElement.onmouseout = onmouseout\n this.viewHTMLElement.addEventListener(\"mouseout\", onmouseout, false)\n // @ts-ignore\n this._viewHTMLElement.addEventListener(\"touchleave\", onTouchLeave, true)\n \n // this.viewHTMLElement.onkeydown = onkeydown\n // this.viewHTMLElement.onkeyup = onkeyup\n this._viewHTMLElement.addEventListener(\"keydown\", onKeyDown, false)\n this._viewHTMLElement.addEventListener(\"keyup\", onKeyUp, false)\n \n // Focus events\n this._viewHTMLElement.onfocus = onfocus\n this._viewHTMLElement.onblur = onblur\n // this.viewHTMLElement.addEventListener(\"focus\", onfocus, true)\n // this.viewHTMLElement.addEventListener(\"blur\", onblur, true)\n \n \n }\n \n public static controlEvent = {\n \n \"PointerDown\": \"PointerDown\",\n \"PointerMove\": \"PointerMove\",\n \"PointerDrag\": \"PointerDrag\",\n \"PointerLeave\": \"PointerLeave\",\n \"PointerEnter\": \"PointerEnter\",\n \"PointerUpInside\": \"PointerUpInside\",\n \"PointerTap\": \"PointerTap\",\n \"PointerUp\": \"PointerUp\",\n \"MultipleTouches\": \"PointerZoom\",\n \"PointerCancel\": \"PointerCancel\",\n \"PointerHover\": \"PointerHover\",\n \"EnterDown\": \"EnterDown\",\n \"EnterUp\": \"EnterUp\",\n \"EscDown\": \"EscDown\",\n \"TabDown\": \"TabDown\",\n \"LeftArrowDown\": \"LeftArrowDown\",\n \"RightArrowDown\": \"RightArrowDown\",\n \"DownArrowDown\": \"DownArrowDown\",\n \"UpArrowDown\": \"UpArrowDown\",\n \"Focus\": \"Focus\",\n \"Blur\": \"Blur\"\n \n }\n \n controlEvent = UIView.controlEvent\n \n \n public get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<UIView> {\n \n const eventKeys: string[] = []\n \n const result: any = new Proxy(\n (this.constructor as any).controlEvent,\n {\n \n get: (target, key: string, _receiver) => {\n \n eventKeys.push(key)\n \n return result\n \n },\n set: (target, key: string, value, _receiver) => {\n \n eventKeys.push(key)\n this.addTargetForControlEvents(eventKeys, value)\n \n return true\n \n }\n \n }\n )\n \n return result\n \n }\n \n \n addTargetForControlEvents(eventKeys: string[], targetFunction: (sender: UIView, event: Event) => void) {\n eventKeys.forEach(key => this.addTargetForControlEvent(key, targetFunction))\n }\n \n \n addTargetForControlEvent(eventKey: string, targetFunction: (sender: UIView, event: Event) => void) {\n \n let targets = this._controlEventTargets[eventKey]\n \n if (!targets) {\n // @ts-ignore\n targets = []\n this._controlEventTargets[eventKey] = targets\n }\n \n if (targets.indexOf(targetFunction) == -1) {\n targets.push(targetFunction)\n }\n \n }\n \n removeTargetForControlEvent(eventKey: string, targetFunction: (sender: UIView, event: Event) => void) {\n const targets = this._controlEventTargets[eventKey]\n if (!targets) {\n return\n }\n const index = targets.indexOf(targetFunction)\n if (index != -1) {\n targets.splice(index, 1)\n }\n }\n \n removeTargetForControlEvents(eventKeys: string[], targetFunction: (sender: UIView, event: Event) => void) {\n eventKeys.forEach(key => this.removeTargetForControlEvent(key, targetFunction))\n }\n \n sendControlEventForKey(eventKey: string, nativeEvent: Event) {\n let targets = this._controlEventTargets[eventKey]\n if (!targets) {\n return\n }\n targets = targets.copy()\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n target(this, nativeEvent)\n }\n }\n \n \n static broadcastEventName = {\n \n \"LanguageChanged\": \"LanguageChanged\",\n \"RemovedFromViewTree\": \"RemovedFromViewTree\",\n \"AddedToViewTree\": \"AddedToViewTree\",\n \"PageDidScroll\": \"PageDidScroll\"\n \n }\n \n \n broadcastEventInSubtree(event: UIViewBroadcastEvent) {\n this.forEachViewInSubtree(view => {\n view.didReceiveBroadcastEvent(event)\n if (IS(view.viewController)) {\n view.viewController.viewDidReceiveBroadcastEvent(event)\n }\n })\n }\n \n didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n if (event.name == UIView.broadcastEventName.PageDidScroll) {\n this._isPointerValid = NO\n }\n \n if (event.name == UIView.broadcastEventName.AddedToViewTree) {\n this.wasAddedToViewTree()\n }\n \n if (event.name == UIView.broadcastEventName.RemovedFromViewTree) {\n this.wasRemovedFromViewTree()\n }\n \n if (event.name == UIView.broadcastEventName.LanguageChanged || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n this._setInnerHTMLFromKeyIfPossible()\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n }\n \n \n forEachViewInSubtree(functionToCall: (view: UIView) => void) {\n functionToCall(this)\n this.subviews.everyElement.forEachViewInSubtree(functionToCall)\n }\n \n \n rectangleInView(rectangle: UIRectangle, view: UIView) {\n if (!view.isMemberOfViewTree || !this.isMemberOfViewTree) {\n return nil\n }\n \n const viewClientRectangle = view.viewHTMLElement.getBoundingClientRect()\n const viewLocation = new UIPoint(viewClientRectangle.left, viewClientRectangle.top)\n \n const selfClientRectangle = this.viewHTMLElement.getBoundingClientRect()\n const selfLocation = new UIPoint(selfClientRectangle.left, selfClientRectangle.top)\n \n const offsetPoint = selfLocation.subtract(viewLocation)\n \n return rectangle.copy().offsetByPoint(offsetPoint)\n }\n \n rectangleFromView(rectangle: UIRectangle, view: UIView) {\n return view.rectangleInView(rectangle, this)\n }\n \n \n intrinsicContentSizeWithConstraints(constrainingHeight: number = 0, constrainingWidth: number = 0) {\n \n // This works but is slow\n \n const result = new UIRectangle(0, 0, 0, 0)\n if (this.rootView.forceIntrinsicSizeZero) {\n return result\n }\n \n let temporarilyInViewTree = NO\n let nodeAboveThisView: Node | null = null\n if (!this.isMemberOfViewTree) {\n document.body.appendChild(this.viewHTMLElement)\n temporarilyInViewTree = YES\n nodeAboveThisView = this.viewHTMLElement.nextSibling\n }\n \n const height = this.style.height\n const width = this.style.width\n \n this.style.height = \"\" + constrainingHeight\n this.style.width = \"\" + constrainingWidth\n \n \n const left = this.style.left\n const right = this.style.right\n const bottom = this.style.bottom\n const top = this.style.top\n \n this.style.left = \"\"\n this.style.right = \"\"\n this.style.bottom = \"\"\n this.style.top = \"\"\n \n \n const resultHeight = this.viewHTMLElement.scrollHeight\n \n \n const whiteSpace = this.style.whiteSpace\n this.style.whiteSpace = \"nowrap\"\n \n const resultWidth = this.viewHTMLElement.scrollWidth\n \n this.style.whiteSpace = whiteSpace\n \n \n this.style.height = height\n this.style.width = width\n \n this.style.left = left\n this.style.right = right\n this.style.bottom = bottom\n this.style.top = top\n \n if (temporarilyInViewTree) {\n document.body.removeChild(this.viewHTMLElement)\n if (this.superview) {\n if (nodeAboveThisView) {\n this.superview.viewHTMLElement.insertBefore(this.viewHTMLElement, nodeAboveThisView)\n }\n else {\n this.superview.viewHTMLElement.appendChild(this.viewHTMLElement)\n }\n }\n }\n \n result.height = resultHeight\n result.width = resultWidth\n \n \n return result\n \n }\n \n \n intrinsicContentWidth(constrainingHeight: number = 0): number {\n \n return this.intrinsicContentSizeWithConstraints(constrainingHeight).width\n \n }\n \n intrinsicContentHeight(constrainingWidth: number = 0): number {\n \n return this.intrinsicContentSizeWithConstraints(undefined, constrainingWidth).height\n \n \n }\n \n intrinsicContentSize(): UIRectangle {\n \n return nil\n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["selector", "i", "_a", "event"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uicore-ts",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.177",
|
|
4
4
|
"description": "UICore is a library to build native-like user interfaces using pure Typescript. No HTML is needed at all. Components are described as TS classes and all user interactions are handled explicitly. This library is strongly inspired by the UIKit framework that is used in IOS. In addition, UICore has tools to handle URL based routing, array sorting and filtering and adds a number of other utilities for convenience.",
|
|
5
5
|
"main": "compiledScripts/index.js",
|
|
6
6
|
"types": "compiledScripts/index.d.ts",
|
package/scripts/UIView.ts
CHANGED
|
@@ -121,7 +121,6 @@ interface Constraint {
|
|
|
121
121
|
export class UIView extends UIObject {
|
|
122
122
|
|
|
123
123
|
|
|
124
|
-
|
|
125
124
|
_nativeSelectionEnabled: boolean = YES
|
|
126
125
|
_shouldLayout?: boolean
|
|
127
126
|
_UITableViewRowIndex?: number
|
|
@@ -183,10 +182,10 @@ export class UIView extends UIObject {
|
|
|
183
182
|
private _resizeObserver!: ResizeObserver
|
|
184
183
|
|
|
185
184
|
private _isMovable = NO
|
|
186
|
-
|
|
185
|
+
makeNotMovable?: () => void
|
|
187
186
|
|
|
188
187
|
private _isResizable = NO
|
|
189
|
-
|
|
188
|
+
makeNotResizable?: () => void
|
|
190
189
|
|
|
191
190
|
private _isMoving: boolean = NO
|
|
192
191
|
|
|
@@ -286,20 +285,20 @@ export class UIView extends UIObject {
|
|
|
286
285
|
else {
|
|
287
286
|
|
|
288
287
|
this._viewHTMLElement = viewHTMLElement
|
|
289
|
-
|
|
288
|
+
|
|
290
289
|
}
|
|
291
|
-
|
|
290
|
+
|
|
292
291
|
if (IS(elementID)) {
|
|
293
292
|
this.viewHTMLElement.id = elementID
|
|
294
293
|
}
|
|
295
|
-
|
|
294
|
+
|
|
296
295
|
this.viewHTMLElement.obeyAutolayout = YES
|
|
297
296
|
this.viewHTMLElement.UIView = this
|
|
298
297
|
this.addStyleClass(this.styleClassName)
|
|
299
|
-
|
|
298
|
+
|
|
300
299
|
this._resizeObserver = new ResizeObserver(() => this.setNeedsLayout())
|
|
301
300
|
this._resizeObserver.observe(this.viewHTMLElement)
|
|
302
|
-
|
|
301
|
+
|
|
303
302
|
}
|
|
304
303
|
|
|
305
304
|
|
|
@@ -772,14 +771,14 @@ export class UIView extends UIObject {
|
|
|
772
771
|
return this._scale
|
|
773
772
|
|
|
774
773
|
}
|
|
774
|
+
|
|
775
775
|
// Use this method to calculate the frame for the view itself
|
|
776
776
|
// This can be used when adding subviews to existing views like buttons
|
|
777
|
-
|
|
778
|
-
|
|
779
777
|
calculateAndSetViewFrame() {
|
|
780
778
|
|
|
781
779
|
}
|
|
782
780
|
|
|
781
|
+
|
|
783
782
|
public get frame() {
|
|
784
783
|
let result: UIRectangle & { zIndex?: number } = this._frame?.copy() as any
|
|
785
784
|
if (!result) {
|
|
@@ -1804,7 +1803,6 @@ export class UIView extends UIObject {
|
|
|
1804
1803
|
}
|
|
1805
1804
|
|
|
1806
1805
|
|
|
1807
|
-
|
|
1808
1806
|
get isMovable(): boolean {
|
|
1809
1807
|
return this._isMovable
|
|
1810
1808
|
}
|
|
@@ -1812,33 +1810,33 @@ export class UIView extends UIObject {
|
|
|
1812
1810
|
set isMovable(isMovable: boolean) {
|
|
1813
1811
|
|
|
1814
1812
|
if (isMovable) {
|
|
1815
|
-
|
|
1813
|
+
|
|
1816
1814
|
this.makeMovable()
|
|
1817
|
-
|
|
1815
|
+
|
|
1818
1816
|
}
|
|
1819
1817
|
else {
|
|
1820
|
-
|
|
1821
|
-
this.
|
|
1822
|
-
|
|
1818
|
+
|
|
1819
|
+
this.makeNotMovable?.()
|
|
1820
|
+
|
|
1823
1821
|
}
|
|
1824
|
-
|
|
1822
|
+
|
|
1825
1823
|
}
|
|
1826
1824
|
|
|
1827
1825
|
|
|
1828
1826
|
makeMovable(
|
|
1829
1827
|
optionalParameters: {
|
|
1830
|
-
|
|
1828
|
+
shouldMoveWithDragEvent?: (
|
|
1831
1829
|
sender: UIView,
|
|
1832
1830
|
event: DragEvent
|
|
1833
1831
|
) => boolean; viewDidMoveToPosition?: (view: UIView, isMovementCompleted: boolean) => void
|
|
1834
1832
|
} = {}
|
|
1835
1833
|
) {
|
|
1836
|
-
|
|
1834
|
+
|
|
1837
1835
|
if (this.isMovable) {
|
|
1838
|
-
return
|
|
1836
|
+
return
|
|
1839
1837
|
}
|
|
1840
1838
|
|
|
1841
|
-
const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement
|
|
1839
|
+
//const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement
|
|
1842
1840
|
const shouldMoveWithDragEvent = optionalParameters.shouldMoveWithDragEvent ?? ((
|
|
1843
1841
|
sender,
|
|
1844
1842
|
event
|
|
@@ -1876,7 +1874,7 @@ export class UIView extends UIObject {
|
|
|
1876
1874
|
pausesPointerEvents: YES,
|
|
1877
1875
|
shouldCallPointerUpInside: async () => NO
|
|
1878
1876
|
}) as any[]
|
|
1879
|
-
|
|
1877
|
+
|
|
1880
1878
|
this._isMoving = YES
|
|
1881
1879
|
|
|
1882
1880
|
}
|
|
@@ -1918,9 +1916,9 @@ export class UIView extends UIObject {
|
|
|
1918
1916
|
}
|
|
1919
1917
|
|
|
1920
1918
|
const cleanupFunction = () => {
|
|
1921
|
-
|
|
1919
|
+
|
|
1922
1920
|
if (!this.isMovable) {
|
|
1923
|
-
return
|
|
1921
|
+
return
|
|
1924
1922
|
}
|
|
1925
1923
|
|
|
1926
1924
|
this.removeTargetForControlEvent(UIView.controlEvent.PointerDrag, movementFunction)
|
|
@@ -1931,7 +1929,7 @@ export class UIView extends UIObject {
|
|
|
1931
1929
|
|
|
1932
1930
|
this._isMovable = NO
|
|
1933
1931
|
|
|
1934
|
-
this.
|
|
1932
|
+
this.makeNotMovable = undefined
|
|
1935
1933
|
|
|
1936
1934
|
}
|
|
1937
1935
|
|
|
@@ -1942,7 +1940,7 @@ export class UIView extends UIObject {
|
|
|
1942
1940
|
|
|
1943
1941
|
this._isMovable = YES
|
|
1944
1942
|
|
|
1945
|
-
this.
|
|
1943
|
+
this.makeNotMovable = cleanupFunction
|
|
1946
1944
|
|
|
1947
1945
|
}
|
|
1948
1946
|
|
|
@@ -1953,14 +1951,15 @@ export class UIView extends UIObject {
|
|
|
1953
1951
|
|
|
1954
1952
|
set isResizable(isResizable: boolean) {
|
|
1955
1953
|
if (isResizable) {
|
|
1956
|
-
this.
|
|
1954
|
+
this.makeResizable()
|
|
1957
1955
|
}
|
|
1958
1956
|
else {
|
|
1959
|
-
this.
|
|
1957
|
+
this.makeNotResizable?.()
|
|
1960
1958
|
}
|
|
1961
1959
|
}
|
|
1962
1960
|
|
|
1963
|
-
|
|
1961
|
+
|
|
1962
|
+
makeResizable(
|
|
1964
1963
|
optionalParameters: {
|
|
1965
1964
|
overlayElement?: HTMLElement; borderWidth?: number; borderColor?: UIColor; cornerSize?: string; maxCornerSize?: string; viewDidChangeToSize?: (
|
|
1966
1965
|
view: UIView,
|
|
@@ -1968,11 +1967,9 @@ export class UIView extends UIObject {
|
|
|
1968
1967
|
) => void
|
|
1969
1968
|
} = {}
|
|
1970
1969
|
) {
|
|
1971
|
-
|
|
1972
|
-
if (this.isResizable) {
|
|
1973
|
-
|
|
1974
|
-
return;
|
|
1975
1970
|
|
|
1971
|
+
if (this.isResizable) {
|
|
1972
|
+
return
|
|
1976
1973
|
}
|
|
1977
1974
|
|
|
1978
1975
|
const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement
|
|
@@ -2014,13 +2011,13 @@ export class UIView extends UIObject {
|
|
|
2014
2011
|
|
|
2015
2012
|
|
|
2016
2013
|
leftEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {
|
|
2017
|
-
|
|
2014
|
+
|
|
2018
2015
|
if (event instanceof DragEvent) {
|
|
2019
|
-
|
|
2016
|
+
|
|
2020
2017
|
this.frame = this.frame.rectangleWithInsets(event.movementX / UIView.pageScale, 0, 0, 0)
|
|
2021
|
-
|
|
2018
|
+
|
|
2022
2019
|
optionalParameters.viewDidChangeToSize?.(this, NO)
|
|
2023
|
-
|
|
2020
|
+
|
|
2024
2021
|
}
|
|
2025
2022
|
|
|
2026
2023
|
}
|
|
@@ -2048,13 +2045,13 @@ export class UIView extends UIObject {
|
|
|
2048
2045
|
|
|
2049
2046
|
|
|
2050
2047
|
rightEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {
|
|
2051
|
-
|
|
2048
|
+
|
|
2052
2049
|
if (event instanceof DragEvent) {
|
|
2053
|
-
|
|
2050
|
+
|
|
2054
2051
|
this.frame = this.frame.rectangleWithInsets(0, -event.movementX / UIView.pageScale, 0, 0)
|
|
2055
|
-
|
|
2052
|
+
|
|
2056
2053
|
optionalParameters.viewDidChangeToSize?.(this, NO)
|
|
2057
|
-
|
|
2054
|
+
|
|
2058
2055
|
}
|
|
2059
2056
|
|
|
2060
2057
|
}
|
|
@@ -2083,13 +2080,13 @@ export class UIView extends UIObject {
|
|
|
2083
2080
|
|
|
2084
2081
|
|
|
2085
2082
|
bottomEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {
|
|
2086
|
-
|
|
2083
|
+
|
|
2087
2084
|
if (event instanceof DragEvent) {
|
|
2088
|
-
|
|
2085
|
+
|
|
2089
2086
|
this.frame = this.frame.rectangleWithInsets(0, 0, -event.movementY / UIView.pageScale, 0)
|
|
2090
|
-
|
|
2087
|
+
|
|
2091
2088
|
optionalParameters.viewDidChangeToSize?.(this, NO)
|
|
2092
|
-
|
|
2089
|
+
|
|
2093
2090
|
}
|
|
2094
2091
|
|
|
2095
2092
|
}
|
|
@@ -2118,19 +2115,20 @@ export class UIView extends UIObject {
|
|
|
2118
2115
|
|
|
2119
2116
|
|
|
2120
2117
|
topEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {
|
|
2121
|
-
|
|
2118
|
+
|
|
2122
2119
|
if (event instanceof DragEvent) {
|
|
2123
|
-
|
|
2120
|
+
|
|
2124
2121
|
this.frame = this.frame.rectangleWithInsets(0, 0, 0, event.movementY / UIView.pageScale)
|
|
2125
|
-
|
|
2122
|
+
|
|
2126
2123
|
optionalParameters.viewDidChangeToSize?.(this, NO)
|
|
2127
|
-
|
|
2124
|
+
|
|
2128
2125
|
}
|
|
2129
2126
|
|
|
2130
2127
|
}
|
|
2131
2128
|
|
|
2132
2129
|
|
|
2133
2130
|
topEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction
|
|
2131
|
+
// noinspection JSSuspiciousNameCombination
|
|
2134
2132
|
const topLeftCornerTop = new UIView().configuredWithObject({
|
|
2135
2133
|
_viewHTMLElement: {
|
|
2136
2134
|
className: "topLeftCornerTop",
|
|
@@ -2153,18 +2151,18 @@ export class UIView extends UIObject {
|
|
|
2153
2151
|
|
|
2154
2152
|
|
|
2155
2153
|
const pointerDragTLFunction = (sender: UIView, event: Event) => {
|
|
2156
|
-
|
|
2154
|
+
|
|
2157
2155
|
if (event instanceof DragEvent) {
|
|
2158
|
-
|
|
2156
|
+
|
|
2159
2157
|
this.frame = this.frame.rectangleWithInsets(
|
|
2160
2158
|
event.movementX / UIView.pageScale,
|
|
2161
2159
|
0,
|
|
2162
2160
|
0,
|
|
2163
2161
|
event.movementY / UIView.pageScale
|
|
2164
2162
|
)
|
|
2165
|
-
|
|
2163
|
+
|
|
2166
2164
|
optionalParameters.viewDidChangeToSize?.(this, NO)
|
|
2167
|
-
|
|
2165
|
+
|
|
2168
2166
|
}
|
|
2169
2167
|
|
|
2170
2168
|
}
|
|
@@ -2221,18 +2219,18 @@ export class UIView extends UIObject {
|
|
|
2221
2219
|
|
|
2222
2220
|
|
|
2223
2221
|
const pointerDragBLFunction = (sender: UIView, event: Event) => {
|
|
2224
|
-
|
|
2222
|
+
|
|
2225
2223
|
if (event instanceof DragEvent) {
|
|
2226
|
-
|
|
2224
|
+
|
|
2227
2225
|
this.frame = this.frame.rectangleWithInsets(
|
|
2228
2226
|
event.movementX / UIView.pageScale,
|
|
2229
2227
|
0,
|
|
2230
2228
|
-event.movementY / UIView.pageScale,
|
|
2231
2229
|
0
|
|
2232
2230
|
)
|
|
2233
|
-
|
|
2231
|
+
|
|
2234
2232
|
optionalParameters.viewDidChangeToSize?.(this, NO)
|
|
2235
|
-
|
|
2233
|
+
|
|
2236
2234
|
}
|
|
2237
2235
|
|
|
2238
2236
|
}
|
|
@@ -2241,6 +2239,7 @@ export class UIView extends UIObject {
|
|
|
2241
2239
|
bottomLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction
|
|
2242
2240
|
|
|
2243
2241
|
|
|
2242
|
+
// noinspection JSSuspiciousNameCombination
|
|
2244
2243
|
const bottomLeftCornerBottom = new UIView().configuredWithObject({
|
|
2245
2244
|
_viewHTMLElement: {
|
|
2246
2245
|
className: "bottomLeftCornerBottom",
|
|
@@ -2267,6 +2266,7 @@ export class UIView extends UIObject {
|
|
|
2267
2266
|
bottomLeftCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction
|
|
2268
2267
|
|
|
2269
2268
|
|
|
2269
|
+
// noinspection JSSuspiciousNameCombination
|
|
2270
2270
|
const bottomRightCornerBottom = new UIView().configuredWithObject({
|
|
2271
2271
|
_viewHTMLElement: {
|
|
2272
2272
|
className: "bottomRightCornerBottom",
|
|
@@ -2289,18 +2289,18 @@ export class UIView extends UIObject {
|
|
|
2289
2289
|
|
|
2290
2290
|
|
|
2291
2291
|
const pointerDragBRFunction = (sender: UIView, event: Event) => {
|
|
2292
|
-
|
|
2292
|
+
|
|
2293
2293
|
if (event instanceof DragEvent) {
|
|
2294
|
-
|
|
2294
|
+
|
|
2295
2295
|
this.frame = this.frame.rectangleWithInsets(
|
|
2296
2296
|
0,
|
|
2297
2297
|
-event.movementX / UIView.pageScale,
|
|
2298
2298
|
-event.movementY / UIView.pageScale,
|
|
2299
2299
|
0
|
|
2300
2300
|
)
|
|
2301
|
-
|
|
2301
|
+
|
|
2302
2302
|
optionalParameters.viewDidChangeToSize?.(this, NO)
|
|
2303
|
-
|
|
2303
|
+
|
|
2304
2304
|
}
|
|
2305
2305
|
|
|
2306
2306
|
}
|
|
@@ -2357,18 +2357,18 @@ export class UIView extends UIObject {
|
|
|
2357
2357
|
|
|
2358
2358
|
|
|
2359
2359
|
const pointerDragTRFunction = (sender: UIView, event: Event) => {
|
|
2360
|
-
|
|
2360
|
+
|
|
2361
2361
|
if (event instanceof DragEvent) {
|
|
2362
|
-
|
|
2362
|
+
|
|
2363
2363
|
this.frame = this.frame.rectangleWithInsets(
|
|
2364
2364
|
0,
|
|
2365
2365
|
-event.movementX / UIView.pageScale,
|
|
2366
2366
|
0,
|
|
2367
2367
|
event.movementY / UIView.pageScale
|
|
2368
2368
|
)
|
|
2369
|
-
|
|
2369
|
+
|
|
2370
2370
|
optionalParameters.viewDidChangeToSize?.(this, NO)
|
|
2371
|
-
|
|
2371
|
+
|
|
2372
2372
|
}
|
|
2373
2373
|
|
|
2374
2374
|
}
|
|
@@ -2377,6 +2377,7 @@ export class UIView extends UIObject {
|
|
|
2377
2377
|
topRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction
|
|
2378
2378
|
|
|
2379
2379
|
|
|
2380
|
+
// noinspection JSSuspiciousNameCombination
|
|
2380
2381
|
const topRightCornerTop = new UIView().configuredWithObject({
|
|
2381
2382
|
_viewHTMLElement: {
|
|
2382
2383
|
className: "topRightCornerTop",
|
|
@@ -2425,16 +2426,18 @@ export class UIView extends UIObject {
|
|
|
2425
2426
|
|
|
2426
2427
|
this._isResizable = YES
|
|
2427
2428
|
|
|
2428
|
-
this.
|
|
2429
|
-
|
|
2430
|
-
views.everyElement.viewHTMLElement.remove()
|
|
2429
|
+
this.makeNotResizable = () => {
|
|
2431
2430
|
|
|
2432
|
-
this.
|
|
2431
|
+
if (!this.isResizable) {
|
|
2432
|
+
return
|
|
2433
|
+
}
|
|
2433
2434
|
|
|
2435
|
+
views.everyElement.viewHTMLElement.remove()
|
|
2436
|
+
this.makeNotResizable = undefined
|
|
2434
2437
|
this._isResizable = NO
|
|
2435
2438
|
|
|
2436
2439
|
}
|
|
2437
|
-
|
|
2440
|
+
|
|
2438
2441
|
}
|
|
2439
2442
|
|
|
2440
2443
|
|
|
@@ -2534,32 +2537,32 @@ export class UIView extends UIObject {
|
|
|
2534
2537
|
this._touchEventTime = nil
|
|
2535
2538
|
pauseEvent(event)
|
|
2536
2539
|
}
|
|
2537
|
-
|
|
2540
|
+
|
|
2538
2541
|
this._hasPointerDragged = NO
|
|
2539
|
-
|
|
2542
|
+
|
|
2540
2543
|
const windowMouseMoveFunction = (event: MouseEvent) => {
|
|
2541
2544
|
onMouseMove(event)
|
|
2542
2545
|
//pauseEvent(event, YES)
|
|
2543
2546
|
}
|
|
2544
2547
|
const windowMouseUpOrLeaveFunction = (event: MouseEvent) => {
|
|
2545
|
-
|
|
2548
|
+
|
|
2546
2549
|
window.removeEventListener("mousemove", windowMouseMoveFunction)
|
|
2547
2550
|
window.removeEventListener("mouseup", windowMouseUpOrLeaveFunction, true)
|
|
2548
2551
|
document.body.removeEventListener("mouseleave", windowMouseUpOrLeaveFunction)
|
|
2549
2552
|
onmouseup(event)
|
|
2550
|
-
|
|
2553
|
+
|
|
2551
2554
|
}
|
|
2552
2555
|
window.addEventListener("mousemove", windowMouseMoveFunction)
|
|
2553
2556
|
window.addEventListener("mouseup", windowMouseUpOrLeaveFunction, true)
|
|
2554
2557
|
document.body.addEventListener("mouseleave", windowMouseUpOrLeaveFunction)
|
|
2555
|
-
|
|
2558
|
+
|
|
2556
2559
|
const windowTouchFunction = () => {
|
|
2557
2560
|
window.removeEventListener("touchmove", onTouchMove, true)
|
|
2558
2561
|
window.removeEventListener("mouseup", windowTouchFunction, true)
|
|
2559
2562
|
}
|
|
2560
2563
|
window.addEventListener("touchmove", onTouchMove, true)
|
|
2561
2564
|
window.addEventListener("mouseup", windowTouchFunction, true)
|
|
2562
|
-
|
|
2565
|
+
|
|
2563
2566
|
}
|
|
2564
2567
|
|
|
2565
2568
|
const onTouchStart = onMouseDown as any
|
|
@@ -2576,7 +2579,7 @@ export class UIView extends UIObject {
|
|
|
2576
2579
|
(this.ignoresMouse && event instanceof MouseEvent)) {
|
|
2577
2580
|
return
|
|
2578
2581
|
}
|
|
2579
|
-
|
|
2582
|
+
|
|
2580
2583
|
if (this._isPointerInside && await this.shouldCallPointerUpInside()) {
|
|
2581
2584
|
onPointerUpInside(event)
|
|
2582
2585
|
if (!this._hasPointerDragged) {
|
|
@@ -2638,7 +2641,7 @@ export class UIView extends UIObject {
|
|
|
2638
2641
|
// console.log("Mouse move")
|
|
2639
2642
|
//
|
|
2640
2643
|
// }
|
|
2641
|
-
|
|
2644
|
+
|
|
2642
2645
|
if (!this._isPointerValid && !this._isPointerValidForMovement) {
|
|
2643
2646
|
return
|
|
2644
2647
|
}
|