@simpleangularcontrols/sac-common 10.0.0-rc.3 → 10.0.0-rc.30
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/README.md +16 -16
- package/bundles/simpleangularcontrols-sac-common.umd.js +13451 -11757
- package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
- package/common/basedatetimecontrol.d.ts +200 -83
- package/common/basedatetimecontrol.ngfactory.d.ts +1 -1
- package/common/baseinputcontrol.d.ts +40 -42
- package/common/baseinputcontrol.ngfactory.d.ts +1 -1
- package/common/baselistcontrol.d.ts +43 -43
- package/common/baselistcontrol.ngfactory.d.ts +1 -1
- package/common/basemodelcontrol.d.ts +300 -252
- package/common/basemodelcontrol.ngfactory.d.ts +1 -1
- package/common/baseselectcontrol.d.ts +14 -14
- package/common/baseselectcontrol.ngfactory.d.ts +1 -1
- package/common/baseuploadcontrol.d.ts +324 -284
- package/common/baseuploadcontrol.ngfactory.d.ts +1 -1
- package/components/browser/browser.d.ts +264 -267
- package/components/browser/browser.ngfactory.d.ts +1 -1
- package/components/browser/models/browserfile.d.ts +17 -17
- package/components/browser/models/browserfile.ngfactory.d.ts +1 -1
- package/components/browser/models/browserfiledeleterequest.d.ts +18 -18
- package/components/browser/models/browserfiledeleterequest.ngfactory.d.ts +1 -1
- package/components/browser/models/browserfilerenamerequest.d.ts +22 -22
- package/components/browser/models/browserfilerenamerequest.ngfactory.d.ts +1 -1
- package/components/browser/models/browserfileresponse.d.ts +10 -10
- package/components/browser/models/browserfileresponse.ngfactory.d.ts +1 -1
- package/components/browser/models/browserfilesaverequest.d.ts +22 -22
- package/components/browser/models/browserfilesaverequest.ngfactory.d.ts +1 -1
- package/components/browser/models/browsernode.d.ts +34 -34
- package/components/browser/models/browsernode.ngfactory.d.ts +1 -1
- package/components/browser/models/browsernodedeleterequest.d.ts +14 -14
- package/components/browser/models/browsernodedeleterequest.ngfactory.d.ts +1 -1
- package/components/browser/models/browsernodenewrequest.d.ts +18 -18
- package/components/browser/models/browsernodenewrequest.ngfactory.d.ts +1 -1
- package/components/browser/models/browsernoderenamerequest.d.ts +18 -18
- package/components/browser/models/browsernoderenamerequest.ngfactory.d.ts +1 -1
- package/components/browser/models/browsernoderequest.d.ts +18 -18
- package/components/browser/models/browsernoderequest.ngfactory.d.ts +1 -1
- package/components/browser/models/browsernoderesponse.d.ts +10 -10
- package/components/browser/models/browsernoderesponse.ngfactory.d.ts +1 -1
- package/controls/buttons/button.d.ts +80 -70
- package/controls/buttons/button.ngfactory.d.ts +1 -1
- package/controls/checkbox/checkbox.d.ts +32 -23
- package/controls/checkbox/checkbox.ngfactory.d.ts +1 -1
- package/controls/checkbox/radiobutton.d.ts +120 -79
- package/controls/checkbox/radiobutton.ngfactory.d.ts +1 -1
- package/controls/checkbox/radiobuttons.d.ts +63 -60
- package/controls/checkbox/radiobuttons.ngfactory.d.ts +1 -1
- package/controls/confirm/confirm.button.d.ts +25 -25
- package/controls/confirm/confirm.button.ngfactory.d.ts +1 -1
- package/controls/confirm/confirm.d.ts +50 -49
- package/controls/confirm/confirm.ngfactory.d.ts +1 -1
- package/controls/confirm/confirm.service.d.ts +63 -63
- package/controls/confirm/confirm.service.ngfactory.d.ts +1 -1
- package/controls/contextmenu/contextmenu.d.ts +134 -113
- package/controls/contextmenu/contextmenu.interface.d.ts +9 -0
- package/{utilities/positioning.ngfactory.d.ts → controls/contextmenu/contextmenu.interface.ngfactory.d.ts} +1 -1
- package/controls/contextmenu/contextmenu.ngfactory.d.ts +1 -1
- package/controls/contextmenu/contextmenuanchor.d.ts +15 -15
- package/controls/contextmenu/contextmenuanchor.ngfactory.d.ts +1 -1
- package/controls/contextmenu/contextmenucontainer.d.ts +15 -15
- package/controls/contextmenu/contextmenucontainer.ngfactory.d.ts +1 -1
- package/controls/contextmenu/contextmenuitem.d.ts +10 -5
- package/controls/contextmenu/contextmenuitem.ngfactory.d.ts +1 -1
- package/controls/contextmenu/contextmenuitembutton.d.ts +67 -66
- package/controls/contextmenu/contextmenuitembutton.ngfactory.d.ts +1 -1
- package/controls/datetime/date.d.ts +117 -120
- package/controls/datetime/date.ngfactory.d.ts +1 -1
- package/controls/datetime/dateselector.d.ts +176 -161
- package/controls/datetime/dateselector.ngfactory.d.ts +1 -1
- package/controls/datetime/datetime.d.ts +129 -135
- package/controls/datetime/datetime.ngfactory.d.ts +1 -1
- package/controls/datetime/time.d.ts +121 -115
- package/controls/datetime/time.ngfactory.d.ts +1 -1
- package/controls/dialog/dialog.d.ts +103 -105
- package/controls/dialog/dialog.ngfactory.d.ts +1 -1
- package/controls/form/form.d.ts +52 -47
- package/controls/form/form.ngfactory.d.ts +1 -1
- package/controls/grid/grid.d.ts +132 -125
- package/controls/grid/grid.ngfactory.d.ts +1 -1
- package/controls/grid/gridbutton.d.ts +53 -33
- package/controls/grid/gridbutton.ngfactory.d.ts +1 -1
- package/controls/grid/gridcolumn.d.ts +32 -28
- package/controls/grid/gridcolumn.ngfactory.d.ts +1 -1
- package/controls/grid/gridcolumnaction.d.ts +15 -15
- package/controls/grid/gridcolumnaction.ngfactory.d.ts +1 -1
- package/controls/grid/gridcolumnbase.d.ts +115 -86
- package/controls/grid/gridcolumnbase.ngfactory.d.ts +1 -1
- package/controls/grid/gridimage.d.ts +9 -9
- package/controls/grid/gridimage.ngfactory.d.ts +1 -1
- package/controls/grid/model.d.ts +95 -83
- package/controls/grid/model.ngfactory.d.ts +1 -1
- package/controls/grid/paging.d.ts +148 -147
- package/controls/grid/paging.ngfactory.d.ts +1 -1
- package/controls/input/input.d.ts +35 -35
- package/controls/input/input.ngfactory.d.ts +1 -1
- package/controls/input/inputarea.d.ts +28 -26
- package/controls/input/inputarea.ngfactory.d.ts +1 -1
- package/controls/input/inputcurrency.d.ts +14 -11
- package/controls/input/inputcurrency.ngfactory.d.ts +1 -1
- package/controls/input/inputdecimal.d.ts +59 -59
- package/controls/input/inputdecimal.ngfactory.d.ts +1 -1
- package/controls/input/inputemail.d.ts +19 -19
- package/controls/input/inputemail.ngfactory.d.ts +1 -1
- package/controls/input/inputinteger.d.ts +59 -59
- package/controls/input/inputinteger.ngfactory.d.ts +1 -1
- package/controls/input/inputpassword.d.ts +43 -23
- package/controls/input/inputpassword.ngfactory.d.ts +1 -1
- package/controls/input/inputsearch.d.ts +35 -23
- package/controls/input/inputsearch.ngfactory.d.ts +1 -1
- package/controls/layout/formlayout.d.ts +65 -46
- package/controls/layout/formlayout.ngfactory.d.ts +1 -1
- package/controls/list/buildvaluestring.d.ts +6 -0
- package/controls/{treeview/ngtreeitemaction.ngfactory.d.ts → list/buildvaluestring.ngfactory.d.ts} +1 -1
- package/controls/list/dropdown.d.ts +97 -138
- package/controls/list/dropdown.ngfactory.d.ts +1 -1
- package/controls/list/dropdownoptions.d.ts +38 -0
- package/{validation/minlength.validator.ngfactory.d.ts → controls/list/dropdownoptions.ngfactory.d.ts} +1 -1
- package/controls/list/list.module.d.ts +2 -2
- package/controls/list/list.module.ngfactory.d.ts +3 -3
- package/controls/list/listbox.d.ts +88 -86
- package/controls/list/listbox.ngfactory.d.ts +1 -1
- package/controls/multilanguage/multilanguageinput.d.ts +102 -102
- package/controls/multilanguage/multilanguageinput.ngfactory.d.ts +1 -1
- package/controls/multilanguage/multilanguageinputarea.d.ts +107 -107
- package/controls/multilanguage/multilanguageinputarea.ngfactory.d.ts +1 -1
- package/controls/static/formcontainer.d.ts +35 -31
- package/controls/static/formcontainer.ngfactory.d.ts +1 -1
- package/controls/static/staticlabel.d.ts +18 -18
- package/controls/static/staticlabel.ngfactory.d.ts +1 -1
- package/controls/tabs/tab.d.ts +49 -45
- package/controls/tabs/tab.ngfactory.d.ts +1 -1
- package/controls/tabs/tabitem.d.ts +30 -30
- package/controls/tabs/tabitem.ngfactory.d.ts +1 -1
- package/controls/tinymce/tinymce.d.ts +153 -149
- package/controls/tinymce/tinymce.ngfactory.d.ts +1 -1
- package/controls/tinymce/tinymcedialogsettings.d.ts +27 -27
- package/controls/tinymce/tinymcedialogsettings.ngfactory.d.ts +1 -1
- package/controls/tinymce/tinymcedialogsettingsmeta.d.ts +9 -9
- package/controls/tinymce/tinymcedialogsettingsmeta.ngfactory.d.ts +1 -1
- package/controls/tinymce/tinymceinstance.d.ts +10 -10
- package/controls/tinymce/tinymceinstance.ngfactory.d.ts +1 -1
- package/controls/tooltip/tooltip.d.ts +158 -138
- package/controls/tooltip/tooltip.ngfactory.d.ts +1 -1
- package/controls/treeview/treeview.d.ts +230 -185
- package/controls/treeview/treeview.ngfactory.d.ts +1 -1
- package/controls/upload/dropzonemultiple.d.ts +74 -70
- package/controls/upload/dropzonemultiple.ngfactory.d.ts +1 -1
- package/controls/upload/dropzonesingle.d.ts +51 -47
- package/controls/upload/dropzonesingle.ngfactory.d.ts +1 -1
- package/controls/upload/uploadmultiple.d.ts +54 -50
- package/controls/upload/uploadmultiple.ngfactory.d.ts +1 -1
- package/controls/upload/uploadsingle.d.ts +31 -27
- package/controls/upload/uploadsingle.ngfactory.d.ts +1 -1
- package/controls/validation/validationsummary.d.ts +65 -60
- package/controls/validation/validationsummary.ngfactory.d.ts +1 -1
- package/controls/wizard/wizard.d.ts +80 -73
- package/controls/wizard/wizard.ngfactory.d.ts +1 -1
- package/controls/wizard/wizarditem.d.ts +25 -25
- package/controls/wizard/wizarditem.ngfactory.d.ts +1 -1
- package/enums/ButtonRoleType.d.ts +26 -1
- package/enums/ButtonRoleType.ngfactory.d.ts +1 -1
- package/enums/ControlHeight.d.ts +17 -17
- package/enums/ControlHeight.ngfactory.d.ts +1 -1
- package/enums/IconType.d.ts +7 -7
- package/enums/IconType.ngfactory.d.ts +1 -1
- package/esm2015/common/basedatetimecontrol.js +364 -164
- package/esm2015/common/basedatetimecontrol.ngfactory.js +7 -7
- package/esm2015/common/baseinputcontrol.js +75 -78
- package/esm2015/common/baseinputcontrol.ngfactory.js +7 -7
- package/esm2015/common/baselistcontrol.js +59 -55
- package/esm2015/common/baselistcontrol.ngfactory.js +7 -7
- package/esm2015/common/basemodelcontrol.js +563 -483
- package/esm2015/common/basemodelcontrol.ngfactory.js +7 -7
- package/esm2015/common/baseselectcontrol.js +28 -26
- package/esm2015/common/baseselectcontrol.ngfactory.js +7 -7
- package/esm2015/common/baseuploadcontrol.js +523 -457
- package/esm2015/common/baseuploadcontrol.ngfactory.js +7 -7
- package/esm2015/components/browser/browser.js +533 -545
- package/esm2015/components/browser/browser.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browserfile.js +1 -1
- package/esm2015/components/browser/models/browserfile.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browserfiledeleterequest.js +15 -13
- package/esm2015/components/browser/models/browserfiledeleterequest.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browserfilerenamerequest.js +15 -13
- package/esm2015/components/browser/models/browserfilerenamerequest.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browserfileresponse.js +1 -1
- package/esm2015/components/browser/models/browserfileresponse.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browserfilesaverequest.js +15 -13
- package/esm2015/components/browser/models/browserfilesaverequest.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browsernode.js +1 -1
- package/esm2015/components/browser/models/browsernode.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browsernodedeleterequest.js +15 -13
- package/esm2015/components/browser/models/browsernodedeleterequest.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browsernodenewrequest.js +15 -13
- package/esm2015/components/browser/models/browsernodenewrequest.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browsernoderenamerequest.js +15 -13
- package/esm2015/components/browser/models/browsernoderenamerequest.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browsernoderequest.js +15 -13
- package/esm2015/components/browser/models/browsernoderequest.ngfactory.js +7 -7
- package/esm2015/components/browser/models/browsernoderesponse.js +1 -1
- package/esm2015/components/browser/models/browsernoderesponse.ngfactory.js +7 -7
- package/esm2015/controls/buttons/button.js +152 -141
- package/esm2015/controls/buttons/button.ngfactory.js +7 -7
- package/esm2015/controls/checkbox/checkbox.js +56 -33
- package/esm2015/controls/checkbox/checkbox.ngfactory.js +7 -7
- package/esm2015/controls/checkbox/radiobutton.js +173 -115
- package/esm2015/controls/checkbox/radiobutton.ngfactory.js +7 -7
- package/esm2015/controls/checkbox/radiobuttons.js +116 -113
- package/esm2015/controls/checkbox/radiobuttons.ngfactory.js +7 -7
- package/esm2015/controls/confirm/confirm.button.js +32 -32
- package/esm2015/controls/confirm/confirm.button.ngfactory.js +7 -7
- package/esm2015/controls/confirm/confirm.js +74 -75
- package/esm2015/controls/confirm/confirm.ngfactory.js +7 -7
- package/esm2015/controls/confirm/confirm.service.js +87 -87
- package/esm2015/controls/confirm/confirm.service.ngfactory.js +7 -7
- package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -0
- package/esm2015/controls/contextmenu/contextmenu.interface.ngfactory.js +7 -0
- package/esm2015/controls/contextmenu/contextmenu.js +210 -194
- package/esm2015/controls/contextmenu/contextmenu.ngfactory.js +7 -7
- package/esm2015/controls/contextmenu/contextmenuanchor.js +22 -22
- package/esm2015/controls/contextmenu/contextmenuanchor.ngfactory.js +7 -7
- package/esm2015/controls/contextmenu/contextmenucontainer.js +22 -22
- package/esm2015/controls/contextmenu/contextmenucontainer.ngfactory.js +7 -7
- package/esm2015/controls/contextmenu/contextmenuitem.js +21 -10
- package/esm2015/controls/contextmenu/contextmenuitem.ngfactory.js +7 -7
- package/esm2015/controls/contextmenu/contextmenuitembutton.js +106 -97
- package/esm2015/controls/contextmenu/contextmenuitembutton.ngfactory.js +7 -7
- package/esm2015/controls/datetime/date.js +213 -212
- package/esm2015/controls/datetime/date.ngfactory.js +7 -7
- package/esm2015/controls/datetime/dateselector.js +481 -458
- package/esm2015/controls/datetime/dateselector.ngfactory.js +7 -7
- package/esm2015/controls/datetime/datetime.js +227 -229
- package/esm2015/controls/datetime/datetime.ngfactory.js +7 -7
- package/esm2015/controls/datetime/time.js +222 -212
- package/esm2015/controls/datetime/time.ngfactory.js +7 -7
- package/esm2015/controls/dialog/dialog.js +182 -207
- package/esm2015/controls/dialog/dialog.ngfactory.js +7 -7
- package/esm2015/controls/form/form.js +114 -110
- package/esm2015/controls/form/form.ngfactory.js +7 -7
- package/esm2015/controls/grid/grid.js +155 -144
- package/esm2015/controls/grid/grid.ngfactory.js +7 -7
- package/esm2015/controls/grid/gridbutton.js +102 -54
- package/esm2015/controls/grid/gridbutton.ngfactory.js +7 -7
- package/esm2015/controls/grid/gridcolumn.js +60 -49
- package/esm2015/controls/grid/gridcolumn.ngfactory.js +7 -7
- package/esm2015/controls/grid/gridcolumnaction.js +27 -26
- package/esm2015/controls/grid/gridcolumnaction.ngfactory.js +7 -7
- package/esm2015/controls/grid/gridcolumnbase.js +159 -126
- package/esm2015/controls/grid/gridcolumnbase.ngfactory.js +7 -7
- package/esm2015/controls/grid/gridimage.js +13 -13
- package/esm2015/controls/grid/gridimage.ngfactory.js +7 -7
- package/esm2015/controls/grid/model.js +103 -79
- package/esm2015/controls/grid/model.ngfactory.js +7 -7
- package/esm2015/controls/grid/paging.js +261 -254
- package/esm2015/controls/grid/paging.ngfactory.js +7 -7
- package/esm2015/controls/input/input.js +64 -66
- package/esm2015/controls/input/input.ngfactory.js +7 -7
- package/esm2015/controls/input/inputarea.js +63 -54
- package/esm2015/controls/input/inputarea.ngfactory.js +7 -7
- package/esm2015/controls/input/inputcurrency.js +34 -31
- package/esm2015/controls/input/inputcurrency.ngfactory.js +7 -7
- package/esm2015/controls/input/inputdecimal.js +140 -146
- package/esm2015/controls/input/inputdecimal.ngfactory.js +7 -7
- package/esm2015/controls/input/inputemail.js +41 -41
- package/esm2015/controls/input/inputemail.ngfactory.js +7 -7
- package/esm2015/controls/input/inputinteger.js +126 -130
- package/esm2015/controls/input/inputinteger.ngfactory.js +7 -7
- package/esm2015/controls/input/inputpassword.js +78 -46
- package/esm2015/controls/input/inputpassword.ngfactory.js +7 -7
- package/esm2015/controls/input/inputsearch.js +69 -37
- package/esm2015/controls/input/inputsearch.ngfactory.js +7 -7
- package/esm2015/controls/layout/formlayout.js +89 -70
- package/esm2015/controls/layout/formlayout.ngfactory.js +7 -7
- package/esm2015/controls/list/buildvaluestring.js +20 -0
- package/esm2015/controls/list/buildvaluestring.ngfactory.js +7 -0
- package/esm2015/controls/list/dropdown.js +182 -270
- package/esm2015/controls/list/dropdown.ngfactory.js +7 -7
- package/esm2015/controls/list/dropdownoptions.js +79 -0
- package/esm2015/controls/list/dropdownoptions.ngfactory.js +7 -0
- package/esm2015/controls/list/list.module.js +11 -11
- package/esm2015/controls/list/list.module.ngfactory.js +7 -7
- package/esm2015/controls/list/listbox.js +189 -187
- package/esm2015/controls/list/listbox.ngfactory.js +7 -7
- package/esm2015/controls/multilanguage/multilanguageinput.js +224 -230
- package/esm2015/controls/multilanguage/multilanguageinput.ngfactory.js +7 -7
- package/esm2015/controls/multilanguage/multilanguageinputarea.js +225 -231
- package/esm2015/controls/multilanguage/multilanguageinputarea.ngfactory.js +7 -7
- package/esm2015/controls/static/formcontainer.js +61 -50
- package/esm2015/controls/static/formcontainer.ngfactory.js +7 -7
- package/esm2015/controls/static/staticlabel.js +35 -31
- package/esm2015/controls/static/staticlabel.ngfactory.js +7 -7
- package/esm2015/controls/tabs/tab.js +82 -72
- package/esm2015/controls/tabs/tab.ngfactory.js +7 -7
- package/esm2015/controls/tabs/tabitem.js +34 -32
- package/esm2015/controls/tabs/tabitem.ngfactory.js +7 -7
- package/esm2015/controls/tinymce/tinymce.js +239 -238
- package/esm2015/controls/tinymce/tinymce.ngfactory.js +7 -7
- package/esm2015/controls/tinymce/tinymcedialogsettings.js +15 -13
- package/esm2015/controls/tinymce/tinymcedialogsettings.ngfactory.js +7 -7
- package/esm2015/controls/tinymce/tinymcedialogsettingsmeta.js +1 -4
- package/esm2015/controls/tinymce/tinymcedialogsettingsmeta.ngfactory.js +7 -7
- package/esm2015/controls/tinymce/tinymceinstance.js +1 -1
- package/esm2015/controls/tinymce/tinymceinstance.ngfactory.js +7 -7
- package/esm2015/controls/tooltip/tooltip.js +258 -361
- package/esm2015/controls/tooltip/tooltip.ngfactory.js +7 -7
- package/esm2015/controls/treeview/treeview.js +412 -322
- package/esm2015/controls/treeview/treeview.ngfactory.js +7 -7
- package/esm2015/controls/upload/dropzonemultiple.js +169 -163
- package/esm2015/controls/upload/dropzonemultiple.ngfactory.js +7 -7
- package/esm2015/controls/upload/dropzonesingle.js +116 -108
- package/esm2015/controls/upload/dropzonesingle.ngfactory.js +7 -7
- package/esm2015/controls/upload/uploadmultiple.js +129 -121
- package/esm2015/controls/upload/uploadmultiple.ngfactory.js +7 -7
- package/esm2015/controls/upload/uploadsingle.js +67 -55
- package/esm2015/controls/upload/uploadsingle.ngfactory.js +7 -7
- package/esm2015/controls/validation/validationsummary.js +140 -133
- package/esm2015/controls/validation/validationsummary.ngfactory.js +7 -7
- package/esm2015/controls/wizard/wizard.js +152 -139
- package/esm2015/controls/wizard/wizard.ngfactory.js +7 -7
- package/esm2015/controls/wizard/wizarditem.js +29 -27
- package/esm2015/controls/wizard/wizarditem.ngfactory.js +7 -7
- package/esm2015/enums/ButtonRoleType.js +1 -1
- package/esm2015/enums/ButtonRoleType.ngfactory.js +7 -7
- package/esm2015/enums/ControlHeight.js +19 -19
- package/esm2015/enums/ControlHeight.ngfactory.js +7 -7
- package/esm2015/enums/IconType.js +9 -9
- package/esm2015/enums/IconType.ngfactory.js +7 -7
- package/esm2015/interfaces/ISacConfigurationService.js +1 -1
- package/esm2015/interfaces/ISacConfigurationService.ngfactory.js +7 -7
- package/esm2015/interfaces/ISacFileBrowserService.js +1 -1
- package/esm2015/interfaces/ISacFileBrowserService.ngfactory.js +7 -7
- package/esm2015/interfaces/ISacIconService.js +1 -1
- package/esm2015/interfaces/ISacIconService.ngfactory.js +7 -7
- package/esm2015/interfaces/ISacLabelSizes.js +1 -1
- package/esm2015/interfaces/ISacLabelSizes.ngfactory.js +7 -7
- package/esm2015/interfaces/ISacLanguageService.js +1 -1
- package/esm2015/interfaces/ISacLanguageService.ngfactory.js +7 -7
- package/esm2015/interfaces/ISacLocalisationService.js +1 -1
- package/esm2015/interfaces/ISacLocalisationService.ngfactory.js +7 -7
- package/esm2015/interfaces/ISacUploadEventCompleteState.js +1 -0
- package/esm2015/interfaces/ISacUploadEventCompleteState.ngfactory.js +7 -0
- package/esm2015/interfaces/ISacValidationKeyService.js +1 -1
- package/esm2015/interfaces/ISacValidationKeyService.ngfactory.js +7 -7
- package/esm2015/interfaces/iabstractcontrollabel.js +1 -1
- package/esm2015/interfaces/iabstractcontrollabel.ngfactory.js +7 -7
- package/esm2015/interfaces/iconfirmcomponent.js +1 -1
- package/esm2015/interfaces/iconfirmcomponent.ngfactory.js +7 -7
- package/esm2015/interfaces/idatetimecontrol.js +1 -1
- package/esm2015/interfaces/idatetimecontrol.ngfactory.js +7 -7
- package/esm2015/interfaces/iuploadcontrol.js +1 -1
- package/esm2015/interfaces/iuploadcontrol.ngfactory.js +7 -7
- package/esm2015/interfaces/treeviewaction.interface.js +1 -0
- package/esm2015/interfaces/treeviewaction.interface.ngfactory.js +7 -0
- package/esm2015/models/languagemodel.js +15 -13
- package/esm2015/models/languagemodel.ngfactory.js +7 -7
- package/esm2015/public_api.js +112 -101
- package/esm2015/public_api.ngfactory.js +7 -7
- package/esm2015/services/index.js +7 -7
- package/esm2015/services/index.ngfactory.js +7 -7
- package/esm2015/services/sac-configuration.service.js +119 -77
- package/esm2015/services/sac-configuration.service.ngfactory.js +7 -7
- package/esm2015/services/sac-filebrowser.service.js +217 -203
- package/esm2015/services/sac-filebrowser.service.ngfactory.js +7 -7
- package/esm2015/services/sac-icon.service.js +233 -155
- package/esm2015/services/sac-icon.service.ngfactory.js +7 -7
- package/esm2015/services/sac-language.service.js +47 -43
- package/esm2015/services/sac-language.service.ngfactory.js +7 -7
- package/esm2015/services/sac-localisation.service.js +353 -460
- package/esm2015/services/sac-localisation.service.ngfactory.js +7 -7
- package/esm2015/services/sac-validationkey.service.js +306 -156
- package/esm2015/services/sac-validationkey.service.ngfactory.js +7 -7
- package/esm2015/simpleangularcontrols-sac-common.js +5 -11
- package/esm2015/simpleangularcontrols-sac-common.ngfactory.js +7 -7
- package/esm2015/utilities/convertion.js +34 -32
- package/esm2015/utilities/convertion.ngfactory.js +7 -7
- package/esm2015/utilities/datatypes.js +11 -9
- package/esm2015/utilities/datatypes.ngfactory.js +7 -7
- package/esm2015/utilities/enums.js +21 -16
- package/esm2015/utilities/enums.ngfactory.js +7 -7
- package/esm2015/utilities/guid.js +18 -16
- package/esm2015/utilities/guid.ngfactory.js +7 -7
- package/esm2015/utilities/interpolation.js +57 -50
- package/esm2015/utilities/interpolation.ngfactory.js +7 -7
- package/esm2015/utilities/popuphelper.js +380 -0
- package/esm2015/utilities/popuphelper.ngfactory.js +7 -0
- package/esm2015/utilities/positioncalculator.js +209 -0
- package/esm2015/utilities/positioncalculator.ngfactory.js +7 -0
- package/esm2015/utilities/positionelements.js +108 -0
- package/esm2015/utilities/positionelements.ngfactory.js +7 -0
- package/esm2015/utilities/testingattribute.pipe.js +54 -0
- package/esm2015/utilities/testingattribute.pipe.ngfactory.js +7 -0
- package/esm2015/utilities/utilities.module.js +12 -0
- package/esm2015/utilities/utilities.module.ngfactory.js +7 -0
- package/esm2015/validation/email.validator.js +22 -13
- package/esm2015/validation/email.validator.ngfactory.js +7 -7
- package/esm2015/validation/equals.validator.js +24 -0
- package/esm2015/validation/equals.validator.ngfactory.js +7 -0
- package/esm2015/validation/index.js +3 -3
- package/esm2015/validation/index.ngfactory.js +7 -7
- package/esm2015/validation/invaliddate.validator.js +23 -14
- package/esm2015/validation/invaliddate.validator.ngfactory.js +7 -7
- package/esm2015/validation/isDateValid.js +24 -15
- package/esm2015/validation/isDateValid.ngfactory.js +7 -7
- package/esm2015/validation/maxdate.validator.js +31 -21
- package/esm2015/validation/maxdate.validator.ngfactory.js +7 -7
- package/esm2015/validation/maxtime.validator.js +31 -21
- package/esm2015/validation/maxtime.validator.ngfactory.js +7 -7
- package/esm2015/validation/maxvalue.validator.js +26 -16
- package/esm2015/validation/maxvalue.validator.ngfactory.js +7 -7
- package/esm2015/validation/mindate.validator.js +31 -21
- package/esm2015/validation/mindate.validator.ngfactory.js +7 -7
- package/esm2015/validation/minfiles.validator.js +29 -19
- package/esm2015/validation/minfiles.validator.ngfactory.js +7 -7
- package/esm2015/validation/mintextlength.validator.js +31 -0
- package/esm2015/validation/mintextlength.validator.ngfactory.js +7 -0
- package/esm2015/validation/mintime.validator.js +31 -21
- package/esm2015/validation/mintime.validator.ngfactory.js +7 -7
- package/esm2015/validation/minvalue.validator.js +26 -16
- package/esm2015/validation/minvalue.validator.ngfactory.js +7 -7
- package/esm2015/validation/multilanguagerequired.validator.js +32 -22
- package/esm2015/validation/multilanguagerequired.validator.ngfactory.js +7 -7
- package/esm2015/validation/multilanguagerequiredany.validator.js +32 -22
- package/esm2015/validation/multilanguagerequiredany.validator.ngfactory.js +7 -7
- package/esm2015/validation/notequals.validator.js +24 -0
- package/esm2015/validation/notequals.validator.ngfactory.js +7 -0
- package/esm2015/validation/pattern.validator.js +26 -16
- package/esm2015/validation/pattern.validator.ngfactory.js +7 -7
- package/esm2015/validation/required.validator.js +22 -13
- package/esm2015/validation/required.validator.ngfactory.js +7 -7
- package/esm2015/validation/validation.class.js +201 -189
- package/esm2015/validation/validation.class.ngfactory.js +7 -7
- package/esm2015/validation/validationerrorcreator.js +22 -11
- package/esm2015/validation/validationerrorcreator.ngfactory.js +7 -7
- package/esm2015/validation/validationerroritem.js +29 -27
- package/esm2015/validation/validationerroritem.ngfactory.js +7 -7
- package/fesm2015/simpleangularcontrols-sac-common.js +11670 -10109
- package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
- package/interfaces/ISacConfigurationService.d.ts +70 -38
- package/interfaces/ISacConfigurationService.ngfactory.d.ts +1 -1
- package/interfaces/ISacFileBrowserService.d.ts +65 -65
- package/interfaces/ISacFileBrowserService.ngfactory.d.ts +1 -1
- package/interfaces/ISacIconService.d.ts +141 -89
- package/interfaces/ISacIconService.ngfactory.d.ts +1 -1
- package/interfaces/ISacLabelSizes.d.ts +29 -26
- package/interfaces/ISacLabelSizes.ngfactory.d.ts +1 -1
- package/interfaces/ISacLanguageService.d.ts +12 -12
- package/interfaces/ISacLanguageService.ngfactory.d.ts +1 -1
- package/interfaces/ISacLocalisationService.d.ts +10 -10
- package/interfaces/ISacLocalisationService.ngfactory.d.ts +1 -1
- package/interfaces/ISacUploadEventCompleteState.d.ts +11 -0
- package/{controls/treeview/treeviewchild.ngfactory.d.ts → interfaces/ISacUploadEventCompleteState.ngfactory.d.ts} +1 -1
- package/interfaces/ISacValidationKeyService.d.ts +52 -52
- package/interfaces/ISacValidationKeyService.ngfactory.d.ts +1 -1
- package/interfaces/iabstractcontrollabel.d.ts +9 -6
- package/interfaces/iabstractcontrollabel.ngfactory.d.ts +1 -1
- package/interfaces/iconfirmcomponent.d.ts +18 -18
- package/interfaces/iconfirmcomponent.ngfactory.d.ts +1 -1
- package/interfaces/idatetimecontrol.d.ts +16 -7
- package/interfaces/idatetimecontrol.ngfactory.d.ts +1 -1
- package/interfaces/iuploadcontrol.d.ts +9 -9
- package/interfaces/iuploadcontrol.ngfactory.d.ts +1 -1
- package/interfaces/treeviewaction.interface.d.ts +13 -0
- package/interfaces/treeviewaction.interface.ngfactory.d.ts +1 -0
- package/models/languagemodel.d.ts +22 -22
- package/models/languagemodel.ngfactory.d.ts +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +89 -79
- package/public_api.ngfactory.d.ts +1 -1
- package/services/index.d.ts +6 -6
- package/services/index.ngfactory.d.ts +1 -1
- package/services/sac-configuration.service.d.ts +137 -81
- package/services/sac-configuration.service.ngfactory.d.ts +1 -1
- package/services/sac-filebrowser.service.d.ts +148 -140
- package/services/sac-filebrowser.service.ngfactory.d.ts +1 -1
- package/services/sac-icon.service.d.ts +288 -184
- package/services/sac-icon.service.ngfactory.d.ts +1 -1
- package/services/sac-language.service.d.ts +26 -26
- package/services/sac-language.service.ngfactory.d.ts +1 -1
- package/services/sac-localisation.service.d.ts +141 -137
- package/services/sac-localisation.service.ngfactory.d.ts +1 -1
- package/services/sac-validationkey.service.d.ts +202 -55
- package/services/sac-validationkey.service.ngfactory.d.ts +1 -1
- package/simpleangularcontrols-sac-common-10.0.0-rc.30.tgz +0 -0
- package/simpleangularcontrols-sac-common.d.ts +4 -10
- package/simpleangularcontrols-sac-common.metadata.json +1 -1
- package/simpleangularcontrols-sac-common.ngfactory.d.ts +1 -1
- package/utilities/convertion.d.ts +15 -15
- package/utilities/convertion.ngfactory.d.ts +1 -1
- package/utilities/datatypes.d.ts +6 -6
- package/utilities/datatypes.ngfactory.d.ts +1 -1
- package/utilities/enums.d.ts +19 -10
- package/utilities/enums.ngfactory.d.ts +1 -1
- package/utilities/guid.d.ts +4 -4
- package/utilities/guid.ngfactory.d.ts +1 -1
- package/utilities/interpolation.d.ts +22 -21
- package/utilities/interpolation.ngfactory.d.ts +1 -1
- package/utilities/popuphelper.d.ts +120 -0
- package/utilities/popuphelper.ngfactory.d.ts +1 -0
- package/utilities/positioncalculator.d.ts +82 -0
- package/utilities/positioncalculator.ngfactory.d.ts +1 -0
- package/utilities/positionelements.d.ts +30 -0
- package/utilities/positionelements.ngfactory.d.ts +1 -0
- package/utilities/testingattribute.pipe.d.ts +27 -0
- package/utilities/testingattribute.pipe.ngfactory.d.ts +1 -0
- package/utilities/utilities.module.d.ts +2 -0
- package/utilities/utilities.module.ngfactory.d.ts +3 -0
- package/validation/email.validator.d.ts +9 -2
- package/validation/email.validator.ngfactory.d.ts +1 -1
- package/validation/equals.validator.d.ts +10 -0
- package/validation/equals.validator.ngfactory.d.ts +1 -0
- package/validation/index.d.ts +2 -2
- package/validation/index.ngfactory.d.ts +1 -1
- package/validation/invaliddate.validator.d.ts +9 -2
- package/validation/invaliddate.validator.ngfactory.d.ts +1 -1
- package/validation/isDateValid.d.ts +8 -5
- package/validation/isDateValid.ngfactory.d.ts +1 -1
- package/validation/maxdate.validator.d.ts +10 -2
- package/validation/maxdate.validator.ngfactory.d.ts +1 -1
- package/validation/maxtime.validator.d.ts +10 -2
- package/validation/maxtime.validator.ngfactory.d.ts +1 -1
- package/validation/maxvalue.validator.d.ts +10 -2
- package/validation/maxvalue.validator.ngfactory.d.ts +1 -1
- package/validation/mindate.validator.d.ts +10 -2
- package/validation/mindate.validator.ngfactory.d.ts +1 -1
- package/validation/minfiles.validator.d.ts +10 -2
- package/validation/minfiles.validator.ngfactory.d.ts +1 -1
- package/validation/mintextlength.validator.d.ts +10 -0
- package/validation/mintextlength.validator.ngfactory.d.ts +1 -0
- package/validation/mintime.validator.d.ts +10 -2
- package/validation/mintime.validator.ngfactory.d.ts +1 -1
- package/validation/minvalue.validator.d.ts +10 -2
- package/validation/minvalue.validator.ngfactory.d.ts +1 -1
- package/validation/multilanguagerequired.validator.d.ts +11 -3
- package/validation/multilanguagerequired.validator.ngfactory.d.ts +1 -1
- package/validation/multilanguagerequiredany.validator.d.ts +11 -3
- package/validation/multilanguagerequiredany.validator.ngfactory.d.ts +1 -1
- package/validation/notequals.validator.d.ts +10 -0
- package/validation/notequals.validator.ngfactory.d.ts +1 -0
- package/validation/pattern.validator.d.ts +10 -2
- package/validation/pattern.validator.ngfactory.d.ts +1 -1
- package/validation/required.validator.d.ts +9 -2
- package/validation/required.validator.ngfactory.d.ts +1 -1
- package/validation/validation.class.d.ts +141 -139
- package/validation/validation.class.ngfactory.d.ts +1 -1
- package/validation/validationerrorcreator.d.ts +10 -1
- package/validation/validationerrorcreator.ngfactory.d.ts +1 -1
- package/validation/validationerroritem.d.ts +33 -33
- package/validation/validationerroritem.ngfactory.d.ts +1 -1
- package/controls/treeview/ngtreeitemaction.d.ts +0 -40
- package/controls/treeview/treeviewchild.d.ts +0 -12
- package/esm2015/controls/treeview/ngtreeitemaction.js +0 -60
- package/esm2015/controls/treeview/ngtreeitemaction.ngfactory.js +0 -7
- package/esm2015/controls/treeview/treeviewchild.js +0 -18
- package/esm2015/controls/treeview/treeviewchild.ngfactory.js +0 -7
- package/esm2015/utilities/positioning.js +0 -301
- package/esm2015/utilities/positioning.ngfactory.js +0 -7
- package/esm2015/validation/minlength.validator.js +0 -21
- package/esm2015/validation/minlength.validator.ngfactory.js +0 -7
- package/simpleangularcontrols-sac-common-10.0.0-rc.3.tgz +0 -0
- package/utilities/positioning.d.ts +0 -82
- package/validation/minlength.validator.d.ts +0 -2
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { TooltipPosition } from './enums';
|
|
2
|
+
/**
|
|
3
|
+
* Utility for positioning popup elements relative to anchor elements.
|
|
4
|
+
*
|
|
5
|
+
* Provides functions for measuring container dimensions, validating available positions,
|
|
6
|
+
* and computing translated positions for tooltip/popups in various placements.
|
|
7
|
+
*/
|
|
8
|
+
export class PopUpHelper {
|
|
9
|
+
// #region Public Methods
|
|
10
|
+
/**
|
|
11
|
+
* Get the height of the reference container element
|
|
12
|
+
* @param referenceContainer Element Reference to HTML Element
|
|
13
|
+
* @param referenceIsContainer Boolean indicating if reference is the container itself
|
|
14
|
+
* @returns The height in pixels
|
|
15
|
+
*/
|
|
16
|
+
getContainerHeight(referenceContainer, referenceIsContainer) {
|
|
17
|
+
if (referenceContainer) {
|
|
18
|
+
return referenceIsContainer
|
|
19
|
+
? referenceContainer.nativeElement.firstElementChild.clientHeight
|
|
20
|
+
: referenceContainer.nativeElement.offsetHeight;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the width of the reference container element
|
|
28
|
+
* @param referenceContainer Element Reference to HTML Element
|
|
29
|
+
* @param referenceIsContainer Boolean indicating if reference is the container itself
|
|
30
|
+
* @returns The width in pixels
|
|
31
|
+
*/
|
|
32
|
+
getContainerWidth(referenceContainer, referenceIsContainer) {
|
|
33
|
+
if (referenceContainer) {
|
|
34
|
+
return referenceIsContainer
|
|
35
|
+
? referenceContainer.nativeElement.firstElementChild.clientWidth
|
|
36
|
+
: referenceContainer.nativeElement.offsetWidth;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get Position where the popup would be positioned
|
|
44
|
+
*
|
|
45
|
+
* @param referenceContainer Element Reference to HTML Element which is the reference to positioning the popup
|
|
46
|
+
* @param popupcontentcontainer Element Reference to container of popup
|
|
47
|
+
* @param arrowWidth Width of the arrow element
|
|
48
|
+
* @param arrowHeight Height of the arrow element
|
|
49
|
+
* @param allowedPositions Allowed Positions for the popup
|
|
50
|
+
* @param referenceIsContainer Boolean indicating if reference is the container itself
|
|
51
|
+
* @returns Returns the position where the popup should be displayed
|
|
52
|
+
*/
|
|
53
|
+
getDisplayPosition(referenceContainer, popupcontentcontainer, arrowWidth, arrowHeight, allowedPositions, referenceIsContainer) {
|
|
54
|
+
const validPositions = this.validatePositions(referenceContainer, popupcontentcontainer, arrowWidth, arrowHeight, referenceIsContainer);
|
|
55
|
+
// eslint-disable-next-line no-bitwise
|
|
56
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.right) && validPositions & TooltipPosition.right) {
|
|
57
|
+
return TooltipPosition.right;
|
|
58
|
+
}
|
|
59
|
+
// eslint-disable-next-line no-bitwise
|
|
60
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.top) && validPositions & TooltipPosition.top) {
|
|
61
|
+
return TooltipPosition.top;
|
|
62
|
+
}
|
|
63
|
+
// eslint-disable-next-line no-bitwise
|
|
64
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.left) && validPositions & TooltipPosition.left) {
|
|
65
|
+
return TooltipPosition.left;
|
|
66
|
+
}
|
|
67
|
+
// eslint-disable-next-line no-bitwise
|
|
68
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.bottom) && validPositions & TooltipPosition.bottom) {
|
|
69
|
+
return TooltipPosition.bottom;
|
|
70
|
+
}
|
|
71
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.topend) && validPositions & TooltipPosition.topend) {
|
|
72
|
+
return TooltipPosition.topend;
|
|
73
|
+
}
|
|
74
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.bottomend) &&
|
|
75
|
+
validPositions & TooltipPosition.bottomend) {
|
|
76
|
+
return TooltipPosition.bottomend;
|
|
77
|
+
}
|
|
78
|
+
// Get Auto Position or Default
|
|
79
|
+
if (this.isAutoPosition(allowedPositions)) {
|
|
80
|
+
// eslint-disable-next-line no-bitwise
|
|
81
|
+
if (validPositions & TooltipPosition.right) {
|
|
82
|
+
return TooltipPosition.right;
|
|
83
|
+
}
|
|
84
|
+
// eslint-disable-next-line no-bitwise
|
|
85
|
+
if (validPositions & TooltipPosition.top) {
|
|
86
|
+
return TooltipPosition.top;
|
|
87
|
+
}
|
|
88
|
+
// eslint-disable-next-line no-bitwise
|
|
89
|
+
if (validPositions & TooltipPosition.left) {
|
|
90
|
+
return TooltipPosition.left;
|
|
91
|
+
}
|
|
92
|
+
// eslint-disable-next-line no-bitwise
|
|
93
|
+
if (validPositions & TooltipPosition.bottom) {
|
|
94
|
+
return TooltipPosition.bottom;
|
|
95
|
+
}
|
|
96
|
+
return TooltipPosition.right;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return this.getPosition(allowedPositions);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Calculates the height of the popup
|
|
104
|
+
*
|
|
105
|
+
* @param container Element Reference to container of popup
|
|
106
|
+
* @returns The height of the popup in pixels
|
|
107
|
+
*/
|
|
108
|
+
getPopupHeight(container) {
|
|
109
|
+
var _a;
|
|
110
|
+
if (container) {
|
|
111
|
+
return (_a = container.nativeElement.firstElementChild.clientHeight) !== null && _a !== void 0 ? _a : 0;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Calculates the width of the popup
|
|
119
|
+
*
|
|
120
|
+
* @param container Element Reference to container of popup
|
|
121
|
+
* @returns The width of the popup in pixels
|
|
122
|
+
*/
|
|
123
|
+
getPopupWidth(container) {
|
|
124
|
+
if (container) {
|
|
125
|
+
return container.nativeElement.firstElementChild.clientWidth;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
return 0;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Returns the defined position for the tooltip
|
|
133
|
+
*
|
|
134
|
+
* @param allowedPositions Allowed positions defined in markup for popup
|
|
135
|
+
* @returns The calculated tooltip position
|
|
136
|
+
*/
|
|
137
|
+
getPosition(allowedPositions) {
|
|
138
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.left)) {
|
|
139
|
+
return TooltipPosition.left;
|
|
140
|
+
}
|
|
141
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.top)) {
|
|
142
|
+
return TooltipPosition.top;
|
|
143
|
+
}
|
|
144
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.right)) {
|
|
145
|
+
return TooltipPosition.right;
|
|
146
|
+
}
|
|
147
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.bottom)) {
|
|
148
|
+
return TooltipPosition.bottom;
|
|
149
|
+
}
|
|
150
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.topend)) {
|
|
151
|
+
return TooltipPosition.topend;
|
|
152
|
+
}
|
|
153
|
+
if (this.hasPosition(allowedPositions, TooltipPosition.bottomend)) {
|
|
154
|
+
return TooltipPosition.bottomend;
|
|
155
|
+
}
|
|
156
|
+
// Default Position if empty
|
|
157
|
+
return TooltipPosition.right;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Calculates the left position of the tooltip/popup
|
|
161
|
+
*
|
|
162
|
+
* @param referenceContainer Element Reference to HTML Element which is the reference to positioning the popup
|
|
163
|
+
* @param popupContainer Element Reference to container of popup
|
|
164
|
+
* @param controlReference Element Reference to the control element
|
|
165
|
+
* @param arrowWidth Width of the arrow element
|
|
166
|
+
* @param arrowHeight Height of the arrow element
|
|
167
|
+
* @param requestedPosition Requested Position by Control
|
|
168
|
+
* @param referenceIsContainer Boolean indicating if reference is the container itself
|
|
169
|
+
* @returns The left position in pixels
|
|
170
|
+
*/
|
|
171
|
+
getPositionLeft(referenceContainer, popupContainer, controlReference, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer) {
|
|
172
|
+
if (referenceContainer !== null && referenceContainer !== undefined) {
|
|
173
|
+
const item = referenceContainer.nativeElement;
|
|
174
|
+
if (item.children.length >= 1) {
|
|
175
|
+
const childItem = referenceIsContainer ? item.firstElementChild : item;
|
|
176
|
+
const contentPosition = childItem.getBoundingClientRect();
|
|
177
|
+
switch (this.getDisplayPosition(referenceContainer, popupContainer, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer)) {
|
|
178
|
+
case TooltipPosition.top:
|
|
179
|
+
case TooltipPosition.bottom:
|
|
180
|
+
return (contentPosition.left + contentPosition.width / 2 - this.getPopupWidth(popupContainer) / 2);
|
|
181
|
+
case TooltipPosition.topend:
|
|
182
|
+
case TooltipPosition.bottomend:
|
|
183
|
+
return contentPosition.left + contentPosition.width - this.getPopupWidth(popupContainer);
|
|
184
|
+
case TooltipPosition.right:
|
|
185
|
+
return contentPosition.left + contentPosition.width + arrowWidth / 2;
|
|
186
|
+
case TooltipPosition.left:
|
|
187
|
+
return contentPosition.left - this.getPopupWidth(popupContainer) + (arrowWidth / 2) * -1;
|
|
188
|
+
}
|
|
189
|
+
return referenceContainer.nativeElement.offsetTop;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
return referenceContainer.nativeElement.offsetTop;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
return controlReference.nativeElement.offsetLeft;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Calculates the top position of the tooltip/popup
|
|
201
|
+
*
|
|
202
|
+
* @param referenceContainer Element Reference to HTML Element which is the reference to positioning the popup
|
|
203
|
+
* @param popupContainer Element Reference to container of popup
|
|
204
|
+
* @param controlReference Element Reference to the control element
|
|
205
|
+
* @param arrowWidth Width of the arrow element
|
|
206
|
+
* @param arrowHeight Height of the arrow element
|
|
207
|
+
* @param requestedPosition Requested Position by Control
|
|
208
|
+
* @param referenceIsContainer Boolean indicating if reference is the container itself
|
|
209
|
+
* @returns The top position in pixels
|
|
210
|
+
*/
|
|
211
|
+
getPositionTop(referenceContainer, popupContainer, controlReference, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer) {
|
|
212
|
+
if (referenceContainer !== null && referenceContainer !== undefined) {
|
|
213
|
+
const item = referenceContainer.nativeElement;
|
|
214
|
+
if (item.children.length >= 1) {
|
|
215
|
+
const childItem = referenceIsContainer ? item.firstElementChild : item;
|
|
216
|
+
const contentPosition = childItem.getBoundingClientRect();
|
|
217
|
+
// Get Position with Scroll (Scrollbars inside page should be substracted)
|
|
218
|
+
const contentPositionTop = childItem.offsetTop +
|
|
219
|
+
this.getOffsetTopParent(childItem.offsetParent) +
|
|
220
|
+
this.getScrollTopParent(childItem.parentElement);
|
|
221
|
+
switch (this.getDisplayPosition(referenceContainer, popupContainer, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer)) {
|
|
222
|
+
case TooltipPosition.top:
|
|
223
|
+
case TooltipPosition.topend:
|
|
224
|
+
return contentPositionTop - this.getPopupHeight(popupContainer) + (arrowHeight / 2) * -1;
|
|
225
|
+
case TooltipPosition.right:
|
|
226
|
+
case TooltipPosition.left:
|
|
227
|
+
return (contentPositionTop + contentPosition.height / 2 - this.getPopupHeight(popupContainer) / 2);
|
|
228
|
+
case TooltipPosition.bottom:
|
|
229
|
+
case TooltipPosition.bottomend:
|
|
230
|
+
return contentPositionTop + contentPosition.height + arrowHeight / 2;
|
|
231
|
+
}
|
|
232
|
+
return (childItem.clientTop +
|
|
233
|
+
childItem.offsetTop -
|
|
234
|
+
(this.getPopupHeight(popupContainer) / 2 - childItem.offsetHeight / 2));
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
return referenceContainer.nativeElement.offsetTop;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
return controlReference.nativeElement.offsetTop;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Returns whether the position has been configured
|
|
246
|
+
*
|
|
247
|
+
* @param allowedPositions Positions that allowed by control
|
|
248
|
+
* @param requestedPosition Position to be checked
|
|
249
|
+
* @returns Boolean indicating if the requested position is configured
|
|
250
|
+
*/
|
|
251
|
+
hasPosition(allowedPositions, requestedPosition) {
|
|
252
|
+
const positions = allowedPositions.split('|');
|
|
253
|
+
if (requestedPosition === TooltipPosition.right && positions.indexOf('right') >= 0) {
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
if (requestedPosition === TooltipPosition.top && positions.indexOf('top') >= 0) {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
if (requestedPosition === TooltipPosition.left && positions.indexOf('left') >= 0) {
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
if (requestedPosition === TooltipPosition.bottom && positions.indexOf('bottom') >= 0) {
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
if (requestedPosition === TooltipPosition.topend && positions.indexOf('topend') >= 0) {
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
if (requestedPosition === TooltipPosition.bottomend && positions.indexOf('bottomend') >= 0) {
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Defines whether AutoPosition is active
|
|
275
|
+
* @param positionProperty List of allowed positions
|
|
276
|
+
* @returns Boolean indicating if auto positioning is enabled
|
|
277
|
+
*/
|
|
278
|
+
isAutoPosition(positionProperty) {
|
|
279
|
+
const positions = positionProperty.split('|');
|
|
280
|
+
return positions.indexOf('auto') >= 0;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Checks whether the position is valid or whether the tooltip on the position has space
|
|
284
|
+
* @param referenceContainer Element Reference to HTML Element which is the reference
|
|
285
|
+
* @param popupcontentcontainer Element Reference to container of popup
|
|
286
|
+
* @param arrowWidth Width of the arrow element
|
|
287
|
+
* @param arrowHeight Height of the arrow element
|
|
288
|
+
* @param referenceIsContainer Boolean indicating if reference is the container itself
|
|
289
|
+
* @returns The valid tooltip position
|
|
290
|
+
*/
|
|
291
|
+
validatePositions(referenceContainer, popupcontentcontainer, arrowWidth, arrowHeight, referenceIsContainer) {
|
|
292
|
+
// Check if Container is false
|
|
293
|
+
if (popupcontentcontainer === undefined) {
|
|
294
|
+
return TooltipPosition.right;
|
|
295
|
+
}
|
|
296
|
+
let allowedPositions = TooltipPosition.none;
|
|
297
|
+
const basePosition = referenceIsContainer
|
|
298
|
+
? referenceContainer.nativeElement.firstElementChild.getBoundingClientRect()
|
|
299
|
+
: referenceContainer.nativeElement.getBoundingClientRect();
|
|
300
|
+
const tooltipRect = popupcontentcontainer.nativeElement.firstElementChild.getBoundingClientRect();
|
|
301
|
+
const leftPosOk = basePosition.left - (tooltipRect.width + arrowWidth * -1) > 0;
|
|
302
|
+
const rightPosOk = basePosition.right + tooltipRect.width + arrowWidth < window.innerWidth;
|
|
303
|
+
const topPosOk = basePosition.top - (tooltipRect.height + arrowHeight) > 0;
|
|
304
|
+
const bottomPosOk = basePosition.bottom + tooltipRect.height + arrowHeight < window.innerHeight;
|
|
305
|
+
const leftHalfPosOk = basePosition.left - tooltipRect.width / 2 > 0;
|
|
306
|
+
const rightHalfPosOk = basePosition.right + tooltipRect.width / 2 < window.innerWidth;
|
|
307
|
+
const topHalfPosOk = basePosition.top - tooltipRect.height / 2 > 0;
|
|
308
|
+
const bottomHalfPosOk = basePosition.bottom + tooltipRect.height / 2 < window.innerHeight;
|
|
309
|
+
if (topPosOk) {
|
|
310
|
+
// eslint-disable-next-line no-bitwise
|
|
311
|
+
allowedPositions = allowedPositions | TooltipPosition.topend;
|
|
312
|
+
}
|
|
313
|
+
if (bottomPosOk) {
|
|
314
|
+
// eslint-disable-next-line no-bitwise
|
|
315
|
+
allowedPositions = allowedPositions | TooltipPosition.bottomend;
|
|
316
|
+
}
|
|
317
|
+
if (leftPosOk && topHalfPosOk && bottomHalfPosOk) {
|
|
318
|
+
// eslint-disable-next-line no-bitwise
|
|
319
|
+
allowedPositions = allowedPositions | TooltipPosition.left;
|
|
320
|
+
}
|
|
321
|
+
if (rightPosOk && topHalfPosOk && bottomHalfPosOk) {
|
|
322
|
+
// eslint-disable-next-line no-bitwise
|
|
323
|
+
allowedPositions = allowedPositions | TooltipPosition.right;
|
|
324
|
+
}
|
|
325
|
+
if (topPosOk && leftHalfPosOk && rightHalfPosOk) {
|
|
326
|
+
// eslint-disable-next-line no-bitwise
|
|
327
|
+
allowedPositions = allowedPositions | TooltipPosition.top;
|
|
328
|
+
}
|
|
329
|
+
if (bottomPosOk && leftHalfPosOk && rightHalfPosOk) {
|
|
330
|
+
// eslint-disable-next-line no-bitwise
|
|
331
|
+
allowedPositions = allowedPositions | TooltipPosition.bottom;
|
|
332
|
+
}
|
|
333
|
+
return allowedPositions;
|
|
334
|
+
}
|
|
335
|
+
// #endregion Public Methods
|
|
336
|
+
// #region Private Methods
|
|
337
|
+
/**
|
|
338
|
+
* Calculates the top of the page inside all elements
|
|
339
|
+
* @param element HTML Element
|
|
340
|
+
* @returns summarized top value for absolute position
|
|
341
|
+
*/
|
|
342
|
+
getOffsetTopParent(element) {
|
|
343
|
+
if (element === null) {
|
|
344
|
+
return 0;
|
|
345
|
+
}
|
|
346
|
+
if (!element.offsetParent) {
|
|
347
|
+
return element.offsetTop;
|
|
348
|
+
}
|
|
349
|
+
const parentValue = this.getOffsetTopParent(element.offsetParent);
|
|
350
|
+
const offset = element.offsetTop;
|
|
351
|
+
return parentValue + offset;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Caclulate Scrollbars inside tree
|
|
355
|
+
* @param element HTML Element
|
|
356
|
+
* @param [isFixed=false] Invert Scroll Position value when style is fixed to preserve negative values
|
|
357
|
+
* @returns Scroll top value of element with all childs
|
|
358
|
+
*/
|
|
359
|
+
getScrollTopParent(element, isFixed = false) {
|
|
360
|
+
if (element === null) {
|
|
361
|
+
return 0;
|
|
362
|
+
}
|
|
363
|
+
// Body Scroll should not be calculated
|
|
364
|
+
if (!element.parentElement) {
|
|
365
|
+
return isFixed ? element.scrollTop : 0;
|
|
366
|
+
}
|
|
367
|
+
let isCurrentFixed = false;
|
|
368
|
+
if (window.getComputedStyle(element).getPropertyValue('position') === 'fixed') {
|
|
369
|
+
isCurrentFixed = true;
|
|
370
|
+
}
|
|
371
|
+
const parentValue = this.getScrollTopParent(element.parentElement, isFixed || isCurrentFixed);
|
|
372
|
+
if (isFixed) {
|
|
373
|
+
return parentValue + element.scrollTop;
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
return parentValue + element.scrollTop * -1;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXBoZWxwZXIuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ1dGlsaXRpZXMvcG9wdXBoZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUcxQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQ3BCLHlCQUF5QjtJQUV6Qjs7Ozs7T0FLRztJQUNJLGtCQUFrQixDQUFDLGtCQUEyQyxFQUFFLG9CQUE2QjtRQUNoRyxJQUFJLGtCQUFrQixFQUFFO1lBQ3BCLE9BQU8sb0JBQW9CO2dCQUN2QixDQUFDLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFlBQVk7Z0JBQ2pFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1NBQ3ZEO2FBQU07WUFDSCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksaUJBQWlCLENBQUMsa0JBQTJDLEVBQUUsb0JBQTZCO1FBQy9GLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsT0FBTyxvQkFBb0I7Z0JBQ3ZCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDaEUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7U0FDdEQ7YUFBTTtZQUNILE9BQU8sQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGtCQUFrQixDQUNyQixrQkFBMkMsRUFDM0MscUJBQThDLEVBQzlDLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLGdCQUF3QixFQUN4Qixv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bmltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBVdGlsaXR5IGZvciBwb3NpdGlvbmluZyBwb3B1cCBlbGVtZW50cyByZWxhdGl2ZSB0byBhbmNob3IgZWxlbWVudHMuXG4gKlxuICogUHJvdmlkZXMgZnVuY3Rpb25zIGZvciBtZWFzdXJpbmcgY29udGFpbmVyIGRpbWVuc2lvbnMsIHZhbGlkYXRpbmcgYXZhaWxhYmxlIHBvc2l0aW9ucyxcbiAqIGFuZCBjb21wdXRpbmcgdHJhbnNsYXRlZCBwb3NpdGlvbnMgZm9yIHRvb2x0aXAvcG9wdXBzIGluIHZhcmlvdXMgcGxhY2VtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBvcFVwSGVscGVyIHtcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlaWdodCBvZiB0aGUgcmVmZXJlbmNlIGNvbnRhaW5lciBlbGVtZW50XG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnRcbiAgICAgKiBAcGFyYW0gcmVmZXJlbmNlSXNDb250YWluZXIgQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHJlZmVyZW5jZSBpcyB0aGUgY29udGFpbmVyIGl0c2VsZlxuICAgICAqIEByZXR1cm5zIFRoZSBoZWlnaHQgaW4gcGl4ZWxzXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRhaW5lckhlaWdodChyZWZlcmVuY2VDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCByZWZlcmVuY2VJc0NvbnRhaW5lcjogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIGlmIChyZWZlcmVuY2VDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgID8gcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuY2xpZW50SGVpZ2h0XG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBjb250YWluZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gSFRNTCBFbGVtZW50XG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUlzQ29udGFpbmVyIEJvb2xlYW4gaW5kaWNhdGluZyBpZiByZWZlcmVuY2UgaXMgdGhlIGNvbnRhaW5lciBpdHNlbGZcbiAgICAgKiBAcmV0dXJucyBUaGUgd2lkdGggaW4gcGl4ZWxzXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRhaW5lcldpZHRoKHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUlzQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgPyByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGllbnRXaWR0aFxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBQb3NpdGlvbiB3aGVyZSB0aGUgcG9wdXAgd291bGQgYmUgcG9zaXRpb25lZFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBjb250ZW50Y29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqIEBwYXJhbSBhcnJvd1dpZHRoIFdpZHRoIG9mIHRoZSBhcnJvdyBlbGVtZW50XG4gICAgICogQHBhcmFtIGFycm93SGVpZ2h0IEhlaWdodCBvZiB0aGUgYXJyb3cgZWxlbWVudFxuICAgICAqIEBwYXJhbSBhbGxvd2VkUG9zaXRpb25zIEFsbG93ZWQgUG9zaXRpb25zIGZvciB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcmVmZXJlbmNlSXNDb250YWluZXIgQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHJlZmVyZW5jZSBpcyB0aGUgY29udGFpbmVyIGl0c2VsZlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBwb3B1cCBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgcHVibGljIGdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBjb250ZW50Y29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgYXJyb3dXaWR0aDogbnVtYmVyLFxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxuICAgICAgICBhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogVG9vbHRpcFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgdmFsaWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IHRoaXMudmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgICAgICByZWZlcmVuY2VDb250YWluZXIsXG4gICAgICAgICAgICBwb3B1cGNvbnRlbnRjb250YWluZXIsXG4gICAgICAgICAgICBhcnJvd1dpZHRoLFxuICAgICAgICAgICAgYXJyb3dIZWlnaHQsXG4gICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkgJiYgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24ucmlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucywgVG9vbHRpcFBvc2l0aW9uLmxlZnQpICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmxlZnQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5ib3R0b20pICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSAmJlxuICAgICAgICAgICAgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgQXV0byBQb3NpdGlvbiBvciBEZWZhdWx0XG4gICAgICAgIGlmICh0aGlzLmlzQXV0b1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5sZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBoZWlnaHQgb2YgdGhlIHBvcHVwXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqIEByZXR1cm5zIFRoZSBoZWlnaHQgb2YgdGhlIHBvcHVwIGluIHBpeGVsc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3B1cEhlaWdodChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodCA/PyAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiB0aGUgcG9wdXBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBwb3B1cCBpbiBwaXhlbHNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UG9wdXBXaWR0aChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudFdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkZWZpbmVkIHBvc2l0aW9uIGZvciB0aGUgdG9vbHRpcFxuICAgICAqXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgQWxsb3dlZCBwb3NpdGlvbnMgZGVmaW5lZCBpbiBtYXJrdXAgZm9yIHBvcHVwXG4gICAgICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgdG9vbHRpcCBwb3NpdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcpOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24ubGVmdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi50b3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IFBvc2l0aW9uIGlmIGVtcHR5XG4gICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgbGVmdCBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcC9wb3B1cFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHBhcmFtIGNvbnRyb2xSZWZlcmVuY2UgRWxlbWVudCBSZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2wgZWxlbWVudFxuICAgICAqIEBwYXJhbSBhcnJvd1dpZHRoIFdpZHRoIG9mIHRoZSBhcnJvdyBlbGVtZW50XG4gICAgICogQHBhcmFtIGFycm93SGVpZ2h0IEhlaWdodCBvZiB0aGUgYXJyb3cgZWxlbWVudFxuICAgICAqIEBwYXJhbSByZXF1ZXN0ZWRQb3NpdGlvbiBSZXF1ZXN0ZWQgUG9zaXRpb24gYnkgQ29udHJvbFxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VJc0NvbnRhaW5lciBCb29sZWFuIGluZGljYXRpbmcgaWYgcmVmZXJlbmNlIGlzIHRoZSBjb250YWluZXIgaXRzZWxmXG4gICAgICogQHJldHVybnMgVGhlIGxlZnQgcG9zaXRpb24gaW4gcGl4ZWxzXG4gICAgICovXG4gICAgcHVibGljIGdldFBvc2l0aW9uTGVmdChcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjb250cm9sUmVmZXJlbmNlOiBFbGVtZW50UmVmLFxuICAgICAgICBhcnJvd1dpZHRoOiBudW1iZXIsXG4gICAgICAgIGFycm93SGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lciAhPT0gbnVsbCAmJiByZWZlcmVuY2VDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkSXRlbSA9IHJlZmVyZW5jZUlzQ29udGFpbmVyID8gKGl0ZW0uZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQpIDogaXRlbTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb246IERPTVJlY3QgPSBjaGlsZEl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uYm90dG9tOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UG9zaXRpb24ubGVmdCArIGNvbnRlbnRQb3NpdGlvbi53aWR0aCAvIDIgLSB0aGlzLmdldFBvcHVwV2lkdGgocG9wdXBDb250YWluZXIpIC8gMlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24udG9wZW5kOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudFBvc2l0aW9uLmxlZnQgKyBjb250ZW50UG9zaXRpb24ud2lkdGggLSB0aGlzLmdldFBvcHVwV2lkdGgocG9wdXBDb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5yaWdodDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24ubGVmdCArIGNvbnRlbnRQb3NpdGlvbi53aWR0aCArIGFycm93V2lkdGggLyAyO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5sZWZ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvbi5sZWZ0IC0gdGhpcy5nZXRQb3B1cFdpZHRoKHBvcHVwQ29udGFpbmVyKSArIChhcnJvd1dpZHRoIC8gMikgKiAtMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xSZWZlcmVuY2UubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwL3BvcHVwXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVmZXJlbmNlQ29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIEhUTUwgRWxlbWVudCB3aGljaCBpcyB0aGUgcmVmZXJlbmNlIHRvIHBvc2l0aW9uaW5nIHRoZSBwb3B1cFxuICAgICAqIEBwYXJhbSBwb3B1cENvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBjb250YWluZXIgb2YgcG9wdXBcbiAgICAgKiBAcGFyYW0gY29udHJvbFJlZmVyZW5jZSBFbGVtZW50IFJlZmVyZW5jZSB0byB0aGUgY29udHJvbCBlbGVtZW50XG4gICAgICogQHBhcmFtIGFycm93V2lkdGggV2lkdGggb2YgdGhlIGFycm93IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gYXJyb3dIZWlnaHQgSGVpZ2h0IG9mIHRoZSBhcnJvdyBlbGVtZW50XG4gICAgICogQHBhcmFtIHJlcXVlc3RlZFBvc2l0aW9uIFJlcXVlc3RlZCBQb3NpdGlvbiBieSBDb250cm9sXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUlzQ29udGFpbmVyIEJvb2xlYW4gaW5kaWNhdGluZyBpZiByZWZlcmVuY2UgaXMgdGhlIGNvbnRhaW5lciBpdHNlbGZcbiAgICAgKiBAcmV0dXJucyBUaGUgdG9wIHBvc2l0aW9uIGluIHBpeGVsc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvblRvcChcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjb250cm9sUmVmZXJlbmNlOiBFbGVtZW50UmVmLFxuICAgICAgICBhcnJvd1dpZHRoOiBudW1iZXIsXG4gICAgICAgIGFycm93SGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lciAhPT0gbnVsbCAmJiByZWZlcmVuY2VDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uOiBET01SZWN0ID0gY2hpbGRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IFBvc2l0aW9uIHdpdGggU2Nyb2xsIChTY3JvbGxiYXJzIGluc2lkZSBwYWdlIHNob3VsZCBiZSBzdWJzdHJhY3RlZClcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb25Ub3AgPVxuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPZmZzZXRUb3BQYXJlbnQoY2hpbGRJdGVtLm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCkgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChjaGlsZEl0ZW0ucGFyZW50RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24udG9wZW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvblRvcCAtIHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpICsgKGFycm93SGVpZ2h0IC8gMikgKiAtMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmxlZnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRQb3NpdGlvblRvcCArIGNvbnRlbnRQb3NpdGlvbi5oZWlnaHQgLyAyIC0gdGhpcy5nZXRQb3B1cEhlaWdodChwb3B1cENvbnRhaW5lcikgLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b206XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb25Ub3AgKyBjb250ZW50UG9zaXRpb24uaGVpZ2h0ICsgYXJyb3dIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkSXRlbS5jbGllbnRUb3AgK1xuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpIC8gMiAtIGNoaWxkSXRlbS5vZmZzZXRIZWlnaHQgLyAyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcG9zaXRpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgUG9zaXRpb25zIHRoYXQgYWxsb3dlZCBieSBjb250cm9sXG4gICAgICogQHBhcmFtIHJlcXVlc3RlZFBvc2l0aW9uIFBvc2l0aW9uIHRvIGJlIGNoZWNrZWRcbiAgICAgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiBpcyBjb25maWd1cmVkXG4gICAgICovXG4gICAgcHVibGljIGhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnM6IHN0cmluZywgcmVxdWVzdGVkUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zLnNwbGl0KCd8Jyk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24ucmlnaHQgJiYgcG9zaXRpb25zLmluZGV4T2YoJ3JpZ2h0JykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi50b3AgJiYgcG9zaXRpb25zLmluZGV4T2YoJ3RvcCcpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24ubGVmdCAmJiBwb3NpdGlvbnMuaW5kZXhPZignbGVmdCcpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24uYm90dG9tICYmIHBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRQb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLnRvcGVuZCAmJiBwb3NpdGlvbnMuaW5kZXhPZigndG9wZW5kJykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kICYmIHBvc2l0aW9ucy5pbmRleE9mKCdib3R0b21lbmQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoZXRoZXIgQXV0b1Bvc2l0aW9uIGlzIGFjdGl2ZVxuICAgICAqIEBwYXJhbSBwb3NpdGlvblByb3BlcnR5IExpc3Qgb2YgYWxsb3dlZCBwb3NpdGlvbnNcbiAgICAgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgYXV0byBwb3NpdGlvbmluZyBpcyBlbmFibGVkXG4gICAgICovXG4gICAgcHVibGljIGlzQXV0b1Bvc2l0aW9uKHBvc2l0aW9uUHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBwb3NpdGlvblByb3BlcnR5LnNwbGl0KCd8Jyk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbnMuaW5kZXhPZignYXV0bycpID49IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHBvc2l0aW9uIGlzIHZhbGlkIG9yIHdoZXRoZXIgdGhlIHRvb2x0aXAgb24gdGhlIHBvc2l0aW9uIGhhcyBzcGFjZVxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gSFRNTCBFbGVtZW50IHdoaWNoIGlzIHRoZSByZWZlcmVuY2VcbiAgICAgKiBAcGFyYW0gcG9wdXBjb250ZW50Y29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqIEBwYXJhbSBhcnJvd1dpZHRoIFdpZHRoIG9mIHRoZSBhcnJvdyBlbGVtZW50XG4gICAgICogQHBhcmFtIGFycm93SGVpZ2h0IEhlaWdodCBvZiB0aGUgYXJyb3cgZWxlbWVudFxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VJc0NvbnRhaW5lciBCb29sZWFuIGluZGljYXRpbmcgaWYgcmVmZXJlbmNlIGlzIHRoZSBjb250YWluZXIgaXRzZWxmXG4gICAgICogQHJldHVybnMgVGhlIHZhbGlkIHRvb2x0aXAgcG9zaXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBvcHVwY29udGVudGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIGFycm93V2lkdGg6IG51bWJlcixcbiAgICAgICAgYXJyb3dIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW5cbiAgICApOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICAvLyBDaGVjayBpZiBDb250YWluZXIgaXMgZmFsc2VcbiAgICAgICAgaWYgKHBvcHVwY29udGVudGNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFsbG93ZWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5ub25lO1xuICAgICAgICBjb25zdCBiYXNlUG9zaXRpb246IERPTVJlY3QgPSByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgPyByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdG9vbHRpcFJlY3Q6IERPTVJlY3QgPSBwb3B1cGNvbnRlbnRjb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBsZWZ0UG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24ubGVmdCAtICh0b29sdGlwUmVjdC53aWR0aCArIGFycm93V2lkdGggKiAtMSkgPiAwO1xuICAgICAgICBjb25zdCByaWdodFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnJpZ2h0ICsgdG9vbHRpcFJlY3Qud2lkdGggKyBhcnJvd1dpZHRoIDwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGNvbnN0IHRvcFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnRvcCAtICh0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCkgPiAwO1xuICAgICAgICBjb25zdCBib3R0b21Qb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCA8IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgICBjb25zdCBsZWZ0SGFsZlBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLmxlZnQgLSB0b29sdGlwUmVjdC53aWR0aCAvIDIgPiAwO1xuICAgICAgICBjb25zdCByaWdodEhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5yaWdodCArIHRvb2x0aXBSZWN0LndpZHRoIC8gMiA8IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICBjb25zdCB0b3BIYWxmUG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24udG9wIC0gdG9vbHRpcFJlY3QuaGVpZ2h0IC8gMiA+IDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbUhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgLyAyIDwgd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICAgIGlmICh0b3BQb3NPaykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPaykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZWZ0UG9zT2sgJiYgdG9wSGFsZlBvc09rICYmIGJvdHRvbUhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHRQb3NPayAmJiB0b3BIYWxmUG9zT2sgJiYgYm90dG9tSGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9wUG9zT2sgJiYgbGVmdEhhbGZQb3NPayAmJiByaWdodEhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPayAmJiBsZWZ0SGFsZlBvc09rICYmIHJpZ2h0SGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsbG93ZWRQb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRvcCBvZiB0aGUgcGFnZSBpbnNpZGUgYWxsIGVsZW1lbnRzXG4gICAgICogQHBhcmFtIGVsZW1lbnQgSFRNTCBFbGVtZW50XG4gICAgICogQHJldHVybnMgc3VtbWFyaXplZCB0b3AgdmFsdWUgZm9yIGFic29sdXRlIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPZmZzZXRUb3BQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVsZW1lbnQub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IHRoaXMuZ2V0T2Zmc2V0VG9wUGFyZW50KGVsZW1lbnQub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZSArIG9mZnNldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWNsdWxhdGUgU2Nyb2xsYmFycyBpbnNpZGUgdHJlZVxuICAgICAqIEBwYXJhbSBlbGVtZW50IEhUTUwgRWxlbWVudFxuICAgICAqIEBwYXJhbSBbaXNGaXhlZD1mYWxzZV0gSW52ZXJ0IFNjcm9sbCBQb3NpdGlvbiB2YWx1ZSB3aGVuIHN0eWxlIGlzIGZpeGVkIHRvIHByZXNlcnZlIG5lZ2F0aXZlIHZhbHVlc1xuICAgICAqIEByZXR1cm5zIFNjcm9sbCB0b3AgdmFsdWUgb2YgZWxlbWVudCB3aXRoIGFsbCBjaGlsZHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgaXNGaXhlZCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm9keSBTY3JvbGwgc2hvdWxkIG5vdCBiZSBjYWxjdWxhdGVkXG4gICAgICAgIGlmICghZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGaXhlZCA/IGVsZW1lbnQuc2Nyb2xsVG9wIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc0N1cnJlbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykge1xuICAgICAgICAgICAgaXNDdXJyZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50VmFsdWUgPSB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQsIGlzRml4ZWQgfHwgaXNDdXJyZW50Rml4ZWQpO1xuXG4gICAgICAgIGlmIChpc0ZpeGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsdWUgKyBlbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZSArIGVsZW1lbnQuc2Nyb2xsVG9wICogLTE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
|
|
3
|
+
*
|
|
4
|
+
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes,extraRequire}
|
|
5
|
+
* tslint:disable
|
|
6
|
+
*/
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXBoZWxwZXIubmdmYWN0b3J5LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL3NpbXBsZWFuZ3VsYXJjb250cm9scy9zaW1wbGVhbmd1bGFyY29udHJvbHMvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsidXRpbGl0aWVzL3BvcHVwaGVscGVyLm5nZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pMC5Db21wb25lbnRGYWN0b3J5O1xuIl19
|