uicore-ts 1.0.55 → 1.0.57

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.
@@ -252,7 +252,7 @@ export declare class UIView extends UIObject {
252
252
  get viewAboveThisView(): UIView;
253
253
  addSubview(view: UIView, aboveView?: UIView): void;
254
254
  addSubviews(views: UIView[]): void;
255
- addAsSubviewToView(view: UIView, aboveView?: UIView): void;
255
+ addedAsSubviewToView(view: UIView, aboveView?: UIView): this;
256
256
  moveToBottomOfSuperview(): void;
257
257
  moveToTopOfSuperview(): void;
258
258
  removeFromSuperview(): void;
@@ -916,8 +916,9 @@ const _UIView = class extends import_UIObject.UIObject {
916
916
  addSubviews(views) {
917
917
  views.forEach((view) => this.addSubview(view));
918
918
  }
919
- addAsSubviewToView(view, aboveView) {
919
+ addedAsSubviewToView(view, aboveView) {
920
920
  view.addSubview(this, aboveView);
921
+ return this;
921
922
  }
922
923
  moveToBottomOfSuperview() {
923
924
  if ((0, import_UIObject.IS)(this.superview)) {
@@ -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 { FIRST, FIRST_OR_NIL, IS, IS_DEFINED, IS_NIL, IS_NOT, nil, NO, UIObject, YES } 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 _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 _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 \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 \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 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 \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 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 }\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 \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 initStyleSelector(selector: string, style: string) {\n const styleRules = UIView.getStyleRules(selector)\n if (!styleRules) {\n UIView.createStyleSelector(selector, style)\n }\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 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 \n protected _setInnerHTMLFromKeyIfPossible() {\n if (this._innerHTMLKey && this._defaultInnerHTML) {\n this.setInnerHTML(this._innerHTMLKey, this._defaultInnerHTML, this._parameters)\n }\n }\n \n protected _setInnerHTMLFromLocalizedTextObjectIfPossible() {\n if (IS(this._localizedTextObject)) {\n this.innerHTML = UICore.languageService.stringForCurrentLanguage(this._localizedTextObject)\n }\n }\n \n \n get localizedTextObject() {\n return this._localizedTextObject\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 \n set hoverText(hoverText: string) {\n this.viewHTMLElement.setAttribute(\"title\", hoverText)\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 \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 updateContentForCurrentEnabledState() {\n this.hidden = !this.enabled\n this.userInteractionEnabled = this.enabled\n }\n \n \n public get tabIndex(): number {\n return Number(this.viewHTMLElement.getAttribute(\"tabindex\"))\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.allSuperviews.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 \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 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 \n get style() {\n return this.viewHTMLElement.style\n }\n \n get computedStyle() {\n return getComputedStyle(this.viewHTMLElement)\n }\n \n public get hidden(): boolean {\n return this._isHidden\n }\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 static get pageScale() {\n return UIView._pageScale\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 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 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 \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 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 \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 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 \n get userInteractionEnabled() {\n return (this.style.pointerEvents != \"none\")\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 \n get backgroundColor() {\n return this._backgroundColor\n }\n \n set backgroundColor(backgroundColor: UIColor) {\n this._backgroundColor = backgroundColor\n this.style.backgroundColor = backgroundColor.stringValue\n }\n \n \n get alpha() {\n return 1 * (this.style.opacity as any)\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 \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 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 str = str + frameTransform + \";\"\n }\n else {\n element.UIView._frameTransform = frameTransform\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 \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 addConstraint(constraint: any) {\n this.constraints.push(constraint)\n }\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 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 \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 addSubviews(views: UIView[]) {\n views.forEach(view => this.addSubview(view))\n }\n \n \n addAsSubviewToView(view: UIView, aboveView?: UIView) {\n \n view.addSubview(this, aboveView);\n \n }\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 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 \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 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 allSuperviews() {\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.allSuperviews.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 static async shouldCallPointerUpInsideOnView(view: UIView) {\n \n return YES\n \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._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 window.addEventListener(\"mousemove\", onMouseMove, true)\n window.addEventListener(\"mouseup\", (event) => {\n \n window.removeEventListener(\"mousemove\", onMouseMove, true)\n onmouseup(event)\n \n })\n \n window.addEventListener(\"touchmove\", onTouchMove, true)\n window.addEventListener(\"mouseup\", () => window.removeEventListener(\"touchmove\", onTouchMove, 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 UIView.shouldCallPointerUpInsideOnView(this)) {\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 = (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n \n this._isPointerInside = NO\n \n pauseEvent(event)\n \n }\n \n const onTouchLeave = onmouseout\n \n const onmouseover = (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerHover, event)\n \n this._isPointerInside = YES\n this._isPointerValid = 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) {\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 = (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 this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\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 = (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._isPointerDown = NO\n \n this.sendControlEventForKey(UIView.controlEvent.PointerCancel, event)\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 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 \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 { FIRST, FIRST_OR_NIL, IS, IS_DEFINED, IS_NIL, IS_NOT, nil, NO, UIObject, YES } 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 _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 _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 \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 \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 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 \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 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 }\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 \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 initStyleSelector(selector: string, style: string) {\n const styleRules = UIView.getStyleRules(selector)\n if (!styleRules) {\n UIView.createStyleSelector(selector, style)\n }\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 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 \n protected _setInnerHTMLFromKeyIfPossible() {\n if (this._innerHTMLKey && this._defaultInnerHTML) {\n this.setInnerHTML(this._innerHTMLKey, this._defaultInnerHTML, this._parameters)\n }\n }\n \n protected _setInnerHTMLFromLocalizedTextObjectIfPossible() {\n if (IS(this._localizedTextObject)) {\n this.innerHTML = UICore.languageService.stringForCurrentLanguage(this._localizedTextObject)\n }\n }\n \n \n get localizedTextObject() {\n return this._localizedTextObject\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 \n set hoverText(hoverText: string) {\n this.viewHTMLElement.setAttribute(\"title\", hoverText)\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 \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 updateContentForCurrentEnabledState() {\n this.hidden = !this.enabled\n this.userInteractionEnabled = this.enabled\n }\n \n \n public get tabIndex(): number {\n return Number(this.viewHTMLElement.getAttribute(\"tabindex\"))\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.allSuperviews.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 \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 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 \n get style() {\n return this.viewHTMLElement.style\n }\n \n get computedStyle() {\n return getComputedStyle(this.viewHTMLElement)\n }\n \n public get hidden(): boolean {\n return this._isHidden\n }\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 static get pageScale() {\n return UIView._pageScale\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 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 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 \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 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 \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 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 \n get userInteractionEnabled() {\n return (this.style.pointerEvents != \"none\")\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 \n get backgroundColor() {\n return this._backgroundColor\n }\n \n set backgroundColor(backgroundColor: UIColor) {\n this._backgroundColor = backgroundColor\n this.style.backgroundColor = backgroundColor.stringValue\n }\n \n \n get alpha() {\n return 1 * (this.style.opacity as any)\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 \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 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 str = str + frameTransform + \";\"\n }\n else {\n element.UIView._frameTransform = frameTransform\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 \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 addConstraint(constraint: any) {\n this.constraints.push(constraint)\n }\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 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 \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 addSubviews(views: UIView[]) {\n views.forEach(view => this.addSubview(view))\n }\n \n \n addedAsSubviewToView(view: UIView, aboveView?: UIView) {\n \n view.addSubview(this, aboveView)\n \n return this\n \n }\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 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 \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 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 allSuperviews() {\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.allSuperviews.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 static async shouldCallPointerUpInsideOnView(view: UIView) {\n \n return YES\n \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._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 window.addEventListener(\"mousemove\", onMouseMove, true)\n window.addEventListener(\"mouseup\", (event) => {\n \n window.removeEventListener(\"mousemove\", onMouseMove, true)\n onmouseup(event)\n \n })\n \n window.addEventListener(\"touchmove\", onTouchMove, true)\n window.addEventListener(\"mouseup\", () => window.removeEventListener(\"touchmove\", onTouchMove, 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 UIView.shouldCallPointerUpInsideOnView(this)) {\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 = (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n \n this._isPointerInside = NO\n \n pauseEvent(event)\n \n }\n \n const onTouchLeave = onmouseout\n \n const onmouseover = (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerHover, event)\n \n this._isPointerInside = YES\n this._isPointerValid = 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) {\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 = (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 this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\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 = (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._isPointerDown = NO\n \n this.sendControlEventForKey(UIView.controlEvent.PointerCancel, event)\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 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 \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", "event"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uicore-ts",
3
- "version": "1.0.55",
3
+ "version": "1.0.57",
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
@@ -345,7 +345,7 @@ export class UIView extends UIObject {
345
345
 
346
346
  const languageName = UICore.languageService.currentLanguageKey
347
347
  const result = UICore.languageService.stringForKey(key, languageName, defaultString, parameters)
348
-
348
+
349
349
  this.innerHTML = result ?? ""
350
350
 
351
351
  }
@@ -703,7 +703,7 @@ export class UIView extends UIObject {
703
703
  viewHTMLElement.style.transformOrigin = "left top"
704
704
  viewHTMLElement.style.transform = "scale(" + zoom + ")"
705
705
  viewHTMLElement.style.width = width + "%"
706
-
706
+
707
707
  }
708
708
 
709
709
  static get pageScale() {
@@ -951,17 +951,17 @@ export class UIView extends UIObject {
951
951
  setStyleProperty(propertyName: string, value?: number | string) {
952
952
 
953
953
  try {
954
-
954
+
955
955
  if (IS_NIL(value)) {
956
956
  return
957
957
  }
958
958
  if (IS_DEFINED(value) && (value as Number).isANumber) {
959
959
  value = "" + (value as number).integerValue + "px"
960
960
  }
961
-
961
+
962
962
  // @ts-ignore
963
963
  this.style[propertyName] = value
964
-
964
+
965
965
  } catch (exception) {
966
966
 
967
967
  console.log(exception)
@@ -1023,34 +1023,34 @@ export class UIView extends UIObject {
1023
1023
  }
1024
1024
 
1025
1025
  if (IS_FIREFOX) {
1026
-
1026
+
1027
1027
  // Firefox does not fire the transition completion event properly
1028
1028
  new UIObject().performFunctionWithDelay(delay + duration, callTransitioncompletionFunction)
1029
-
1029
+
1030
1030
  }
1031
-
1032
-
1031
+
1032
+
1033
1033
  if (!(viewOrViews instanceof Array)) {
1034
1034
  viewOrViews = [viewOrViews] as any
1035
1035
  }
1036
-
1036
+
1037
1037
  const transitionStyles: any[] = []
1038
1038
  const transitionDurations: any[] = []
1039
1039
  const transitionDelays: any[] = []
1040
1040
  const transitionTimings: any[] = []
1041
-
1041
+
1042
1042
  function isUIView(view: any): view is UIView {
1043
1043
  return IS(view.viewHTMLElement)
1044
1044
  }
1045
-
1046
- for (var i = 0; i < (viewOrViews as any).length; i++) {
1047
1045
 
1046
+ for (var i = 0; i < (viewOrViews as any).length; i++) {
1047
+
1048
1048
  let view = (viewOrViews as UIView[] | HTMLElement[])[i]
1049
-
1049
+
1050
1050
  if (isUIView(view)) {
1051
1051
  view = view.viewHTMLElement
1052
1052
  }
1053
-
1053
+
1054
1054
  // @ts-ignore
1055
1055
  view.addEventListener("transitionend", transitionDidFinish, true)
1056
1056
 
@@ -1090,7 +1090,7 @@ export class UIView extends UIObject {
1090
1090
  view.style.transitionTimingFunction = transitionTimings[i]
1091
1091
  }
1092
1092
  }
1093
-
1093
+
1094
1094
  function transitionDidFinish(this: HTMLElement, event: { srcElement: HTMLElement | UIView }) {
1095
1095
  let view = event.srcElement
1096
1096
  if (!view) {
@@ -1105,7 +1105,7 @@ export class UIView extends UIObject {
1105
1105
  view.style.transitionTimingFunction = transitionTimings[i]
1106
1106
 
1107
1107
  callTransitioncompletionFunction()
1108
-
1108
+
1109
1109
  // @ts-ignore
1110
1110
  view.removeEventListener("transitionend", transitionDidFinish, true)
1111
1111
 
@@ -1113,18 +1113,18 @@ export class UIView extends UIObject {
1113
1113
 
1114
1114
  function transitionDidFinishManually() {
1115
1115
  for (let i = 0; i < (viewOrViews as any).length; i++) {
1116
-
1116
+
1117
1117
  let view = (viewOrViews as UIView[] | HTMLElement[])[i]
1118
-
1118
+
1119
1119
  if (isUIView(view)) {
1120
1120
  view = view.viewHTMLElement
1121
1121
  }
1122
-
1122
+
1123
1123
  view.style.transition = transitionStyles[i]
1124
1124
  view.style.transitionDuration = transitionDurations[i]
1125
1125
  view.style.transitionDelay = transitionDelays[i]
1126
1126
  view.style.transitionTimingFunction = transitionTimings[i]
1127
-
1127
+
1128
1128
  // @ts-ignore
1129
1129
  view.removeEventListener("transitionend", transitionDidFinish, true)
1130
1130
 
@@ -1243,7 +1243,7 @@ export class UIView extends UIObject {
1243
1243
  //console.log("Error occurred " + error);
1244
1244
 
1245
1245
  }
1246
-
1246
+
1247
1247
  if (!(element && !element.obeyAutolayout && !element.getAttribute("obeyAutolayout")) && element) {
1248
1248
  element.className += element.className ? " abs" : "abs"
1249
1249
  elements[key] = element
@@ -1371,7 +1371,7 @@ export class UIView extends UIObject {
1371
1371
 
1372
1372
 
1373
1373
  layoutSubviews() {
1374
-
1374
+
1375
1375
  this.willLayoutSubviews()
1376
1376
 
1377
1377
  this._shouldLayout = NO
@@ -1381,16 +1381,16 @@ export class UIView extends UIObject {
1381
1381
  this._updateLayoutFunction = UIView.performAutoLayout(this.viewHTMLElement, null, this.constraints)
1382
1382
  }
1383
1383
  this._updateLayoutFunction()
1384
-
1384
+
1385
1385
  this.viewController.layoutViewSubviews()
1386
1386
 
1387
1387
  this.applyClassesAndStyles()
1388
-
1389
- for (let i = 0; i < this.subviews.length; i++) {
1390
1388
 
1389
+ for (let i = 0; i < this.subviews.length; i++) {
1390
+
1391
1391
  const subview = this.subviews[i]
1392
1392
  subview.calculateAndSetViewFrame()
1393
-
1393
+
1394
1394
  }
1395
1395
 
1396
1396
  this.didLayoutSubviews()
@@ -1549,7 +1549,7 @@ export class UIView extends UIObject {
1549
1549
  if (!IS(view)) {
1550
1550
  return NO
1551
1551
  }
1552
-
1552
+
1553
1553
  for (let i = 0; i < this.subviews.length; i++) {
1554
1554
  const subview = this.subviews[i]
1555
1555
  if (subview == view) {
@@ -1572,9 +1572,9 @@ export class UIView extends UIObject {
1572
1572
  addSubview(view: UIView, aboveView?: UIView) {
1573
1573
 
1574
1574
  if (!this.hasSubview(view) && IS(view)) {
1575
-
1575
+
1576
1576
  view.willMoveToSuperview(this)
1577
-
1577
+
1578
1578
  if (IS(aboveView)) {
1579
1579
  this.viewHTMLElement.insertBefore(view.viewHTMLElement, aboveView.viewHTMLElement.nextSibling)
1580
1580
  this.subviews.insertElementAtIndex(this.subviews.indexOf(aboveView), view)
@@ -1583,12 +1583,12 @@ export class UIView extends UIObject {
1583
1583
  this.viewHTMLElement.appendChild(view.viewHTMLElement)
1584
1584
  this.subviews.push(view)
1585
1585
  }
1586
-
1586
+
1587
1587
  view.core = this.core
1588
1588
  view.didMoveToSuperview(this)
1589
-
1589
+
1590
1590
  if (this.superview && this.isMemberOfViewTree) {
1591
-
1591
+
1592
1592
  view.broadcastEventInSubtree({
1593
1593
  name: UIView.broadcastEventName.AddedToViewTree,
1594
1594
  parameters: nil
@@ -1607,9 +1607,11 @@ export class UIView extends UIObject {
1607
1607
  }
1608
1608
 
1609
1609
 
1610
- addAsSubviewToView(view: UIView, aboveView?: UIView) {
1610
+ addedAsSubviewToView(view: UIView, aboveView?: UIView) {
1611
+
1612
+ view.addSubview(this, aboveView)
1611
1613
 
1612
- view.addSubview(this, aboveView);
1614
+ return this
1613
1615
 
1614
1616
  }
1615
1617
 
@@ -1804,12 +1806,12 @@ export class UIView extends UIObject {
1804
1806
 
1805
1807
  window.removeEventListener("mousemove", onMouseMove, true)
1806
1808
  onmouseup(event)
1807
-
1809
+
1808
1810
  })
1809
-
1811
+
1810
1812
  window.addEventListener("touchmove", onTouchMove, true)
1811
1813
  window.addEventListener("mouseup", () => window.removeEventListener("touchmove", onTouchMove, true))
1812
-
1814
+
1813
1815
  }
1814
1816
 
1815
1817
  const onTouchStart = onMouseDown as any
@@ -2151,7 +2153,7 @@ export class UIView extends UIObject {
2151
2153
 
2152
2154
 
2153
2155
  public static controlEvent = {
2154
-
2156
+
2155
2157
  "PointerDown": "PointerDown",
2156
2158
  "PointerMove": "PointerMove",
2157
2159
  "PointerDrag": "PointerDrag",
@@ -2217,7 +2219,7 @@ export class UIView extends UIObject {
2217
2219
 
2218
2220
 
2219
2221
  addTargetForControlEvent(eventKey: string, targetFunction: (sender: UIView, event: Event) => void) {
2220
-
2222
+
2221
2223
  let targets = this._controlEventTargets[eventKey]
2222
2224
 
2223
2225
  if (!targets) {
@@ -2330,14 +2332,14 @@ export class UIView extends UIObject {
2330
2332
 
2331
2333
 
2332
2334
  intrinsicContentSizeWithConstraints(constrainingHeight: number = 0, constrainingWidth: number = 0) {
2333
-
2335
+
2334
2336
  // This works but is slow
2335
-
2337
+
2336
2338
  const result = new UIRectangle(0, 0, 0, 0)
2337
2339
  if (this.rootView.forceIntrinsicSizeZero) {
2338
2340
  return result
2339
2341
  }
2340
-
2342
+
2341
2343
  let temporarilyInViewTree = NO
2342
2344
  let nodeAboveThisView: Node | null = null
2343
2345
  if (!this.isMemberOfViewTree) {
@@ -2345,10 +2347,10 @@ export class UIView extends UIObject {
2345
2347
  temporarilyInViewTree = YES
2346
2348
  nodeAboveThisView = this.viewHTMLElement.nextSibling
2347
2349
  }
2348
-
2350
+
2349
2351
  const height = this.style.height
2350
2352
  const width = this.style.width
2351
-
2353
+
2352
2354
  this.style.height = "" + constrainingHeight
2353
2355
  this.style.width = "" + constrainingWidth
2354
2356
 
@@ -2405,13 +2407,13 @@ export class UIView extends UIObject {
2405
2407
 
2406
2408
 
2407
2409
  intrinsicContentWidth(constrainingHeight: number = 0): number {
2408
-
2410
+
2409
2411
  return this.intrinsicContentSizeWithConstraints(constrainingHeight).width
2410
2412
 
2411
2413
  }
2412
2414
 
2413
2415
  intrinsicContentHeight(constrainingWidth: number = 0): number {
2414
-
2416
+
2415
2417
  return this.intrinsicContentSizeWithConstraints(undefined, constrainingWidth).height
2416
2418
 
2417
2419
 
@@ -2420,7 +2422,7 @@ export class UIView extends UIObject {
2420
2422
  intrinsicContentSize(): UIRectangle {
2421
2423
 
2422
2424
  return nil
2423
-
2425
+
2424
2426
  }
2425
2427
 
2426
2428