uicore-ts 1.0.38 → 1.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compiledScripts/UIActionIndicator.js.map +2 -2
- package/compiledScripts/UIBaseButton.js.map +1 -1
- package/compiledScripts/UIButton.js.map +1 -1
- package/compiledScripts/UIDateTimeInput.js.map +1 -1
- package/compiledScripts/UIDialogView.js +1 -0
- package/compiledScripts/UIDialogView.js.map +2 -2
- package/compiledScripts/UIImageView.js.map +1 -1
- package/compiledScripts/UILink.js.map +1 -1
- package/compiledScripts/UILinkButton.js.map +1 -1
- package/compiledScripts/UIObject.js +3 -4
- package/compiledScripts/UIObject.js.map +2 -2
- package/compiledScripts/UIRootViewController.js.map +1 -1
- package/compiledScripts/UISlideScrollerView.js.map +1 -1
- package/compiledScripts/UITextArea.js.map +1 -1
- package/compiledScripts/UITextView.js.map +1 -1
- package/package.json +1 -1
- package/scripts/UIActionIndicator.ts +6 -7
- package/scripts/UIBaseButton.ts +7 -7
- package/scripts/UIButton.ts +5 -5
- package/scripts/UIDateTimeInput.ts +2 -2
- package/scripts/UIDialogView.ts +6 -4
- package/scripts/UIImageView.ts +10 -10
- package/scripts/UILink.ts +4 -4
- package/scripts/UILinkButton.ts +2 -2
- package/scripts/UIObject.ts +19 -18
- package/scripts/UIRootViewController.ts +4 -4
- package/scripts/UISlideScrollerView.ts +7 -7
- package/scripts/UITextArea.ts +2 -2
- package/scripts/UITextView.ts +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UIActionIndicator.ts"],
|
|
4
|
-
"sourcesContent": ["import { NO, YES } from \"./UIObject\"\nimport { UIView } from \"./UIView\"\n\n\nexport class UIActionIndicator extends UIView {\n \n \n indicatorView: UIView\n \n _size: number = 50\n \n constructor(elementID?: string) {\n \n super(elementID)\n \n this.indicatorView = new UIView(this.elementID + \"IndicatorView\")\n this.indicatorView.viewHTMLElement.classList.add(\"LukeHaasLoader\")\n this.addSubview(this.indicatorView)\n \n this.hidden = YES\n \n }\n \n \n \n \n \n set size(size: number) {\n \n this._size = size\n \n this.setNeedsLayoutUpToRootView()\n \n }\n \n get size() {\n \n return this._size\n \n }\n \n \n \n override set hidden(hidden: boolean) {\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAwB;AACxB,oBAAuB;AAGhB,MAAM,0BAA0B,qBAAO;AAAA,EAO1C,YAAY,WAAoB;AAE5B,UAAM,SAAS;AAJnB,iBAAgB;AAMZ,SAAK,gBAAgB,IAAI,qBAAO,KAAK,YAAY,eAAe;AAChE,SAAK,cAAc,gBAAgB,UAAU,IAAI,gBAAgB;AACjE,SAAK,WAAW,KAAK,aAAa;AAElC,SAAK,SAAS;AAAA,EAElB;AAAA,EAMA,IAAI,KAAK,MAAc;AAEnB,SAAK,QAAQ;AAEb,SAAK,2BAA2B;AAAA,EAEpC;AAAA,EAEA,IAAI,OAAO;AAEP,WAAO,KAAK;AAAA,EAEhB;AAAA,EAIA,IAAa,OAAO,QAAiB;AAEjC,UAAM,SAAS;AAEf,QAAI,QAAQ;AAER,WAAK,cAAc,oBAAoB;AAAA,IAE3C,OACK;AAED,WAAK,WAAW,KAAK,aAAa;AAAA,IAEtC;AAAA,EAEJ;AAAA,EAEA,QAAQ;AAEJ,SAAK,SAAS;AAAA,EAElB;AAAA,EAEA,OAAO;AAEH,SAAK,SAAS;AAAA,EAElB;AAAA,
|
|
4
|
+
"sourcesContent": ["import { NO, YES } from \"./UIObject\"\nimport { UIView } from \"./UIView\"\n\n\nexport class UIActionIndicator extends UIView {\n \n \n indicatorView: UIView\n \n _size: number = 50\n \n constructor(elementID?: string) {\n \n super(elementID)\n \n this.indicatorView = new UIView(this.elementID + \"IndicatorView\")\n this.indicatorView.viewHTMLElement.classList.add(\"LukeHaasLoader\")\n this.addSubview(this.indicatorView)\n \n this.hidden = YES\n \n }\n \n \n \n \n \n set size(size: number) {\n \n this._size = size\n \n this.setNeedsLayoutUpToRootView()\n \n }\n \n get size() {\n \n return this._size\n \n }\n \n \n \n override set hidden(hidden: boolean) {\n \n super.hidden = hidden\n \n if (hidden) {\n \n this.indicatorView.removeFromSuperview()\n \n }\n else {\n \n this.addSubview(this.indicatorView)\n \n }\n \n }\n \n start() {\n \n this.hidden = NO\n \n }\n \n stop() {\n \n this.hidden = YES\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n const bounds = this.bounds\n \n //this.indicatorView.centerInContainer();\n \n this.indicatorView.style.height = \"\" + this._size.integerValue + \"px\"\n this.indicatorView.style.width = \"\" + this._size.integerValue + \"px\"\n \n const minSize = Math.min(this.bounds.height, this.bounds.width)\n \n this.indicatorView.style.maxHeight = \"\" + minSize.integerValue + \"px\"\n this.indicatorView.style.maxWidth = \"\" + minSize.integerValue + \"px\"\n \n const size = Math.min(this._size, minSize)\n \n this.indicatorView.style.left = \"\" + ((bounds.width - size) * 0.5 - 11).integerValue + \"px\"\n this.indicatorView.style.top = \"\" + ((bounds.height - size) * 0.5 - 11).integerValue + \"px\"\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": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAwB;AACxB,oBAAuB;AAGhB,MAAM,0BAA0B,qBAAO;AAAA,EAO1C,YAAY,WAAoB;AAE5B,UAAM,SAAS;AAJnB,iBAAgB;AAMZ,SAAK,gBAAgB,IAAI,qBAAO,KAAK,YAAY,eAAe;AAChE,SAAK,cAAc,gBAAgB,UAAU,IAAI,gBAAgB;AACjE,SAAK,WAAW,KAAK,aAAa;AAElC,SAAK,SAAS;AAAA,EAElB;AAAA,EAMA,IAAI,KAAK,MAAc;AAEnB,SAAK,QAAQ;AAEb,SAAK,2BAA2B;AAAA,EAEpC;AAAA,EAEA,IAAI,OAAO;AAEP,WAAO,KAAK;AAAA,EAEhB;AAAA,EAIA,IAAa,OAAO,QAAiB;AAEjC,UAAM,SAAS;AAEf,QAAI,QAAQ;AAER,WAAK,cAAc,oBAAoB;AAAA,IAE3C,OACK;AAED,WAAK,WAAW,KAAK,aAAa;AAAA,IAEtC;AAAA,EAEJ;AAAA,EAEA,QAAQ;AAEJ,SAAK,SAAS;AAAA,EAElB;AAAA,EAEA,OAAO;AAEH,SAAK,SAAS;AAAA,EAElB;AAAA,EAGS,iBAAiB;AAEtB,UAAM,eAAe;AAErB,UAAM,SAAS,KAAK;AAIpB,SAAK,cAAc,MAAM,SAAS,KAAK,KAAK,MAAM,eAAe;AACjE,SAAK,cAAc,MAAM,QAAQ,KAAK,KAAK,MAAM,eAAe;AAEhE,UAAM,UAAU,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,OAAO,KAAK;AAE9D,SAAK,cAAc,MAAM,YAAY,KAAK,QAAQ,eAAe;AACjE,SAAK,cAAc,MAAM,WAAW,KAAK,QAAQ,eAAe;AAEhE,UAAM,OAAO,KAAK,IAAI,KAAK,OAAO,OAAO;AAEzC,SAAK,cAAc,MAAM,OAAO,OAAO,OAAO,QAAQ,QAAQ,MAAM,IAAI,eAAe;AACvF,SAAK,cAAc,MAAM,MAAM,OAAO,OAAO,SAAS,QAAQ,MAAM,IAAI,eAAe;AAAA,EAK3F;AAMJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UIBaseButton.ts"],
|
|
4
|
-
"sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { IS, nil, NO, YES } from \"./UIObject\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIBaseButton extends UIView {\n \n _selected: boolean = NO\n _highlighted: boolean = NO\n \n override _isPointerInside: boolean\n \n \n _isToggleable: boolean = NO\n _hovered?: boolean\n _focused?: boolean\n \n \n constructor(elementID?: string, elementType?: string) {\n \n super(elementID, nil, elementType)\n \n // Instance variables\n \n \n this._isPointerInside = NO\n \n \n const setHovered = () => {\n this.hovered = YES\n }\n this.addTargetForControlEvent(UIView.controlEvent.PointerHover, setHovered)\n \n const setNotHovered = () => {\n \n this.hovered = NO\n \n }\n \n this.addTargetForControlEvents([\n UIView.controlEvent.PointerLeave, UIView.controlEvent.PointerCancel, UIView.controlEvent.MultipleTouches\n ], setNotHovered)\n \n \n let highlightingTime: number\n const setHighlighted = () => {\n this.highlighted = YES\n highlightingTime = Date.now()\n }\n this.addTargetForControlEvent(UIView.controlEvent.PointerDown, setHighlighted)\n this.addTargetForControlEvent(UIView.controlEvent.PointerEnter, setHighlighted)\n \n const setNotHighlighted = () => {\n this.highlighted = NO\n }\n const setNotHighlightedWithMinimumDuration = () => {\n const minimumDurationInMilliseconds = 50\n const elapsedTime = Date.now() - highlightingTime\n if (minimumDurationInMilliseconds < elapsedTime) {\n this.highlighted = NO\n }\n else {\n setTimeout(() => {\n this.highlighted = NO\n }, minimumDurationInMilliseconds - elapsedTime)\n }\n }\n this.addTargetForControlEvents([\n UIView.controlEvent.PointerLeave, UIView.controlEvent.PointerCancel, UIView.controlEvent.MultipleTouches\n ], setNotHighlighted)\n this.addTargetForControlEvent(UIView.controlEvent.PointerUp, setNotHighlightedWithMinimumDuration)\n \n // Handle enter key press\n this.addTargetForControlEvent(UIView.controlEvent.EnterDown, () => {\n \n setHighlighted()\n setNotHighlightedWithMinimumDuration()\n \n })\n \n \n this.addTargetForControlEvent(\n UIView.controlEvent.Focus,\n (sender: UIView, event: Event) => {\n \n this.focused = YES\n \n }\n )\n \n this.addTargetForControlEvent(\n UIView.controlEvent.Blur,\n (sender: UIView, event: Event) => {\n \n this.focused = NO\n \n }\n )\n \n \n this.pausesPointerEvents = YES\n this.tabIndex = 1\n \n this.style.cursor = \"pointer\"\n \n //this.style.outline = \"none\";\n \n \n this.nativeSelectionEnabled = NO\n \n \n this.addTargetForControlEvents([\n UIView.controlEvent.EnterDown, UIView.controlEvent.PointerUpInside\n ], () => {\n \n if (this.isToggleable) {\n \n this.toggleSelectedState()\n \n }\n \n })\n \n }\n \n public set hovered(hovered: boolean) {\n this._hovered = hovered\n this.updateContentForCurrentState()\n }\n \n public get hovered(): boolean {\n return this._hovered ?? NO\n }\n \n public set highlighted(highlighted: boolean) {\n this._highlighted = highlighted\n this.updateContentForCurrentState()\n }\n \n public get highlighted(): boolean {\n return this._highlighted\n }\n \n public set focused(focused: boolean) {\n this._focused = focused\n if (focused) {\n this.focus()\n }\n else {\n this.blur()\n }\n this.updateContentForCurrentState()\n }\n \n public get focused(): boolean {\n return this._focused ?? NO\n }\n \n public set selected(selected: boolean) {\n this._selected = selected\n this.updateContentForCurrentState()\n }\n \n public get selected(): boolean {\n return this._selected\n }\n \n \n updateContentForCurrentState() {\n \n let updateFunction: Function = this.updateContentForNormalState\n if (this.selected && this.highlighted) {\n updateFunction = this.updateContentForSelectedAndHighlightedState\n }\n else if (this.selected) {\n updateFunction = this.updateContentForSelectedState\n }\n else if (this.focused) {\n updateFunction = this.updateContentForFocusedState\n }\n else if (this.highlighted) {\n updateFunction = this.updateContentForHighlightedState\n }\n else if (this.hovered) {\n updateFunction = this.updateContentForHoveredState\n }\n \n if (!IS(updateFunction)) {\n this.backgroundColor = UIColor.nilColor\n }\n else {\n updateFunction.call(this)\n }\n \n }\n \n updateContentForNormalState() {\n \n \n }\n \n updateContentForHoveredState() {\n \n this.updateContentForNormalState()\n \n }\n \n updateContentForFocusedState() {\n \n this.updateContentForHoveredState()\n \n }\n \n updateContentForHighlightedState() {\n \n \n }\n \n updateContentForSelectedState() {\n \n \n }\n \n updateContentForSelectedAndHighlightedState() {\n \n this.updateContentForSelectedState()\n \n }\n \n \n override set enabled(enabled: boolean) {\n super.enabled = enabled\n this.updateContentForCurrentEnabledState()\n }\n \n override get enabled() {\n return super.enabled\n }\n \n override updateContentForCurrentEnabledState() {\n \n if (this.enabled) {\n this.alpha = 1\n }\n else {\n this.alpha = 0.5\n }\n \n this.userInteractionEnabled = this.enabled\n \n }\n \n \n override addStyleClass(styleClassName: string) {\n \n super.addStyleClass(styleClassName)\n \n if (this.styleClassName != styleClassName) {\n \n this.updateContentForCurrentState.call(this)\n \n }\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.PageDidScroll || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n \n this.hovered = NO\n \n this.highlighted = NO\n \n this.updateContentForCurrentState()\n \n }\n \n \n }\n \n \n toggleSelectedState() {\n \n \n this.selected = !this.selected\n \n \n }\n \n set isToggleable(isToggleable: boolean) {\n \n this._isToggleable = isToggleable\n \n }\n \n get isToggleable() {\n \n return this._isToggleable\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n const bounds = this.bounds\n \n \n }\n \n \n override sendControlEventForKey(eventKey: string, nativeEvent: Event) {\n \n if (eventKey == UIView.controlEvent.PointerUpInside && !this.highlighted) {\n \n // Do not send the event in this case\n //super.sendControlEventForKey(eventKey, nativeEvent);\n \n const asd = 1\n \n }\n else {\n \n super.sendControlEventForKey(eventKey, nativeEvent)\n \n }\n \n }\n \n \n static getEventCoordinatesInDocument(touchOrMouseEvent: any) {\n // http://www.quirksmode.org/js/events_properties.html\n var posx = 0\n var posy = 0\n var e = touchOrMouseEvent\n if (!e) {\n e = window.event\n }\n if (e.pageX || e.pageY) {\n posx = e.pageX\n posy = e.pageY\n }\n else if (e.clientX || e.clientY) {\n posx = e.clientX + document.body.scrollLeft\n + document.documentElement.scrollLeft\n posy = e.clientY + document.body.scrollTop\n + document.documentElement.scrollTop\n }\n // posx and posy contain the mouse position relative to the document\n \n const coordinates = { \"x\": posx, \"y\": posy }\n \n return coordinates\n \n }\n \n \n static getElementPositionInDocument(el: { tagName: string; offsetLeft: number; scrollLeft: number; clientLeft: number; offsetTop: number; scrollTop: number; clientTop: number; offsetParent: any }) {\n //https://www.kirupa.com/html5/getting_mouse_click_position.htm\n var xPosition = 0\n var yPosition = 0\n \n while (el) {\n if (el.tagName == \"BODY\") {\n \n // Coordinates in document are coordinates in body, therefore subtracting the scroll position of the body is not needed\n \n // // deal with browser quirks with body/window/document and page scroll\n // var xScrollPos = el.scrollLeft || document.documentElement.scrollLeft;\n // var yScrollPos = el.scrollTop || document.documentElement.scrollTop;\n //\n // xPosition += (el.offsetLeft - xScrollPos + el.clientLeft);\n // yPosition += (el.offsetTop - yScrollPos + el.clientTop);\n }\n else {\n xPosition += (el.offsetLeft - el.scrollLeft + el.clientLeft)\n yPosition += (el.offsetTop - el.scrollTop + el.clientTop)\n }\n \n el = el.offsetParent\n }\n return {\n x: xPosition,\n y: yPosition\n }\n }\n \n static convertCoordinatesFromDocumentToElement(x: number, y: number, element: any) {\n const elementPositionInDocument = this.getElementPositionInDocument(element)\n const coordinatesInElement = { \"x\": x - elementPositionInDocument.x, \"y\": y - elementPositionInDocument.y }\n return coordinatesInElement\n }\n \n static getEventCoordinatesInElement(touchOrMouseEvent: any, element: any) {\n const coordinatesInDocument = this.getEventCoordinatesInDocument(touchOrMouseEvent)\n const coordinatesInElement = this.convertCoordinatesFromDocumentToElement(\n coordinatesInDocument.x,\n coordinatesInDocument.y,\n element\n )\n return coordinatesInElement\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\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
4
|
+
"sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { IS, nil, NO, YES } from \"./UIObject\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIBaseButton extends UIView {\n \n _selected: boolean = NO\n _highlighted: boolean = NO\n \n override _isPointerInside: boolean\n \n \n _isToggleable: boolean = NO\n _hovered?: boolean\n _focused?: boolean\n \n \n constructor(elementID?: string, elementType?: string) {\n \n super(elementID, nil, elementType)\n \n // Instance variables\n \n \n this._isPointerInside = NO\n \n \n const setHovered = () => {\n this.hovered = YES\n }\n this.addTargetForControlEvent(UIView.controlEvent.PointerHover, setHovered)\n \n const setNotHovered = () => {\n \n this.hovered = NO\n \n }\n \n this.addTargetForControlEvents([\n UIView.controlEvent.PointerLeave, UIView.controlEvent.PointerCancel, UIView.controlEvent.MultipleTouches\n ], setNotHovered)\n \n \n let highlightingTime: number\n const setHighlighted = () => {\n this.highlighted = YES\n highlightingTime = Date.now()\n }\n this.addTargetForControlEvent(UIView.controlEvent.PointerDown, setHighlighted)\n this.addTargetForControlEvent(UIView.controlEvent.PointerEnter, setHighlighted)\n \n const setNotHighlighted = () => {\n this.highlighted = NO\n }\n const setNotHighlightedWithMinimumDuration = () => {\n const minimumDurationInMilliseconds = 50\n const elapsedTime = Date.now() - highlightingTime\n if (minimumDurationInMilliseconds < elapsedTime) {\n this.highlighted = NO\n }\n else {\n setTimeout(() => {\n this.highlighted = NO\n }, minimumDurationInMilliseconds - elapsedTime)\n }\n }\n this.addTargetForControlEvents([\n UIView.controlEvent.PointerLeave, UIView.controlEvent.PointerCancel, UIView.controlEvent.MultipleTouches\n ], setNotHighlighted)\n this.addTargetForControlEvent(UIView.controlEvent.PointerUp, setNotHighlightedWithMinimumDuration)\n \n // Handle enter key press\n this.addTargetForControlEvent(UIView.controlEvent.EnterDown, () => {\n \n setHighlighted()\n setNotHighlightedWithMinimumDuration()\n \n })\n \n \n this.addTargetForControlEvent(\n UIView.controlEvent.Focus,\n (sender: UIView, event: Event) => {\n \n this.focused = YES\n \n }\n )\n \n this.addTargetForControlEvent(\n UIView.controlEvent.Blur,\n (sender: UIView, event: Event) => {\n \n this.focused = NO\n \n }\n )\n \n \n this.pausesPointerEvents = YES\n this.tabIndex = 1\n \n this.style.cursor = \"pointer\"\n \n //this.style.outline = \"none\";\n \n \n this.nativeSelectionEnabled = NO\n \n \n this.addTargetForControlEvents([\n UIView.controlEvent.EnterDown, UIView.controlEvent.PointerUpInside\n ], () => {\n \n if (this.isToggleable) {\n \n this.toggleSelectedState()\n \n }\n \n })\n \n }\n \n public set hovered(hovered: boolean) {\n this._hovered = hovered\n this.updateContentForCurrentState()\n }\n \n public get hovered(): boolean {\n return this._hovered ?? NO\n }\n \n public set highlighted(highlighted: boolean) {\n this._highlighted = highlighted\n this.updateContentForCurrentState()\n }\n \n public get highlighted(): boolean {\n return this._highlighted\n }\n \n public set focused(focused: boolean) {\n this._focused = focused\n if (focused) {\n this.focus()\n }\n else {\n this.blur()\n }\n this.updateContentForCurrentState()\n }\n \n public get focused(): boolean {\n return this._focused ?? NO\n }\n \n public set selected(selected: boolean) {\n this._selected = selected\n this.updateContentForCurrentState()\n }\n \n public get selected(): boolean {\n return this._selected\n }\n \n \n updateContentForCurrentState() {\n \n let updateFunction: Function = this.updateContentForNormalState\n if (this.selected && this.highlighted) {\n updateFunction = this.updateContentForSelectedAndHighlightedState\n }\n else if (this.selected) {\n updateFunction = this.updateContentForSelectedState\n }\n else if (this.focused) {\n updateFunction = this.updateContentForFocusedState\n }\n else if (this.highlighted) {\n updateFunction = this.updateContentForHighlightedState\n }\n else if (this.hovered) {\n updateFunction = this.updateContentForHoveredState\n }\n \n if (!IS(updateFunction)) {\n this.backgroundColor = UIColor.nilColor\n }\n else {\n updateFunction.call(this)\n }\n \n }\n \n updateContentForNormalState() {\n \n \n }\n \n updateContentForHoveredState() {\n \n this.updateContentForNormalState()\n \n }\n \n updateContentForFocusedState() {\n \n this.updateContentForHoveredState()\n \n }\n \n updateContentForHighlightedState() {\n \n \n }\n \n updateContentForSelectedState() {\n \n \n }\n \n updateContentForSelectedAndHighlightedState() {\n \n this.updateContentForSelectedState()\n \n }\n \n \n override set enabled(enabled: boolean) {\n super.enabled = enabled\n this.updateContentForCurrentEnabledState()\n }\n \n override get enabled() {\n return super.enabled\n }\n \n override updateContentForCurrentEnabledState() {\n \n if (this.enabled) {\n this.alpha = 1\n }\n else {\n this.alpha = 0.5\n }\n \n this.userInteractionEnabled = this.enabled\n \n }\n \n \n override addStyleClass(styleClassName: string) {\n \n super.addStyleClass(styleClassName)\n \n if (this.styleClassName != styleClassName) {\n \n this.updateContentForCurrentState.call(this)\n \n }\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.PageDidScroll || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n \n this.hovered = NO\n \n this.highlighted = NO\n \n this.updateContentForCurrentState()\n \n }\n \n \n }\n \n \n toggleSelectedState() {\n \n \n this.selected = !this.selected\n \n \n }\n \n set isToggleable(isToggleable: boolean) {\n \n this._isToggleable = isToggleable\n \n }\n \n get isToggleable() {\n \n return this._isToggleable\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n const bounds = this.bounds\n \n \n }\n \n \n override sendControlEventForKey(eventKey: string, nativeEvent: Event) {\n \n if (eventKey == UIView.controlEvent.PointerUpInside && !this.highlighted) {\n \n // Do not send the event in this case\n //super.sendControlEventForKey(eventKey, nativeEvent);\n \n const asd = 1\n \n }\n else {\n \n super.sendControlEventForKey(eventKey, nativeEvent)\n \n }\n \n }\n \n \n static getEventCoordinatesInDocument(touchOrMouseEvent: any) {\n // http://www.quirksmode.org/js/events_properties.html\n var posx = 0\n var posy = 0\n var e = touchOrMouseEvent\n if (!e) {\n e = window.event\n }\n if (e.pageX || e.pageY) {\n posx = e.pageX\n posy = e.pageY\n }\n else if (e.clientX || e.clientY) {\n posx = e.clientX + document.body.scrollLeft\n + document.documentElement.scrollLeft\n posy = e.clientY + document.body.scrollTop\n + document.documentElement.scrollTop\n }\n // posx and posy contain the mouse position relative to the document\n \n const coordinates = { \"x\": posx, \"y\": posy }\n \n return coordinates\n \n }\n \n \n static getElementPositionInDocument(el: { tagName: string; offsetLeft: number; scrollLeft: number; clientLeft: number; offsetTop: number; scrollTop: number; clientTop: number; offsetParent: any }) {\n //https://www.kirupa.com/html5/getting_mouse_click_position.htm\n var xPosition = 0\n var yPosition = 0\n \n while (el) {\n if (el.tagName == \"BODY\") {\n \n // Coordinates in document are coordinates in body, therefore subtracting the scroll position of the body is not needed\n \n // // deal with browser quirks with body/window/document and page scroll\n // var xScrollPos = el.scrollLeft || document.documentElement.scrollLeft;\n // var yScrollPos = el.scrollTop || document.documentElement.scrollTop;\n //\n // xPosition += (el.offsetLeft - xScrollPos + el.clientLeft);\n // yPosition += (el.offsetTop - yScrollPos + el.clientTop);\n }\n else {\n xPosition += (el.offsetLeft - el.scrollLeft + el.clientLeft)\n yPosition += (el.offsetTop - el.scrollTop + el.clientTop)\n }\n \n el = el.offsetParent\n }\n return {\n x: xPosition,\n y: yPosition\n }\n }\n \n static convertCoordinatesFromDocumentToElement(x: number, y: number, element: any) {\n const elementPositionInDocument = this.getElementPositionInDocument(element)\n const coordinatesInElement = { \"x\": x - elementPositionInDocument.x, \"y\": y - elementPositionInDocument.y }\n return coordinatesInElement\n }\n \n static getEventCoordinatesInElement(touchOrMouseEvent: any, element: any) {\n const coordinatesInDocument = this.getEventCoordinatesInDocument(touchOrMouseEvent)\n const coordinatesInElement = this.convertCoordinatesFromDocumentToElement(\n coordinatesInDocument.x,\n coordinatesInDocument.y,\n element\n )\n return coordinatesInElement\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\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AACxB,sBAAiC;AACjC,oBAA6C;AAGtC,MAAM,qBAAqB,qBAAO;AAAA,EAarC,YAAY,WAAoB,aAAsB;AAElD,UAAM,WAAW,qBAAK,WAAW;AAbrC,qBAAqB;AACrB,wBAAwB;AAKxB,yBAAyB;AAYrB,SAAK,mBAAmB;AAGxB,UAAM,aAAa,MAAM;AACrB,WAAK,UAAU;AAAA,IACnB;AACA,SAAK,yBAAyB,qBAAO,aAAa,cAAc,UAAU;AAE1E,UAAM,gBAAgB,MAAM;AAExB,WAAK,UAAU;AAAA,IAEnB;AAEA,SAAK,0BAA0B;AAAA,MAC3B,qBAAO,aAAa;AAAA,MAAc,qBAAO,aAAa;AAAA,MAAe,qBAAO,aAAa;AAAA,IAC7F,GAAG,aAAa;AAGhB,QAAI;AACJ,UAAM,iBAAiB,MAAM;AACzB,WAAK,cAAc;AACnB,yBAAmB,KAAK,IAAI;AAAA,IAChC;AACA,SAAK,yBAAyB,qBAAO,aAAa,aAAa,cAAc;AAC7E,SAAK,yBAAyB,qBAAO,aAAa,cAAc,cAAc;AAE9E,UAAM,oBAAoB,MAAM;AAC5B,WAAK,cAAc;AAAA,IACvB;AACA,UAAM,uCAAuC,MAAM;AAC/C,YAAM,gCAAgC;AACtC,YAAM,cAAc,KAAK,IAAI,IAAI;AACjC,UAAI,gCAAgC,aAAa;AAC7C,aAAK,cAAc;AAAA,MACvB,OACK;AACD,mBAAW,MAAM;AACb,eAAK,cAAc;AAAA,QACvB,GAAG,gCAAgC,WAAW;AAAA,MAClD;AAAA,IACJ;AACA,SAAK,0BAA0B;AAAA,MAC3B,qBAAO,aAAa;AAAA,MAAc,qBAAO,aAAa;AAAA,MAAe,qBAAO,aAAa;AAAA,IAC7F,GAAG,iBAAiB;AACpB,SAAK,yBAAyB,qBAAO,aAAa,WAAW,oCAAoC;AAGjG,SAAK,yBAAyB,qBAAO,aAAa,WAAW,MAAM;AAE/D,qBAAe;AACf,2CAAqC;AAAA,IAEzC,CAAC;AAGD,SAAK;AAAA,MACD,qBAAO,aAAa;AAAA,MACpB,CAAC,QAAgB,UAAiB;AAE9B,aAAK,UAAU;AAAA,MAEnB;AAAA,IACJ;AAEA,SAAK;AAAA,MACD,qBAAO,aAAa;AAAA,MACpB,CAAC,QAAgB,UAAiB;AAE9B,aAAK,UAAU;AAAA,MAEnB;AAAA,IACJ;AAGA,SAAK,sBAAsB;AAC3B,SAAK,WAAW;AAEhB,SAAK,MAAM,SAAS;AAKpB,SAAK,yBAAyB;AAG9B,SAAK,0BAA0B;AAAA,MAC3B,qBAAO,aAAa;AAAA,MAAW,qBAAO,aAAa;AAAA,IACvD,GAAG,MAAM;AAEL,UAAI,KAAK,cAAc;AAEnB,aAAK,oBAAoB;AAAA,MAE7B;AAAA,IAEJ,CAAC;AAAA,EAEL;AAAA,EAEA,IAAW,QAAQ,SAAkB;AACjC,SAAK,WAAW;AAChB,SAAK,6BAA6B;AAAA,EACtC;AAAA,EAEA,IAAW,UAAmB;AAlIlC;AAmIQ,YAAO,UAAK,aAAL,YAAiB;AAAA,EAC5B;AAAA,EAEA,IAAW,YAAY,aAAsB;AACzC,SAAK,eAAe;AACpB,SAAK,6BAA6B;AAAA,EACtC;AAAA,EAEA,IAAW,cAAuB;AAC9B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAW,QAAQ,SAAkB;AACjC,SAAK,WAAW;AAChB,QAAI,SAAS;AACT,WAAK,MAAM;AAAA,IACf,OACK;AACD,WAAK,KAAK;AAAA,IACd;AACA,SAAK,6BAA6B;AAAA,EACtC;AAAA,EAEA,IAAW,UAAmB;AA1JlC;AA2JQ,YAAO,UAAK,aAAL,YAAiB;AAAA,EAC5B;AAAA,EAEA,IAAW,SAAS,UAAmB;AACnC,SAAK,YAAY;AACjB,SAAK,6BAA6B;AAAA,EACtC;AAAA,EAEA,IAAW,WAAoB;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA,EAGA,+BAA+B;AAE3B,QAAI,iBAA2B,KAAK;AACpC,QAAI,KAAK,YAAY,KAAK,aAAa;AACnC,uBAAiB,KAAK;AAAA,IAC1B,WACS,KAAK,UAAU;AACpB,uBAAiB,KAAK;AAAA,IAC1B,WACS,KAAK,SAAS;AACnB,uBAAiB,KAAK;AAAA,IAC1B,WACS,KAAK,aAAa;AACvB,uBAAiB,KAAK;AAAA,IAC1B,WACS,KAAK,SAAS;AACnB,uBAAiB,KAAK;AAAA,IAC1B;AAEA,QAAI,KAAC,oBAAG,cAAc,GAAG;AACrB,WAAK,kBAAkB,uBAAQ;AAAA,IACnC,OACK;AACD,qBAAe,KAAK,IAAI;AAAA,IAC5B;AAAA,EAEJ;AAAA,EAEA,8BAA8B;AAAA,EAG9B;AAAA,EAEA,+BAA+B;AAE3B,SAAK,4BAA4B;AAAA,EAErC;AAAA,EAEA,+BAA+B;AAE3B,SAAK,6BAA6B;AAAA,EAEtC;AAAA,EAEA,mCAAmC;AAAA,EAGnC;AAAA,EAEA,gCAAgC;AAAA,EAGhC;AAAA,EAEA,8CAA8C;AAE1C,SAAK,8BAA8B;AAAA,EAEvC;AAAA,EAGA,IAAa,QAAQ,SAAkB;AACnC,UAAM,UAAU;AAChB,SAAK,oCAAoC;AAAA,EAC7C;AAAA,EAEA,IAAa,UAAU;AACnB,WAAO,MAAM;AAAA,EACjB;AAAA,EAES,sCAAsC;AAE3C,QAAI,KAAK,SAAS;AACd,WAAK,QAAQ;AAAA,IACjB,OACK;AACD,WAAK,QAAQ;AAAA,IACjB;AAEA,SAAK,yBAAyB,KAAK;AAAA,EAEvC;AAAA,EAGS,cAAc,gBAAwB;AAE3C,UAAM,cAAc,cAAc;AAElC,QAAI,KAAK,kBAAkB,gBAAgB;AAEvC,WAAK,6BAA6B,KAAK,IAAI;AAAA,IAE/C;AAAA,EAEJ;AAAA,EAGS,yBAAyB,OAA6B;AAE3D,UAAM,yBAAyB,KAAK;AAEpC,QAAI,MAAM,QAAQ,qBAAO,mBAAmB,iBAAiB,MAAM,QAC/D,qBAAO,mBAAmB,iBAAiB;AAE3C,WAAK,UAAU;AAEf,WAAK,cAAc;AAEnB,WAAK,6BAA6B;AAAA,IAEtC;AAAA,EAGJ;AAAA,EAGA,sBAAsB;AAGlB,SAAK,WAAW,CAAC,KAAK;AAAA,EAG1B;AAAA,EAEA,IAAI,aAAa,cAAuB;AAEpC,SAAK,gBAAgB;AAAA,EAEzB;AAAA,EAEA,IAAI,eAAe;AAEf,WAAO,KAAK;AAAA,EAEhB;AAAA,EAGS,iBAAiB;AAEtB,UAAM,eAAe;AAErB,UAAM,SAAS,KAAK;AAAA,EAGxB;AAAA,EAGS,uBAAuB,UAAkB,aAAoB;AAElE,QAAI,YAAY,qBAAO,aAAa,mBAAmB,CAAC,KAAK,aAAa;AAKtE,YAAM,MAAM;AAAA,IAEhB,OACK;AAED,YAAM,uBAAuB,UAAU,WAAW;AAAA,IAEtD;AAAA,EAEJ;AAAA,EAGA,OAAO,8BAA8B,mBAAwB;AAEzD,QAAI,OAAO;AACX,QAAI,OAAO;AACX,QAAI,IAAI;AACR,QAAI,CAAC,GAAG;AACJ,UAAI,OAAO;AAAA,IACf;AACA,QAAI,EAAE,SAAS,EAAE,OAAO;AACpB,aAAO,EAAE;AACT,aAAO,EAAE;AAAA,IACb,WACS,EAAE,WAAW,EAAE,SAAS;AAC7B,aAAO,EAAE,UAAU,SAAS,KAAK,aAC3B,SAAS,gBAAgB;AAC/B,aAAO,EAAE,UAAU,SAAS,KAAK,YAC3B,SAAS,gBAAgB;AAAA,IACnC;AAGA,UAAM,cAAc,EAAE,KAAK,MAAM,KAAK,KAAK;AAE3C,WAAO;AAAA,EAEX;AAAA,EAGA,OAAO,6BAA6B,IAAiK;AAEjM,QAAI,YAAY;AAChB,QAAI,YAAY;AAEhB,WAAO,IAAI;AACP,UAAI,GAAG,WAAW,QAAQ;AAAA,MAU1B,OACK;AACD,qBAAc,GAAG,aAAa,GAAG,aAAa,GAAG;AACjD,qBAAc,GAAG,YAAY,GAAG,YAAY,GAAG;AAAA,MACnD;AAEA,WAAK,GAAG;AAAA,IACZ;AACA,WAAO;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACP;AAAA,EACJ;AAAA,EAEA,OAAO,wCAAwC,GAAW,GAAW,SAAc;AAC/E,UAAM,4BAA4B,KAAK,6BAA6B,OAAO;AAC3E,UAAM,uBAAuB,EAAE,KAAK,IAAI,0BAA0B,GAAG,KAAK,IAAI,0BAA0B,EAAE;AAC1G,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,6BAA6B,mBAAwB,SAAc;AACtE,UAAM,wBAAwB,KAAK,8BAA8B,iBAAiB;AAClF,UAAM,uBAAuB,KAAK;AAAA,MAC9B,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,MACtB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAGJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UIButton.ts"],
|
|
4
|
-
"sourcesContent": ["import { UIBaseButton } from \"./UIBaseButton\"\nimport { UIColor } from \"./UIColor\"\nimport { UIImageView } from \"./UIImageView\"\nimport { IS, IS_NOT, IS_NOT_NIL, nil, NO, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UITextView } from \"./UITextView\"\n\n\nexport interface UIButtonColorSpecifier {\n \n titleLabel: UIButtonElementColorSpecifier;\n background: UIButtonElementColorSpecifier;\n \n}\n\n\nexport interface UIButtonElementColorSpecifier {\n \n normal: UIColor;\n hovered?: UIColor;\n highlighted: UIColor;\n focused?: UIColor;\n selected: UIColor;\n selectedAndHighlighted?: UIColor;\n \n}\n\n\nexport class UIButton extends UIBaseButton {\n \n _contentPadding = 0\n _titleLabel?: UITextView\n _imageView: UIImageView\n \n usesAutomaticTitleFontSize = NO\n minAutomaticFontSize: number = nil\n maxAutomaticFontSize: number = 25\n \n colors: UIButtonColorSpecifier = {\n \n titleLabel: {\n \n normal: UIColor.whiteColor,\n highlighted: UIColor.whiteColor,\n selected: UIColor.whiteColor\n \n },\n \n background: {\n \n normal: UIColor.blueColor,\n highlighted: UIColor.greenColor,\n selected: UIColor.redColor\n \n }\n \n }\n \n \n constructor(elementID?: string, elementType?: string, titleType = UITextView.type.span) {\n \n super(elementID, elementType)\n \n // Instance variables\n \n this._imageView = new UIImageView(this.elementID + \"ImageView\")\n this._imageView.hidden = YES\n this.addSubview(this.imageView)\n \n this.imageView.fillMode = UIImageView.fillMode.aspectFitIfLarger\n \n \n if (IS_NOT_NIL(titleType)) {\n \n this._titleLabel = new UITextView(this.elementID + \"TitleLabel\", titleType)\n this.titleLabel.style.whiteSpace = \"nowrap\"\n this.addSubview(this.titleLabel)\n \n this.titleLabel.userInteractionEnabled = NO\n \n }\n \n this.contentPadding = 10\n \n this.imageView.userInteractionEnabled = NO\n this.titleLabel.textAlignment = UITextView.textAlignment.center\n this.titleLabel.nativeSelectionEnabled = NO\n \n }\n \n \n get contentPadding() {\n return this._contentPadding.integerValue\n }\n \n set contentPadding(contentPadding) {\n this._contentPadding = contentPadding\n this.setNeedsLayout()\n }\n \n \n public override set hovered(hovered: boolean) {\n this._hovered = hovered\n this.updateContentForCurrentState()\n }\n \n public override get hovered(): boolean {\n return this._hovered ?? NO\n }\n \n public override set highlighted(highlighted: boolean) {\n this._highlighted = highlighted\n this.updateContentForCurrentState()\n }\n \n public override get highlighted(): boolean {\n return this._highlighted\n }\n \n public override set focused(focused: boolean) {\n this._focused = focused\n if (focused) {\n this.focus()\n }\n else {\n this.blur()\n }\n this.updateContentForCurrentState()\n }\n \n public override get focused(): boolean {\n return this._focused ?? NO\n }\n \n public override set selected(selected: boolean) {\n this._selected = selected\n this.updateContentForCurrentState()\n }\n \n public override get selected(): boolean {\n return this._selected\n }\n \n \n override updateContentForCurrentState() {\n \n let updateFunction: Function = this.updateContentForNormalState\n if (this.selected && this.highlighted) {\n updateFunction = this.updateContentForSelectedAndHighlightedState\n }\n else if (this.selected) {\n updateFunction = this.updateContentForSelectedState\n }\n else if (this.focused) {\n updateFunction = this.updateContentForFocusedState\n }\n else if (this.highlighted) {\n updateFunction = this.updateContentForHighlightedState\n }\n else if (this.hovered) {\n updateFunction = this.updateContentForHoveredState\n }\n \n if (!IS(updateFunction)) {\n this.titleLabel.textColor = UIColor.nilColor\n this.backgroundColor = UIColor.nilColor\n }\n else {\n updateFunction.call(this)\n }\n \n this.updateContentForCurrentEnabledState()\n \n }\n \n override updateContentForNormalState() {\n \n this.backgroundColor = this.colors.background.normal\n this.titleLabel.textColor = this.colors.titleLabel.normal\n \n }\n \n override updateContentForHoveredState() {\n \n this.updateContentForNormalState()\n \n if (this.colors.background.hovered) {\n this.backgroundColor = this.colors.background.hovered\n }\n \n if (this.colors.titleLabel.hovered) {\n this.titleLabel.textColor = this.colors.titleLabel.hovered\n }\n \n }\n \n override updateContentForFocusedState() {\n \n this.updateContentForHoveredState()\n \n if (this.colors.background.focused) {\n this.backgroundColor = this.colors.background.focused\n }\n \n if (this.colors.titleLabel.focused) {\n this.titleLabel.textColor = this.colors.titleLabel.focused\n }\n \n }\n \n override updateContentForHighlightedState() {\n \n this.backgroundColor = this.colors.background.highlighted\n this.titleLabel.textColor = this.colors.titleLabel.highlighted\n \n }\n \n override updateContentForSelectedState() {\n \n this.backgroundColor = this.colors.background.selected\n this.titleLabel.textColor = this.colors.titleLabel.selected\n \n }\n \n override updateContentForSelectedAndHighlightedState() {\n \n this.updateContentForSelectedState()\n \n if (this.colors.background.selectedAndHighlighted) {\n this.backgroundColor = this.colors.background.selectedAndHighlighted\n }\n \n if (this.colors.titleLabel.selectedAndHighlighted) {\n this.titleLabel.textColor = this.colors.titleLabel.selectedAndHighlighted\n }\n \n }\n \n \n override set enabled(enabled: boolean) {\n \n // @ts-ignore\n super.enabled = enabled\n \n this.updateContentForCurrentState()\n \n }\n \n override get enabled() {\n \n // @ts-ignore\n return super.enabled\n \n }\n \n override updateContentForCurrentEnabledState() {\n \n if (this.enabled) {\n this.alpha = 1\n }\n else {\n this.alpha = 0.5\n }\n \n this.userInteractionEnabled = this.enabled\n \n }\n \n \n override addStyleClass(styleClassName: string) {\n \n super.addStyleClass(styleClassName)\n \n if (this.styleClassName != styleClassName) {\n \n this.updateContentForCurrentState.call(this)\n \n }\n \n }\n \n \n get titleLabel(): UITextView {\n return this._titleLabel ?? nil\n }\n \n get imageView() {\n \n return this._imageView\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n let bounds = this.bounds\n \n this.hoverText = this.titleLabel.text\n \n // Image only if text is not present\n if (IS_NOT(this.imageView.hidden) && !IS(this.titleLabel.text)) {\n \n this.imageView.frame = bounds\n \n }\n \n // Text only if image is not present\n if (IS(this.imageView.hidden) && IS(this.titleLabel.text)) {\n \n this.titleLabel.style.left = this.contentPadding + \"px\"\n this.titleLabel.style.right = this.contentPadding + \"px\"\n // this.titleLabel.style.marginLeft = \"\"\n // this.titleLabel.style.right = this.contentPadding\n this.titleLabel.style.top = \"50%\"\n this.titleLabel.style.transform = \"translateY(-50%)\"\n this.titleLabel.frame = new UIRectangle(nil, nil, nil, nil)\n \n if (this.usesAutomaticTitleFontSize) {\n \n const hidden = this.titleLabel.hidden\n \n this.titleLabel.hidden = YES\n \n this.titleLabel.fontSize = 15\n \n this.titleLabel.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(\n 0,\n 0,\n this.bounds.height,\n this.titleLabel.viewHTMLElement.offsetWidth\n ),\n this.titleLabel.intrinsicContentSize(),\n this.titleLabel.fontSize,\n this.minAutomaticFontSize,\n this.maxAutomaticFontSize\n )\n \n this.titleLabel.hidden = hidden\n \n }\n \n \n }\n \n // Image and text both present\n if (IS_NOT(this.imageView.hidden) && IS(this.titleLabel.text)) {\n \n //const imageShareOfWidth = 0.25\n \n bounds = bounds.rectangleWithInset(this.contentPadding)\n \n const imageFrame = bounds.copy()\n imageFrame.width = bounds.height - this.contentPadding * 0.5\n this.imageView.frame = imageFrame\n \n this.titleLabel.style.left = imageFrame.max.x + this.contentPadding + \"px\"\n this.titleLabel.style.right = this.contentPadding + \"px\"\n this.titleLabel.style.top = \"50%\"\n this.titleLabel.style.transform = \"translateY(-50%)\"\n \n if (this.usesAutomaticTitleFontSize) {\n \n const hidden = this.titleLabel.hidden\n \n this.titleLabel.hidden = YES\n \n this.titleLabel.fontSize = 15\n \n this.titleLabel.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(\n 0,\n 0,\n this.bounds.height,\n this.titleLabel.viewHTMLElement.offsetWidth\n ),\n this.titleLabel.intrinsicContentSize(),\n this.titleLabel.fontSize,\n this.minAutomaticFontSize,\n this.maxAutomaticFontSize\n )\n \n this.titleLabel.hidden = hidden\n \n }\n \n }\n \n this.applyClassesAndStyles()\n \n }\n \n override initViewStyleSelectors() {\n \n this.initStyleSelector(\".\" + this.styleClassName, \"background-color: lightblue;\")\n \n // var selectorWithoutImage = \".\" + this.styleClassName + \" .\" + this.imageView.styleClassName + \" + .\" + this.titleLabel.styleClassName;\n \n // this.initStyleSelector(\n // selectorWithoutImage,\n // \"left: \" + this.contentPadding + \";\" +\n // \"right: \" + this.contentPadding + \";\" +\n // \"top: 50%;\" +\n // \"transform: translateY(-50%);\");\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\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
4
|
+
"sourcesContent": ["import { UIBaseButton } from \"./UIBaseButton\"\nimport { UIColor } from \"./UIColor\"\nimport { UIImageView } from \"./UIImageView\"\nimport { IS, IS_NOT, IS_NOT_NIL, nil, NO, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UITextView } from \"./UITextView\"\n\n\nexport interface UIButtonColorSpecifier {\n \n titleLabel: UIButtonElementColorSpecifier;\n background: UIButtonElementColorSpecifier;\n \n}\n\n\nexport interface UIButtonElementColorSpecifier {\n \n normal: UIColor;\n hovered?: UIColor;\n highlighted: UIColor;\n focused?: UIColor;\n selected: UIColor;\n selectedAndHighlighted?: UIColor;\n \n}\n\n\nexport class UIButton extends UIBaseButton {\n \n _contentPadding = 0\n _titleLabel?: UITextView\n _imageView: UIImageView\n \n usesAutomaticTitleFontSize = NO\n minAutomaticFontSize: number = nil\n maxAutomaticFontSize: number = 25\n \n colors: UIButtonColorSpecifier = {\n \n titleLabel: {\n \n normal: UIColor.whiteColor,\n highlighted: UIColor.whiteColor,\n selected: UIColor.whiteColor\n \n },\n \n background: {\n \n normal: UIColor.blueColor,\n highlighted: UIColor.greenColor,\n selected: UIColor.redColor\n \n }\n \n }\n \n \n constructor(elementID?: string, elementType?: string, titleType = UITextView.type.span) {\n \n super(elementID, elementType)\n \n // Instance variables\n \n this._imageView = new UIImageView(this.elementID + \"ImageView\")\n this._imageView.hidden = YES\n this.addSubview(this.imageView)\n \n this.imageView.fillMode = UIImageView.fillMode.aspectFitIfLarger\n \n \n if (IS_NOT_NIL(titleType)) {\n \n this._titleLabel = new UITextView(this.elementID + \"TitleLabel\", titleType)\n this.titleLabel.style.whiteSpace = \"nowrap\"\n this.addSubview(this.titleLabel)\n \n this.titleLabel.userInteractionEnabled = NO\n \n }\n \n this.contentPadding = 10\n \n this.imageView.userInteractionEnabled = NO\n this.titleLabel.textAlignment = UITextView.textAlignment.center\n this.titleLabel.nativeSelectionEnabled = NO\n \n }\n \n \n get contentPadding() {\n return this._contentPadding.integerValue\n }\n \n set contentPadding(contentPadding) {\n this._contentPadding = contentPadding\n this.setNeedsLayout()\n }\n \n \n public override set hovered(hovered: boolean) {\n this._hovered = hovered\n this.updateContentForCurrentState()\n }\n \n public override get hovered(): boolean {\n return this._hovered ?? NO\n }\n \n public override set highlighted(highlighted: boolean) {\n this._highlighted = highlighted\n this.updateContentForCurrentState()\n }\n \n public override get highlighted(): boolean {\n return this._highlighted\n }\n \n public override set focused(focused: boolean) {\n this._focused = focused\n if (focused) {\n this.focus()\n }\n else {\n this.blur()\n }\n this.updateContentForCurrentState()\n }\n \n public override get focused(): boolean {\n return this._focused ?? NO\n }\n \n public override set selected(selected: boolean) {\n this._selected = selected\n this.updateContentForCurrentState()\n }\n \n public override get selected(): boolean {\n return this._selected\n }\n \n \n override updateContentForCurrentState() {\n \n let updateFunction: Function = this.updateContentForNormalState\n if (this.selected && this.highlighted) {\n updateFunction = this.updateContentForSelectedAndHighlightedState\n }\n else if (this.selected) {\n updateFunction = this.updateContentForSelectedState\n }\n else if (this.focused) {\n updateFunction = this.updateContentForFocusedState\n }\n else if (this.highlighted) {\n updateFunction = this.updateContentForHighlightedState\n }\n else if (this.hovered) {\n updateFunction = this.updateContentForHoveredState\n }\n \n if (!IS(updateFunction)) {\n this.titleLabel.textColor = UIColor.nilColor\n this.backgroundColor = UIColor.nilColor\n }\n else {\n updateFunction.call(this)\n }\n \n this.updateContentForCurrentEnabledState()\n \n }\n \n override updateContentForNormalState() {\n \n this.backgroundColor = this.colors.background.normal\n this.titleLabel.textColor = this.colors.titleLabel.normal\n \n }\n \n override updateContentForHoveredState() {\n \n this.updateContentForNormalState()\n \n if (this.colors.background.hovered) {\n this.backgroundColor = this.colors.background.hovered\n }\n \n if (this.colors.titleLabel.hovered) {\n this.titleLabel.textColor = this.colors.titleLabel.hovered\n }\n \n }\n \n override updateContentForFocusedState() {\n \n this.updateContentForHoveredState()\n \n if (this.colors.background.focused) {\n this.backgroundColor = this.colors.background.focused\n }\n \n if (this.colors.titleLabel.focused) {\n this.titleLabel.textColor = this.colors.titleLabel.focused\n }\n \n }\n \n override updateContentForHighlightedState() {\n \n this.backgroundColor = this.colors.background.highlighted\n this.titleLabel.textColor = this.colors.titleLabel.highlighted\n \n }\n \n override updateContentForSelectedState() {\n \n this.backgroundColor = this.colors.background.selected\n this.titleLabel.textColor = this.colors.titleLabel.selected\n \n }\n \n override updateContentForSelectedAndHighlightedState() {\n \n this.updateContentForSelectedState()\n \n if (this.colors.background.selectedAndHighlighted) {\n this.backgroundColor = this.colors.background.selectedAndHighlighted\n }\n \n if (this.colors.titleLabel.selectedAndHighlighted) {\n this.titleLabel.textColor = this.colors.titleLabel.selectedAndHighlighted\n }\n \n }\n \n \n override set enabled(enabled: boolean) {\n \n // @ts-ignore\n super.enabled = enabled\n \n this.updateContentForCurrentState()\n \n }\n \n override get enabled() {\n \n // @ts-ignore\n return super.enabled\n \n }\n \n override updateContentForCurrentEnabledState() {\n \n if (this.enabled) {\n this.alpha = 1\n }\n else {\n this.alpha = 0.5\n }\n \n this.userInteractionEnabled = this.enabled\n \n }\n \n \n override addStyleClass(styleClassName: string) {\n \n super.addStyleClass(styleClassName)\n \n if (this.styleClassName != styleClassName) {\n \n this.updateContentForCurrentState.call(this)\n \n }\n \n }\n \n \n get titleLabel(): UITextView {\n return this._titleLabel ?? nil\n }\n \n get imageView() {\n \n return this._imageView\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n let bounds = this.bounds\n \n this.hoverText = this.titleLabel.text\n \n // Image only if text is not present\n if (IS_NOT(this.imageView.hidden) && !IS(this.titleLabel.text)) {\n \n this.imageView.frame = bounds\n \n }\n \n // Text only if image is not present\n if (IS(this.imageView.hidden) && IS(this.titleLabel.text)) {\n \n this.titleLabel.style.left = this.contentPadding + \"px\"\n this.titleLabel.style.right = this.contentPadding + \"px\"\n // this.titleLabel.style.marginLeft = \"\"\n // this.titleLabel.style.right = this.contentPadding\n this.titleLabel.style.top = \"50%\"\n this.titleLabel.style.transform = \"translateY(-50%)\"\n this.titleLabel.frame = new UIRectangle(nil, nil, nil, nil)\n \n if (this.usesAutomaticTitleFontSize) {\n \n const hidden = this.titleLabel.hidden\n \n this.titleLabel.hidden = YES\n \n this.titleLabel.fontSize = 15\n \n this.titleLabel.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(\n 0,\n 0,\n this.bounds.height,\n this.titleLabel.viewHTMLElement.offsetWidth\n ),\n this.titleLabel.intrinsicContentSize(),\n this.titleLabel.fontSize,\n this.minAutomaticFontSize,\n this.maxAutomaticFontSize\n )\n \n this.titleLabel.hidden = hidden\n \n }\n \n \n }\n \n // Image and text both present\n if (IS_NOT(this.imageView.hidden) && IS(this.titleLabel.text)) {\n \n //const imageShareOfWidth = 0.25\n \n bounds = bounds.rectangleWithInset(this.contentPadding)\n \n const imageFrame = bounds.copy()\n imageFrame.width = bounds.height - this.contentPadding * 0.5\n this.imageView.frame = imageFrame\n \n this.titleLabel.style.left = imageFrame.max.x + this.contentPadding + \"px\"\n this.titleLabel.style.right = this.contentPadding + \"px\"\n this.titleLabel.style.top = \"50%\"\n this.titleLabel.style.transform = \"translateY(-50%)\"\n \n if (this.usesAutomaticTitleFontSize) {\n \n const hidden = this.titleLabel.hidden\n \n this.titleLabel.hidden = YES\n \n this.titleLabel.fontSize = 15\n \n this.titleLabel.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(\n 0,\n 0,\n this.bounds.height,\n this.titleLabel.viewHTMLElement.offsetWidth\n ),\n this.titleLabel.intrinsicContentSize(),\n this.titleLabel.fontSize,\n this.minAutomaticFontSize,\n this.maxAutomaticFontSize\n )\n \n this.titleLabel.hidden = hidden\n \n }\n \n }\n \n this.applyClassesAndStyles()\n \n }\n \n override initViewStyleSelectors() {\n \n this.initStyleSelector(\".\" + this.styleClassName, \"background-color: lightblue;\")\n \n // var selectorWithoutImage = \".\" + this.styleClassName + \" .\" + this.imageView.styleClassName + \" + .\" + this.titleLabel.styleClassName;\n \n // this.initStyleSelector(\n // selectorWithoutImage,\n // \"left: \" + this.contentPadding + \";\" +\n // \"right: \" + this.contentPadding + \";\" +\n // \"top: 50%;\" +\n // \"transform: translateY(-50%);\");\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\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UIDateTimeInput.ts"],
|
|
4
|
-
"sourcesContent": ["import { nil } from \"./UIObject\"\nimport { UIView, UIViewAddControlEventTargetObject } from \"./UIView\"\n\n\nexport class UIDateTimeInput extends UIView {\n \n \n constructor(elementID: string, type: string = UIDateTimeInput.type.DateTime) {\n \n super(elementID, nil, \"input\")\n \n this.viewHTMLElement.setAttribute(\"type\", type)\n \n this.viewHTMLElement.onchange = (event) => {\n this.sendControlEventForKey(UIDateTimeInput.controlEvent.ValueChange, event)\n }\n \n }\n \n \n static override controlEvent = Object.assign({}, UIView.controlEvent, {\n
|
|
4
|
+
"sourcesContent": ["import { nil } from \"./UIObject\"\nimport { UIView, UIViewAddControlEventTargetObject } from \"./UIView\"\n\n\nexport class UIDateTimeInput extends UIView {\n \n \n constructor(elementID: string, type: string = UIDateTimeInput.type.DateTime) {\n \n super(elementID, nil, \"input\")\n \n this.viewHTMLElement.setAttribute(\"type\", type)\n \n this.viewHTMLElement.onchange = (event) => {\n this.sendControlEventForKey(UIDateTimeInput.controlEvent.ValueChange, event)\n }\n \n }\n \n \n static override controlEvent = Object.assign({}, UIView.controlEvent, {\n \n \"ValueChange\": \"ValueChange\"\n \n })\n \n \n override get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<UIDateTimeInput> {\n return super.controlEventTargetAccumulator as any\n }\n \n \n static type = {\n \n \"Date\": \"date\",\n \"Time\": \"time\",\n \"DateTime\": \"datetime\"\n \n \n }\n \n \n static format = {\n \n \"European\": \"DD-MM-YYYY\",\n \"ISOComputer\": \"YYYY-MM-DD\",\n \"American\": \"MM/DD/YYYY\"\n \n }\n \n \n get date() {\n \n const result = new Date((this.viewHTMLElement as HTMLInputElement).value)\n \n return result\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
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAoB;AACpB,oBAA0D;AAGnD,MAAM,mBAAN,cAA8B,qBAAO;AAAA,EAGxC,YAAY,WAAmB,OAAe,iBAAgB,KAAK,UAAU;AAEzE,UAAM,WAAW,qBAAK,OAAO;AAE7B,SAAK,gBAAgB,aAAa,QAAQ,IAAI;AAE9C,SAAK,gBAAgB,WAAW,CAAC,UAAU;AACvC,WAAK,uBAAuB,iBAAgB,aAAa,aAAa,KAAK;AAAA,IAC/E;AAAA,EAEJ;AAAA,EAUA,IAAa,gCAAoF;AAC7F,WAAO,MAAM;AAAA,EACjB;AAAA,EAsBA,IAAI,OAAO;AAEP,UAAM,SAAS,IAAI,KAAM,KAAK,gBAAqC,KAAK;AAExE,WAAO;AAAA,EAEX;AAGJ;AAxDO,IAAM,kBAAN;AAAM,gBAgBO,eAAe,OAAO,OAAO,CAAC,GAAG,qBAAO,cAAc;AAAA,EAElE,eAAe;AAEnB,CAAC;AApBQ,gBA4BF,OAAO;AAAA,EAEV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,YAAY;AAGhB;AAnCS,gBAsCF,SAAS;AAAA,EAEZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,YAAY;AAEhB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UIDialogView.ts"],
|
|
4
|
-
"sourcesContent": ["import { IS_FIREFOX } from \"./ClientCheckers\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { IS, nil, NO, YES } from \"./UIObject\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIDialogView<ViewType extends UIView = UIView> extends UIView {\n \n _isAUIDialogView = YES\n _view: ViewType = nil\n _appearedAnimated?: boolean\n animationDuration: number = 0.25\n _zIndex: number = 100\n isVisible: boolean = NO\n dismissesOnTapOutside = YES\n \n constructor(elementID?: string, viewHTMLElement?: HTMLElement) {\n \n \n super(elementID, viewHTMLElement)\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerTap,\n function (this: UIDialogView, sender: UIView, event: Event) {\n \n this.didDetectTapOutside(sender, event)\n \n }.bind(this)\n )\n \n this.backgroundColor = UIColor.colorWithRGBA(0, 10, 25).colorWithAlpha(0.75) //CBColor.primaryContentColor.colorWithAlpha(0.75)\n \n this.zIndex = this._zIndex\n \n }\n \n \n didDetectTapOutside(sender: UIView, event: Event) {\n \n if (event.target == this.viewHTMLElement && this.dismissesOnTapOutside) {\n this.dismiss(this._appearedAnimated)\n }\n \n }\n \n \n set zIndex(zIndex: number) {\n \n this._zIndex = zIndex\n this.style.zIndex = \"\" + zIndex\n \n }\n \n get zIndex() {\n \n return this._zIndex\n \n }\n \n \n set view(view: ViewType) {\n \n this._view.removeFromSuperview()\n \n this._view = view\n \n this.addSubview(view)\n \n }\n \n \n get view() {\n \n return this._view\n \n }\n \n \n override willAppear(animated: boolean = NO) {\n
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { IS_FIREFOX } from \"./ClientCheckers\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { IS, nil, NO, YES } from \"./UIObject\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIDialogView<ViewType extends UIView = UIView> extends UIView {\n \n _isAUIDialogView = YES\n _view: ViewType = nil\n _appearedAnimated?: boolean\n animationDuration: number = 0.25\n _zIndex: number = 100\n isVisible: boolean = NO\n dismissesOnTapOutside = YES\n \n constructor(elementID?: string, viewHTMLElement?: HTMLElement) {\n \n \n super(elementID, viewHTMLElement)\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerTap,\n function (this: UIDialogView, sender: UIView, event: Event) {\n \n this.didDetectTapOutside(sender, event)\n \n }.bind(this)\n )\n \n this.backgroundColor = UIColor.colorWithRGBA(0, 10, 25).colorWithAlpha(0.75) //CBColor.primaryContentColor.colorWithAlpha(0.75)\n \n this.zIndex = this._zIndex\n \n }\n \n \n didDetectTapOutside(sender: UIView, event: Event) {\n \n if (event.target == this.viewHTMLElement && this.dismissesOnTapOutside) {\n this.dismiss(this._appearedAnimated)\n }\n \n }\n \n \n set zIndex(zIndex: number) {\n \n this._zIndex = zIndex\n this.style.zIndex = \"\" + zIndex\n \n }\n \n get zIndex() {\n \n return this._zIndex\n \n }\n \n \n set view(view: ViewType) {\n \n this._view.removeFromSuperview()\n \n this._view = view\n \n this.addSubview(view)\n \n }\n \n \n get view() {\n \n return this._view\n \n }\n \n \n override willAppear(animated: boolean = NO) {\n \n if (animated) {\n \n this.style.opacity = \"0\"\n \n }\n \n this.style.height = \"\"\n \n this._frame = nil\n \n }\n \n \n animateAppearing() {\n \n this.style.opacity = \"1\"\n \n }\n \n animateDisappearing() {\n \n this.style.opacity = \"0\"\n \n }\n \n \n showInView(containerView: UIView, animated: boolean) {\n \n \n animated = (animated && !IS_FIREFOX)\n \n this._appearedAnimated = animated\n \n this.willAppear(animated)\n \n \n containerView.addSubview(this)\n \n if (animated) {\n \n this.layoutSubviews()\n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this,\n this.animationDuration,\n 0,\n undefined,\n () => this.animateAppearing(),\n nil\n )\n \n \n }\n else {\n \n this.setNeedsLayout()\n \n }\n \n this.isVisible = YES\n \n }\n \n \n showInRootView(animated: boolean) {\n \n this.showInView(UICore.main.rootViewController.view, animated)\n \n }\n \n \n dismiss(animated?: boolean) {\n \n if (!this.isVisible) {\n return\n }\n \n animated = (animated && !IS_FIREFOX)\n \n if (animated == undefined) {\n \n animated = this._appearedAnimated\n \n }\n \n if (animated) {\n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this,\n this.animationDuration,\n 0,\n undefined,\n (() => {\n \n this.animateDisappearing()\n \n }).bind(this),\n () => {\n \n if (this.isVisible == NO) {\n \n this.removeFromSuperview()\n \n }\n \n }\n )\n \n }\n else {\n \n this.removeFromSuperview()\n \n }\n \n this.isVisible = NO\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UICore.broadcastEventName.WindowDidResize) {\n \n this.setNeedsLayout()\n \n }\n \n }\n \n \n override layoutSubviews() {\n \n \n if (!IS(this.view)) {\n \n return\n \n }\n \n //this.frame = this.superview.bounds;\n \n this.setPosition(0, 0, 0, 0, 0, \"100%\")\n this.setPosition(0, 0, 0, 0, UIView.pageHeight, \"100%\")\n \n const bounds = this.bounds\n \n const margin = 20\n \n //this.view.centerInContainer();\n \n this.view.style.position = \"relative\"\n \n this.view.style.zIndex = \"\" + this.zIndex\n \n // this.view.style.maxHeight = \"\" + (bounds.height - margin * 2).integerValue + \"px\";\n // this.view.style.maxWidth = \"\" + (bounds.width - margin * 2).integerValue + \"px\";\n \n \n // var viewIntrinsicRectangle = this.view.intrinsicContentSize();\n // this.view.frame = new UIRectangle((bounds.width - viewIntrinsicRectangle.width)*0.5, )\n \n super.layoutSubviews()\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": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UIImageView.ts"],
|
|
4
|
-
"sourcesContent": ["import { UICore } from \"./UICore\"\nimport { IS_NOT, nil, NO, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIImageView extends UIView {\n \n \n //actionIndicator: UIActionIndicator;\n _sourceKey?: string\n _defaultSource?: string\n \n _fillMode: any\n \n _hiddenWhenEmpty = NO\n \n \n constructor(elementID?: string, viewHTMLElement = null) {\n \n super(elementID, viewHTMLElement, \"img\")\n \n \n //this.actionIndicator = new UIActionIndicator(elementID + \"ActionIndicator\");\n \n \n }\n \n \n static fillMode = {\n \n \"stretchToFill\": \"fill\",\n \"aspectFit\": \"contain\",\n \"aspectFill\": \"cover\",\n \"center\": \"none\",\n \"aspectFitIfLarger\": \"scale-down\"\n \n }\n \n \n override get viewHTMLElement() {\n
|
|
4
|
+
"sourcesContent": ["import { UICore } from \"./UICore\"\nimport { IS_NOT, nil, NO, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIImageView extends UIView {\n \n \n //actionIndicator: UIActionIndicator;\n _sourceKey?: string\n _defaultSource?: string\n \n _fillMode: any\n \n _hiddenWhenEmpty = NO\n \n \n constructor(elementID?: string, viewHTMLElement = null) {\n \n super(elementID, viewHTMLElement, \"img\")\n \n \n //this.actionIndicator = new UIActionIndicator(elementID + \"ActionIndicator\");\n \n \n }\n \n \n static fillMode = {\n \n \"stretchToFill\": \"fill\",\n \"aspectFit\": \"contain\",\n \"aspectFill\": \"cover\",\n \"center\": \"none\",\n \"aspectFitIfLarger\": \"scale-down\"\n \n }\n \n \n override get viewHTMLElement() {\n \n return super.viewHTMLElement as HTMLImageElement\n \n }\n \n \n static objectURLFromDataURL(dataURL: string) {\n // @ts-ignore\n const blob = dataURLtoBlob(dataURL)\n return URL.createObjectURL(blob)\n }\n \n \n static dataURL(url: string | URL, callback: (arg0: string | ArrayBuffer | null) => void) {\n const xhr = new XMLHttpRequest()\n xhr.open(\"get\", url)\n xhr.responseType = \"blob\"\n xhr.onload = function () {\n const fr = new FileReader()\n \n fr.onload = function () {\n callback(this.result)\n }\n \n fr.readAsDataURL(xhr.response) // async call\n }\n \n xhr.send()\n }\n \n \n static dataURLWithMaxSize(URLString: string, maxSize: number, completion: (resultURLString: string) => void) {\n \n const imageView = new UIImageView()\n imageView.imageSource = URLString\n \n imageView.viewHTMLElement.onload = () => {\n \n const originalSize = imageView.intrinsicContentSize()\n \n let multiplier = maxSize / Math.max(originalSize.height, originalSize.width)\n multiplier = Math.min(1, multiplier)\n \n const result = imageView.getDataURL((originalSize.height * multiplier).integerValue, (originalSize.width *\n multiplier).integerValue)\n \n completion(result)\n \n }\n \n }\n \n \n static dataURLWithSizes(\n URLString: string,\n height: number,\n width: number,\n completion: (resultURLString: string) => void\n ) {\n \n const imageView = new UIImageView()\n imageView.imageSource = URLString\n \n imageView.viewHTMLElement.onload = () => {\n \n const result = imageView.getDataURL(height, width)\n completion(result)\n \n }\n \n }\n \n \n getDataURL(height?: number, width?: number) {\n \n const img = this.viewHTMLElement\n \n // Create an empty canvas element\n const canvas: HTMLCanvasElement = document.createElement(\"canvas\")\n canvas.width = width ?? img.naturalWidth\n canvas.height = height ?? img.naturalHeight\n \n // Copy the image contents to the canvas\n const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D\n ctx.drawImage(img, 0, 0, width ?? img.naturalWidth, height ?? img.naturalHeight)\n \n // Get the data-URL formatted image\n // Firefox supports PNG and JPEG. You could check img.src to\n // guess the original format, but be aware the using \"image/jpg\"\n // will re-encode the image.\n return canvas.toDataURL(\"image/png\")\n \n }\n \n \n get imageSource() {\n \n return this.viewHTMLElement.src\n \n }\n \n set imageSource(sourceString: string) {\n \n if (IS_NOT(sourceString)) {\n sourceString = \"\"\n }\n \n this.viewHTMLElement.src = sourceString\n \n if (this.hiddenWhenEmpty) {\n this.hidden = IS_NOT(this.imageSource)\n }\n \n if (!sourceString || !sourceString.length) {\n \n //this.actionIndicator.stop();\n this.hidden = YES\n \n return\n \n }\n else {\n \n this.hidden = NO\n \n }\n \n // this.superview.addSubview(this.actionIndicator);\n // this.actionIndicator.frame = this.frame;\n // this.actionIndicator.start();\n // this.actionIndicator.backgroundColor = UIColor.redColor\n \n // @ts-ignore\n this.viewHTMLElement.onload = () => this.superview.setNeedsLayout()\n \n }\n \n \n setImageSource(key: string, defaultString: string) {\n \n const languageName = UICore.languageService.currentLanguageKey\n this.imageSource = UICore.languageService.stringForKey(key, languageName, defaultString, nil)\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.LanguageChanged || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n \n this._setImageSourceFromKeyIfPossible()\n \n }\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n this._setImageSourceFromKeyIfPossible()\n \n }\n \n _setImageSourceFromKeyIfPossible() {\n \n if (this._sourceKey && this._defaultSource) {\n \n this.setImageSource(this._sourceKey, this._defaultSource)\n \n }\n \n }\n \n \n get fillMode() {\n return this._fillMode\n }\n \n set fillMode(fillMode) {\n \n this._fillMode = fillMode;\n (this.style as any).objectFit = fillMode\n \n }\n \n \n get hiddenWhenEmpty() {\n return this._hiddenWhenEmpty\n }\n \n set hiddenWhenEmpty(hiddenWhenEmpty: boolean) {\n this._hiddenWhenEmpty = hiddenWhenEmpty\n if (hiddenWhenEmpty) {\n this.hidden = IS_NOT(this.imageSource)\n }\n }\n \n \n override didMoveToSuperview(superview: UIView) {\n \n super.didMoveToSuperview(superview)\n \n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n \n }\n \n \n override intrinsicContentSize() {\n \n \n return new UIRectangle(0, 0, this.viewHTMLElement.naturalHeight, this.viewHTMLElement.naturalWidth)\n \n \n }\n \n override intrinsicContentSizeWithConstraints(constrainingHeight = 0, constrainingWidth = 0) {\n \n const heightRatio = constrainingHeight / this.viewHTMLElement.naturalHeight\n \n const widthRatio = constrainingWidth / this.viewHTMLElement.naturalWidth\n \n const multiplier = Math.max(heightRatio, widthRatio)\n \n return new UIRectangle(0, 0, this.viewHTMLElement.naturalHeight *\n multiplier, this.viewHTMLElement.naturalWidth * multiplier)\n \n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UILink.ts"],
|
|
4
|
-
"sourcesContent": ["import { UIBaseButton } from \"./UIBaseButton\"\nimport { UIButtonColorSpecifier } from \"./UIButton\"\nimport { UICore } from \"./UICore\"\nimport { nil, NO } from \"./UIObject\"\nimport { UIRoute } from \"./UIRoute\"\nimport { UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UILink extends UIBaseButton {\n \n private _colors?: UIButtonColorSpecifier | undefined\n \n constructor(elementID?: string) {\n \n super(elementID, \"a\")\n \n this.stopsPointerEventPropagation = NO\n this.pausesPointerEvents = NO\n \n this.viewHTMLElement.onclick = this.blur.bind(this)\n \n }\n \n \n get colors(): UIButtonColorSpecifier | undefined {\n return this._colors\n }\n \n set colors(value: UIButtonColorSpecifier | undefined) {\n this._colors = value\n }\n \n \n override get viewHTMLElement() {\n
|
|
4
|
+
"sourcesContent": ["import { UIBaseButton } from \"./UIBaseButton\"\nimport { UIButtonColorSpecifier } from \"./UIButton\"\nimport { UICore } from \"./UICore\"\nimport { nil, NO } from \"./UIObject\"\nimport { UIRoute } from \"./UIRoute\"\nimport { UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UILink extends UIBaseButton {\n \n private _colors?: UIButtonColorSpecifier | undefined\n \n constructor(elementID?: string) {\n \n super(elementID, \"a\")\n \n this.stopsPointerEventPropagation = NO\n this.pausesPointerEvents = NO\n \n this.viewHTMLElement.onclick = this.blur.bind(this)\n \n }\n \n \n get colors(): UIButtonColorSpecifier | undefined {\n return this._colors\n }\n \n set colors(value: UIButtonColorSpecifier | undefined) {\n this._colors = value\n }\n \n \n override get viewHTMLElement() {\n \n // @ts-ignore\n return super.viewHTMLElement as HTMLLinkElement\n \n }\n \n set text(text: string) {\n this.viewHTMLElement.textContent = text\n }\n \n get text() {\n return this.viewHTMLElement.textContent ?? \"\"\n }\n \n \n set target(target: string) {\n this.viewHTMLElement.setAttribute(\"href\", target)\n }\n \n get target() {\n return this.viewHTMLElement.getAttribute(\"href\") ?? \"\"\n }\n \n \n set targetRouteForCurrentState(targetRouteForCurrentState: () => (UIRoute | string)) {\n this._targetRouteForCurrentState = targetRouteForCurrentState\n this.updateTarget()\n }\n \n get targetRouteForCurrentState() {\n return this._targetRouteForCurrentState\n }\n \n \n _targetRouteForCurrentState() {\n return UIRoute.currentRoute.routeByRemovingComponentsOtherThanOnesNamed([\"settings\"]) as (UIRoute | string)\n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UICore.broadcastEventName.RouteDidChange) {\n \n this.updateTarget()\n \n }\n \n }\n \n \n override wasAddedToViewTree() {\n \n super.wasAddedToViewTree()\n \n this.updateTarget()\n \n \n }\n \n \n updateTarget() {\n \n const route = this.targetRouteForCurrentState()\n \n if (route instanceof UIRoute) {\n \n this.target = route.linkRepresentation\n \n return\n \n }\n \n this.target = route\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n const bounds = this.bounds\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\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA6B;AAE7B,oBAAuB;AACvB,sBAAwB;AACxB,qBAAwB;AAIjB,MAAM,eAAe,iCAAa;AAAA,EAIrC,YAAY,WAAoB;AAE5B,UAAM,WAAW,GAAG;AAEpB,SAAK,+BAA+B;AACpC,SAAK,sBAAsB;AAE3B,SAAK,gBAAgB,UAAU,KAAK,KAAK,KAAK,IAAI;AAAA,EAEtD;AAAA,EAGA,IAAI,SAA6C;AAC7C,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAO,OAA2C;AAClD,SAAK,UAAU;AAAA,EACnB;AAAA,EAGA,IAAa,kBAAkB;AAG3B,WAAO,MAAM;AAAA,EAEjB;AAAA,EAEA,IAAI,KAAK,MAAc;AACnB,SAAK,gBAAgB,cAAc;AAAA,EACvC;AAAA,EAEA,IAAI,OAAO;AA5Cf;AA6CQ,YAAO,UAAK,gBAAgB,gBAArB,YAAoC;AAAA,EAC/C;AAAA,EAGA,IAAI,OAAO,QAAgB;AACvB,SAAK,gBAAgB,aAAa,QAAQ,MAAM;AAAA,EACpD;AAAA,EAEA,IAAI,SAAS;AArDjB;AAsDQ,YAAO,UAAK,gBAAgB,aAAa,MAAM,MAAxC,YAA6C;AAAA,EACxD;AAAA,EAGA,IAAI,2BAA2B,4BAAsD;AACjF,SAAK,8BAA8B;AACnC,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,6BAA6B;AAC7B,WAAO,KAAK;AAAA,EAChB;AAAA,EAGA,8BAA8B;AAC1B,WAAO,uBAAQ,aAAa,4CAA4C,CAAC,UAAU,CAAC;AAAA,EACxF;AAAA,EAGS,yBAAyB,OAA6B;AAE3D,UAAM,yBAAyB,KAAK;AAEpC,QAAI,MAAM,QAAQ,qBAAO,mBAAmB,gBAAgB;AAExD,WAAK,aAAa;AAAA,IAEtB;AAAA,EAEJ;AAAA,EAGS,qBAAqB;AAE1B,UAAM,mBAAmB;AAEzB,SAAK,aAAa;AAAA,EAGtB;AAAA,EAGA,eAAe;AAEX,UAAM,QAAQ,KAAK,2BAA2B;AAE9C,QAAI,iBAAiB,wBAAS;AAE1B,WAAK,SAAS,MAAM;AAEpB;AAAA,IAEJ;AAEA,SAAK,SAAS;AAAA,EAElB;AAAA,EAGS,iBAAiB;AAEtB,UAAM,eAAe;AAErB,UAAM,SAAS,KAAK;AAAA,EAExB;AAGJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UILinkButton.ts"],
|
|
4
|
-
"sourcesContent": ["import { UIButton, UIButtonColorSpecifier } from \"./UIButton\"\nimport { UILink } from \"./UILink\"\n\n\nexport class UILinkButton extends UILink {\n \n button: UIButton\n \n constructor(elementID?: string, elementType?: string, titleType?: string) {\n \n super(elementID)\n \n // Instance variables\n this.button = new UIButton(this.elementID + \"Button\", elementType, titleType)\n this.addSubview(this.button)\n \n this.style.position = \"absolute\"\n this.button.controlEventTargetAccumulator.EnterDown.PointerUpInside = () => window.location = this.target as any\n \n }\n \n \n get titleLabel() {\n return this.button.titleLabel\n }\n \n get imageView() {\n return this.button.imageView\n }\n \n \n override set colors(colors: UIButtonColorSpecifier) {\n this.button.colors = colors\n }\n \n override get colors(): UIButtonColorSpecifier {\n return this.button.colors\n }\n \n \n override get viewHTMLElement() {\n return super.viewHTMLElement as HTMLLinkElement\n }\n \n \n override set target(target: string) {\n this.viewHTMLElement.setAttribute(\"href\", target)\n }\n \n override get target() {\n return this.viewHTMLElement.getAttribute(\"href\") ?? \"\"\n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n
|
|
4
|
+
"sourcesContent": ["import { UIButton, UIButtonColorSpecifier } from \"./UIButton\"\nimport { UILink } from \"./UILink\"\n\n\nexport class UILinkButton extends UILink {\n \n button: UIButton\n \n constructor(elementID?: string, elementType?: string, titleType?: string) {\n \n super(elementID)\n \n // Instance variables\n this.button = new UIButton(this.elementID + \"Button\", elementType, titleType)\n this.addSubview(this.button)\n \n this.style.position = \"absolute\"\n this.button.controlEventTargetAccumulator.EnterDown.PointerUpInside = () => window.location = this.target as any\n \n }\n \n \n get titleLabel() {\n return this.button.titleLabel\n }\n \n get imageView() {\n return this.button.imageView\n }\n \n \n override set colors(colors: UIButtonColorSpecifier) {\n this.button.colors = colors\n }\n \n override get colors(): UIButtonColorSpecifier {\n return this.button.colors\n }\n \n \n override get viewHTMLElement() {\n return super.viewHTMLElement as HTMLLinkElement\n }\n \n \n override set target(target: string) {\n this.viewHTMLElement.setAttribute(\"href\", target)\n }\n \n override get target() {\n return this.viewHTMLElement.getAttribute(\"href\") ?? \"\"\n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n const bounds = this.bounds\n \n this.button.frame = bounds\n this.button.layoutSubviews()\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\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAiD;AACjD,oBAAuB;AAGhB,MAAM,qBAAqB,qBAAO;AAAA,EAIrC,YAAY,WAAoB,aAAsB,WAAoB;AAEtE,UAAM,SAAS;AAGf,SAAK,SAAS,IAAI,yBAAS,KAAK,YAAY,UAAU,aAAa,SAAS;AAC5E,SAAK,WAAW,KAAK,MAAM;AAE3B,SAAK,MAAM,WAAW;AACtB,SAAK,OAAO,8BAA8B,UAAU,kBAAkB,MAAM,OAAO,WAAW,KAAK;AAAA,EAEvG;AAAA,EAGA,IAAI,aAAa;AACb,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAGA,IAAa,OAAO,QAAgC;AAChD,SAAK,OAAO,SAAS;AAAA,EACzB;AAAA,EAEA,IAAa,SAAiC;AAC1C,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAGA,IAAa,kBAAkB;AAC3B,WAAO,MAAM;AAAA,EACjB;AAAA,EAGA,IAAa,OAAO,QAAgB;AAChC,SAAK,gBAAgB,aAAa,QAAQ,MAAM;AAAA,EACpD;AAAA,EAEA,IAAa,SAAS;AAjD1B;AAkDQ,YAAO,UAAK,gBAAgB,aAAa,MAAM,MAAxC,YAA6C;AAAA,EACxD;AAAA,EAGS,iBAAiB;AAEtB,UAAM,eAAe;AAErB,UAAM,SAAS,KAAK;AAEpB,SAAK,OAAO,QAAQ;AACpB,SAAK,OAAO,eAAe;AAAA,EAE/B;AAGJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -344,9 +344,8 @@ class UIObject {
|
|
|
344
344
|
return UIObject.configureWithObject(this, object);
|
|
345
345
|
}
|
|
346
346
|
static configureWithObject(configurationTarget, object) {
|
|
347
|
-
const isAnObject = (item) => item && typeof item === "object" && !Array.isArray(item) &&
|
|
348
|
-
|
|
349
|
-
) === Object.getPrototypeOf({}) && !(item instanceof import_UICoreExtensionValueObject.UICoreExtensionValueObject);
|
|
347
|
+
const isAnObject = (item) => item && typeof item === "object" && !Array.isArray(item) && !(item instanceof import_UICoreExtensionValueObject.UICoreExtensionValueObject);
|
|
348
|
+
const isAPureObject = (item) => isAnObject(item) && Object.getPrototypeOf(item) === Object.getPrototypeOf({});
|
|
350
349
|
function isAClass(funcOrClass) {
|
|
351
350
|
const isFunction = (functionToCheck) => functionToCheck && {}.toString.call(functionToCheck) === "[object Function]";
|
|
352
351
|
const propertyNames = Object.getOwnPropertyNames(funcOrClass);
|
|
@@ -363,7 +362,7 @@ class UIObject {
|
|
|
363
362
|
keyPath: valueKeyPath.replace(".", "")
|
|
364
363
|
});
|
|
365
364
|
}
|
|
366
|
-
if (
|
|
365
|
+
if (isAPureObject(sourceValue) || isAClass(sourceValue)) {
|
|
367
366
|
if (!(key in target) || target[key] instanceof Function) {
|
|
368
367
|
addValueAndKeyPath(sourceValue);
|
|
369
368
|
} else {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UIObject.ts"],
|
|
4
|
-
"sourcesContent": ["import { UICoreExtensionValueObject } from \"./UICoreExtensionValueObject\"\nimport { UITimer } from \"./UITimer\"\n\n\nfunction NilFunction() {\n return nil\n}\n\n\n// The nil object avoids unnecessary crashes by allowing you to call any function or access any variable on it, returning nil\nexport var nil: any = new Proxy(Object.assign(NilFunction, { \"class\": null, \"className\": \"Nil\" }), {\n get(target, name) {\n if (name == Symbol.toPrimitive) {\n return function (hint: string) {\n if (hint == \"number\") {\n return 0\n }\n if (hint == \"string\") {\n return \"\"\n }\n return false\n }\n }\n if (name == \"toString\") {\n return function toString() {\n return \"\"\n }\n }\n return NilFunction()\n },\n set() {\n return NilFunction()\n }\n})\n\n\nexport function wrapInNil<T>(object?: T): T {\n let result = FIRST_OR_NIL(object)\n if (object instanceof Object && !(object instanceof Function)) {\n result = new Proxy(object as Object & T, {\n get(target, name) {\n if (name == \"wrapped_nil_target\") {\n return target\n }\n const value = Reflect.get(target, name)\n if (typeof value === \"object\") {\n return wrapInNil(value)\n }\n if (IS_NOT_LIKE_NULL(value)) {\n return value\n }\n return nil\n },\n set(target: Record<string, any> & T, name: string, value: any) {\n if (IS(target)) {\n // @ts-ignore\n target[name] = value\n }\n return YES\n }\n })\n }\n return result\n}\n\n\nexport const YES = true\nexport const NO = false\n\nexport function IS<T>(object: T | undefined | null | false): object is T {\n if (object && object !== nil) {\n return YES\n }\n return NO\n}\n\nexport function IS_NOT(object: any): object is undefined | null | false {\n return !IS(object)\n}\n\nexport function IS_DEFINED<T>(object: T | undefined): object is T {\n if (object != undefined) {\n return YES\n }\n return NO\n}\n\nexport function IS_UNDEFINED(object: any): object is undefined {\n return !IS_DEFINED(object)\n}\n\nexport function IS_NIL(object: any): object is typeof nil {\n if (object === nil) {\n return YES\n }\n return NO\n}\n\nexport function IS_NOT_NIL<T>(object: T | undefined | null): object is T | undefined | null {\n return !IS_NIL(object)\n}\n\n\nexport function IS_LIKE_NULL(object: any): object is undefined | null {\n return (IS_UNDEFINED(object) || IS_NIL(object) || object == null)\n}\n\nexport function IS_NOT_LIKE_NULL<T>(object: T | null | undefined): object is T {\n return !IS_LIKE_NULL(object)\n}\n\n\nexport function IS_AN_EMAIL_ADDRESS(email: string) {\n const re = /\\S+@\\S+\\.\\S+/\n return re.test(email)\n}\n\n\nexport function FIRST_OR_NIL<T>(...objects: (T | undefined | null)[]): T {\n const result = objects.find(object => IS(object))\n return result || nil\n}\n\nexport function FIRST<T>(...objects: (T | undefined | null)[]): T {\n const result = objects.find(object => IS(object))\n return result || IF(IS_DEFINED(objects.lastElement))(RETURNER(objects.lastElement))()\n}\n\n\nexport function MAKE_ID(randomPartLength = 15) {\n let result = \"\"\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"\n for (let i = 0; i < randomPartLength; i++) {\n result = result + characters.charAt(Math.floor(Math.random() * characters.length))\n }\n result = result + Date.now()\n return result\n}\n\n\nexport function RETURNER<T>(value?: T) {\n return (..._objects: any[]) => value\n}\n\n\nexport type UIIFBlockReceiver<T> = (functionToCall: () => any) => UIIFEvaluator<T>;\nexport type UIIFEvaluatorBase<T> = () => T;\n\n\nexport interface UIIFEvaluator<T> extends UIIFEvaluatorBase<T> {\n ELSE_IF: (otherValue: any) => UIIFBlockReceiver<T>;\n ELSE: (functionToCall: () => any) => T;\n}\n\n\nexport function IF<T = any>(value: any): UIIFBlockReceiver<T> {\n \n let thenFunction = nil\n let elseFunction = nil\n \n const result: any = function (functionToCall: () => T) {\n thenFunction = functionToCall\n return result.evaluateConditions\n }\n \n result.evaluateConditions = function () {\n if (IS(value)) {\n return thenFunction()\n }\n return elseFunction()\n }\n \n result.evaluateConditions.ELSE_IF = function (otherValue: any) {\n \n const functionResult = IF(otherValue) as (UIIFBlockReceiver<T> & { evaluateConditions: UIIFEvaluator<T> })\n elseFunction = functionResult.evaluateConditions\n \n const functionResultEvaluateConditionsFunction: any = function () {\n return result.evaluateConditions()\n }\n functionResultEvaluateConditionsFunction.ELSE_IF = functionResult.evaluateConditions.ELSE_IF\n functionResultEvaluateConditionsFunction.ELSE = functionResult.evaluateConditions.ELSE\n \n functionResult.evaluateConditions = functionResultEvaluateConditionsFunction\n \n return functionResult\n \n }\n \n result.evaluateConditions.ELSE = function (functionToCall: () => T) {\n elseFunction = functionToCall\n return result.evaluateConditions()\n }\n \n return result\n}\n\n\nexport class UIFunctionCall<T extends (...args: any) => any> {\n \n isAUIFunctionCallObject = YES\n parameters: Parameters<T>[]\n \n constructor(...parameters: Parameters<T>) {\n this.parameters = parameters\n }\n \n callFunction(functionToCall: T) {\n const parameters = this.parameters\n functionToCall(...parameters)\n }\n \n}\n\n\nexport function CALL<T extends (...args: any) => any>(...objects: Parameters<T>) {\n return new UIFunctionCall<T>(...objects)\n}\n\n\nexport class UIFunctionExtender<T extends (...args: any) => any> {\n \n isAUIFunctionExtenderObject = YES\n extendingFunction: T\n \n constructor(extendingFunction: T) {\n this.extendingFunction = extendingFunction\n }\n \n extendedFunction(functionToExtend: T) {\n const extendingFunction = this.extendingFunction\n \n function extendedFunction(this: any, ...objects: any[]) {\n const boundFunctionToExtend = functionToExtend.bind(this)\n boundFunctionToExtend(...objects)\n const boundExtendingFunction = extendingFunction.bind(this)\n boundExtendingFunction(...objects)\n }\n \n return extendedFunction\n }\n \n}\n\n\nexport function EXTEND<T extends (...args: any) => any>(extendingFunction: T) {\n return new UIFunctionExtender(extendingFunction)\n}\n\n\nexport class UILazyPropertyValue<T> {\n \n isAUILazyPropertyValueObject = YES\n initFunction: () => T\n \n constructor(initFunction: () => T) {\n this.initFunction = initFunction\n }\n \n setLazyPropertyValue(key: string, target: object) {\n \n let isValueInitialized = NO\n \n // property value\n let _value = nil\n \n const initValue = () => {\n _value = this.initFunction()\n isValueInitialized = YES\n this.initFunction = nil\n }\n \n // @ts-ignore\n if (delete target[key]) {\n \n // Create new property with getter and setter\n Object.defineProperty(target, key, {\n get: function () {\n if (IS_NOT(isValueInitialized)) {\n initValue()\n }\n return _value\n },\n set: function (newValue) {\n _value = newValue\n },\n enumerable: true,\n configurable: true\n })\n \n }\n \n }\n \n}\n\n\nexport function LAZY_VALUE<T>(initFunction: () => T) {\n return new UILazyPropertyValue(initFunction)\n}\n\n\nexport type UIInitializerObject<T> = {\n \n [P in keyof T]?:\n //T[P] extends (infer U)[] ? UIInitializerObject<U>[] :\n T[P] extends (...args: any) => any ? UIFunctionCall<T[P]> | UIFunctionExtender<T[P]> | T[P] :\n T[P] extends object ? UIInitializerObject<T[P]> | UILazyPropertyValue<T[P]> :\n T[P];\n \n}\n\n\nexport class UIObject {\n \n constructor() {\n \n // Do something here if needed\n \n }\n \n public get class(): any {\n return Object.getPrototypeOf(this).constructor\n }\n \n public get superclass(): any {\n return Object.getPrototypeOf(Object.getPrototypeOf(this)).constructor\n }\n \n isKindOfClass(classObject: any) {\n if (this.isMemberOfClass(classObject)) {\n return YES\n }\n for (let superclassObject = this.superclass; IS(superclassObject); superclassObject = superclassObject.superclass) {\n if (superclassObject == classObject) {\n return YES\n }\n }\n return NO\n }\n \n \n isMemberOfClass(classObject: any) {\n return (this.class == classObject)\n }\n \n public static wrapObject<T>(object: T): UIObject & T {\n if (IS_NOT(object)) {\n return nil\n }\n \n if ((object as any) instanceof UIObject) {\n // @ts-ignore\n return object\n }\n \n return Object.assign(new UIObject(), object)\n }\n \n \n valueForKey(key: string) {\n // @ts-ignore\n return this[key]\n }\n \n valueForKeyPath(keyPath: string): any {\n return UIObject.valueForKeyPath(keyPath, this)\n }\n \n static valueForKeyPath(keyPath: string, object: any): any {\n \n if (IS_NOT(keyPath)) {\n return object\n }\n \n const keys = keyPath.split(\".\")\n let currentObject = object\n \n for (let i = 0; i < keys.length; i++) {\n \n const key = keys[i]\n \n if (key.substring(0, 2) == \"[]\") {\n \n // This next object will be an array and the rest of the keys need to be run for each of the elements\n currentObject = currentObject[key.substring(2)]\n \n // CurrentObject is now an array\n \n const remainingKeyPath = keys.slice(i + 1).join(\".\")\n const currentArray = currentObject as unknown as any[]\n currentObject = currentArray.map(subObject => UIObject.valueForKeyPath(remainingKeyPath, subObject))\n \n break\n \n }\n \n currentObject = currentObject[key]\n if (IS_LIKE_NULL(currentObject)) {\n currentObject = nil\n }\n \n }\n \n return currentObject\n \n }\n \n setValueForKeyPath(keyPath: string, value: any, createPath = YES) {\n return UIObject.setValueForKeyPath(keyPath, value, this, createPath)\n }\n \n static setValueForKeyPath(keyPath: string, value: any, currentObject: any, createPath: boolean) {\n \n const keys = keyPath.split(\".\")\n let didSetValue = NO\n \n keys.forEach((key, index, array) => {\n if (index == array.length - 1 && IS_NOT_LIKE_NULL(currentObject)) {\n currentObject[key] = value\n didSetValue = YES\n return\n }\n else if (IS_NOT(currentObject)) {\n return\n }\n \n const currentObjectValue = currentObject[key]\n if (IS_LIKE_NULL(currentObjectValue) && createPath) {\n currentObject[key] = {}\n }\n currentObject = currentObject[key]\n })\n \n return didSetValue\n \n }\n \n \n configureWithObject(object: UIInitializerObject<this>) {\n this.configuredWithObject(object)\n }\n \n configuredWithObject(object: UIInitializerObject<this>): this {\n return UIObject.configureWithObject(this, object)\n }\n \n \n static configureWithObject<T extends object>(configurationTarget: T, object: UIInitializerObject<T>) {\n \n const isAnObject = (item: any) => (item && typeof item === \"object\" && !Array.isArray(item) && Object.getPrototypeOf(\n item) === Object.getPrototypeOf({}) && !(item instanceof UICoreExtensionValueObject))\n \n function isAClass(funcOrClass: object) {\n const isFunction = (functionToCheck: object) => (functionToCheck && {}.toString.call(functionToCheck) ===\n \"[object Function]\")\n const propertyNames = Object.getOwnPropertyNames(funcOrClass)\n return (isFunction(funcOrClass) && !propertyNames.includes(\"arguments\") &&\n propertyNames.includes(\"prototype\"))\n }\n \n let keyPathsAndValues: { value: any, keyPath: string }[] = []\n \n function prepareKeyPathsAndValues(target: Record<string, any>, source: object, keyPath = \"\") {\n \n if ((isAnObject(target) || isAClass(target)) && isAnObject(source)) {\n \n source.forEach((sourceValue, key) => {\n \n const valueKeyPath = keyPath + \".\" + key\n \n function addValueAndKeyPath(sourceValue: any) {\n keyPathsAndValues.push({\n value: sourceValue,\n keyPath: valueKeyPath.replace(\".\", \"\")\n })\n }\n \n if (isAnObject(sourceValue) || isAClass(sourceValue)) {\n if (!(key in target) || target[key] instanceof Function) {\n addValueAndKeyPath(sourceValue)\n }\n else {\n prepareKeyPathsAndValues(target[key], sourceValue, valueKeyPath)\n }\n }\n else if (sourceValue instanceof UICoreExtensionValueObject) {\n addValueAndKeyPath(sourceValue.value)\n }\n else {\n addValueAndKeyPath(sourceValue)\n }\n \n })\n \n }\n \n }\n \n prepareKeyPathsAndValues(configurationTarget, object)\n \n // Sort based on key path lengths\n keyPathsAndValues = keyPathsAndValues.sort((a, b) => {\n \n const firstKeyPath = (a.keyPath as string).split(\".\").length\n const secondKeyPath = (b.keyPath as string).split(\".\").length\n \n if (firstKeyPath < secondKeyPath) {\n return -1\n }\n if (firstKeyPath > secondKeyPath) {\n return 1\n }\n return 0\n \n })\n \n keyPathsAndValues.forEach((valueAndKeyPath) => {\n \n const keyPath: string = valueAndKeyPath.keyPath\n let value = valueAndKeyPath.value\n \n const getTargetFunction = (bindThis = NO) => {\n let result = (UIObject.valueForKeyPath(keyPath, configurationTarget) as Function)\n if (bindThis) {\n const indexOfDot = keyPath.lastIndexOf(\".\")\n const thisObject = UIObject.valueForKeyPath(keyPath.substring(0, indexOfDot), configurationTarget)\n result = result.bind(thisObject)\n }\n return result\n }\n \n if (value instanceof UILazyPropertyValue) {\n const indexOfDot = keyPath.lastIndexOf(\".\")\n const thisObject = UIObject.valueForKeyPath(keyPath.substring(0, indexOfDot), configurationTarget)\n const key = keyPath.substring(indexOfDot + 1)\n value.setLazyPropertyValue(key, thisObject)\n return\n }\n \n if (value instanceof UIFunctionCall) {\n value.callFunction(getTargetFunction(YES))\n return\n }\n \n if (value instanceof UIFunctionExtender) {\n value = value.extendedFunction(getTargetFunction())\n }\n \n UIObject.setValueForKeyPath(keyPath, value, configurationTarget, YES)\n \n })\n \n \n return configurationTarget\n \n }\n \n \n performFunctionWithSelf<T>(functionToPerform: (self: this) => T): T {\n return functionToPerform(this)\n }\n \n performingFunctionWithSelf(functionToPerform: (self: this) => void): this {\n functionToPerform(this)\n return this\n }\n \n performFunctionWithDelay(delay: number, functionToCall: Function) {\n \n new UITimer(delay, NO, functionToCall)\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 { UICoreExtensionValueObject } from \"./UICoreExtensionValueObject\"\nimport { UITimer } from \"./UITimer\"\n\n\nfunction NilFunction() {\n return nil\n}\n\n\n// The nil object avoids unnecessary crashes by allowing you to call any function or access any variable on it, returning nil\nexport var nil: any = new Proxy(Object.assign(NilFunction, { \"class\": null, \"className\": \"Nil\" }), {\n get(target, name) {\n if (name == Symbol.toPrimitive) {\n return function (hint: string) {\n if (hint == \"number\") {\n return 0\n }\n if (hint == \"string\") {\n return \"\"\n }\n return false\n }\n }\n if (name == \"toString\") {\n return function toString() {\n return \"\"\n }\n }\n return NilFunction()\n },\n set() {\n return NilFunction()\n }\n})\n\n\nexport function wrapInNil<T>(object?: T): T {\n let result = FIRST_OR_NIL(object)\n if (object instanceof Object && !(object instanceof Function)) {\n result = new Proxy(object as Object & T, {\n get(target, name) {\n if (name == \"wrapped_nil_target\") {\n return target\n }\n const value = Reflect.get(target, name)\n if (typeof value === \"object\") {\n return wrapInNil(value)\n }\n if (IS_NOT_LIKE_NULL(value)) {\n return value\n }\n return nil\n },\n set(target: Record<string, any> & T, name: string, value: any) {\n if (IS(target)) {\n // @ts-ignore\n target[name] = value\n }\n return YES\n }\n })\n }\n return result\n}\n\n\nexport const YES = true\nexport const NO = false\n\nexport function IS<T>(object: T | undefined | null | false): object is T {\n if (object && object !== nil) {\n return YES\n }\n return NO\n}\n\nexport function IS_NOT(object: any): object is undefined | null | false {\n return !IS(object)\n}\n\nexport function IS_DEFINED<T>(object: T | undefined): object is T {\n if (object != undefined) {\n return YES\n }\n return NO\n}\n\nexport function IS_UNDEFINED(object: any): object is undefined {\n return !IS_DEFINED(object)\n}\n\nexport function IS_NIL(object: any): object is typeof nil {\n if (object === nil) {\n return YES\n }\n return NO\n}\n\nexport function IS_NOT_NIL<T>(object: T | undefined | null): object is T | undefined | null {\n return !IS_NIL(object)\n}\n\n\nexport function IS_LIKE_NULL(object: any): object is undefined | null {\n return (IS_UNDEFINED(object) || IS_NIL(object) || object == null)\n}\n\nexport function IS_NOT_LIKE_NULL<T>(object: T | null | undefined): object is T {\n return !IS_LIKE_NULL(object)\n}\n\n\nexport function IS_AN_EMAIL_ADDRESS(email: string) {\n const re = /\\S+@\\S+\\.\\S+/\n return re.test(email)\n}\n\n\nexport function FIRST_OR_NIL<T>(...objects: (T | undefined | null)[]): T {\n const result = objects.find(object => IS(object))\n return result || nil\n}\n\nexport function FIRST<T>(...objects: (T | undefined | null)[]): T {\n const result = objects.find(object => IS(object))\n return result || IF(IS_DEFINED(objects.lastElement))(RETURNER(objects.lastElement))()\n}\n\n\nexport function MAKE_ID(randomPartLength = 15) {\n let result = \"\"\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"\n for (let i = 0; i < randomPartLength; i++) {\n result = result + characters.charAt(Math.floor(Math.random() * characters.length))\n }\n result = result + Date.now()\n return result\n}\n\n\nexport function RETURNER<T>(value?: T) {\n return (..._objects: any[]) => value\n}\n\n\nexport type UIIFBlockReceiver<T> = (functionToCall: () => any) => UIIFEvaluator<T>;\nexport type UIIFEvaluatorBase<T> = () => T;\n\n\nexport interface UIIFEvaluator<T> extends UIIFEvaluatorBase<T> {\n ELSE_IF: (otherValue: any) => UIIFBlockReceiver<T>;\n ELSE: (functionToCall: () => any) => T;\n}\n\n\nexport function IF<T = any>(value: any): UIIFBlockReceiver<T> {\n \n let thenFunction = nil\n let elseFunction = nil\n \n const result: any = function (functionToCall: () => T) {\n thenFunction = functionToCall\n return result.evaluateConditions\n }\n \n result.evaluateConditions = function () {\n if (IS(value)) {\n return thenFunction()\n }\n return elseFunction()\n }\n \n result.evaluateConditions.ELSE_IF = function (otherValue: any) {\n \n const functionResult = IF(otherValue) as (UIIFBlockReceiver<T> & { evaluateConditions: UIIFEvaluator<T> })\n elseFunction = functionResult.evaluateConditions\n \n const functionResultEvaluateConditionsFunction: any = function () {\n return result.evaluateConditions()\n }\n functionResultEvaluateConditionsFunction.ELSE_IF = functionResult.evaluateConditions.ELSE_IF\n functionResultEvaluateConditionsFunction.ELSE = functionResult.evaluateConditions.ELSE\n \n functionResult.evaluateConditions = functionResultEvaluateConditionsFunction\n \n return functionResult\n \n }\n \n result.evaluateConditions.ELSE = function (functionToCall: () => T) {\n elseFunction = functionToCall\n return result.evaluateConditions()\n }\n \n return result\n}\n\n\nexport class UIFunctionCall<T extends (...args: any) => any> {\n \n isAUIFunctionCallObject = YES\n parameters: Parameters<T>[]\n \n constructor(...parameters: Parameters<T>) {\n this.parameters = parameters\n }\n \n callFunction(functionToCall: T) {\n const parameters = this.parameters\n functionToCall(...parameters)\n }\n \n}\n\n\nexport function CALL<T extends (...args: any) => any>(...objects: Parameters<T>) {\n return new UIFunctionCall<T>(...objects)\n}\n\n\nexport class UIFunctionExtender<T extends (...args: any) => any> {\n \n isAUIFunctionExtenderObject = YES\n extendingFunction: T\n \n constructor(extendingFunction: T) {\n this.extendingFunction = extendingFunction\n }\n \n extendedFunction(functionToExtend: T) {\n const extendingFunction = this.extendingFunction\n \n function extendedFunction(this: any, ...objects: any[]) {\n const boundFunctionToExtend = functionToExtend.bind(this)\n boundFunctionToExtend(...objects)\n const boundExtendingFunction = extendingFunction.bind(this)\n boundExtendingFunction(...objects)\n }\n \n return extendedFunction\n }\n \n}\n\n\nexport function EXTEND<T extends (...args: any) => any>(extendingFunction: T) {\n return new UIFunctionExtender(extendingFunction)\n}\n\n\nexport class UILazyPropertyValue<T> {\n \n isAUILazyPropertyValueObject = YES\n initFunction: () => T\n \n constructor(initFunction: () => T) {\n this.initFunction = initFunction\n }\n \n setLazyPropertyValue(key: string, target: object) {\n \n let isValueInitialized = NO\n \n // property value\n let _value = nil\n \n const initValue = () => {\n _value = this.initFunction()\n isValueInitialized = YES\n this.initFunction = nil\n }\n \n // @ts-ignore\n if (delete target[key]) {\n \n // Create new property with getter and setter\n Object.defineProperty(target, key, {\n get: function () {\n if (IS_NOT(isValueInitialized)) {\n initValue()\n }\n return _value\n },\n set: function (newValue) {\n _value = newValue\n },\n enumerable: true,\n configurable: true\n })\n \n }\n \n }\n \n}\n\n\nexport function LAZY_VALUE<T>(initFunction: () => T) {\n return new UILazyPropertyValue(initFunction)\n}\n\n\nexport type UIInitializerObject<T> = {\n \n [P in keyof T]?:\n //T[P] extends (infer U)[] ? UIInitializerObject<U>[] :\n T[P] extends (...args: any) => any ? UIFunctionCall<T[P]> | UIFunctionExtender<T[P]> | T[P] :\n T[P] extends object ? UIInitializerObject<T[P]> | UILazyPropertyValue<T[P]> :\n T[P];\n \n}\n\n\nexport class UIObject {\n \n constructor() {\n \n // Do something here if needed\n \n }\n \n public get class(): any {\n return Object.getPrototypeOf(this).constructor\n }\n \n public get superclass(): any {\n return Object.getPrototypeOf(Object.getPrototypeOf(this)).constructor\n }\n \n isKindOfClass(classObject: any) {\n if (this.isMemberOfClass(classObject)) {\n return YES\n }\n for (let superclassObject = this.superclass; IS(superclassObject); superclassObject = superclassObject.superclass) {\n if (superclassObject == classObject) {\n return YES\n }\n }\n return NO\n }\n \n \n isMemberOfClass(classObject: any) {\n return (this.class == classObject)\n }\n \n public static wrapObject<T>(object: T): UIObject & T {\n if (IS_NOT(object)) {\n return nil\n }\n \n if ((object as any) instanceof UIObject) {\n // @ts-ignore\n return object\n }\n \n return Object.assign(new UIObject(), object)\n }\n \n \n valueForKey(key: string) {\n // @ts-ignore\n return this[key]\n }\n \n valueForKeyPath(keyPath: string): any {\n return UIObject.valueForKeyPath(keyPath, this)\n }\n \n static valueForKeyPath(keyPath: string, object: any): any {\n \n if (IS_NOT(keyPath)) {\n return object\n }\n \n const keys = keyPath.split(\".\")\n let currentObject = object\n \n for (let i = 0; i < keys.length; i++) {\n \n const key = keys[i]\n \n if (key.substring(0, 2) == \"[]\") {\n \n // This next object will be an array and the rest of the keys need to be run for each of the elements\n currentObject = currentObject[key.substring(2)]\n \n // CurrentObject is now an array\n \n const remainingKeyPath = keys.slice(i + 1).join(\".\")\n const currentArray = currentObject as unknown as any[]\n currentObject = currentArray.map(subObject => UIObject.valueForKeyPath(remainingKeyPath, subObject))\n \n break\n \n }\n \n currentObject = currentObject[key]\n if (IS_LIKE_NULL(currentObject)) {\n currentObject = nil\n }\n \n }\n \n return currentObject\n \n }\n \n setValueForKeyPath(keyPath: string, value: any, createPath = YES) {\n return UIObject.setValueForKeyPath(keyPath, value, this, createPath)\n }\n \n static setValueForKeyPath(keyPath: string, value: any, currentObject: any, createPath: boolean) {\n \n const keys = keyPath.split(\".\")\n let didSetValue = NO\n \n keys.forEach((key, index, array) => {\n if (index == array.length - 1 && IS_NOT_LIKE_NULL(currentObject)) {\n currentObject[key] = value\n didSetValue = YES\n return\n }\n else if (IS_NOT(currentObject)) {\n return\n }\n \n const currentObjectValue = currentObject[key]\n if (IS_LIKE_NULL(currentObjectValue) && createPath) {\n currentObject[key] = {}\n }\n currentObject = currentObject[key]\n })\n \n return didSetValue\n \n }\n \n \n configureWithObject(object: UIInitializerObject<this>) {\n this.configuredWithObject(object)\n }\n \n configuredWithObject(object: UIInitializerObject<this>): this {\n return UIObject.configureWithObject(this, object)\n }\n \n \n static configureWithObject<T extends object>(configurationTarget: T, object: UIInitializerObject<T>) {\n \n const isAnObject = (item: any) => (item && typeof item === \"object\" && !Array.isArray(item) && !(item instanceof UICoreExtensionValueObject))\n const isAPureObject = (item: any) => isAnObject(item) && Object.getPrototypeOf(item) === Object.getPrototypeOf({})\n \n function isAClass(funcOrClass: object) {\n const isFunction = (functionToCheck: object) => (functionToCheck && {}.toString.call(functionToCheck) ===\n \"[object Function]\")\n const propertyNames = Object.getOwnPropertyNames(funcOrClass)\n return (isFunction(funcOrClass) && !propertyNames.includes(\"arguments\") &&\n propertyNames.includes(\"prototype\"))\n }\n \n let keyPathsAndValues: { value: any, keyPath: string }[] = []\n \n function prepareKeyPathsAndValues(target: Record<string, any>, source: object, keyPath = \"\") {\n \n if ((isAnObject(target) || isAClass(target)) && isAnObject(source)) {\n \n source.forEach((sourceValue, key) => {\n \n const valueKeyPath = keyPath + \".\" + key\n \n function addValueAndKeyPath(sourceValue: any) {\n keyPathsAndValues.push({\n value: sourceValue,\n keyPath: valueKeyPath.replace(\".\", \"\")\n })\n }\n \n \n if (isAPureObject(sourceValue) || isAClass(sourceValue)) {\n if (!(key in target) || target[key] instanceof Function) {\n addValueAndKeyPath(sourceValue)\n }\n else {\n prepareKeyPathsAndValues(target[key], sourceValue, valueKeyPath)\n }\n }\n else if (sourceValue instanceof UICoreExtensionValueObject) {\n addValueAndKeyPath(sourceValue.value)\n }\n else {\n addValueAndKeyPath(sourceValue)\n }\n \n })\n \n }\n \n }\n \n prepareKeyPathsAndValues(configurationTarget, object)\n \n // Sort based on key path lengths\n keyPathsAndValues = keyPathsAndValues.sort((a, b) => {\n \n const firstKeyPath = (a.keyPath as string).split(\".\").length\n const secondKeyPath = (b.keyPath as string).split(\".\").length\n \n if (firstKeyPath < secondKeyPath) {\n return -1\n }\n if (firstKeyPath > secondKeyPath) {\n return 1\n }\n return 0\n \n })\n \n keyPathsAndValues.forEach((valueAndKeyPath) => {\n \n const keyPath: string = valueAndKeyPath.keyPath\n let value = valueAndKeyPath.value\n \n const getTargetFunction = (bindThis = NO) => {\n let result = (UIObject.valueForKeyPath(keyPath, configurationTarget) as Function)\n if (bindThis) {\n const indexOfDot = keyPath.lastIndexOf(\".\")\n const thisObject = UIObject.valueForKeyPath(keyPath.substring(0, indexOfDot), configurationTarget)\n result = result.bind(thisObject)\n }\n return result\n }\n \n if (value instanceof UILazyPropertyValue) {\n const indexOfDot = keyPath.lastIndexOf(\".\")\n const thisObject = UIObject.valueForKeyPath(keyPath.substring(0, indexOfDot), configurationTarget)\n const key = keyPath.substring(indexOfDot + 1)\n value.setLazyPropertyValue(key, thisObject)\n return\n }\n \n if (value instanceof UIFunctionCall) {\n value.callFunction(getTargetFunction(YES))\n return\n }\n \n if (value instanceof UIFunctionExtender) {\n value = value.extendedFunction(getTargetFunction())\n }\n \n UIObject.setValueForKeyPath(keyPath, value, configurationTarget, YES)\n \n })\n \n \n return configurationTarget\n \n }\n \n \n performFunctionWithSelf<T>(functionToPerform: (self: this) => T): T {\n return functionToPerform(this)\n }\n \n performingFunctionWithSelf(functionToPerform: (self: this) => void): this {\n functionToPerform(this)\n return this\n }\n \n performFunctionWithDelay(delay: number, functionToCall: Function) {\n \n new UITimer(delay, NO, functionToCall)\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": ["sourceValue"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UIRootViewController.ts"],
|
|
4
|
-
"sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { UIDialogView } from \"./UIDialogView\"\nimport { EXTEND, FIRST, FIRST_OR_NIL, IS, IS_NOT, LAZY_VALUE, nil, NO, UIObject, wrapInNil, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIRoute } from \"./UIRoute\"\nimport { UIView } from \"./UIView\"\nimport { UIViewController } from \"./UIViewController\"\n\n\nexport interface UIRootViewControllerLazyViewControllerObject<T extends typeof UIViewController> {\n instance: InstanceType<T>;\n class: T;\n shouldShow: () => (Promise<boolean> | boolean);\n isInitialized: boolean\n}\n\n\nexport interface UIRootViewControllerLazyViewControllersObject {\n [x: string]: UIRootViewControllerLazyViewControllerObject<typeof UIViewController>\n}\n\n\nexport interface UIRootViewControllerLazyContentViewControllersObject extends UIRootViewControllerLazyViewControllersObject {\n mainViewController: UIRootViewControllerLazyViewControllerObject<typeof UIViewController>\n}\n\n\nexport class UIRootViewController extends UIViewController {\n \n topBarView: UIView = nil\n backgroundView: UIView = new UIView(this.view.elementID + \"BackgroundView\").configuredWithObject({\n style: {\n background: \"linear-gradient(\" + UIColor.whiteColor.stringValue + \", \" + UIColor.blueColor.stringValue + \")\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\"\n }\n })\n bottomBarView: UIView = nil\n \n _contentViewController!: UIViewController\n contentViewControllers: UIRootViewControllerLazyContentViewControllersObject = {\n mainViewController: this.lazyViewControllerObjectWithClass(UIViewController)\n }\n \n _detailsDialogView: UIDialogView = new UIDialogView(this.view.elementID + \"DetailsDialogView\")\n .configuredWithObject({\n dismiss: EXTEND(() => {\n const route = UIRoute.currentRoute\n this.detailsViewControllers.allValues.forEach(\n value => route.routeByRemovingComponentNamed(value.class.routeComponentName)\n )\n route.apply()\n }\n )\n })\n _detailsViewController: UIViewController = nil\n detailsViewControllers: UIRootViewControllerLazyViewControllersObject = {}\n \n \n constructor(view: UIView) {\n \n super(view)\n \n this.view.addSubview(this.backgroundView)\n \n }\n \n \n lazyViewControllerObjectWithClass<T extends typeof UIViewController>(\n classObject: T,\n shouldShow: () => (Promise<boolean> | boolean) = () => YES\n ): UIRootViewControllerLazyViewControllerObject<T> {\n const result: UIRootViewControllerLazyViewControllerObject<T> = {\n class: classObject,\n instance: nil,\n shouldShow: shouldShow,\n isInitialized: NO\n }\n UIObject.configureWithObject(result, {\n // @ts-ignore\n instance: LAZY_VALUE(\n () => {\n result.isInitialized = YES\n return new classObject(\n new UIView(classObject.name.replace(\"ViewController\", \"View\"))\n )\n }\n )\n })\n return result\n }\n \n \n override async handleRoute(route: UIRoute) {\n \n await super.handleRoute(route)\n \n UICore.languageService.updateCurrentLanguageKey()\n \n // Show content view\n await this.setContentViewControllerForRoute(route)\n \n await this.setDetailsViewControllerForRoute(route)\n \n }\n \n \n async setContentViewControllerForRoute(route: UIRoute) {\n const contentViewControllerObject = FIRST(\n await this.contentViewControllers.allValues.findAsyncSequential(\n async value => IS(route.componentWithViewController(value.class)) && await value.shouldShow()\n ),\n this.contentViewControllers.mainViewController\n )\n this.contentViewController = contentViewControllerObject.instance\n }\n \n async setDetailsViewControllerForRoute(route: UIRoute) {\n const detailsViewControllerObject = FIRST_OR_NIL(\n await this.detailsViewControllers.allValues.findAsyncSequential(\n async value => IS(route.componentWithViewController(value.class)) && await value.shouldShow()\n )\n )\n if (IS(route) && IS(this.detailsViewController) && IS_NOT(detailsViewControllerObject)) {\n this.detailsViewController = nil\n this._detailsDialogView.dismiss()\n this.view.setNeedsLayout()\n return\n }\n this.detailsViewController = detailsViewControllerObject.instance\n }\n \n get contentViewController(): UIViewController {\n return this._contentViewController || nil\n }\n \n set contentViewController(controller: UIViewController) {\n \n if (this.contentViewController == controller) {\n return\n }\n \n if (this.contentViewController) {\n this.removeChildViewController(this.contentViewController)\n }\n \n this._contentViewController = controller\n this.addChildViewControllerInContainer(controller, this.backgroundView)\n this._triggerLayoutViewSubviews()\n \n this.contentViewController.view.style.boxShadow = \"0 3px 6px 0 rgba(0, 0, 0, 0.1)\"\n \n this.view.setNeedsLayout()\n \n }\n \n \n get detailsViewController(): UIViewController {\n return this._detailsViewController\n }\n \n set detailsViewController(controller: UIViewController) {\n \n if (this.detailsViewController == controller) {\n return\n }\n \n if (IS(this.detailsViewController)) {\n this.removeChildViewController(this.detailsViewController)\n }\n \n this._detailsViewController = controller\n \n if (!IS(controller)) {\n return\n }\n \n this.addChildViewControllerInDialogView(controller, this._detailsDialogView)\n this._triggerLayoutViewSubviews()\n \n this.detailsViewController.view.style.borderRadius = \"5px\"\n \n this._detailsDialogView.showInView(this.view, YES)\n \n }\n \n updatePageScale(\n {\n minScaleWidth = 700,\n maxScaleWidth = 1500,\n minScale = 0.7,\n maxScale = 1\n } = {}\n ) {\n const actualPageWidth = (UIView.pageWidth * UIView.pageScale).integerValue\n let scale = minScale + (maxScale - minScale) *\n ((actualPageWidth - minScaleWidth) / (maxScaleWidth - minScaleWidth))\n scale = Math.min(scale, maxScale)\n scale = Math.max(scale, minScale)\n UIView.pageScale = scale\n }\n \n \n performDefaultLayout(\n {\n paddingLength = 20,\n contentViewMaxWidth = 1000,\n topBarHeight = 65,\n bottomBarMinHeight = 100\n } = {}\n ) {\n \n // View bounds\n const bounds = this.view.bounds\n \n this.topBarView.frame = new UIRectangle(0, 0, topBarHeight, bounds.width)\n \n this.backgroundView.style.top = \"\" + this.topBarView.frame.height.integerValue + \"px\"\n this.backgroundView.style.width = \"100%\"\n this.backgroundView.style.height = \"fit-content\"\n this.backgroundView.style.minHeight = \"\" +\n (bounds.height - this.topBarView.frame.height - this.bottomBarView.frame.height).integerValue + \"px\"\n \n const contentView = this.contentViewController.view\n contentView.style.position = \"relative\"\n contentView.style.bottom = \"0\"\n contentView.style.top = \"0\"\n contentView.style.width = \"100%\"\n contentView.setPaddings(nil, nil, paddingLength, nil)\n contentView.setNeedsLayout()\n \n if (contentViewMaxWidth < this.backgroundView.bounds.width) {\n \n contentView.style.marginBottom = \"\" +\n Math.min(\n (this.backgroundView.bounds.width - contentViewMaxWidth) * 0.5,\n paddingLength\n ).integerValue + \"px\"\n contentView.style.marginTop = \"\" +\n Math.min(\n (this.backgroundView.bounds.width - contentViewMaxWidth) * 0.5,\n paddingLength\n ).integerValue + \"px\"\n contentView.style.maxWidth = contentViewMaxWidth + \"px\"\n \n contentView.style.left = \"\" +\n ((this.backgroundView.bounds.width - contentView.bounds.width) * 0.5).integerValue +\n \"px\"\n \n }\n else {\n \n contentView.style.margin = \"\"\n contentView.style.left = \"\"\n contentView.style.maxWidth = \"\"\n \n }\n \n // Triggering immediate layout to ensure that the intrinsicContentHeight calculations work well\n this.contentViewController._triggerLayoutViewSubviews()\n \n let contentViewControllerViewHeight = contentView.intrinsicContentHeight(\n contentView.bounds.width\n )\n \n const detailsViewControllerViewHeight = FIRST_OR_NIL(this.detailsViewController).view.intrinsicContentHeight(\n contentView.bounds.width)\n if (detailsViewControllerViewHeight > contentViewControllerViewHeight) {\n contentViewControllerViewHeight = detailsViewControllerViewHeight\n }\n \n \n contentView.style.height = \"\" + contentViewControllerViewHeight.integerValue + \"px\"\n contentView.setNeedsLayout()\n \n if (IS(this.detailsViewController)) {\n \n contentView.style.transform = \"translateX(\" + 0 + \"px)\"\n \n this.detailsViewController.view.frame = this.backgroundView.frame.rectangleWithInset(\n paddingLength\n ).rectangleWithWidth(\n contentView.bounds.width,\n 0.5\n ).rectangleWithHeight(\n Math.max(\n this.detailsViewController.view.intrinsicContentHeight(\n this.detailsViewController.view.bounds.width\n ),\n contentView.bounds.height\n )\n )\n \n }\n else {\n \n contentView.style.transform = \"translateX(\" + 0 + \"px)\"\n \n }\n \n \n this.bottomBarView.frame = this.backgroundView.frame.rectangleWithY(\n this.backgroundView.frame.max.y\n ).rectangleWithHeight(\n Math.max(bottomBarMinHeight, this.bottomBarView.intrinsicContentHeight(this.backgroundView.frame.width))\n )\n \n \n wrapInNil(this._detailsDialogView).setMaxSizes(this.bottomBarView.frame.max.y)\n \n }\n \n \n}\n"],
|
|
4
|
+
"sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { UIDialogView } from \"./UIDialogView\"\nimport { EXTEND, FIRST, FIRST_OR_NIL, IS, IS_NOT, LAZY_VALUE, nil, NO, UIObject, wrapInNil, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIRoute } from \"./UIRoute\"\nimport { UIView } from \"./UIView\"\nimport { UIViewController } from \"./UIViewController\"\n\n\nexport interface UIRootViewControllerLazyViewControllerObject<T extends typeof UIViewController> {\n instance: InstanceType<T>;\n class: T;\n shouldShow: () => (Promise<boolean> | boolean);\n isInitialized: boolean\n}\n\n\nexport interface UIRootViewControllerLazyViewControllersObject {\n [x: string]: UIRootViewControllerLazyViewControllerObject<typeof UIViewController>\n}\n\n\nexport interface UIRootViewControllerLazyContentViewControllersObject extends UIRootViewControllerLazyViewControllersObject {\n mainViewController: UIRootViewControllerLazyViewControllerObject<typeof UIViewController>\n}\n\n\nexport class UIRootViewController extends UIViewController {\n \n topBarView: UIView = nil\n backgroundView: UIView = new UIView(this.view.elementID + \"BackgroundView\").configuredWithObject({\n style: {\n background: \"linear-gradient(\" + UIColor.whiteColor.stringValue + \", \" + UIColor.blueColor.stringValue + \")\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\"\n }\n })\n bottomBarView: UIView = nil\n \n _contentViewController!: UIViewController\n contentViewControllers: UIRootViewControllerLazyContentViewControllersObject = {\n mainViewController: this.lazyViewControllerObjectWithClass(UIViewController)\n }\n \n _detailsDialogView: UIDialogView = new UIDialogView(this.view.elementID + \"DetailsDialogView\")\n .configuredWithObject({\n dismiss: EXTEND(() => {\n const route = UIRoute.currentRoute\n this.detailsViewControllers.allValues.forEach(\n value => route.routeByRemovingComponentNamed(value.class.routeComponentName)\n )\n route.apply()\n }\n )\n })\n _detailsViewController: UIViewController = nil\n detailsViewControllers: UIRootViewControllerLazyViewControllersObject = {}\n \n \n constructor(view: UIView) {\n \n super(view)\n \n this.view.addSubview(this.backgroundView)\n \n }\n \n \n lazyViewControllerObjectWithClass<T extends typeof UIViewController>(\n classObject: T,\n shouldShow: () => (Promise<boolean> | boolean) = () => YES\n ): UIRootViewControllerLazyViewControllerObject<T> {\n const result: UIRootViewControllerLazyViewControllerObject<T> = {\n class: classObject,\n instance: nil,\n shouldShow: shouldShow,\n isInitialized: NO\n }\n UIObject.configureWithObject(result, {\n // @ts-ignore\n instance: LAZY_VALUE(\n () => {\n result.isInitialized = YES\n return new classObject(\n new UIView(classObject.name.replace(\"ViewController\", \"View\"))\n )\n }\n )\n })\n return result\n }\n \n \n override async handleRoute(route: UIRoute) {\n \n await super.handleRoute(route)\n \n UICore.languageService.updateCurrentLanguageKey()\n \n // Show content view\n await this.setContentViewControllerForRoute(route)\n \n await this.setDetailsViewControllerForRoute(route)\n \n }\n \n \n async setContentViewControllerForRoute(route: UIRoute) {\n const contentViewControllerObject = FIRST(\n await this.contentViewControllers.allValues.findAsyncSequential(\n async value => IS(route.componentWithViewController(value.class)) && await value.shouldShow()\n ),\n this.contentViewControllers.mainViewController\n )\n this.contentViewController = contentViewControllerObject.instance\n }\n \n async setDetailsViewControllerForRoute(route: UIRoute) {\n const detailsViewControllerObject = FIRST_OR_NIL(\n await this.detailsViewControllers.allValues.findAsyncSequential(\n async value => IS(route.componentWithViewController(value.class)) && await value.shouldShow()\n )\n )\n if (IS(route) && IS(this.detailsViewController) && IS_NOT(detailsViewControllerObject)) {\n this.detailsViewController = nil\n this._detailsDialogView.dismiss()\n this.view.setNeedsLayout()\n return\n }\n this.detailsViewController = detailsViewControllerObject.instance\n }\n \n get contentViewController(): UIViewController {\n return this._contentViewController || nil\n }\n \n set contentViewController(controller: UIViewController) {\n \n if (this.contentViewController == controller) {\n return\n }\n \n if (this.contentViewController) {\n this.removeChildViewController(this.contentViewController)\n }\n \n this._contentViewController = controller\n this.addChildViewControllerInContainer(controller, this.backgroundView)\n this._triggerLayoutViewSubviews()\n \n this.contentViewController.view.style.boxShadow = \"0 3px 6px 0 rgba(0, 0, 0, 0.1)\"\n \n this.view.setNeedsLayout()\n \n }\n \n \n get detailsViewController(): UIViewController {\n return this._detailsViewController\n }\n \n set detailsViewController(controller: UIViewController) {\n \n if (this.detailsViewController == controller) {\n return\n }\n \n if (IS(this.detailsViewController)) {\n this.removeChildViewController(this.detailsViewController)\n }\n \n this._detailsViewController = controller\n \n if (!IS(controller)) {\n return\n }\n \n this.addChildViewControllerInDialogView(controller, this._detailsDialogView)\n this._triggerLayoutViewSubviews()\n \n this.detailsViewController.view.style.borderRadius = \"5px\"\n \n this._detailsDialogView.showInView(this.view, YES)\n \n }\n \n updatePageScale(\n {\n minScaleWidth = 700,\n maxScaleWidth = 1500,\n minScale = 0.7,\n maxScale = 1\n } = {}\n ) {\n const actualPageWidth = (UIView.pageWidth * UIView.pageScale).integerValue\n let scale = minScale + (maxScale - minScale) *\n ((actualPageWidth - minScaleWidth) / (maxScaleWidth - minScaleWidth))\n scale = Math.min(scale, maxScale)\n scale = Math.max(scale, minScale)\n UIView.pageScale = scale\n }\n \n \n performDefaultLayout(\n {\n paddingLength = 20,\n contentViewMaxWidth = 1000,\n topBarHeight = 65,\n bottomBarMinHeight = 100\n } = {}\n ) {\n \n // View bounds\n const bounds = this.view.bounds\n \n this.topBarView.frame = new UIRectangle(0, 0, topBarHeight, bounds.width)\n \n this.backgroundView.style.top = \"\" + this.topBarView.frame.height.integerValue + \"px\"\n this.backgroundView.style.width = \"100%\"\n this.backgroundView.style.height = \"fit-content\"\n this.backgroundView.style.minHeight = \"\" +\n (bounds.height - this.topBarView.frame.height - this.bottomBarView.frame.height).integerValue + \"px\"\n \n const contentView = this.contentViewController.view\n contentView.style.position = \"relative\"\n contentView.style.bottom = \"0\"\n contentView.style.top = \"0\"\n contentView.style.width = \"100%\"\n contentView.setPaddings(nil, nil, paddingLength, nil)\n contentView.setNeedsLayout()\n \n if (contentViewMaxWidth < this.backgroundView.bounds.width) {\n \n contentView.style.marginBottom = \"\" +\n Math.min(\n (this.backgroundView.bounds.width - contentViewMaxWidth) * 0.5,\n paddingLength\n ).integerValue + \"px\"\n contentView.style.marginTop = \"\" +\n Math.min(\n (this.backgroundView.bounds.width - contentViewMaxWidth) * 0.5,\n paddingLength\n ).integerValue + \"px\"\n contentView.style.maxWidth = contentViewMaxWidth + \"px\"\n \n contentView.style.left = \"\" +\n ((this.backgroundView.bounds.width - contentView.bounds.width) * 0.5).integerValue +\n \"px\"\n \n }\n else {\n \n contentView.style.margin = \"\"\n contentView.style.left = \"\"\n contentView.style.maxWidth = \"\"\n \n }\n \n // Triggering immediate layout to ensure that the intrinsicContentHeight calculations work well\n this.contentViewController._triggerLayoutViewSubviews()\n \n let contentViewControllerViewHeight = contentView.intrinsicContentHeight(\n contentView.bounds.width\n )\n \n const detailsViewControllerViewHeight = FIRST_OR_NIL(this.detailsViewController).view.intrinsicContentHeight(\n contentView.bounds.width)\n if (detailsViewControllerViewHeight > contentViewControllerViewHeight) {\n contentViewControllerViewHeight = detailsViewControllerViewHeight\n }\n \n \n contentView.style.height = \"\" + contentViewControllerViewHeight.integerValue + \"px\"\n contentView.setNeedsLayout()\n \n if (IS(this.detailsViewController)) {\n \n contentView.style.transform = \"translateX(\" + 0 + \"px)\"\n \n this.detailsViewController.view.frame = this.backgroundView.frame.rectangleWithInset(\n paddingLength\n ).rectangleWithWidth(\n contentView.bounds.width,\n 0.5\n ).rectangleWithHeight(\n Math.max(\n this.detailsViewController.view.intrinsicContentHeight(\n this.detailsViewController.view.bounds.width\n ),\n contentView.bounds.height\n )\n )\n \n }\n else {\n \n contentView.style.transform = \"translateX(\" + 0 + \"px)\"\n \n }\n \n \n this.bottomBarView.frame = this.backgroundView.frame.rectangleWithY(\n this.backgroundView.frame.max.y\n ).rectangleWithHeight(\n Math.max(bottomBarMinHeight, this.bottomBarView.intrinsicContentHeight(this.backgroundView.frame.width))\n )\n \n \n wrapInNil(this._detailsDialogView).setMaxSizes(this.bottomBarView.frame.max.y)\n \n }\n \n \n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UISlideScrollerView.ts"],
|
|
4
|
-
"sourcesContent": ["import { UIButton } from \"./UIButton\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { IS, nil, NO, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIScrollView } from \"./UIScrollView\"\nimport { UITimer } from \"./UITimer\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UISlideScrollerView extends UIView {\n \n _previousLayoutBounds?: UIRectangle\n _targetIndex: number = 0\n pageIndicatorsView: UIView\n _isAnimating: boolean = NO\n _isAnimationOngoing: boolean = NO\n _animationTimer: UITimer = nil\n _scrollView: UIScrollView\n _slideViews: UIView[] = []\n \n wrapAround: boolean = YES\n \n animationDuration: number = 0.35\n animationDelay: number = 2\n \n _currentPageIndex: number = 0\n \n constructor(elementID: string, viewHTMLElement?: HTMLElement) {\n \n super(elementID, viewHTMLElement)\n \n this._scrollView = new UIScrollView(elementID + \"ScrollView\")\n \n this.addSubview(this._scrollView)\n \n \n this._scrollView._scrollEnabled = NO\n \n this._scrollView.addTargetForControlEvent(\n UIView.controlEvent.PointerMove,\n (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n this._animationTimer.invalidate()\n }\n \n }\n )\n \n this._scrollView.addTargetForControlEvent(UIView.controlEvent.PointerLeave, () => {\n \n if (this._isAnimating && event instanceof MouseEvent) {\n this.startAnimating()\n }\n \n })\n \n // Touch events\n this._scrollView.addTargetForControlEvent(UIView.controlEvent.PointerDown, (sender, event) => {\n \n if (event instanceof TouchEvent) {\n this._animationTimer.invalidate()\n }\n \n })\n \n this._scrollView.addTargetForControlEvents([\n UIView.controlEvent.PointerUp, UIView.controlEvent.PointerCancel\n ], (sender, event) => {\n \n if (event instanceof TouchEvent && this._isAnimating) {\n \n this.startAnimating()\n \n }\n \n })\n \n \n // Page indicator\n \n this.pageIndicatorsView = new UIView(elementID + \"PageIndicatorsView\")\n this.addSubview(this.pageIndicatorsView)\n \n \n }\n \n \n buttonForPageIndicatorWithIndex(index: number): UIButton {\n \n const result = new UIButton(this.viewHTMLElement.id + \"PageIndicatorButton\" + index)\n \n result.addTargetForControlEvents([\n UIView.controlEvent.PointerUpInside, UIView.controlEvent.EnterUp\n ], (sender, event) => {\n \n this.scrollToPageWithIndex(index, YES)\n \n if (this._isAnimating) {\n \n this.startAnimating()\n \n }\n \n \n })\n \n result.addTargetForControlEvent(UIView.controlEvent.PointerMove, () => {\n \n this._animationTimer.invalidate()\n \n })\n \n \n result.updateContentForNormalState = () => {\n \n result.backgroundColor = UIColor.blueColor\n result.titleLabel.textColor = UIColor.whiteColor\n \n }\n \n \n result.frame = new UIRectangle(nil, nil, 20, 50)\n \n // result.style.height = \"20px\";\n // result.style.width = \"50px\";\n result.style.display = \"table-cell\"\n result.style.position = \"relative\"\n \n \n // var resultContent = new UIView(result.viewHTMLElement.id + \"Content\");\n // resultContent.backgroundColor = UIColor.whiteColor;\n // resultContent.centerYInContainer();\n // resultContent.style.height = \"10px\";\n // resultContent.style.height = \"100%\";\n // resultContent.style.borderRadius = \"5px\";\n \n // result.addSubview(resultContent);\n \n \n return result\n \n }\n \n \n addSlideView(view: UIView) {\n \n this.slideViews.push(view)\n \n this.updateSlideViews()\n \n }\n \n set slideViews(views: UIView[]) {\n \n this._slideViews = views\n \n this.updateSlideViews()\n \n }\n \n get slideViews() {\n return this._slideViews\n }\n \n \n get currentPageIndex() {\n return this._currentPageIndex\n }\n \n set currentPageIndex(index: number) {\n this._currentPageIndex = index\n this._slideViews[index].willAppear()\n this._scrollView.contentOffset = this._scrollView.contentOffset.pointWithX(-this._slideViews[index].frame.min.x);\n (this.pageIndicatorsView.subviews as UIButton[]).everyElement.selected = NO;\n (this.pageIndicatorsView.subviews[index] as UIButton).selected = YES\n }\n \n \n scrollToPreviousPage(animated: boolean) {\n \n if (this.slideViews.length == 0) {\n return\n }\n \n var targetIndex = this.currentPageIndex\n \n if (this.wrapAround) {\n targetIndex = (this.currentPageIndex - 1) % (this.slideViews.length)\n }\n else if (this.currentPageIndex - 1 < this.slideViews.length) {\n targetIndex = this.currentPageIndex - 1\n }\n else {\n return\n }\n \n this.scrollToPageWithIndex(targetIndex, animated)\n \n }\n \n scrollToNextPage(animated: boolean) {\n \n if (this.slideViews.length == 0) {\n return\n }\n \n var targetIndex = this.currentPageIndex\n \n if (this.wrapAround) {\n targetIndex = (this.currentPageIndex + 1) % (this.slideViews.length)\n }\n else if (this.currentPageIndex + 1 < this.slideViews.length) {\n targetIndex = this.currentPageIndex + 1\n }\n else {\n return\n }\n \n this.scrollToPageWithIndex(targetIndex, animated)\n \n }\n \n \n scrollToPageWithIndex(targetIndex: number, animated: boolean = YES) {\n \n this._targetIndex = targetIndex\n \n // this._slideViews[this.currentPageIndex]._shouldLayout = NO;\n // this._slideViews[this._targetIndex]._shouldLayout = YES;\n \n //this._slideViews[this._targetIndex].hidden = NO;\n \n this.willScrollToPageWithIndex(targetIndex)\n \n this._isAnimationOngoing = YES\n \n //var previousView = this._slideViews[this.currentPageIndex];\n \n if (animated) {\n \n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this._scrollView.containerView,\n this.animationDuration,\n 0,\n undefined,\n function (this: UISlideScrollerView) {\n \n \n this.currentPageIndex = targetIndex\n \n \n }.bind(this),\n function (this: UISlideScrollerView) {\n \n this.didScrollToPageWithIndex(targetIndex)\n \n this._isAnimationOngoing = NO\n \n //previousView.hidden = YES;\n \n }.bind(this)\n )\n \n }\n else {\n \n \n this.currentPageIndex = targetIndex\n this.didScrollToPageWithIndex(targetIndex)\n \n //previousView.hidden = YES;\n \n }\n \n }\n \n \n willScrollToPageWithIndex(index: number) {\n \n const targetView = this.slideViews[index]\n \n if (IS(targetView) && (targetView as any).willAppear && (targetView as any).willAppear instanceof Function) {\n \n (targetView as any).willAppear()\n \n }\n \n }\n \n didScrollToPageWithIndex(index: number) {\n \n \n }\n \n \n startAnimating() {\n \n this._isAnimating = YES\n \n this._animationTimer.invalidate()\n \n this._animationTimer = new UITimer(this.animationDelay + this.animationDuration, YES, () => {\n \n this.scrollToNextPage(YES)\n \n })\n \n }\n \n stopAnimating() {\n \n this._isAnimating = NO\n this._animationTimer.invalidate()\n \n }\n \n \n updateSlideViews() {\n \n this._scrollView.containerView.subviews.slice().forEach(function (subview, index, array) {\n \n subview.removeFromSuperview()\n \n })\n \n this.pageIndicatorsView.subviews.slice().forEach(function (subview, index, array) {\n \n subview.removeFromSuperview()\n \n })\n \n this._slideViews.forEach((view, index) => {\n \n this._scrollView.addSubview(view)\n \n this.pageIndicatorsView.addSubview(this.buttonForPageIndicatorWithIndex(index))\n \n })\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UICore.broadcastEventName.WindowDidResize) {\n \n this.currentPageIndex = this.currentPageIndex\n \n \n }\n \n \n }\n \n \n override set frame(frame: UIRectangle) {\n \n super.frame = frame\n \n this.currentPageIndex = this.currentPageIndex\n \n }\n \n override get frame() {\n \n return super.frame\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n if (this.bounds.isEqualTo(this._previousLayoutBounds)) {\n return\n }\n \n const bounds = this.bounds\n \n this._previousLayoutBounds = bounds\n \n this._scrollView.frame = bounds\n \n \n this._scrollView.containerView.frame = bounds.rectangleWithWidth(bounds.width *\n this.slideViews.length).performFunctionWithSelf(function (this: UISlideScrollerView, self: UIRectangle) {\n \n self.offsetByPoint(this._scrollView.contentOffset)\n \n return self\n \n }.bind(this))\n \n this._slideViews.forEach((view, index) => {\n \n view.frame = bounds.rectangleWithX((this.bounds.width + 1) * index)\n \n })\n \n \n this.layoutPageIndicators()\n \n \n }\n \n \n layoutPageIndicators() {\n \n this.pageIndicatorsView.centerXInContainer()\n this.pageIndicatorsView.style.bottom = \"20px\"\n this.pageIndicatorsView.style.height = \"20px\"\n this.pageIndicatorsView.style.display = \"table-row\"\n \n }\n \n \n override removeFromSuperview() {\n \n \n super.removeFromSuperview()\n \n this.stopAnimating()\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\n\n\n\n\n"],
|
|
4
|
+
"sourcesContent": ["import { UIButton } from \"./UIButton\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { IS, nil, NO, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIScrollView } from \"./UIScrollView\"\nimport { UITimer } from \"./UITimer\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UISlideScrollerView extends UIView {\n \n _previousLayoutBounds?: UIRectangle\n _targetIndex: number = 0\n pageIndicatorsView: UIView\n _isAnimating: boolean = NO\n _isAnimationOngoing: boolean = NO\n _animationTimer: UITimer = nil\n _scrollView: UIScrollView\n _slideViews: UIView[] = []\n \n wrapAround: boolean = YES\n \n animationDuration: number = 0.35\n animationDelay: number = 2\n \n _currentPageIndex: number = 0\n \n constructor(elementID: string, viewHTMLElement?: HTMLElement) {\n \n super(elementID, viewHTMLElement)\n \n this._scrollView = new UIScrollView(elementID + \"ScrollView\")\n \n this.addSubview(this._scrollView)\n \n \n this._scrollView._scrollEnabled = NO\n \n this._scrollView.addTargetForControlEvent(\n UIView.controlEvent.PointerMove,\n (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n this._animationTimer.invalidate()\n }\n \n }\n )\n \n this._scrollView.addTargetForControlEvent(UIView.controlEvent.PointerLeave, () => {\n \n if (this._isAnimating && event instanceof MouseEvent) {\n this.startAnimating()\n }\n \n })\n \n // Touch events\n this._scrollView.addTargetForControlEvent(UIView.controlEvent.PointerDown, (sender, event) => {\n \n if (event instanceof TouchEvent) {\n this._animationTimer.invalidate()\n }\n \n })\n \n this._scrollView.addTargetForControlEvents([\n UIView.controlEvent.PointerUp, UIView.controlEvent.PointerCancel\n ], (sender, event) => {\n \n if (event instanceof TouchEvent && this._isAnimating) {\n \n this.startAnimating()\n \n }\n \n })\n \n \n // Page indicator\n \n this.pageIndicatorsView = new UIView(elementID + \"PageIndicatorsView\")\n this.addSubview(this.pageIndicatorsView)\n \n \n }\n \n \n buttonForPageIndicatorWithIndex(index: number): UIButton {\n \n const result = new UIButton(this.viewHTMLElement.id + \"PageIndicatorButton\" + index)\n \n result.addTargetForControlEvents([\n UIView.controlEvent.PointerUpInside, UIView.controlEvent.EnterUp\n ], (sender, event) => {\n \n this.scrollToPageWithIndex(index, YES)\n \n if (this._isAnimating) {\n \n this.startAnimating()\n \n }\n \n \n })\n \n result.addTargetForControlEvent(UIView.controlEvent.PointerMove, () => {\n \n this._animationTimer.invalidate()\n \n })\n \n \n result.updateContentForNormalState = () => {\n \n result.backgroundColor = UIColor.blueColor\n result.titleLabel.textColor = UIColor.whiteColor\n \n }\n \n \n result.frame = new UIRectangle(nil, nil, 20, 50)\n \n // result.style.height = \"20px\";\n // result.style.width = \"50px\";\n result.style.display = \"table-cell\"\n result.style.position = \"relative\"\n \n \n // var resultContent = new UIView(result.viewHTMLElement.id + \"Content\");\n // resultContent.backgroundColor = UIColor.whiteColor;\n // resultContent.centerYInContainer();\n // resultContent.style.height = \"10px\";\n // resultContent.style.height = \"100%\";\n // resultContent.style.borderRadius = \"5px\";\n \n // result.addSubview(resultContent);\n \n \n return result\n \n }\n \n \n addSlideView(view: UIView) {\n \n this.slideViews.push(view)\n \n this.updateSlideViews()\n \n }\n \n set slideViews(views: UIView[]) {\n \n this._slideViews = views\n \n this.updateSlideViews()\n \n }\n \n get slideViews() {\n return this._slideViews\n }\n \n \n get currentPageIndex() {\n return this._currentPageIndex\n }\n \n set currentPageIndex(index: number) {\n this._currentPageIndex = index\n this._slideViews[index].willAppear()\n this._scrollView.contentOffset = this._scrollView.contentOffset.pointWithX(-this._slideViews[index].frame.min.x);\n (this.pageIndicatorsView.subviews as UIButton[]).everyElement.selected = NO;\n (this.pageIndicatorsView.subviews[index] as UIButton).selected = YES\n }\n \n \n scrollToPreviousPage(animated: boolean) {\n \n if (this.slideViews.length == 0) {\n return\n }\n \n var targetIndex = this.currentPageIndex\n \n if (this.wrapAround) {\n targetIndex = (this.currentPageIndex - 1) % (this.slideViews.length)\n }\n else if (this.currentPageIndex - 1 < this.slideViews.length) {\n targetIndex = this.currentPageIndex - 1\n }\n else {\n return\n }\n \n this.scrollToPageWithIndex(targetIndex, animated)\n \n }\n \n scrollToNextPage(animated: boolean) {\n \n if (this.slideViews.length == 0) {\n return\n }\n \n var targetIndex = this.currentPageIndex\n \n if (this.wrapAround) {\n targetIndex = (this.currentPageIndex + 1) % (this.slideViews.length)\n }\n else if (this.currentPageIndex + 1 < this.slideViews.length) {\n targetIndex = this.currentPageIndex + 1\n }\n else {\n return\n }\n \n this.scrollToPageWithIndex(targetIndex, animated)\n \n }\n \n \n scrollToPageWithIndex(targetIndex: number, animated: boolean = YES) {\n \n this._targetIndex = targetIndex\n \n // this._slideViews[this.currentPageIndex]._shouldLayout = NO;\n // this._slideViews[this._targetIndex]._shouldLayout = YES;\n \n //this._slideViews[this._targetIndex].hidden = NO;\n \n this.willScrollToPageWithIndex(targetIndex)\n \n this._isAnimationOngoing = YES\n \n //var previousView = this._slideViews[this.currentPageIndex];\n \n if (animated) {\n \n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this._scrollView.containerView,\n this.animationDuration,\n 0,\n undefined,\n function (this: UISlideScrollerView) {\n \n \n this.currentPageIndex = targetIndex\n \n \n }.bind(this),\n function (this: UISlideScrollerView) {\n \n this.didScrollToPageWithIndex(targetIndex)\n \n this._isAnimationOngoing = NO\n \n //previousView.hidden = YES;\n \n }.bind(this)\n )\n \n }\n else {\n \n \n this.currentPageIndex = targetIndex\n this.didScrollToPageWithIndex(targetIndex)\n \n //previousView.hidden = YES;\n \n }\n \n }\n \n \n willScrollToPageWithIndex(index: number) {\n \n const targetView = this.slideViews[index]\n \n if (IS(targetView) && (targetView as any).willAppear && (targetView as any).willAppear instanceof Function) {\n \n (targetView as any).willAppear()\n \n }\n \n }\n \n didScrollToPageWithIndex(index: number) {\n \n \n }\n \n \n startAnimating() {\n \n this._isAnimating = YES\n \n this._animationTimer.invalidate()\n \n this._animationTimer = new UITimer(this.animationDelay + this.animationDuration, YES, () => {\n \n this.scrollToNextPage(YES)\n \n })\n \n }\n \n stopAnimating() {\n \n this._isAnimating = NO\n this._animationTimer.invalidate()\n \n }\n \n \n updateSlideViews() {\n \n this._scrollView.containerView.subviews.slice().forEach(function (subview, index, array) {\n \n subview.removeFromSuperview()\n \n })\n \n this.pageIndicatorsView.subviews.slice().forEach(function (subview, index, array) {\n \n subview.removeFromSuperview()\n \n })\n \n this._slideViews.forEach((view, index) => {\n \n this._scrollView.addSubview(view)\n \n this.pageIndicatorsView.addSubview(this.buttonForPageIndicatorWithIndex(index))\n \n })\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UICore.broadcastEventName.WindowDidResize) {\n \n this.currentPageIndex = this.currentPageIndex\n \n \n }\n \n \n }\n \n \n override set frame(frame: UIRectangle) {\n \n super.frame = frame\n \n this.currentPageIndex = this.currentPageIndex\n \n }\n \n override get frame() {\n \n return super.frame\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n if (this.bounds.isEqualTo(this._previousLayoutBounds)) {\n return\n }\n \n const bounds = this.bounds\n \n this._previousLayoutBounds = bounds\n \n this._scrollView.frame = bounds\n \n \n this._scrollView.containerView.frame = bounds.rectangleWithWidth(bounds.width *\n this.slideViews.length).performFunctionWithSelf(function (this: UISlideScrollerView, self: UIRectangle) {\n \n self.offsetByPoint(this._scrollView.contentOffset)\n \n return self\n \n }.bind(this))\n \n this._slideViews.forEach((view, index) => {\n \n view.frame = bounds.rectangleWithX((this.bounds.width + 1) * index)\n \n })\n \n \n this.layoutPageIndicators()\n \n \n }\n \n \n layoutPageIndicators() {\n \n this.pageIndicatorsView.centerXInContainer()\n this.pageIndicatorsView.style.bottom = \"20px\"\n this.pageIndicatorsView.style.height = \"20px\"\n this.pageIndicatorsView.style.display = \"table-row\"\n \n }\n \n \n override removeFromSuperview() {\n \n \n super.removeFromSuperview()\n \n this.stopAnimating()\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\n\n\n\n\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["event"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UITextArea.ts"],
|
|
4
|
-
"sourcesContent": ["import { NO } from \"./UIObject\"\nimport { UITextField } from \"./UITextField\"\nimport { UITextView } from \"./UITextView\"\n\n\nexport class UITextArea extends UITextField {\n \n \n constructor(elementID: string | undefined, viewHTMLElement = null) {\n \n super(elementID, viewHTMLElement, UITextView.type.textArea)\n \n this.viewHTMLElement.removeAttribute(\"type\")\n \n this.style.overflow = \"auto\"\n this.style.webkitUserSelect = \"text\"\n \n this.pausesPointerEvents = NO\n \n }\n \n \n override get viewHTMLElement(): HTMLTextAreaElement & HTMLInputElement {\n
|
|
4
|
+
"sourcesContent": ["import { NO } from \"./UIObject\"\nimport { UITextField } from \"./UITextField\"\nimport { UITextView } from \"./UITextView\"\n\n\nexport class UITextArea extends UITextField {\n \n \n constructor(elementID: string | undefined, viewHTMLElement = null) {\n \n super(elementID, viewHTMLElement, UITextView.type.textArea)\n \n this.viewHTMLElement.removeAttribute(\"type\")\n \n this.style.overflow = \"auto\"\n this.style.webkitUserSelect = \"text\"\n \n this.pausesPointerEvents = NO\n \n }\n \n \n override get viewHTMLElement(): HTMLTextAreaElement & HTMLInputElement {\n \n // @ts-ignore\n return super.viewHTMLElement\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\n\n\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAmB;AACnB,yBAA4B;AAC5B,wBAA2B;AAGpB,MAAM,mBAAmB,+BAAY;AAAA,EAGxC,YAAY,WAA+B,kBAAkB,MAAM;AAE/D,UAAM,WAAW,iBAAiB,6BAAW,KAAK,QAAQ;AAE1D,SAAK,gBAAgB,gBAAgB,MAAM;AAE3C,SAAK,MAAM,WAAW;AACtB,SAAK,MAAM,mBAAmB;AAE9B,SAAK,sBAAsB;AAAA,EAE/B;AAAA,EAGA,IAAa,kBAA0D;AAGnE,WAAO,MAAM;AAAA,EAEjB;AAGJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../scripts/UITextView.ts"],
|
|
4
|
-
"sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { FIRST, IS_LIKE_NULL, nil, NO, UIObject, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UITextView extends UIView {\n \n \n _textColor: UIColor = UITextView.defaultTextColor\n _textAlignment?: string\n \n _isSingleLine = YES\n \n textPrefix = \"\"\n textSuffix = \"\"\n \n _notificationAmount = 0\n \n _minFontSize: number = nil\n _maxFontSize: number = nil\n \n _automaticFontSizeSelection = NO\n \n changesOften = NO\n \n static defaultTextColor = UIColor.blackColor\n static notificationTextColor = UIColor.redColor\n \n static _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n static _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n \n static _ptToPx: number\n static _pxToPt: number\n _text?: string\n \n \n constructor(elementID?: string, textViewType = UITextView.type.paragraph, viewHTMLElement = null) {\n \n super(elementID, viewHTMLElement, textViewType)\n \n this.text = \"\"\n \n this.style.overflow = \"hidden\"\n this.style.textOverflow = \"ellipsis\"\n this.isSingleLine = YES\n \n this.textColor = this.textColor\n \n this.userInteractionEnabled = YES\n \n \n if (textViewType == UITextView.type.textArea) {\n \n this.pausesPointerEvents = YES\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerUpInside,\n (sender, event) => sender.focus()\n )\n \n \n }\n \n \n }\n \n \n static _determinePXAndPTRatios() {\n \n if (UITextView._ptToPx) {\n return\n }\n \n const o = document.createElement(\"div\")\n o.style.width = \"1000pt\"\n document.body.appendChild(o)\n UITextView._ptToPx = o.clientWidth / 1000\n document.body.removeChild(o)\n UITextView._pxToPt = 1 / UITextView._ptToPx\n \n }\n \n \n static type = {\n \n \"paragraph\": \"p\",\n \"header1\": \"h1\",\n \"header2\": \"h2\",\n \"header3\": \"h3\",\n \"header4\": \"h4\",\n \"header5\": \"h5\",\n \"header6\": \"h6\",\n \"textArea\": \"textarea\",\n \"textField\": \"input\",\n \"span\": \"span\",\n \"label\": \"label\"\n \n }\n \n \n static textAlignment = {\n \n \"left\": \"left\",\n \"center\": \"center\",\n \"right\": \"right\",\n \"justify\": \"justify\"\n \n }\n \n get textAlignment() {\n const result = this.style.textAlign\n return result\n }\n \n set textAlignment(textAlignment: string) {\n this._textAlignment = textAlignment\n this.style.textAlign = textAlignment\n }\n \n \n get textColor() {\n const result = this._textColor\n return result\n }\n \n set textColor(color: UIColor) {\n \n this._textColor = color || UITextView.defaultTextColor\n this.style.color = this._textColor.stringValue\n \n }\n \n \n get isSingleLine() {\n \n return this._isSingleLine\n \n }\n \n set isSingleLine(isSingleLine: boolean) {\n \n this._isSingleLine = isSingleLine\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n if (isSingleLine) {\n \n this.style.whiteSpace = \"pre\"\n \n return\n \n }\n \n this.style.whiteSpace = \"pre-wrap\"\n \n }\n \n \n get notificationAmount() {\n \n return this._notificationAmount\n \n }\n \n set notificationAmount(notificationAmount: number) {\n \n if (this._notificationAmount == notificationAmount) {\n \n return\n \n }\n \n this._notificationAmount = notificationAmount\n \n this.text = this.text\n \n this.setNeedsLayoutUpToRootView()\n \n this.notificationAmountDidChange(notificationAmount)\n \n }\n \n notificationAmountDidChange(notificationAmount: number) {\n \n \n }\n \n \n get text() {\n \n return (this._text || this.viewHTMLElement.innerHTML)\n \n }\n \n set text(text) {\n \n this._text = text\n \n var notificationText = \"\"\n \n if (this.notificationAmount) {\n \n notificationText = \"<span style=\\\"color: \" + UITextView.notificationTextColor.stringValue + \";\\\">\" +\n (\" (\" + this.notificationAmount + \")\").bold() + \"</span>\"\n \n }\n \n if (this.viewHTMLElement.innerHTML != this.textPrefix + text + this.textSuffix + notificationText) {\n \n this.viewHTMLElement.innerHTML = this.textPrefix + FIRST(text, \"\") + this.textSuffix + notificationText\n \n }\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n this.setNeedsLayout()\n \n }\n \n override set innerHTML(innerHTML: string) {\n \n this.text = innerHTML\n \n }\n \n override get innerHTML() {\n \n return this.viewHTMLElement.innerHTML\n \n }\n \n \n setText(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n \n this.setInnerHTML(key, defaultString, parameters)\n \n }\n \n \n get fontSize() {\n \n const style = window.getComputedStyle(this.viewHTMLElement, null).fontSize\n \n const result = (parseFloat(style) * UITextView._pxToPt)\n \n return result\n \n }\n \n set fontSize(fontSize: number) {\n \n \n this.style.fontSize = \"\" + fontSize + \"pt\"\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any // MEETOD LUUA!!!!\n \n \n }\n \n \n useAutomaticFontSize(minFontSize: number = nil, maxFontSize: number = nil) {\n \n \n this._automaticFontSizeSelection = YES\n \n \n this._minFontSize = minFontSize\n \n this._maxFontSize = maxFontSize\n \n this.setNeedsLayout()\n \n \n }\n \n \n static automaticallyCalculatedFontSize(\n bounds: UIRectangle,\n currentSize: UIRectangle,\n currentFontSize: number,\n minFontSize?: number,\n maxFontSize?: number\n ) {\n \n minFontSize = FIRST(minFontSize, 1)\n \n maxFontSize = FIRST(maxFontSize, 100000000000)\n \n \n const heightMultiplier = bounds.height / (currentSize.height + 1)\n \n const widthMultiplier = bounds.width / (currentSize.width + 1)\n \n \n var multiplier = heightMultiplier\n \n if (heightMultiplier > widthMultiplier) {\n \n multiplier = widthMultiplier\n \n \n }\n \n \n const maxFittingFontSize = currentFontSize * multiplier\n \n \n if (maxFittingFontSize > maxFontSize) {\n \n return maxFontSize\n \n }\n \n if (minFontSize > maxFittingFontSize) {\n \n return minFontSize\n \n }\n \n \n return maxFittingFontSize\n \n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n \n if (this._automaticFontSizeSelection) {\n \n this.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(0, 0, 1 *\n this.viewHTMLElement.offsetHeight, 1 *\n this.viewHTMLElement.offsetWidth),\n this.intrinsicContentSize(),\n this.fontSize,\n this._minFontSize,\n this._maxFontSize\n )\n \n \n }\n \n \n }\n \n \n override intrinsicContentHeight(constrainingWidth = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingWidth).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicHeightCache\n \n if (this.changesOften) {\n \n cacheObject = this._intrinsicHeightCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentHeight(constrainingWidth)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n override intrinsicContentWidth(constrainingHeight = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingHeight).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicWidthCache\n \n if (this.changesOften) {\n \n cacheObject = this._intrinsicWidthCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentWidth(constrainingHeight)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n \n override intrinsicContentSize() {\n \n // This works but is slow\n const result = this.intrinsicContentSizeWithConstraints(nil, nil)\n \n return result\n \n }\n \n \n}\n\n\nUITextView._determinePXAndPTRatios()\n\n\n// /**\n// * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n// * \n// * @param {String} text The text to be rendered.\n// * @param {String} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n// * \n// * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n// */\n// function getTextMetrics(text, font) {\n// // re-use canvas object for better performance\n// var canvas = getTextMetrics.canvas || (getTextMetrics.canvas = document.createElement(\"canvas\"));\n// var context = canvas.getContext(\"2d\");\n// context.font = font;\n// var metrics = context.measureText(text);\n// return metrics;\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"],
|
|
4
|
+
"sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { FIRST, IS_LIKE_NULL, nil, NO, UIObject, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UITextView extends UIView {\n \n \n _textColor: UIColor = UITextView.defaultTextColor\n _textAlignment?: string\n \n _isSingleLine = YES\n \n textPrefix = \"\"\n textSuffix = \"\"\n \n _notificationAmount = 0\n \n _minFontSize: number = nil\n _maxFontSize: number = nil\n \n _automaticFontSizeSelection = NO\n \n changesOften = NO\n \n static defaultTextColor = UIColor.blackColor\n static notificationTextColor = UIColor.redColor\n \n static _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n static _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n \n static _ptToPx: number\n static _pxToPt: number\n _text?: string\n \n \n constructor(elementID?: string, textViewType = UITextView.type.paragraph, viewHTMLElement = null) {\n \n super(elementID, viewHTMLElement, textViewType)\n \n this.text = \"\"\n \n this.style.overflow = \"hidden\"\n this.style.textOverflow = \"ellipsis\"\n this.isSingleLine = YES\n \n this.textColor = this.textColor\n \n this.userInteractionEnabled = YES\n \n \n if (textViewType == UITextView.type.textArea) {\n \n this.pausesPointerEvents = YES\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerUpInside,\n (sender, event) => sender.focus()\n )\n \n \n }\n \n \n }\n \n \n static _determinePXAndPTRatios() {\n \n if (UITextView._ptToPx) {\n return\n }\n \n const o = document.createElement(\"div\")\n o.style.width = \"1000pt\"\n document.body.appendChild(o)\n UITextView._ptToPx = o.clientWidth / 1000\n document.body.removeChild(o)\n UITextView._pxToPt = 1 / UITextView._ptToPx\n \n }\n \n \n static type = {\n \n \"paragraph\": \"p\",\n \"header1\": \"h1\",\n \"header2\": \"h2\",\n \"header3\": \"h3\",\n \"header4\": \"h4\",\n \"header5\": \"h5\",\n \"header6\": \"h6\",\n \"textArea\": \"textarea\",\n \"textField\": \"input\",\n \"span\": \"span\",\n \"label\": \"label\"\n \n }\n \n \n static textAlignment = {\n \n \"left\": \"left\",\n \"center\": \"center\",\n \"right\": \"right\",\n \"justify\": \"justify\"\n \n }\n \n get textAlignment() {\n const result = this.style.textAlign\n return result\n }\n \n set textAlignment(textAlignment: string) {\n this._textAlignment = textAlignment\n this.style.textAlign = textAlignment\n }\n \n \n get textColor() {\n const result = this._textColor\n return result\n }\n \n set textColor(color: UIColor) {\n \n this._textColor = color || UITextView.defaultTextColor\n this.style.color = this._textColor.stringValue\n \n }\n \n \n get isSingleLine() {\n \n return this._isSingleLine\n \n }\n \n set isSingleLine(isSingleLine: boolean) {\n \n this._isSingleLine = isSingleLine\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n if (isSingleLine) {\n \n this.style.whiteSpace = \"pre\"\n \n return\n \n }\n \n this.style.whiteSpace = \"pre-wrap\"\n \n }\n \n \n get notificationAmount() {\n \n return this._notificationAmount\n \n }\n \n set notificationAmount(notificationAmount: number) {\n \n if (this._notificationAmount == notificationAmount) {\n \n return\n \n }\n \n this._notificationAmount = notificationAmount\n \n this.text = this.text\n \n this.setNeedsLayoutUpToRootView()\n \n this.notificationAmountDidChange(notificationAmount)\n \n }\n \n notificationAmountDidChange(notificationAmount: number) {\n \n \n }\n \n \n get text() {\n \n return (this._text || this.viewHTMLElement.innerHTML)\n \n }\n \n set text(text) {\n \n this._text = text\n \n var notificationText = \"\"\n \n if (this.notificationAmount) {\n \n notificationText = \"<span style=\\\"color: \" + UITextView.notificationTextColor.stringValue + \";\\\">\" +\n (\" (\" + this.notificationAmount + \")\").bold() + \"</span>\"\n \n }\n \n if (this.viewHTMLElement.innerHTML != this.textPrefix + text + this.textSuffix + notificationText) {\n \n this.viewHTMLElement.innerHTML = this.textPrefix + FIRST(text, \"\") + this.textSuffix + notificationText\n \n }\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n this.setNeedsLayout()\n \n }\n \n override set innerHTML(innerHTML: string) {\n \n this.text = innerHTML\n \n }\n \n override get innerHTML() {\n \n return this.viewHTMLElement.innerHTML\n \n }\n \n \n setText(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n \n this.setInnerHTML(key, defaultString, parameters)\n \n }\n \n \n get fontSize() {\n \n const style = window.getComputedStyle(this.viewHTMLElement, null).fontSize\n \n const result = (parseFloat(style) * UITextView._pxToPt)\n \n return result\n \n }\n \n set fontSize(fontSize: number) {\n \n \n this.style.fontSize = \"\" + fontSize + \"pt\"\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any // MEETOD LUUA!!!!\n \n \n }\n \n \n useAutomaticFontSize(minFontSize: number = nil, maxFontSize: number = nil) {\n \n \n this._automaticFontSizeSelection = YES\n \n \n this._minFontSize = minFontSize\n \n this._maxFontSize = maxFontSize\n \n this.setNeedsLayout()\n \n \n }\n \n \n static automaticallyCalculatedFontSize(\n bounds: UIRectangle,\n currentSize: UIRectangle,\n currentFontSize: number,\n minFontSize?: number,\n maxFontSize?: number\n ) {\n \n minFontSize = FIRST(minFontSize, 1)\n \n maxFontSize = FIRST(maxFontSize, 100000000000)\n \n \n const heightMultiplier = bounds.height / (currentSize.height + 1)\n \n const widthMultiplier = bounds.width / (currentSize.width + 1)\n \n \n var multiplier = heightMultiplier\n \n if (heightMultiplier > widthMultiplier) {\n \n multiplier = widthMultiplier\n \n \n }\n \n \n const maxFittingFontSize = currentFontSize * multiplier\n \n \n if (maxFittingFontSize > maxFontSize) {\n \n return maxFontSize\n \n }\n \n if (minFontSize > maxFittingFontSize) {\n \n return minFontSize\n \n }\n \n \n return maxFittingFontSize\n \n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n \n if (this._automaticFontSizeSelection) {\n \n this.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(0, 0, 1 *\n this.viewHTMLElement.offsetHeight, 1 *\n this.viewHTMLElement.offsetWidth),\n this.intrinsicContentSize(),\n this.fontSize,\n this._minFontSize,\n this._maxFontSize\n )\n \n \n }\n \n \n }\n \n \n override intrinsicContentHeight(constrainingWidth = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingWidth).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicHeightCache\n \n if (this.changesOften) {\n \n cacheObject = this._intrinsicHeightCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentHeight(constrainingWidth)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n override intrinsicContentWidth(constrainingHeight = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingHeight).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicWidthCache\n \n if (this.changesOften) {\n \n cacheObject = this._intrinsicWidthCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentWidth(constrainingHeight)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n \n override intrinsicContentSize() {\n \n // This works but is slow\n const result = this.intrinsicContentSizeWithConstraints(nil, nil)\n \n return result\n \n }\n \n \n}\n\n\nUITextView._determinePXAndPTRatios()\n\n\n// /**\n// * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n// * \n// * @param {String} text The text to be rendered.\n// * @param {String} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n// * \n// * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n// */\n// function getTextMetrics(text, font) {\n// // re-use canvas object for better performance\n// var canvas = getTextMetrics.canvas || (getTextMetrics.canvas = document.createElement(\"canvas\"));\n// var context = canvas.getContext(\"2d\");\n// context.font = font;\n// var metrics = context.measureText(text);\n// return metrics;\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
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uicore-ts",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.52",
|
|
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",
|
|
@@ -42,13 +42,13 @@ export class UIActionIndicator extends UIView {
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
override set hidden(hidden: boolean) {
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
super.hidden = hidden
|
|
47
|
-
|
|
47
|
+
|
|
48
48
|
if (hidden) {
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
this.indicatorView.removeFromSuperview()
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
}
|
|
53
53
|
else {
|
|
54
54
|
|
|
@@ -71,13 +71,12 @@ export class UIActionIndicator extends UIView {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
|
|
75
74
|
override layoutSubviews() {
|
|
76
75
|
|
|
77
76
|
super.layoutSubviews()
|
|
78
|
-
|
|
77
|
+
|
|
79
78
|
const bounds = this.bounds
|
|
80
|
-
|
|
79
|
+
|
|
81
80
|
//this.indicatorView.centerInContainer();
|
|
82
81
|
|
|
83
82
|
this.indicatorView.style.height = "" + this._size.integerValue + "px"
|
package/scripts/UIBaseButton.ts
CHANGED
|
@@ -270,9 +270,9 @@ export class UIBaseButton extends UIView {
|
|
|
270
270
|
|
|
271
271
|
if (event.name == UIView.broadcastEventName.PageDidScroll || event.name ==
|
|
272
272
|
UIView.broadcastEventName.AddedToViewTree) {
|
|
273
|
-
|
|
273
|
+
|
|
274
274
|
this.hovered = NO
|
|
275
|
-
|
|
275
|
+
|
|
276
276
|
this.highlighted = NO
|
|
277
277
|
|
|
278
278
|
this.updateContentForCurrentState()
|
|
@@ -307,10 +307,10 @@ export class UIBaseButton extends UIView {
|
|
|
307
307
|
override layoutSubviews() {
|
|
308
308
|
|
|
309
309
|
super.layoutSubviews()
|
|
310
|
-
|
|
310
|
+
|
|
311
311
|
const bounds = this.bounds
|
|
312
|
-
|
|
313
|
-
|
|
312
|
+
|
|
313
|
+
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
|
|
@@ -320,9 +320,9 @@ export class UIBaseButton extends UIView {
|
|
|
320
320
|
|
|
321
321
|
// Do not send the event in this case
|
|
322
322
|
//super.sendControlEventForKey(eventKey, nativeEvent);
|
|
323
|
-
|
|
323
|
+
|
|
324
324
|
const asd = 1
|
|
325
|
-
|
|
325
|
+
|
|
326
326
|
}
|
|
327
327
|
else {
|
|
328
328
|
|
package/scripts/UIButton.ts
CHANGED
|
@@ -143,7 +143,7 @@ export class UIButton extends UIBaseButton {
|
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
override updateContentForCurrentState() {
|
|
146
|
-
|
|
146
|
+
|
|
147
147
|
let updateFunction: Function = this.updateContentForNormalState
|
|
148
148
|
if (this.selected && this.highlighted) {
|
|
149
149
|
updateFunction = this.updateContentForSelectedAndHighlightedState
|
|
@@ -270,13 +270,13 @@ export class UIButton extends UIBaseButton {
|
|
|
270
270
|
override addStyleClass(styleClassName: string) {
|
|
271
271
|
|
|
272
272
|
super.addStyleClass(styleClassName)
|
|
273
|
-
|
|
274
|
-
if (this.styleClassName != styleClassName) {
|
|
275
273
|
|
|
274
|
+
if (this.styleClassName != styleClassName) {
|
|
275
|
+
|
|
276
276
|
this.updateContentForCurrentState.call(this)
|
|
277
|
-
|
|
277
|
+
|
|
278
278
|
}
|
|
279
|
-
|
|
279
|
+
|
|
280
280
|
}
|
|
281
281
|
|
|
282
282
|
|
package/scripts/UIDialogView.ts
CHANGED
|
@@ -78,13 +78,13 @@ export class UIDialogView<ViewType extends UIView = UIView> extends UIView {
|
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
override willAppear(animated: boolean = NO) {
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
if (animated) {
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
this.style.opacity = "0"
|
|
85
|
-
|
|
86
|
-
}
|
|
87
85
|
|
|
86
|
+
}
|
|
87
|
+
|
|
88
88
|
this.style.height = ""
|
|
89
89
|
|
|
90
90
|
this._frame = nil
|
|
@@ -234,6 +234,8 @@ export class UIDialogView<ViewType extends UIView = UIView> extends UIView {
|
|
|
234
234
|
|
|
235
235
|
this.view.style.position = "relative"
|
|
236
236
|
|
|
237
|
+
this.view.style.zIndex = "" + this.zIndex
|
|
238
|
+
|
|
237
239
|
// this.view.style.maxHeight = "" + (bounds.height - margin * 2).integerValue + "px";
|
|
238
240
|
// this.view.style.maxWidth = "" + (bounds.width - margin * 2).integerValue + "px";
|
|
239
241
|
|
package/scripts/UIImageView.ts
CHANGED
|
@@ -39,9 +39,9 @@ export class UIImageView extends UIView {
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
override get viewHTMLElement() {
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
return super.viewHTMLElement as HTMLImageElement
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
|
|
@@ -259,21 +259,21 @@ export class UIImageView extends UIView {
|
|
|
259
259
|
|
|
260
260
|
|
|
261
261
|
override intrinsicContentSize() {
|
|
262
|
-
|
|
263
|
-
|
|
262
|
+
|
|
263
|
+
|
|
264
264
|
return new UIRectangle(0, 0, this.viewHTMLElement.naturalHeight, this.viewHTMLElement.naturalWidth)
|
|
265
|
-
|
|
266
|
-
|
|
265
|
+
|
|
266
|
+
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
override intrinsicContentSizeWithConstraints(constrainingHeight = 0, constrainingWidth = 0) {
|
|
270
|
-
|
|
270
|
+
|
|
271
271
|
const heightRatio = constrainingHeight / this.viewHTMLElement.naturalHeight
|
|
272
|
-
|
|
272
|
+
|
|
273
273
|
const widthRatio = constrainingWidth / this.viewHTMLElement.naturalWidth
|
|
274
|
-
|
|
274
|
+
|
|
275
275
|
const multiplier = Math.max(heightRatio, widthRatio)
|
|
276
|
-
|
|
276
|
+
|
|
277
277
|
return new UIRectangle(0, 0, this.viewHTMLElement.naturalHeight *
|
|
278
278
|
multiplier, this.viewHTMLElement.naturalWidth * multiplier)
|
|
279
279
|
|
package/scripts/UILink.ts
CHANGED
|
@@ -32,10 +32,10 @@ export class UILink extends UIBaseButton {
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
override get viewHTMLElement() {
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
// @ts-ignore
|
|
37
37
|
return super.viewHTMLElement as HTMLLinkElement
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
set text(text: string) {
|
|
@@ -114,9 +114,9 @@ export class UILink extends UIBaseButton {
|
|
|
114
114
|
override layoutSubviews() {
|
|
115
115
|
|
|
116
116
|
super.layoutSubviews()
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
const bounds = this.bounds
|
|
119
|
-
|
|
119
|
+
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
|
package/scripts/UILinkButton.ts
CHANGED
package/scripts/UIObject.ts
CHANGED
|
@@ -229,14 +229,14 @@ export class UIFunctionExtender<T extends (...args: any) => any> {
|
|
|
229
229
|
|
|
230
230
|
extendedFunction(functionToExtend: T) {
|
|
231
231
|
const extendingFunction = this.extendingFunction
|
|
232
|
-
|
|
232
|
+
|
|
233
233
|
function extendedFunction(this: any, ...objects: any[]) {
|
|
234
234
|
const boundFunctionToExtend = functionToExtend.bind(this)
|
|
235
235
|
boundFunctionToExtend(...objects)
|
|
236
236
|
const boundExtendingFunction = extendingFunction.bind(this)
|
|
237
237
|
boundExtendingFunction(...objects)
|
|
238
238
|
}
|
|
239
|
-
|
|
239
|
+
|
|
240
240
|
return extendedFunction
|
|
241
241
|
}
|
|
242
242
|
|
|
@@ -269,7 +269,7 @@ export class UILazyPropertyValue<T> {
|
|
|
269
269
|
isValueInitialized = YES
|
|
270
270
|
this.initFunction = nil
|
|
271
271
|
}
|
|
272
|
-
|
|
272
|
+
|
|
273
273
|
// @ts-ignore
|
|
274
274
|
if (delete target[key]) {
|
|
275
275
|
|
|
@@ -314,7 +314,7 @@ export type UIInitializerObject<T> = {
|
|
|
314
314
|
export class UIObject {
|
|
315
315
|
|
|
316
316
|
constructor() {
|
|
317
|
-
|
|
317
|
+
|
|
318
318
|
// Do something here if needed
|
|
319
319
|
|
|
320
320
|
}
|
|
@@ -375,7 +375,7 @@ export class UIObject {
|
|
|
375
375
|
|
|
376
376
|
const keys = keyPath.split(".")
|
|
377
377
|
let currentObject = object
|
|
378
|
-
|
|
378
|
+
|
|
379
379
|
for (let i = 0; i < keys.length; i++) {
|
|
380
380
|
|
|
381
381
|
const key = keys[i]
|
|
@@ -447,10 +447,10 @@ export class UIObject {
|
|
|
447
447
|
|
|
448
448
|
|
|
449
449
|
static configureWithObject<T extends object>(configurationTarget: T, object: UIInitializerObject<T>) {
|
|
450
|
-
|
|
451
|
-
const isAnObject = (item: any) => (item && typeof item === "object" && !Array.isArray(item) &&
|
|
452
|
-
|
|
453
|
-
|
|
450
|
+
|
|
451
|
+
const isAnObject = (item: any) => (item && typeof item === "object" && !Array.isArray(item) && !(item instanceof UICoreExtensionValueObject))
|
|
452
|
+
const isAPureObject = (item: any) => isAnObject(item) && Object.getPrototypeOf(item) === Object.getPrototypeOf({})
|
|
453
|
+
|
|
454
454
|
function isAClass(funcOrClass: object) {
|
|
455
455
|
const isFunction = (functionToCheck: object) => (functionToCheck && {}.toString.call(functionToCheck) ===
|
|
456
456
|
"[object Function]")
|
|
@@ -458,25 +458,26 @@ export class UIObject {
|
|
|
458
458
|
return (isFunction(funcOrClass) && !propertyNames.includes("arguments") &&
|
|
459
459
|
propertyNames.includes("prototype"))
|
|
460
460
|
}
|
|
461
|
-
|
|
461
|
+
|
|
462
462
|
let keyPathsAndValues: { value: any, keyPath: string }[] = []
|
|
463
|
-
|
|
463
|
+
|
|
464
464
|
function prepareKeyPathsAndValues(target: Record<string, any>, source: object, keyPath = "") {
|
|
465
|
-
|
|
465
|
+
|
|
466
466
|
if ((isAnObject(target) || isAClass(target)) && isAnObject(source)) {
|
|
467
|
-
|
|
467
|
+
|
|
468
468
|
source.forEach((sourceValue, key) => {
|
|
469
|
-
|
|
469
|
+
|
|
470
470
|
const valueKeyPath = keyPath + "." + key
|
|
471
|
-
|
|
471
|
+
|
|
472
472
|
function addValueAndKeyPath(sourceValue: any) {
|
|
473
473
|
keyPathsAndValues.push({
|
|
474
474
|
value: sourceValue,
|
|
475
475
|
keyPath: valueKeyPath.replace(".", "")
|
|
476
476
|
})
|
|
477
477
|
}
|
|
478
|
-
|
|
479
|
-
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
if (isAPureObject(sourceValue) || isAClass(sourceValue)) {
|
|
480
481
|
if (!(key in target) || target[key] instanceof Function) {
|
|
481
482
|
addValueAndKeyPath(sourceValue)
|
|
482
483
|
}
|
|
@@ -498,7 +499,7 @@ export class UIObject {
|
|
|
498
499
|
}
|
|
499
500
|
|
|
500
501
|
prepareKeyPathsAndValues(configurationTarget, object)
|
|
501
|
-
|
|
502
|
+
|
|
502
503
|
// Sort based on key path lengths
|
|
503
504
|
keyPathsAndValues = keyPathsAndValues.sort((a, b) => {
|
|
504
505
|
|
|
@@ -93,14 +93,14 @@ export class UIRootViewController extends UIViewController {
|
|
|
93
93
|
|
|
94
94
|
|
|
95
95
|
override async handleRoute(route: UIRoute) {
|
|
96
|
-
|
|
96
|
+
|
|
97
97
|
await super.handleRoute(route)
|
|
98
|
-
|
|
98
|
+
|
|
99
99
|
UICore.languageService.updateCurrentLanguageKey()
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
// Show content view
|
|
102
102
|
await this.setContentViewControllerForRoute(route)
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
await this.setDetailsViewControllerForRoute(route)
|
|
105
105
|
|
|
106
106
|
}
|
|
@@ -344,14 +344,14 @@ export class UISlideScrollerView extends UIView {
|
|
|
344
344
|
|
|
345
345
|
|
|
346
346
|
override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {
|
|
347
|
-
|
|
347
|
+
|
|
348
348
|
super.didReceiveBroadcastEvent(event)
|
|
349
|
-
|
|
349
|
+
|
|
350
350
|
if (event.name == UICore.broadcastEventName.WindowDidResize) {
|
|
351
|
-
|
|
351
|
+
|
|
352
352
|
this.currentPageIndex = this.currentPageIndex
|
|
353
|
-
|
|
354
|
-
|
|
353
|
+
|
|
354
|
+
|
|
355
355
|
}
|
|
356
356
|
|
|
357
357
|
|
|
@@ -380,9 +380,9 @@ export class UISlideScrollerView extends UIView {
|
|
|
380
380
|
if (this.bounds.isEqualTo(this._previousLayoutBounds)) {
|
|
381
381
|
return
|
|
382
382
|
}
|
|
383
|
-
|
|
383
|
+
|
|
384
384
|
const bounds = this.bounds
|
|
385
|
-
|
|
385
|
+
|
|
386
386
|
this._previousLayoutBounds = bounds
|
|
387
387
|
|
|
388
388
|
this._scrollView.frame = bounds
|
package/scripts/UITextArea.ts
CHANGED